전공/시스템프로그래밍

[09] ASM2 : Control Flow

vss121 2022. 10. 28. 14:25
IA-32 Processor State
  32bit compiler    
 general purpose

6개는 범용으로 용도가 정해져 있지 않음. 컴파일러가 그때그때 결정
저장공간 6개를 (레)로 쓸 수 있다
%eax accumulate temporary data
%ecx counter
%edx data
%ebx base
%esi source index
(배열 idx 관련)
%edi destination index
(배열 idx 관련)
특별한 목적의 (레)
범용 안 됨
%esp Current stack top
stack pointer (스택이 어디까지 사용됐는지)

Location of runtime stack
%ebp Current stack frame
의 첫번째 위치(base address)

base pointer (스택의 처음 위치)

 

%eip Location of current code control unit Instruction pointer
CF ZF SF OF Status of recent tests Condition codes (EFLAGS)

 

 

Setting Condition Codes
 

EFlag register 중 Single bit registers

- CF (Carry), SF (Sign), ZF (Zero), OF (Overflow)

 

addl src, des

- Implicitly set by arithmetic operations 연산 뒤 자동으로 세팅됨

 

cmpl b, a // 비교를 하기 위한 것, Eflags를 setting하기 위한

- Explicitly setting by compare instruction

- (a - b) without saving the result (arithmetic)

- CF

- ZF : set if (a - b) = 0

- SF : set if (a - b) < 0   // b가 더 크면

- OF : (a>0 && b<0 && (a-b)<0) || (a<0 && b>0 && (a-b)>0)

 

testl b, a

Explicitly setting by test instruction

• Sets condition codes based on value of a and b
- Useful to have one of the operands be a mask
• Computes a & b without setting destination (logical) • ZF set when a & b == 0
• SF set when a & b < 0
• CF and OF are cleared to 0

 

'전공 > 시스템프로그래밍' 카테고리의 다른 글

[13] Linking  (0) 2022.12.04
두번째 과제  (0) 2022.11.05
[04] Floating Point  (0) 2022.10.28
[03-3] Integer(정수) / Representing and Manipulating Integers  (0) 2022.10.28
[05] BYTE ORDERING  (0) 2022.10.27