조건문 구조(2)
2025. 5. 22. 20:28ㆍ어셈블리 프로그래밍
복합 조건문 구조
- AND 복합 조건 구조
- 두 조건이 모두 참이면 @THEN, 아니면 @ELSE문장 실행
IF(조건_1 AND 조건_2)
THEN 참의 문장
ELSE 거짓의 문장
END_IF
ex)
입력받은 문자가 대문자이면 대문자를 출력, 아니면 처음부터 다시 시작
.MODEL SMALL .STACK 100H .DATA .CODE MAIN PROC @BEGIN MOV AH, 02H MOV DL, '?' INT 21H MOV AH, 01H INT 21H MOV BL, AL CMP BL, 'A' ;AL<'A'이면 대문자(X) JB WRONG CMP BL, 'Z' ;AL>'Z'이면 대문자(X) JA WRONG MOV AH, 02H MOV DL, 0DH INT 21H MOV DL, 0AH INT 21H MOV DL, BL INT 21H JMP EXIT WRONG: MOV AH, 02H MOV DL, 0DH INT 21H MOV DL, 0AH INT 21H JMP EXIT EXIT: MOV AH, 4CH INT 21H MAIN ENDP END MAIN?B B
- OR 복합 조건 구조
- 한 가지 조건만 참이어도 THEN, 아니라면 ELSE
IF(조건_1 OR 조건_2)
THEN 참의 문장을 실행
ELSE 거짓의 문장을 실행
END_IF
ex)
소문자가 아니면 CX 레지스터에 1을 저장
.MODEL SMALL .STACK 100H .DATA MSG1 DB 0DH, 0AH, "CHAR INPUT: $" NOT_LOWER_MSG DB 0DH, 0AH, "NOT LOWER$" .CODE MAIN PROC MOV AX, @DATA MOV DS, AX MOV AH, 09H LEA DX, MSG1 INT 21H MOV AH, 01H INT 21H CMP AL, 'a' JB THEN CMP AL, 'z' JA THEN MOV CX, 0 JMP END_IF THEN: MOV CX, 1 END_IF: CMP CX, 1 JNE EXIT LEA DX, NOT_LOWER_MSG MOV AH, 09H INT 21H EXIT: MOV AH, 4CH INT 21H MAIN ENDP END MAIN
CHAR INPUT:G (CX=0) NOT LOWER
실습 문제
- 소문자를 대문자, 대문자를 소문자, 이 둘이 아니라면 ERROR를 출력
.MODEL SMALL
.STACK 100H
.DATA
MSG DB 'ERROR$'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 02H
MOV DL, '?'
INT 21H
MOV AH, 01H
INT 21H
MOV BL, AL
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
CMP BL, 'A'
JL ERROR
CMP BL, 'Z'
JLE UPPER
CMP BL, 'a'
JL ERROR
CMP BL, 'z'
JLE LOWER
JMP ERROR
UPPER:
ADD BL, 20H
MOV DL, BL
MOV AH, 02H
INT 21H
JMP END_CASE
LOWER:
SUB BL, 20H
MOV DL, BL
MOV AH, 02H
INT 21H
JMP END_CASE
ERROR:
MOV AH, 09H
LEA DX, MSG
INT 21H
END_CASE:
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
?A
a
- -9~9 사이의 수를 입력받아 BL레지스터에 저장하고 입력받은 수의 절댓값을 출력하는 프로그램
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 02H
MOV DL, '?'
INT 21H
MOV CX, 0
MOV AH, 01H
INT 21H
CMP AL,'-'
JE MINUS
CMP AL,'+'
JE PLUS
JMP SAVE
MINUS:
MOV CX, 1
PLUS:
INT 21H
SAVE:
SUB AL, 30H
MOV BL, AL
CMP CX, 1
JNE NEXT1
NEG BL
NEXT1:
CMP BL, 0
JGE NEXT2
NEG BL
NEXT2:
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
MOV DL, BL
ADD DL, 30H
INT 21H
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
?-4
4
- 0~9두 수를 입력 받고 입력받은 두 수의 차이를 구하는 프로그램
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 02H
MOV DL, '?'
INT 21H
MOV AH, 01H
INT 21H
SUB AL, 30H
MOV BL, AL
MOV AH, 01H
INT 21H
SUB AL, 30H
MOV CL, AL
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
MOV AL, BL
SUB AL, CL
JNS OUTPUT
NEG AL
OUTPUT:
ADD AL, 30H
MOV DL, AL
MOV AH, 02H
INT 21H
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
?58
3
- 두 개의 소문자를 이볅 받아 알파벳 순서대로 출력하는 프로그램
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
@BEGIN:
MOV AH, 02H
MOV DL, '?'
INT 21H
MOV AH, 01H
INT 21H
MOV BL, AL
CMP AL, 'a'
JL WRONG
CMP AL, 'z'
JG WRONG
MOV AH, 01H
INT 21H
MOV CL, AL
CMP CL, 'a'
JL WRONG
CMP CL, 'z'
JG WRONG
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
CMP BL, CL
JLE OUTPUT
XCHG BL, CL
OUTPUT:
MOV DL, BL
MOV AH, 02H
INT 21H
MOV DL, CL
MOV AH, 02H
INT 21H
JMP EXIT
WRONG:
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
JMP BEGIN
EXIT:
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
?db
bd
- 세 개의 대문자를 입력 받아 알파벳 순서의 반대로 출력하는 프로그램
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 02H
MOV DL, '?'
INT 21H
MOV AH, 01H
INT 21H
MOV BL, AL
MOV AH, 01H
INT 21H
MOV BH, AL
MOV AH, 01H
INT 21H
MOV CL, AL
CMP BL, BH
JLE NEXT1
XCHG BL, BH
NEXT1:
CMP BL, CL
JLE NEXT2
XCHG BL, CL
NEXT2:
CMP BH, CL
JLE OUTPUT
XCHG BH, CL
OUTPUT:
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
MOV DL, BL
INT 21H
MOV DL, BH
INT 21H
MOV DL, CL
INT 21H
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
?cab
abc
- 세 개의 대문자를 입력 받아 알파벳 순서상 중간에 오는 대문자의 소문자를 출력하는 프로그램
.MODEL SMALL
.STACK 100H
.DATA
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
MOV AH, 02H
MOV DL, '?'
INT 21H
MOV AH, 01H
INT 21H
MOV BL, AL
MOV AH, 01H
INT 21H
MOV BH, AL
MOV AH, 01H
INT 21H
MOV CL, AL
CMP BL, BH
JLE NEXT1
XCHG BL, BH
NEXT1:
CMP BL, CL
JLE NEXT2
XCHG BL, CL
NEXT2:
CMP BH, CL
JLE OUTPUT
XCHG BH, CL
OUTPUT:
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV DL, 0AH
INT 21H
ADD BH, 20H
MOV DL, BH
INT 21H
MOV AH, 4CH
INT 21H
MAIN ENDP
END MAIN
?CAB
b'어셈블리 프로그래밍' 카테고리의 다른 글
| 조건문 심화 (0) | 2025.05.25 |
|---|---|
| 반복문 (0) | 2025.05.25 |
| 조건문 구조 (0) | 2025.05.22 |
| 플래그 래지스터&디버거 (0) | 2025.04.27 |
| 문자 입출력 (0) | 2025.04.13 |