본문 바로가기

Programming Language/Assembly

산술 비교 알고리즘 - 1편 "!="과 "=="

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
option casemap: none ; 대/소문자를 구분하지 않습니다.
.386					; 386 CPU용 명령어들을 사용합니다.
.model flat, stdcall		; 메모리 모델은 stdcall을 사용합니다.
.stack 1024				; 스택의 크기는 1024 워드로 합니다.
.data					; 데이터 영역은 아직 없으므로 비워둡니다.
.code				; 코드 영역 시작
main PROC			; main 프로시저 선언합니다.
	MOV AH, 99		; AH 레지스터에 99를 넣습니다.
	MOV AL, 1			; AL 레지스터에 1을 넣습니다.
	CMP AH, AL		; AH - AL 연산을 하여 대소비교를 합니다.

	JZ JMP_EQUALS	; AH - AL == 0이어서 ZF Flag가 1이 되면 JMP_EQUALS 위치로 점프합니다.
	JNZ JMP_NEQUALS	; AH - AL != 0이어서 ZF Flag가 0이 되면 JMP_NEQUALS 위치로 점프합니다.

	JMP_EQUALS:		; JMP_EQUALS 위치는 여기부터 시작합니다.
	MOV AH, 02h		; AH 레지스터에 문자 출력을 의미하는 02h를 넣습니다.
	MOV DL, 3Dh		; DL 레지스터에 ASCII 문자 '='를 넣습니다.
	INT 21h			; AH와 DL의 값으로 인터럽트 호출합니다.
	INT 21h			; AH와 DL의 값으로 인터럽트 호출합니다. (한번 더 실행)
	JMP JMP_EXIT		; 종료 위치로 점프합니다.

	JMP_NEQUALS:		; JMP_NEQUALS 위치는 여기부터 시작합니다.
	MOV AH, 02h		; AH 레지스터에 문자 출력을 의미하는 02h를 넣습니다.
	MOV DL, 21h		; DL 레지스터에 ASCII 문자 '!'를 넣습니다.
	INT 21h			; AH와 DL의 값으로 인터럽트 호출합니다.
	MOV DL, 3Dh		; DL 레지스터에 ASCII 문자 '='를 넣습니다.
	INT 21h			; AH와 DL의 값으로 인터럽트 호출합니다.
	JMP JMP_EXIT		; 종료 위치로 점프합니다.

	JMP_EXIT:			; 종료 구문의 시작
	MOV AH, 4Ch		; AH 레지스터에 프로그램 종료 및 도스로 돌아감을 의미하는 4Ch를 넣습니다.
	INT 21h			; 인터럽트 호출에 프로그램 종료합니다.
main ENDP				; main 프로시저의 끝입니다.
end main				; main 프로시저를 시작합니다.

실행 결과: AH와 AL이 다르므로 "!="이 출력