본문 바로가기

Programming Language/Assembly

점프 명령어 JMP

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

이번에는 점프 명령어를 알아보려 합니다.
점프 명령어는 프로그램 진행상 필요시 특정 위치로 프로그램의 흐름을 건너뛰는 역할을 합니다.
점프 명령어는 다음과 같이 선언합니다.


명령 1
명령 2
JMP <레이블>
명령 3
명령 4
레이블:
명령 5
명령 6

JMP 명령어가 없다면 프로그램의 순서는 명령 1-2-3-4-5-6의 순차적으로 진행될 것입니다. 그러나 JMP를 통해 특정 레이블로 점프시킨다면 1-2-5-6의 순서로 진행 됩니다. 그럼, 이전에 테스트 해 보았던 헬로 월드 예제로 적용해 보죠.

.386 ; 386 CPU용 명령어들을 사용합니다.
.model flat, stdcall ; 메모리 모델은 stdcall을 사용합니다.
.stack 1024
.data ; 데이터 영역은 아직 없으므로 비워둡니다.
.code ; 코드 영역 시작
main PROC ; main 프로시저 선언합니다.
    MOV AH, 02h ; AH 레지스터에 문자 1개를 출력하는 명령인 02h를 넣습니다. 반복적으로 사용될 값이므로 첫 번째 예제와는 순서를 바꿔서 가장 처음에 배치해 봤습니다.

    MOV DL, 48h
    INT 21h

    MOV DL, 65h
    INT 21h

    MOV DL, 6Ch
    INT 21h

    MOV DL, 6Ch
    INT 21h

    JMP JUMP_LABEL ; JUMP_LABEL이라 이름 붙인 레이블로 프로그램의 흐름을 건너뜁니다.

    MOV DL, 6Fh ; 건너 뜀
    INT 21h ; 건너 뜀

    MOV DL, 2Ch ; 건너 뜀
    INT 21h ; 건너 뜀

    MOV DL, 20h ; 건너 뜀
    INT 21h ; 건너 뜀

    JUMP_LABEL: ; JMP 명령어를 통해 이 곳으로 바로 옵니다.

    MOV DL, 57h
    INT 21h

    MOV DL, 6Fh
    INT 21h

    MOV DL, 72h
    INT 21h

    MOV DL, 6Ch
    INT 21h

    MOV DL, 64h
    INT 21h

    MOV DL, 21h
    INT 21h
 
    MOV AH, 4Ch
    INT 21h
main ENDP
END main

실행 결과는 이렇습니다. Hello, World! 중에서 "o, W" 부분을 건너뛰어 HellWorld!로 출력됨을 알 수 있습니다.



'Programming Language > Assembly' 카테고리의 다른 글

산술 비교 알고리즘 - 1편 "!="과 "=="  (0) 2013.04.11
산술비교 명령어 모음  (0) 2013.04.06
두 번째 예제: Hello, World!  (0) 2013.03.31
첫 예제: 1개의 문자 출력  (0) 2013.03.31
MASM PWB 사용하기  (0) 2013.03.31