Применение CMP к 3-м условиям - Assembler

Узнай цену своей работы

Формулировка задачи:

Есть 3 условия: x>m ; x<m ; x=m. В зависимости от условий, будет выполняться один из 3-х примеров (не суть важно каких), интересует как применить условный оператор в ассемблере для 3-х условий, так же интересна правильность синтаксиса начала и завершения программы.
format PE Console 4.0
entry Start
 
include 'win32a.inc'
 
section '.data' data readable writeable
m db 4
n db 6
x dw 2
y dw 0
z db ?
 
section '.code' code readable executable
Start:
 
mov ax, [x]
cmp [x], ax
jne metka1
jmp metka2 
 
metka1:
mov al, [m]
mul [x]
add al, [n]
mov bl, 2
div bl
mov [y], ax
 
metka2:
mov al, [n]
mul [n]
mov [z], al
mov al, [m]
mul [m]
add al, [z]
mov [y], ax
 
metka3:
mov al, [n]
sub al, [m]
mul al
div [x]
mov ah, 0
mov [y], ax
 
Exit:
  invoke  ExitProcess, 0
  
section '.idata' import data readable
 
  library kernel, 'KERNEL32.DLL'
 
  import kernel,\
    ExitProcess, 'ExitProcess'

Решение задачи: «Применение CMP к 3-м условиям»

textual
Листинг программы
cmp     [x],ax
je equal;переход если x==ax
ja above;переход если x > ax (для беззнаковых)
below:; если x <ax
nop
equal:
nop
above:
nop

Объяснение кода листинга программы

  1. cmp [x],ax - сравнение содержимого ячейки памяти с регистром Ax
  2. je equal - переход на метку equal, если результат сравнения равен 0
  3. ja above - переход на метку above, если результат сравнения больше 0 (для беззнаковых чисел)
  4. below: - метка, обозначающая, что значение в ячейке памяти меньше, чем в регистре Ax
  5. nop - бездействие (необходимо для корректного формирования кода)
  6. equal: - метка, обозначающая, что значение в ячейке памяти равно значению в регистре Ax
  7. nop - бездействие (необходимо для корректного формирования кода)
  8. above: - метка, обозначающая, что значение в ячейке памяти больше, чем в регистре Ax
  9. nop - бездействие (необходимо для корректного формирования кода)

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы