๐ ์๋ธ๋ฃจํด์ด๋?
์๋ธ๋ฃจํด์ ํ๋ก๊ทธ๋จ์์ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ฝ๋ ๋ธ๋ก์ ํ๋๋ก ๋ฌถ์ด ์ ์ํ ํ, ํ์ํ ๋๋ง๋ค ํธ์ถํ ์ ์๊ฒ ๋ง๋ ๊ตฌ์กฐ์ด๋ค. ์ด๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ ์ ์๋ค. ์๋ธ๋ฃจํด์ ํจ์, ํ๋ก์์ , ๋ฉ์๋์ ์ ์ฌํ ๊ฐ๋ ์ผ๋ก ์๊ฐํ ์ ์๋ค.
์๋ธ๋ฃจํด์ ํน์ง
1. ์ฌ์ฌ์ฉ ๊ฐ๋ฅ์ฑ: ์๋ธ๋ฃจํด์ ์ฌ๋ฌ ๊ณณ์์ ํธ์ถ๋์ด ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ค. ์๋ฅผ ๋ค์ด, ๋ณต์กํ ์ํ์ ์ฐ์ฐ์ด๋ ์
์ถ๋ ฅ ์ฒ๋ฆฌ๋ฅผ ํ ๋ฒ ์ ์ํด ๋๊ณ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฅ์์์ ์ฌ์ฉํ ์ ์๋ค.
2. ์บก์ํ: ์๋ธ๋ฃจํด์ ๋
๋ฆฝ์ ์ธ ์ฝ๋ ๋ธ๋ก์ผ๋ก ๋ค๋ฅธ ํ๋ก๊ทธ๋จ ๋ถ๋ถ๊ณผ๋ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํน์ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์์ ํด๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
3. ์
์ถ๋ ฅ ๋งค๊ฐ๋ณ์: ์๋ธ๋ฃจํด์ ์ธ๋ถ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌ๋ฐ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. ํจ์ํ ์๋ธ๋ฃจํด์์๋ ํธ์ถ ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋๊ธฐ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํด๋ฐ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค.
4. ํ๋ก๊ทธ๋จ ํ๋ฆ ์ ์ด : ์๋ธ๋ฃจํด์ ํธ์ถํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ ์ด๊ฐ ํด๋น ์๋ธ๋ฃจํด์ผ๋ก ๋์ด๊ฐ๋ค๊ฐ, ์๋ธ๋ฃจํด์ด ๋๋๋ฉด ์๋ ํธ์ถํ ์์น๋ก ๋์์จ๋ค. ์ด๋ CALL ๋ช
๋ น์ด๋ก ์๋ธ๋ฃจํด์ ํธ์ถํ๊ณ , RET ๋ช
๋ น์ด๋ก ๋ณต๊ทํ๋ค.
5. ์คํ๊ณผ ๋ ์ง์คํฐ ์ฌ์ฉ: ์๋ธ๋ฃจํด ํธ์ถ ์, ํธ์ถํ ์์น๋ฅผ ๊ธฐ์ตํ๊ฑฐ๋ ํธ์ถ ๊ณผ์ ์์ ์ฌ์ฉํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์คํ์ ์ฌ์ฉํ๋ค. ํนํ ์ด์
๋ธ๋ฆฌ์ด์์๋ ์๋ธ๋ฃจํด ํธ์ถ ์ ๋ ์ง์คํฐ์ ๊ฐ์ ์คํ์ ์ ์ฅํ๊ณ , ๋ณต๊ท ์ ์ด ๊ฐ์ ๋ณต์ํ๋ ์์
์ด ํ์ํ๋ค.
๐ฅ ์๋ธ๋ฃจํด ๋ช ๋ น์ด
x86-32 ์ปดํจํฐ์์์ ์๋ธ๋ฃจํด
- CALL ๋ช ๋ น์ด (์๋ธ๋ฃจํด ํธ์ถ)
CALL ๋ช
๋ น์ด๋ ํ์ฌ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ์๋ธ๋ฃจํด์ผ๋ก ์ด๋์ํค๋ ๋ช
๋ น์ด๋ค. ํ์ฌ ์คํ ์ค์ธ ๋ช
๋ น์ด์ ๋ค์ ์ฃผ์(๋ณต๊ท ์ฃผ์)๋ฅผ ์คํ์ ์ ์ฅํ๋ค.
๋์ ๊ณผ์ :
- ๋ณต๊ท ์ฃผ์๋ฅผ ์คํ์ ์ ์ฅ
- ์๋ธ๋ฃจํด์ ์์ ์ฃผ์๋ก ์ ํ
- ์๋ธ๋ฃจํด์ด ๋๋ ๋๊น์ง ํด๋น ์ฝ๋ ๋ธ๋ก ์คํ
- RET ๋ช ๋ น์ด (์๋ธ๋ฃจํด ๋ณต๊ท)
RET ๋ช
๋ น์ด๋ ์๋ธ๋ฃจํด์ ์คํ์ด ์ข
๋ฃ๋ ํ ์๋ ํธ์ถ๋ ์์น๋ก ๋์๊ฐ๋ ๋ช
๋ น์ด์ด๋ค. ์คํ์ ์ ์ฅ๋ ๋ณต๊ท ์ฃผ์๋ฅผ ๊บผ๋ด ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ๊ทธ ์ฃผ์๋ก ๋๋๋ฆฐ๋ค.
๋์ ๊ณผ์ :
- ์คํ์์ ๋ณต๊ท ์ฃผ์๋ฅผ ๊บผ๋ด์ด PC์ ์ ์ฅ
- PC์ ์ ์ฅ๋ ์ฃผ์๋ก ์ด๋ํ์ฌ ์๋ ํ๋ก๊ทธ๋จ์ ํ๋ฆ์ ๊ณ์ ์คํ
โ๏ธ ์๋ธ๋ฃจํด ๋์ ๊ณผ์
1. ์๋ธ๋ฃจํด ํธ์ถ: ํ๋ก๊ทธ๋จ์ด CALL ๋ช
๋ น์ด๋ฅผ ๋ง๋๋ฉด ๋ณต๊ท ์ฃผ์๋ฅผ ์คํ์ ์ ์ฅํ๋ค. ์คํ ํฌ์ธํฐ๊ฐ ๊ฐ์ํ๋ฉด์ ๋ณต๊ท ์ฃผ์ ์์น๋ฅผ ๋ํ๋ธ๋ค. ์ดํ PC๋ฅผ ์๋ธ๋ฃจํด์ ์์ ์ฃผ์๋ก ์ค์ ํ๊ณ ์๋ธ๋ฃจํด์ผ๋ก ์ ํํ๋ค.
2. ์๋ธ๋ฃจํด ์คํ: ์๋ธ๋ฃจํด ๋ด์ ์ง์ญ ๋ณ์์ ๋งค๊ฐ๋ณ์๋ ์คํ์ผ๋ก ๊ด๋ฆฌ๋๋ฉฐ, ์๋ธ๋ฃจํด์ ์ฃผ์ด์ง ์์
์ ์ํํ ํ ๋ณต๊ท ์ค๋น๋ฅผ ํ๋ค.
3. ์๋ธ๋ฃจํด ๋ณต๊ท: ์๋ธ๋ฃจํด์ด ์๋ฃ๋ ํ RET ๋ช
๋ น์ด๋ฅผ ๋ง๋๋ฉด, ์คํ์์ ๋ณต๊ท ์ฃผ์๋ฅผ ๊บผ๋ด PC์ ์ ์ฅํ๋ค. PC๋ ๋ณต๊ท ์ฃผ์๋ก ์ด๋ํ์ฌ ์๋ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ์ฌ๊ฐํ๋ค.
์คํ ์ฌ์ฉ:
- ์๋ธ๋ฃจํด ํธ์ถ ์ ์คํ ํฌ์ธํฐ๊ฐ ๊ฐ์ํ๊ณ ,
- ๋ณต๊ท ์ ์คํ ํฌ์ธํฐ๊ฐ ์ฆ๊ฐํ์ฌ ์๋ธ๋ฃจํด ์ค์ฒฉ ํธ์ถ์ด ๊ฐ๋ฅํ๋ค.
๐ ์๋ธ๋ฃจํด ๊ด๋ จ ๋ ์ง์คํฐ
IP (Instruction Pointer)
ํ์ฌ ์คํ ์ค์ธ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ํ๋ก๊ทธ๋จ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ ๋๋ง๋ค ์๋์ผ๋ก ๊ฐฑ์ ๋๋ค. CALL ๋ช ๋ น์ด ์คํ ์ IP์ ๊ฐ์ด ์คํ์ ์ ์ฅ๋๊ณ , RET ๋ช ๋ น์ด ์คํ ์ ์คํ์์ ๋ณต๊ท ์ฃผ์๋ฅผ ๊บผ๋ด IP์ ๋ณต์ํ๋ค.
SP (Stack Pointer)
์คํ์ ์ต์๋จ์ ๊ฐ๋ฆฌํจ๋ค. ์คํ์ ๋ฐ์ดํฐ๋ฅผ ํธ์(push)ํ ๋ SP๋ ๊ฐ์ํ๊ณ , ํ(pop)ํ ๋ SP๋ ์ฆ๊ฐํ๋ค. ์๋ธ๋ฃจํด ํธ์ถ ์ CALL ๋ช ๋ น์ด๋ IP์ ๊ฐ์ ์คํ์ ์ ์ฅํ๊ณ SP๋ฅผ ๊ฐ์์ํจ๋ค.
BP (Base Pointer)
์๋ธ๋ฃจํด ๋ด์์ ํจ์ ํธ์ถ ํ๋ ์์ ๊ธฐ์ค์ ์ญํ ์ ํ๋ค. ์๋ธ๋ฃจํด ์์ ์ BP๋ SP์ ๊ฐ์ ์ ์ฅํ๊ณ , ํจ์ ์ข
๋ฃ ์ ์ด์ ์ SP ๊ฐ์ ๋ณต์ํ์ฌ ์คํ์ ์ฝ๊ฒ ๋ณต๊ตฌํ๋ค.
๐ ์คํ ์ฌ์ฉ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์ ์คํ์ ์ญ๋ฐฉํฅ์ผ๋ก ์๋ผ๋ฉฐ, ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์์
์คํ์ ์ด๊ธฐ ์ํ๋ฅผ ๊ฐ์ ํด ๋ณด์:
- SP = 0x1000
- IP = 0x2000
CALL subroutine ์คํ ์ IP์ ๋ณต๊ท ์ฃผ์๋ฅผ ์คํ์ ํธ์ํ๋ค. ์ด๋ก ์ธํด SP๋ ๊ฐ์ํ๊ณ , ์๋ธ๋ฃจํด์ผ๋ก ์ ํํ๊ฒ ๋๋ค.
๐ผ๏ธ ์คํ ํ๋ ์ ํ์ฉ
์๋ธ๋ฃจํด์ด ํธ์ถ๋ ๋, ํธ์ถํ ํจ์์ ํธ์ถ๋ ํจ์ ๊ฐ์ ๋ฐ์ดํฐ ๊ด๋ฆฌ๋ฅผ ์ํด ์คํ์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์คํ ํ๋ ์์ด๋ผ๊ณ ํ๋ค. ์ด ์์ญ์ ๋งค๊ฐ๋ณ์, ์ง์ญ ๋ณ์, ๋ณต๊ท ์ฃผ์, ์ ์ฅ๋ ๋ ์ง์คํฐ ๊ฐ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์คํ ํ๋ ์ ๊ตฌ์กฐ
- ๋งค๊ฐ๋ณ์: ํธ์ถ๋ ์๋ธ๋ฃจํด์ ์ ๋ฌ๋ ๊ฐ
- ๋ณต๊ท ์ฃผ์: ์๋ธ๋ฃจํด ์ข
๋ฃ ํ ๋์๊ฐ ์ฃผ์
- ์ด์ BP: ์ด์ ํจ์ ํธ์ถ ์์ BP ๊ฐ
- ์ง์ญ ๋ณ์: ํจ์ ๋ด์์ ์ฌ์ฉ๋๋ ์์ ๋ณ์
์ญํ
- ํจ์ ํธ์ถ ์ ๋ฐ์ดํฐ ์ ์ฅ: ํจ์ ํธ์ถ ํ ์ด์ ํจ์์ ์ํ(๋ณต๊ท ์ฃผ์, ๋ ์ง์คํฐ ๊ฐ)๋ฅผ ์ ์ฅํ๊ณ , ํธ์ถ๋ ํจ์์์ ์ฌ์ฉํ ๋งค๊ฐ๋ณ์์ ์ง์ญ ๋ณ์๋ฅผ ์ํ ๊ณต๊ฐ์ ํ ๋นํ๋ค.
- ๋ณต๊ท ์ฃผ์ ์ ์ฅ: ํจ์๊ฐ ํธ์ถ๋ ์์น๋ก ๋์๊ฐ๊ธฐ ์ํ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค.
- ๋งค๊ฐ๋ณ์ ๋ฐ ์ง์ญ ๋ณ์ ๊ด๋ฆฌ: ํจ์์ ๋งค๊ฐ๋ณ์์ ์ง์ญ ๋ณ์๋ฅผ ์ ์ฅํ์ฌ ํจ์๊ฐ ๋๋๊ธฐ ์ ๊น์ง ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ค.
์์ ์ฝ๋
int add(int a, int b) {
int result = a + b;
return result;
}
int main() {
int sum = add(3, 4);
return 0;
}
์ด ์ฝ๋๋ฅผ ๋ณด๊ณ ์ง์ ๊ทธ๋ ค๋ณด๋ฉฐ ๊ณต๋ถํ์๋ผ...
'CS > Computer Architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์ปดํจํฐ๊ตฌ์กฐ] ์บ์ ์ฌ์๋ฐฉ์๊ณผ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ (0) | 2024.12.08 |
|---|---|
| [์ปดํจํฐ๊ตฌ์กฐ] ์ง๋ฒ ๋ณํ (2) | 2024.10.12 |
| [์ปดํจํฐ๊ตฌ์กฐ] ์ง๋ฒ (3) | 2024.10.09 |
| [์ปดํจํฐ๊ตฌ์กฐ] ๋ฐ์ดํฐ ํํ (1) | 2024.10.09 |