Mã máy 8086, 22 20 byte
8bd0 2bc3 740e 7902 f7d8 3d0500 7405 03d3 83fa05
Ung dung:
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
Các số đầu vào trong AX và BX và trả về Cờ không (ZF = 1) nếu kết quả là đúng. Nếu muốn, bạn cũng có thể xác định điều kiện nào là đúng với các điều sau:
- ZF = 1 và DX = 5; tổng là 5
- ZF = 1 và AX = 5; khác biệt là 5
- ZF = 1 và AX = 0; công bằng
- ZF = 0; kết quả sai
Nếu chênh lệch giữa các số là 0, chúng ta biết chúng bằng nhau. Mặt khác, nếu kết quả là âm tính, trước tiên hãy phủ định nó và sau đó kiểm tra 5. Nếu vẫn không đúng, sau đó thêm và kiểm tra 5.
Chương trình thử nghiệm PC DOS mẫu. Tải xuống ở đây ( 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
Đầu ra của chương trình thử nghiệm:
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