Применение 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
Объяснение кода листинга программы
cmp [x],ax
- сравнение содержимого ячейки памяти с регистром Axje equal
- переход на метку equal, если результат сравнения равен 0ja above
- переход на метку above, если результат сравнения больше 0 (для беззнаковых чисел)below:
- метка, обозначающая, что значение в ячейке памяти меньше, чем в регистре Axnop
- бездействие (необходимо для корректного формирования кода)equal:
- метка, обозначающая, что значение в ячейке памяти равно значению в регистре Axnop
- бездействие (необходимо для корректного формирования кода)above:
- метка, обозначающая, что значение в ячейке памяти больше, чем в регистре Axnop
- бездействие (необходимо для корректного формирования кода)