Addressing Mode
Addressing Mode
๐ซ ์ฃผ์ ์ง์ ๋ชจ๋
- ์ฃผ์ ์ง์ ๋ชจ๋ Addressing Mode
- ์ฃผ์ ์ฆ์ Address Immediate ์ฃผ์ ์ง์ ๋ชจ๋
- ์ฃผ์ ๋ชจ๋
- ํผ์ฐ์ฐ์์ ๋ํ๋ ๊ฐ์ ์ฃผ์๋ก ํด์ํจ (์ง์ ๊ฐ์ , ์ ๋ ์๋ ์ฃผ์ ํด๋น)
- ์ฆ์ ๋ชจ๋
- ํผ์ฐ์ฐ์์ ๋ํ๋ ๊ฐ์ ์์๋ก ํด์ํจ
- ์ฃผ์ ๋ชจ๋
- ์ง์ ๊ฐ์ Direct Indirect ์ฃผ์ ์ง์ ๋ชจ๋
- ์ง์ ์ฃผ์
- ๊ธฐ๊ณ ๋ช ๋ น์ด์ ํผ์ฐ์ฐ์ ๋ถ๋ถ์ด ์ฃผ๊ธฐ์ต์ฅ์น ์ ๊ทผ ์ฃผ์๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
- #์ฃผ์ โ ๊ฐ ๊ฐ์ ธ์ด
- ๊ฐ์ ์ฃผ์
- ํผ์ฐ์ฐ์ ๋ถ๋ถ์ด ๊ฐ๋ฅดํค๋ ๊ณณ์ ์ ์ฅ๋ ๊ธฐ์ต์ฅ์น ๊ฐ์ด 2์ฐจ(์ต์ข ) ์ฃผ์๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
- #์ฃผ์ โ ์ฃผ์ โ ๊ฐ ๊ฐ์ ธ์ด Like ํฌ์ธํฐ
- ์ง์ ์ฃผ์
- ์ ๋ ์๋ Absolute Relative ์ฃผ์ ์ง์ ๋ชจ๋
- ์ ๋ ์ฃผ์
- ํผ์ฐ์ฐ์์ ๋ํ๋ ์ฃผ์๊ฐ ๊ทธ๋๋ก ์ฃผ๊ธฐ์ต์ฅ์น ์ ๊ทผ ์ฃผ์๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
- #์ฃผ์ โ ๊ฐ ๊ฐ์ ธ์ด
- ์๋ ์ฃผ์
- ํผ์ฐ์ฐ์์ ๋ํ๋ ์ฃผ์์ ์ 3์ ๊ธฐ์ค ๊ฐ์ ๋ํ ๊ฐ์ด ์ฃผ๊ธฐ์ต์ฅ์น ์ ๊ทผ ์ฃผ์๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ
- #์ฃผ์ + ๊ธฐ์ค ๊ฐ โ ๊ฐ ๊ฐ์ ธ์ด
- ์ ๋ ์ฃผ์
- ์ฃผ์ ์ฆ์ Address Immediate ์ฃผ์ ์ง์ ๋ชจ๋
- OP Coder ์ฐ์ฐ ์ฝ๋, Operand ํผ์ฐ์ฐ์
- I.E. Add_์ ๋/์๋_์ง์ /๊ฐ์ , ์์
๐ซ TODO
๊ฐ๋จํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ชจ๋
- ์ฐธ๊ณ
- Reg[R] : ๋ ์ง์คํฐ R ์์ ๊ฐ
- Mem[M] : ๋ฉ๋ชจ๋ฆฌ M ์์ ๊ฐ๊ฐ
- ํ์ค๋ชจ๋ (R)
- Mem[Reg[R]]
- ๋ ์ง์คํฐ R์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๋ํ๋
- C์ ํฌ์ธํฐ ์ญ์ฐธ์กฐ (Dereferencing)
- movq (%rcx), %rax
- ๋ณ์๋ชจ๋ D(R)
- Mem[Reg[R]+D]
- ๋ ์ง์คํฐ R์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ญ์ ์์ ์ฃผ์๋ฅผ ๋ํ๋
- ์์ ๋ณ์ D๋ ์คํ์ ์ ๋ํ๋
- movq 8(%rbp), %rdx
1
2
3
4
5
6
7
8
9
10
11
12
void Temp(SomeType a, SomeType b) {}
// a โ %rdi, b โ %rsi
__asm
{
Temp:
movq (%rdi), %rax
movq (%rsi), %rdx
movq %rdx, (%rdi)
movq %rax, (%rsi)
ret
}
- ์์ ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋ชจ๋ (์ธ๋ฑ์ค ์ฃผ์๋ชจ๋)
- ์ผ๋ฐ ํํ
- D(Rb, Ri, S) Mem[Reg[Rb]+S*Reg[Ri]+D]
- D: ์์ ๋ณ์(Displacement) 1,2,4 Bytes
- Rb: Base Register : 16๊ฐ ์ ์ ๋ ์ง์คํฐ ์ค ์ด๋ค ๊ฒ
- Ri: Index Register: %rap๋ฅผ ์ ์ธํ ์ด๋ค ๊ฒ
- ์์ธ๋ก %ebp๋ฅผ ์ฌ์ฉํ ์๋ ์์
- s: ๋ฐฐ์ธ (Scale): 1,2,4,8 (why there numbers?)
- ํน์ ํํ
- (Rb, Ri) Mem[Reg[Rb]+Reg[Ri]]
- D(Rb,Ri) Mem[Reg[Rb]+Reg[Ri]+D]
- (Rb,Ri,S) Mem[Reg[Rb]+S*Reg[Ri]]
- ์ผ๋ฐ ํํ
@ ์ฌ๋ฌ ์คํผ๋๋ ํํ
- ๋ฐ์ดํฐ์ ์ด๋ : x86-64
- ๋ฐ์ดํฐ ์ด๋ move Source, Dest
- Indtel์ move Dest, Source
- ํผ์ฐ์ฐ์ (์คํผ๋๋ Operands)
- Immediate ์ ์ ์์ ๋ฐ์ดํฐ
- i.e. $0x400, $-533
- C์์ ๊ฐ์ง๋ง โ$โ์ ๋์ด ๋ถ์
- 1,2,4 Bytes๋ก ์ธ์ฝ๋
- Register: 16๊ฐ ์ ์ ๋ ์ง์คํฐ ์ค ํ๋
- i.e. %rax, %r13
- ํน๋ณํ %rsp๋ ํน์ ์ฉ๋๋ก ์์ฝ๋์ด ์์
- ๊ทธ ์ธ ๋ ์ง์คํฐ๋ค์ ํน์ ๋ช ๋ น์ ์ํ ํน์์ฉ๋๋ฅผ ๊ฐ์ง
- Memory: ๋ ์ง์คํฐ์ ์ฃผ์ด์ง ์ฃผ์์์ ์ฐ์๋ 8๋ฐ์ดํธ ๋ฉ๋ชจ๋ฆฌ
- ๊ฐ๋จ ์ :%rax
- ๋ค์ํ ์ฃผ์๋ชจ๋ (Address Modes) ์ ๊ณต
- Immediate ์ ์ ์์ ๋ฐ์ดํฐ
- ๋ฐ์ดํฐ ์ด๋ move Source, Dest
- movq ์คํผ๋ฐ๋ ์กฐํฉ
- Imm
- to Reg, movq $0x4, %rax
- Like c temp = 0x4;
- to Mem, movq $-146, (%rax)
- Like c *p = -147;
- to Reg, movq $0x4, %rax
- Reg
- to Reg, movq %rax, %rdx
- Like c temp2 = temp1;
- to Mem, movq %rax, (%rdx)
- Like *p = temp;
- to Reg, movq %rax, %rdx
- Mem
- to Reg. movq (%rax), %rdx
- Like c temp = *p;
- to Reg. movq (%rax), %rdx
- ํ๋์ ๋ช ๋ น์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ๋ฉ๋ชจ๋ฆฌ๋ก๋ ์ด๋ ๋ถ๊ฐ
- Imm
- ๋ฐ์ดํฐ ์ด๋
- movx, x in {b,w,l,q}
- movq, 8Byte quad word
- movl, 4Byte double word
- movw, 2Byte word
- movb, 1Byte byte
์ด ๊ธฐ์ฌ๋ ์ ์๊ถ์์ CC BY 4.0 ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๋ฆ
๋๋ค.