8086 기계 코드, 22 20 바이트
8bd0 2bc3 740e 7902 f7d8 3d0500 7405 03d3 83fa05
언 골프 드 :
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
AX와 BX에 숫자를 입력하고 결과가 참이면 Zero Flag (ZF = 1)를 반환합니다. 원하는 경우 다음을 통해 어떤 조건이 참인지 확인할 수도 있습니다.
- ZF = 1 및 DX = 5; 합계는 5
- ZF = 1 및 AX = 5; diff는 5입니다
- ZF = 1이고 AX = 0이고; 같은
- ZF = 0; 거짓 결과
숫자의 차이가 0이면, 우리는 그것들이 같다는 것을 알고 있습니다. 그렇지 않으면 결과가 음수이면 먼저 결과를 부정하고 5를 확인하십시오. 여전히 참이 아닌 경우 5를 추가하고 확인하십시오.
샘플 PC DOS 테스트 프로그램. 여기에서 다운로드하십시오 ( 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
테스트 프로그램의 출력 :
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