Assembly (4)

HyungSeop Lee·2023년 5월 22일
0

증가, 감소 명령

INC (increment)

DEC (decrement)


키 입력 방법

echo 있는 입력

echo 없는 입력


비교 명령어

CMP (Compare)

  • 비교 결과에 따라 flag에 영향이 간다. 그 flag로 action을 취한다.

TEST

  • 두 개의 operand를 AND 취함

분기 명령어의 비교

JMP label

CODE SEGMENT
    ASSUME CS : CODE

    NEXT : MOV AH, 1            ; 1문자 입력
    INT 21H

    MOV DL, AL
    INC DL
    MOV AH, 2                   ; 1문자 출력
    INT 21H

    JMP NEXT                    ; 무조건 분기하여 다시 입력 받음

    MOV AH, 4CH                 
    INT 21H

CODE ENDS
END

분기 명령어

  • JA : A > B
  • JNB, JAE : A >= B
  • JE : A == B
  • JBE : A <= B
  • JB : A < B
  • JNE : A != B

반복 명령어

  • LOOP label은 CX를 사용하여 반복한다.

Stack

  • PUSH, POP은 2 Bytes씩 증가, 감소

example

CODE SEGMENT
    ASSUME CS : CODE

    MOV AX, 1234H
    MOV BX, 5678H           ; SP = 0

    PUSH AX                 ; SP = FFFEH
    PUSH BX                 ; SP = FFFCH
    PUSHF                   ; SP = FFFAH

    MOV AX, 2468H           
    MOV BX, 2468H
    SUB AX, BX

    POPF                    ; SP = FFFCH
    POP BX                  ; SP = FFFEH
    POP AX                  ; SP = 0

    MOV AH, 4CH
    INT 21h

CODE ENDS
    END

Subroutine

example 1

; Subroutine 사용법
; ex) 0~9 숫자를 문자로 바꾸어 출력

CODE SEGMENT
    ASSUME CS: CODE
    MOV CL, 0

NEXT : CALL PUTNUM          ; subroutine 호출 (되돌아올 주소 0005H를 Stack에 PUSH)
        INC CL              ; CL += 1
        CMP CL, 10          
        JB NEXT             ; if CL < 10 ? NEXT
        MOV AH, 4CH         ; if CL >= 10 ? exit
        INT 21H

PUTNUM : MOV DL, CL 
    ADD DL, '0'             ; 0 -> '0'
    MOV AH, 2
    INT 21h
    RET                     ; Stack에서 POP하여 0005H를 IP값으로


CODE ENDS
    END

example 2

  • 16진수(8 bit register값)을 화면에 표시
profile
efficient computer vision

0개의 댓글