8086 kode mesin, 22 20 byte
8bd0 2bc3 740e 7902 f7d8 3d0500 7405 03d3 83fa05
Tidak Disatukan:
ESD MACRO
LOCAL SUB_POS, DONE
MOV DX, AX ; Save AX to DX
SUB AX, BX ; AX = AX - BX
JZ DONE ; if 0, then they are equal, ZF=1
JNS SUB_POS ; if positive, go to SUB_POS
NEG AX ; otherwise negate the result
SUB_POS:
CMP AX, 5 ; if result is 5, ZF=1
JZ DONE
ADD DX, BX ; DX = DX + BX
CMP DX, 5 ; if 5, ZF=1
DONE:
ENDM
Masukkan angka dalam AXE dan BX dan kembalikan Nol Bendera (ZF = 1) jika hasilnya benar. Jika diinginkan, Anda juga dapat menentukan kondisi mana yang benar dengan yang berikut ini:
- ZF = 1 dan DX = 5; jumlah adalah 5
- ZF = 1 dan AX = 5; beda 5
- ZF = 1 dan AX = 0; sama
- ZF = 0; hasilnya salah
Jika perbedaan antara angka-angka adalah 0, kita tahu mereka sama. Kalau tidak, jika hasilnya negatif, maka negasikan terlebih dahulu lalu periksa 5. Jika masih tidak benar, tambahkan dan periksa 5.
Contoh program uji PC DOS. Unduh di sini ( ESD.COM ).
START:
CALL INDEC ; input first number into AX
MOV BX, AX ; move to BX
CALL INDEC ; input second number into BX
ESD ; run "Equal, sum or difference" routine
JZ TRUE ; if ZF=1, result is true
FALSE:
MOV DX, OFFSET FALSY ; load Falsy string
JMP DONE
TRUE:
MOV DX, OFFSET TRUTHY ; load Truthy string
DONE:
MOV AH, 9 ; DOS display string
INT 21H ; execute
MOV AX, 4C00H ; DOS terminate
INT 21H ; execute
TRUTHY DB 'Truthy$'
FALSY DB 'Falsy$'
INCLUDE INDEC.ASM ; generic decimal input prompt routine
Output dari program uji:
A>ESD.COM
: 4
: 1
Truthy
A>ESD.COM
: 10
: 10
Truthy
A>ESD.COM
: 1
: 3
Falsy
A>ESD.COM
: 6
: 2
Falsy
A>ESD.COM
: 1
: 6
Truthy
A>ESD.COM
: -256
: -251
Truthy
A>ESD.COM
: 6
: 1
Truthy
A>ESD.COM
: 9999999999
: 9999999994
Truthy