Как на Ассемблере сделать сложные условия? на C эта конструкция выглядела бы так:if(cmd=="a")
getHelp();
else if(cmd=="b")
openTextEditor();
else if(cmd=="c")
reboot();
А как мне написать на assembler'е?(P.S. я использую FASM)

21 Авг 2019 в 06:53
212 +1
0
Ответы
1

В FASM можно использовать инструкцию cmp для сравнения значений и условные переходы (je, jne, jmp, jg, jl, jge, jle) для выполнения нужного блока кода в зависимости от результата сравнения.

Пример кода на FASM, реализующего аналогичную логику:

section .data
cmd db "a", 0
section .text
global _start
_start:
mov eax, 4 ; Вводим команду
mov ebx, 1
mov ecx, cmd
mov edx, 1
int 0x80
cmp byte [cmd], 'a' ; Сравниваем команду с "a"
je a_label ; Если равны, переходим в блок кода для команды "a"
cmp byte [cmd], 'b' ; Сравниваем команду с "b"
je b_label ; Если равны, переходим в блок кода для команды "b"
cmp byte [cmd], 'c' ; Сравниваем команду с "c"
je c_label ; Если равны, переходим в блок кода для команды "c"
jmp end_label ; Если ни одна из условий не выполнены, пропускаем все блоки и переходим к завершению программы
a_label:
; блок кода для команды "a"
call getHelp
jmp end_label
b_label:
; блок кода для команды "b"
call openTextEditor
jmp end_label
c_label:
; блок кода для команды "c"
call reboot
jmp end_label
end_label:
; конец программы
getHelp:
; функция для команды "a"
ret
openTextEditor:
; функция для команды "b"
ret
reboot:
; функция для команды "c"
ret

В данном примере, в зависимости от значения переменной cmd будут вызываться нужные функции.

20 Апр 2024 в 13:11
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир