๐ ์์ธ ์ ๋ฆฌ#
- ISA๋ฅผ ์ ์ํ๋ ๊ฒ์ ์ปดํฌ๋ํธ๋ค, ๋ช ๋ น์ด๋ค, ์ธ์ฝ๋ฉ, ํ๋ก๊ทธ๋๋ฐ ์ปจ๋ฒค์ ์ธํธ ๋ฑ์ ์ ์ํ๋ ๊ฒ์ ํฌํจํ๋ค.
- 4.1.1 Programmer-Visible State
- Y86-64 ํ๋ก๊ทธ๋จ์ ๊ฐ ๋ช
๋ น์ด๋ ํ๋ก์ธ์ ์ํ์ ์ผ๋ถ๋ฅผ ํ๋
ํ๊ณ ์์ ํ ์ ์๋ค.
- ์ด๋ฅผ ํ๋ก๊ทธ๋๋จธ ๊ฐ์ํ (programmer-visible) ์ํ๋ผ๊ณ ํ๋ค.
- programmer์ ์ด์ ๋ธ๋ฆฌ ์ฝ๋์์ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ์ฌ๋ ํน์ ์ปดํ์ผ๋ฌ๋ฅผ ์๋ฏธํจ
- ์ด๋ฅผ ํ๋ก๊ทธ๋๋จธ ๊ฐ์ํ (programmer-visible) ์ํ๋ผ๊ณ ํ๋ค.
- Y86-64์ ๋ ์ง์คํฐ๋ x86-64์ ๋น์ทํ๊ฒ %rax %rbx… %r14๊น์ง ์๋ค.
- ๊ฐ ๋ ์ง์คํฐ๋ 64๋นํธ word๋ฅผ ์ ์ฅํ๊ณ ,
- %rsp๋ ์คํ ํฌ์ธํฐ๋ก ์ฌ์ฉ๋๊ณ …
- ์ ๋ณด ์กฐ๊ฑด ์ฝ๋๋ ZF, SF, OF 3๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
- PC (Program Counter)์ ํ์ฌ ์คํ์ค์ธ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๋ณด์ ํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ ํ๋ก๊ทธ๋จ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ ์งํ๋ค.
- ๊ฐ์ ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฐธ์กฐ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ํ๋ก๊ทธ๋จํ ๊ฒ
- Y86-64 ํ๋ก๊ทธ๋จ์ ๊ฐ ๋ช
๋ น์ด๋ ํ๋ก์ธ์ ์ํ์ ์ผ๋ถ๋ฅผ ํ๋
ํ๊ณ ์์ ํ ์ ์๋ค.
- 4.1.2 Y86-64 Instructions
- ์ฐ๋ฆฌ๊ฐ ๋ง๋ค Y86-64 ISA๋ x86-64์ ์๋ธ์
์ด๋ค.
- 8๋ฐ์ดํธ ์ ์ ์ฐ์ฐ๋ง์ ํฌํจ
- ๋ ์ ์ ์ด๋๋ ์ฑ ๋ชจ๋
- ๋ ์์ ์ฐ์ฐ ์ธํธ
- 8๋ฐ์ดํธ๋ง ํ๋๊น, ๊ทธ๋ฅ word๋ผ๊ณ ๋ถ๋ฌ๋ ๋๋ค!
- movq๋ ir, rr, mr, rm movq 4๊ฐ์ง๊ฐ ์๋ค.
- i๋ immediate๊ฐ, r์ ๋ ์ง์คํฐ, m์ ๋ฉ๋ชจ๋ฆฌ
- ์ ์์ฐ์ฐ์ addq, subq, andq, xorq 4๊ฐ์ง๋ก, ๋ ์ง์คํฐ ๋ฐ์ดํฐ์๋ง ๋์ํ๋๋ก ํ ๊ฒ์ด๋ค.
- ๋ฌผ๋ก ZF, SF, OF๋ ์ค์ ํด์ผํ๋ค.
- ์ ํ ๋ช ๋ น์ด๋ jmp, jle, jl, je, jne, jge, jg 7๊ฐ์ง๊ฐ ์๋ค.
- ์กฐ๊ฑด๋ถ ์ด๋์๋ cmovle, cmovl, cmove, cmovne, cmovge, cmovg 6๊ฐ์ง๊ฐ ์๋ค.
- call์ ์คํ์ return address๋ฅผ pushํ๊ณ jumpํ๋ค.
- pushq, popq๋ ๋ฌผ๋ก ์๋ค.
- hlt์ด ๋์ค๋ฉด ์ํ์ฝ๋๊ฐ HLT๋ก ์ค์ ๋ ์ํ์์ ํ๋ก์ธ์๊ฐ ์ ์ง๋๋ค.
- ์ฐ๋ฆฌ๊ฐ ๋ง๋ค Y86-64 ISA๋ x86-64์ ์๋ธ์
์ด๋ค.
- 4.1.3. Insturction Encoding
- ๊ฐ instuction์๋ ์ด๋ค ํ๋๊ฐ ํ์ํ์ง์ ๋ฐ๋ผ 1~10๋ฐ์ดํธ๊ฐ ํ์ํ๋ค.
- ๋ชจ๋ insturction์ ์ ํ์ ์๋ณํ๋ ์ด๊ธฐ ๋ฐ์ดํธ๊ฐ ์๋๋ฐ, ์ฌ๊ธฐ์ ์์ 4๋นํธ๋ ์ฝ๋๋ถ๋ถ, ์๋ 4๋นํธ๋ ํจ์ ๋ถ๋ถ์ด๋ค.
- ์ฝ๋๋ถ๋ถ์ 0 ~ 0xB ๊น์ง์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค.
- ํจ์๋ถ๋ถ์ ๊ด๋ จ instuction์ด ๊ฐ์ ์ฝ๋๋ถ๋ถ์ ๊ณต์ ํ ๋๋ง ์ ์ํ๋ค. (OPq ๋ฑ)
- jmp๋ 0x70์ด์ด์ผํ๋๊ฒ์ฒ๋ผ.
- ๋ค์ 1๋ฐ์ดํธ๋ ๋ ์ง์คํฐ ์๋ณ์์ด๋ค.
- x86-64์ ์ผ์นํ๊ฒ ํ๊ฒ ๋ค.
- ๋ค์ 8๋ฐ์ดํธ๋ ์์ word ์์ญ์ด๋ค.
- ์ผ๋ถ ๋ช ๋ น์ด๋ ๊ธธ์ด๊ฐ 1๋ฐ์ดํธ๋ฟ์ด ์๋์ง๋ง ํผ์ฐ์ฐ์๊ฐ ํ์ํ๊ฑฐ๋ ์์ํํธ๊ฐ ํ์ํ๊ฑฐ๋ ํ๋ฉด ์ปค์ง๋ค.
- x86-64์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค Little Endian์ด๋ค!!
- ์๋ฅผ ๋ค์ด rmmovq %rsp, 0x123456789abcd(%rdx)๋
- rmmovq -> 40, %rsp %rdx -> 42, ์์๋ ๋ฆฌํ์๋์ ์ฒ๋ฆฌ๋์ด
- 40 42 cd ab 89 67 45 23 01 00 ์ผ๋ก ์ธ์ฝ๋ฉ๋ ๊ฒ์ด๋ค.
- 4.1.4 Y86-64 Exceptions
- ์คํ ํ๋ก๊ทธ๋จ์ ์ ์ฒด ์ํ๋ฅผ ๋ํ๋ด๋ ์ํ ์ฝ๋๋ ์๋ค.
- ๋ชจ๋ ์ ์์ธ AOK
- halt๋ฅผ ๋ง๋ HLT
- ์๋ชป๋ ์ฃผ์๋ฅผ ๋ง๋ ADR
- ์๋ชป๋ instruction์ ๋ง๋ INS
- ์คํ ํ๋ก๊ทธ๋จ์ ์ ์ฒด ์ํ๋ฅผ ๋ํ๋ด๋ ์ํ ์ฝ๋๋ ์๋ค.
- 4.1.5 Y86-64 Programs
- Y86-64๋ x86-64์ ๋ฌ๋ฆฌ immediate ๊ฐ์ ์ด์ฉํ ์ฐ์ฐ์ด ์๋๊ธฐ๋๋ฌธ์, ๋ ์ง์คํฐ์ ๋ก๋ํ๊ณ ์ฌ์ฉํ๋ค.
- “.“๋ก ์์ํ๋ word๋ ์ด์
๋ธ๋ฌ์๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ฃผ์๋ฅผ ์กฐ์ ํ๊ฑฐ๋ ๋ฐ์ดํฐ์ ์ผ๋ถ ๋จ์ด๋ฅผ ์ฝ์
ํ๋๋ก ์ง์ํ๋ ์ด์
๋ธ๋ฌ ์ง์์ด๋ค.
- “.pos 0"์ ์ด์ ๋ธ๋ฌ๊ฐ ์ฃผ์ 0์์ ์์ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์์ํด์ผ ํจ์ ๋ํ๋ธ๋ค.
38 # Stack starts here and grows to lower addresses 39 .pos 0x200 40 stack:- ์ด์๊ฐ์ด ์คํ์ฃผ์๋ฅผ ์ง์ ํด์ ๋ ๋ฎ์์ฃผ์๋ก ํ์ฅ๋๋๋ก ์ค์ ํ ์๋ ์๋ค.
7 # Array of 4 elements 8 .align 8 9 array : 10 .quad 0x000d000d000d 11 .quad 0x00c000c000c0 12 .quad 0x0b000b000b00 13 .quad 0xa000a000a000- ๋ฐฐ์ด์ ์์์ ๋ํ๋ด๋ฉฐ, 8๋ฐ์ดํธ ์ ๋ ฌ์ด ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ด์ ๊ฐ์ด Y86-64๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฐ๋ฆฌ์ ๋๊ตฌ๋ ์ด์ ๋ธ๋ฌ์ด๊ธฐ์ ์ฐ๋ฆฌ๋ ์ปดํ์ผ๋ฌ, ๋ง์ปค, ๋ฐํ์ ์์คํ ์์ ๋ฑ์ ์์ ์ ์ํํด์ผ ํ๋ค.
- 4.1.6 Some Y86-64 Instruction details
- pushq ๋ช
๋ น์ด๋ ์คํํฌ์ธํฐ๋ฅผ ๋ชจ๋ 8๋งํผ ๊ฐ์์ํค๊ณ ๋ ์ง์คํฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
- ๊ทธ๋ ๋ค๋ฉด pushq %rsp๋?
1 .text 2 .globl pushtest 3 pushtest: 4 movq %rsp, %rax Copy stack pointer 5 pushq %rsp Push stack pointer 6 Popd %rdx Pop it back 7 subq %rdx, %rax Return 0 or 4 8 ret- x86-64์์, ์ ์ฝ๋๋ ์ธ์ ๋ 0๋ง์ ๋ฐํํ๋ค.
- ์ด๋ 4๋งํผ ๋ก๊ธฐ๊ธฐ ์ ์ ๊ธฐ์กด %rsp๊ฐ์ pushํ๋๊ฒ์ ์๋ฏธํ๋ค.
1 .text 2 .globl poptest 3 poptest: 4 movq %rsp, %rdi Save stack pointer 5 pushq $0xabcd Push test value 6 popq %rsp Pop to stack pointer 7 movq %rsp, %rax Set popped value as return value 8 movq %rdi, %rsp Restore stack pointer 9 ret- ํด๋น ์ฝ๋๋ ์ธ์ ๋ 0xabcd๋ง์ ๋ฐํํ๋ค.
- ์ด๋ ๋ํ %rsp์ ๊ฐ์ ๋ฃ๊ณ %rsp๋ฅผ ์์ง์์ ์๋ฏธํ๋ค.
- pushq ๋ช
๋ น์ด๋ ์คํํฌ์ธํฐ๋ฅผ ๋ชจ๋ 8๋งํผ ๊ฐ์์ํค๊ณ ๋ ์ง์คํฐ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๋ค.
โ์ง๋ฌธ#
์ธ์ฝ๋ฉ๋ ๋ฐ์ดํธ์ ๋ฐ๋ผ ํด์ํด์ ๊ฐ๋จํ ์ฐ์ฐ๋ง์ผ๋ก ๋ณต์กํ ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ๋ค๋๊ฑด ์๊ฒ ๋๋ฐ, ๊ทธ๋์ ํ๋ก์ธ์๊ฐ ์ค์ ๋ก ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ค์ ์ด๋ป๊ฒ ์ฐ์ฐํ๋๊ฑฐ์ง?
ํ๋ก์ธ์๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ ํด์ํ๋๊ฒ ์๋๋ผ ์ค์ ๋ก ๋ฐ์ด๋๋ฆฌ ์ฝ๋๊ฐ ํ๋ฅด๋ ๊ธธ ์์ฒด๋ฅผ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ด๊ณ ๋ซ๋๋ค. ์๋ฅผ ๋ค์ด addq %rax, %rdx๊ณผ ๊ฐ์ ์ธ์ฝ๋ฉ์ด ๋ค์ด์ค๋ฉด, ์ ์ด ์ ๋์์ ๋ํ๊ธฐ๋ฅผ ๋ด๋นํ๋ ALU๋ฅผ ํค๊ณ , %rax๊ณผ %rdx์ ํต๋ก๋ฅผ ์ด์ด์ ๊ฒฐ๊ตญ ๊ฒฐ๊ณผ๊ฐ์ ํด๋นํ๋ ์ ์ ํจํด์ ์ป๋๋ค.
