본문 바로가기
어셈블리어 공부용/x86 어셈블리어(ASSEMBLY)

emu8086 어셈블러로 어셈블리어 연습 [소문자는 대문자로, 대문자는 소문자로 바꾸어 출력하게 하기]

by Redoutable 2019. 8. 15.
반응형
.MODEL SMALL   ;메모리크기 설정
.STACK
.CODE          ;여기 아래부터 코드시작

    MOV AH,1   ;사용자로부터 문자하나를 입력받을 준비. 입력받은 문자는 AL 레지스터에 저장된다.
    INT 21h
    CMP AL,40h ;입력받은 문자가 대문자인가 소문자인가?
    JG ISAA    ;일단 40h부터 크다면 세부 탐색으로 넘기기 (소문자인가 대문자인가)
    JZ DISP2   ;해당사항 없으면 그대로 출력
    JL DISP2   ;해당사항 없으면 그대로 출력
    
ISAA:           ;세부탐색구간
    CMP AL, 5Bh ;5b아스키코드와 비교해보자.
    JG LOWER    ;입력한 문자의 아스키코드값이 더 크다? 우선 소문자로 판별.
    JL UPPER    ;작다면 대문자로 판별.

UPPER:         ;입력한 문자가 대문자로 결정됐을때.
    ADD AL,20h ;20h을 더해서 소문자로 만들어줌
    CALL DISP  ;출력 프로시저를 호출한다.
    
LOWER:         ;입력한 문자가 일단은 대문자가 아니라고 판별됐을때 오는곳.
    CMP AL,60h ;60h보다 같거나 작은가?
    JLE DISP   ;그렇다면 그냥 출력 (소문자가 아님.)
    CMP AL,7Bh ;7Bh와 같거나 큰가?
    JGE DISP   ;그렇다면 그냥 출력 (소문자가 아님.)
    SUB AL,20h ;위 두 검사에도 해당되지 않으면 소문자라는 뜻이므로 20h을 빼서  대문자로 만들어줌
    CALL DISP  ;출력 프로시저 호출한다.
     
DISP2:     
DISP PROC NEAR ;출력 프로시저
    MOV DL,AL  ;AL 레지스터에 있는 정보를 DL 레지스터로 옮겨준다.
    MOV AH,02  ;AH 레지스터에 화면에 한 글자를 출력하는 값을 넣어준다.
    INT 21h    ;실행
DISP ENDP      ;출력 프로시저의 끝

END            ; 코드 끝

 

 

소문자 a를 입력하면 대문자 A를 되돌려주고,

 

 

대문자 A를 입력하면 소문자 a 를 되돌려 줍니다.

 

코드 작성은 emu8086 에뮬레이터로 하였습니다.

 

반응형

댓글