abc Asembler - elektronski priručnik
|
Instrukcija |
Opis |
Testirani flagovi |
JE/JZ |
Jump Equal ili Jump Zero |
ZF |
JNE/JNZ |
Jump not Equal ili Jump Not Zero |
ZF |
JG/JNLE |
Jump Greater ili Jump Not Less/Equal |
OF, SF, ZF |
JGE/JNL |
Jump Greater ili Jump Not Less |
OF, SF |
JL/JNGE |
Jump Less ili Jump Not Greater/Equal |
OF, SF |
JLE/JNG |
Jump Less/Equal ili Jump Not Greater |
OF, SF, ZF |
Slijede instrukcije uslovnog skoka koje se koriste na neoznačenim podacima korištenim za logičke operacije:
Instrukcija |
Opis |
Testirani flagovi |
JE/JZ |
Jump Equal ili Jump Zero |
ZF |
JNE/JNZ |
Jump not Equal ili Jump Not Zero |
ZF |
JA/JNBE |
Jump Above ili Jump Not Below/Equal |
CF, ZF |
JAE/JNB |
Jump Above/Equal ili Jump Not Below |
CF |
JB/JNAE |
Jump Below ili Jump Not Above/Equal |
CF |
JBE/JNA |
Jump Below/Equal ili Jump Not Above |
AF, CF |
Slijede instrukcije uslovnog skoka koje imaju specijalnu upotrebu i provjeravaju vrijednost flagova:
Instrukcija |
Opis |
Testirani flagovi |
JXCZ |
Jump if CX is Zero |
nijedan |
JC |
Jump If Carry |
CF |
JNC |
Jump If No Carry |
CF |
JO |
Jump If Overflow |
OF |
JNO |
Jump If No Overflow |
OF |
JP/JPE |
Jump Parity ili Jump Parity Even |
PF |
JNP/JPO |
Jump No Parity ili Jump Parity Odd |
PF |
JS |
Jump Sign (negativna vrijednost) |
SF |
JNS |
Jump No Sign (pozitivna vrijednost) |
SF |
Sintaksa za J<condition> set instrukcija:
Primjer
;set instrukcija
CMP AL, BL
JE EQUAL
CMP AL, BH
JE EQUAL
CMP AL, CL
JE EQUAL
ON_ EQUAL: ...
EQUAL: ...
Primjer
Sljedeći program prikazuje najveću od 3 varijable. Varijable su dvocifrene. 3 varijable num1, num2 i num3 imaju vrijednosti 47, 72 i 31, respektivno:
section .text
global _start ;must be declared for using gcc
_start: ;tell linker entry point
mov ecx, [num1]
cmp ecx, [num2]
jg check_third_num
mov ecx, [num3]
check_third_num:
cmp ecx, [num3]
jg _exit
mov ecx, [num3]
_exit:
mov [largest], ecx
mov ecx, msg
mov edx, len
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov ecx, largest
mov edx, 2
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1
int 80h
section .data
msg db "Najveci broj je: ", 0xA, 0xD
len equ $- msg
num1 dd '47'
num2 dd '22'
num3 dd '31'
segment .bss
largest resb 2
Kada se gore navedeni kod kompajlira i izvrši, on će proizvesti sljedeći rezultat:
Najveci broj je:
47
Bezuslovni skok < Index > Petlje
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |