-
시스템프로그래밍 07 - Conditonal Processing(2)쾌락없는 책임 (공부)/시스템프로그래밍 2021. 5. 30. 21:59반응형
본 포스트는 강동완 교수님의 '시스템프로그래밍' 강의를 듣고
이해한 것들을 정리한 포스트입니다.
- 강의자료는 올리지 않습니다
이전 포스트에 이어서 나오는 내용들입니다. 위 and 등의 각종 연산들을 통해서 상위 언어에 있는 if, switch 등을 구현하는것이 이번 포스팅의 목표입니다.
J로 시작하는 명령어들 (Jcond Instruction)
1. 플래그 레지스터에 따라서
JC / JNC Carry Flag가 1/0이라면 destination으로 점프 JZ / JNZ Zero Flag가 JO / JNO Overflow Flag가 JS / JNS Sign Flag가 JP / JNP Parity Flag가 2. 같은걸 검사하는 명령어
JE 만약 left = right라면 점프 JNE left =/= right라면 점프 JCXZ cx = 0이라면 점프 JECXZ ECX = 0이라면 점프 JRCXZ RCX = 0이라면 점프 (64비트 프로세서) 3. unsigned 수들을 위한 비교
JA left > right 일때 점프 JNBE JAE left >= right 일때 점프 JNB JB left < right 일때 점프 JNAE JBE left <= right 일때 점프 JNA 4. signed 수들을 위한 비교 (최상위 비트가 1이면 음수로 볼 것이다)
JG left > right 일때 점프 JNLE JGE left >= right 일때 점프 JNL JL left < right 일때 점프 JNGE JLE left <= right 일때 점프 JNG Conditional Loop
기존 루프와 같은 기능을 하지만 조건이 추가된 모습입니다
LOOPZ ZF가 세팅되어 있을 때 LOOPE LOOPNZ ZF가 클리어 되어 있을 때 LOOPNE 위 같은 뜻을 가진 것들은 서로 같은 기계어 코드를 가리키고 있습니다.
Conditional Structure
어셈블리어에서 if같은 구조를 만들기 위해서는 위에 나온 연산자들을 사용할 필요가 있습니다.
1. if 만들기
; if (a == b) mov eax, a cmp eax, b jne L1
2. and or
- and와 or을 만들때 중요한건 코드를 줄이기 위해서 앞서 있는 operand가 true일때만 2번째 operand를 비교하면 됩니다.
; if(a>b && b>c) cmp a, b jbe next cmp b, c jbe next ; if(a>b || b>c) cmp a, b ja next cmp b, a ja next
3. while
;while (a < b) { a++, b-- } mov eax, a while : cmp eax, b jnl while inc eax dec b jmp while end: mov a, eax
4. Tabel-driven Selection
주소를 넣은 테이블을 넣어 look-up 테이블을 만듭니다. 오버헤드가 조금 있지만 코드가 줄어들게 되고 비교가 많을때 유리하며 유지보수가 편해진다는 장점이 있습니다. 추가적으로 런타임시 변경이 가능합니다.
Conditional Control Flow Directives
MASM에서 제공하는 directive들이 있어서 상위 언어에 있는 conditional structure들을 편하게 사용할 수 있습니다.
; if 예시 .IF condition statement .ENDIF
반응형'쾌락없는 책임 (공부) > 시스템프로그래밍' 카테고리의 다른 글
시스템프로그래밍 08 - 어셈블리어에서 비트 연산 (0) 2021.06.01 시스템프로그래밍 06 - Conditional Processing (1) (0) 2021.05.30 시스템프로그래밍 05 - 조금 더 상위 연산들 (0) 2021.05.30 시스템프로그래밍 04 - 어셈블리어 조금 더 맛뵈기02 (2) 2021.04.19 시스템프로그래밍 03 - 어셈블리어 조금 더 맛뵈기01 (0) 2021.04.19