"[ assembly ๋ช ๋ น์ด ] mov, lea"
mov ( move )
- ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ๋ช ๋ น์ด (*์ด๋์ด ์๋ ์ฃผ์)
[์์]
1. mov eax, dword ptr [ a ] : a์ ์ฃผ์๊ฐ ๊ฐ๋ฆฌํค๋ 4๋ฐ์ดํธ(Dword) ๊ฐ์ด eax์ ์ ์ฅํ๋ค.
2. mov eax, [adr] : adr์ฃผ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ eax์ ์ ์ฅํ๋ค.
3. mov dword ptr [ a ], 3 : a์ 3 ๊ฐ์ ์ ์ฅํ๋ค.
4. mov eax, [ rbx + 8 ] : rbx์ฃผ์๊ฐ์ + 8์ ํ ์ฃผ์๋ก ๊ฐ์ ๊ทธ ์์ ์๋ ๊ฐ์ eax์ ๋ณต์ฌํ๋ค.
5. mov [rcx], rax : rcx๋ ์ง์คํฐ๊ฐ ์ฐธ์กฐํ๋ ์ฃผ์์ ๋ฉ๋ชจ๋ฆฌ์ rax ๋ ์ง์คํฐ์ ๊ฐ์ ์ ์ฅํ๋ค.
Lea ( Load Effective Address )
- ์ ํจ ์ฃผ์๋ฅผ ๋ก๋ํ๋ฉฐ, ๋ชฉ์ ์ง๋ ๋ ์ง์คํฐ๋ค.
- ๋ฐ์ดํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๋ ์ง์คํฐ์ ์ ์ฅํ๋ ๋ช
๋ น์ด.
Effective Address : ์ด๋ค ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฃผ์
lea๋ช ๋ น์ด์ ์ข๋ณ์ ๋ ์ง์คํฐ๋ง ์ฌ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฐ๋ณ์๋ ์์๊ฐ ์ฌ์ ์๋ค. (์์๋ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.) ๋ํ, ๋ ์ง์คํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๊ฐ์ ๋ํ๊ฑฐ ๋ ๋นผ๋ ๊ฒ์ด ์๋๋ผ ๊ทธ ๋ ์ง์คํฐ ๊ฐ ์์ฒด์๋ค ๋ํ๊ฑฐ๋ ๋บ๋ค.
[์์]
1. lea rbp, [rsp+8] : rsp๋ ์ง์คํฐ๊ฐ ์ ์ฅํ ์ฃผ์์ 8๋งํผ ๋ํ '์ฃผ์'์ rbp์ ์ ์ฅํ๋ค.
struct Point
{
int xcoord;
int ycoord;
};
// 2๋ฒ ======================================
int y = points[i].ycoord;
// 3๋ฒ ======================================
int *p = &points[i].ycoord;
2. point[ ]๋ point์ ๋ฐฐ์ด์ด๋ค. ๋ฐฐ์ด์ ๊ธฐ๋ณธ์ด ์ด๋ฏธ EBX์ ์๊ณ ๋ณ์ i๊ฐ EAX์ ์๊ณ xcoord์ ycoord๊ฐ ๊ฐ๊ฐ 32bit ( 4byte ) ๋ผ๊ณ ๊ฐ์ ํ๋ฉด ์ด ๋ช ๋ น๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์ปดํ์ผ ๋ ์ ์๋ค.
MOV EDX, [EBX + 8*EAX + 4]
// 8์ point๊ฐ 8byte ์ฌ์ด์ฆ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
3. ycoord์ ๊ฐ์ด ์๋ ์ฃผ์๋ฅผ ์ป๊ธฐ๋ฅผ ์ํ๋ 3๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ปดํ์ผ์ด ๋ ์ ์๋ค.
LEA ESI, [EBX + 8*EAX + 4]
lea๋ ์ฃผ์๊ฐ์ ์ ์ฅํ๊ณ , mov๋ ์ฃผ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ์ ์ฅํ๋ค.
โป ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ " [ ] "
- ๋ช
๋ น์ด์ ํผ์ฐ์ฐ์(operand)๋ก ์ฌ์ฉํ๋ " [ ] " ๊ดํธ ํ์๋ ์ฃผ์๋ฅผ ๋ํ๋ธ๋ค.
- ์ปดํจํฐ ๋ช
๋ น์ด ๊ตฌ์กฐ(Instruction) : ์ปดํจํฐ์ ๋ํ ์ผ๋ จ์ ๋ง์ดํฌ๋ก ์ฐ์ฐ์ ๊ธฐ์ ํ 2์ง์ฝ๋
์ฐ์ฐ(OP Code) | ์ฃผ์ ๊ฒฐ์ ๋ฐฉ์(Mode) | ์ฃผ์ ํ๋(Operand ) |
- Intel ๋ฐฉ์์ ์ด์
๋ธ๋ฆฌ๋, ๋ช
๋ น์ฝ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ข๋ณ์ ํผ์ฐ์ฐ์์ ์ ์ฅํ๋ค.
โป qword 8byte, dword 4 byte , word 2 byte
โป offset์ base๋ก ๋ถํฐ ์ผ๋ง๋ ๋จ์ด์ ธ์๋๋ ํ์ํ๋ ํค์๋์ด๋ค. [ base + offset ]
โป ss : ์คํ ์์ญ
์ถ์
lev ์์ 2๋ฒ, 3๋ฒ - https://stackoverflow.com/questions/1658294/whats-the-purpose-of-the-lea-instruction
์ ํ๋ ๊ฒ ๋ณด๋ค ๋ซ๊ฒ ์ง
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!