외로운 Nova의 작업실
Assembly 언어 공부 - 24(조건부 제어흐름 디렉티브) 본문
안녕하세요. 이번시간에는 조건부 제어흐름을 조금이나마 쉽게 할 수 있는 디렉티브를 알아볼까합니다. 간단하게 말하면 고급언어에서 사용하는 if, while 문을 어셈블러 디렉티브로 작성하면 어셈블러가 그것을 해것하여 어셈블리어로 변경해줍니다.
- .IF 디렉티브
고급언어에서 if 문과 같은 .IF 디렉티브에 대해서 알아보겠습니다. eax가1이면 ebx = 321, eax가 2면 ebx = 456, eax 가 3이면 ebx = 789를 넣는 어셈블리어 코드를 .IF 디렉티브를 이용해 짜보도록 하겠습니다.
;-----------------INCLUDE-------------------------
;
include c:\assembly\irvine32.inc
includelib c:\assembly\irvine32.lib
includelib c:\assembly\kernel32.lib
includelib c:\assembly\user32.lib
;-----------------------------------------------
.data
.code
main PROC
pushad
mov eax, 2d
.IF eax == 1
mov ebx, 123h
.ELSEIF eax == 2
mov ebx, 456h
.ELSEIF eax == 3
mov ebx, 789h
.ENDIF
call DumpRegs
popad
main ENDP
END main
위와 같은 코드를 짜면, 어셈블러는 .IF 디렉티브, .ELSEIF 디렉티브, .ENDIF 디렉티브를 인식하여 논리 구조에 맞는 어셈블러를 생성하여 기계어로 변환시켜줍니다.
- .WHILE 디렉티브와 .REPEAT 디렉티브
이번에는 고급언어에서 사용하는 While문을 .WHILE 디렉티브와 .REPEAT 디렉티브로 구현해보도록 하겠습니다. 간단하게 0부터 10까지 콘솔에 출력하는 프로그램을 짜보도록 하겠습니다.
;-----------------INCLUDE-------------------------
;
include c:\assembly\irvine32.inc
includelib c:\assembly\irvine32.lib
includelib c:\assembly\kernel32.lib
includelib c:\assembly\user32.lib
;-----------------------------------------------
.data
.code
main PROC
pushad
mov eax, 0
.WHILE eax < 10
inc eax
call WriteDec
call Crlf
.ENDW
mov eax, 0
.REPEAT
inc eax
call WriteDec
call Crlf
.UNTIL eax == 10
popad
main ENDP
END main
위 코드를 실행시키면,
잘 실행 되는 것을 볼 수 있습니다. 이코드도 마찬가지로 어셈블러가 .WHILE 디렉티브와 .REPEAT 디렉티브를 인식하여 논리구조에 맞는 어셈블리어로 변환 시켜 기계어로 만들어줍니다.
'Programming > Assembly' 카테고리의 다른 글
Assembly 언어 공부 - 26(double 시프트 연산자와 곱셈, 나눗셈) (0) | 2022.09.06 |
---|---|
Assembly 언어 공부 - 25(시프트와 회전 명령어) (0) | 2022.09.01 |
Assembly 언어 공부 - 23(문자열 암호화 예제 프로그램) (0) | 2022.08.27 |
Assembly 언어 공부 - 22(점프 명령어 이론) (0) | 2022.08.25 |
Assembly 언어 공부 - 22(프로시저의 사용) (0) | 2022.08.24 |
Comments