๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ• & ์˜ˆ์ œ ์ด์ •๋ฆฌ

by 5566 2023. 9. 2.

1. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ž€?

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ์ปดํ“จํ„ฐ์™€ ์ง์ ‘์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ €๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ, ๊ธฐ๊ณ„์–ด์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ์˜ CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด์™€ ์ผ๋Œ€์ผ๋กœ ๋Œ€์‘ํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๋ช…๋ น์–ด๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ฃผ๋กœ ํŠน์ •ํ•œ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ธฐ๊ณ„์–ด๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฝ๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๋ช…๋ น์–ด๋Š” ์‚ฌ๋žŒ์ด ์ฝ๊ธฐ ํŽธํ•œ ํ˜•ํƒœ์˜ ๊ธฐํ˜ธ๋‚˜ ๋‹จ์–ด๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ์ €๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ์„œ ํ•˜๋“œ์›จ์–ด ์ œ์–ด, ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ, ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋“ฑ์— ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€์˜ ๊ฒฐํ•ฉ์„ ํ†ตํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™”๋‚˜ ํŠน์ • ๊ธฐ๋Šฅ ๊ตฌํ˜„์— ์œ ์šฉํ•˜๊ฒŒ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๋ถ€๋ถ„๋„ ์žˆ์œผ๋ฏ€๋กœ ๊ฒฝํ—˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

๋ ˆ์ง€์Šคํ„ฐ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฐœ๋…์€ ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ๋ ˆ์ง€์Šคํ„ฐ๋Š” CPU ๋‚ด์— ์žˆ๋Š” ๊ธฐ์–ต ์žฅ์น˜๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ๊ณ ์œ ํ•œ ์ด๋ฆ„์ด ์žˆ์œผ๋ฉฐ, ์˜ˆ๋ฅผ ๋“ค์–ด ax, bx, cx, dx ๋“ฑ์ด ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ ˆ์ง€์Šคํ„ฐ์ž…๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋Ÿฌ๋Š” ์ด๋Ÿฌํ•œ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด

์–ด์…ˆ๋ธ”๋ฆฌ์–ด ํ”„๋กœ๊ทธ๋žจ์€ ๋ช…๋ น์–ด์˜ ์—ฐ์†์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ช…๋ น์–ด๋Š” ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์–ด์…ˆ๋ธ”๋Ÿฌ๋Š” ์ด๋Ÿฌํ•œ ๋ช…๋ น์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ช…๋ น์–ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

[๋ ˆ์ด๋ธ”:] ๋ช…๋ น์–ด [์˜คํผ๋žœ๋“œ]
  • ๋ ˆ์ด๋ธ”: ๋ช…๋ น์–ด์˜ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ฐธ์กฐ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ๋ช…๋ น์–ด: ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•  ์ž‘์—…์„ ์ง€์ •ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.
  • ์˜คํผ๋žœ๋“œ: ๋ช…๋ น์–ด์— ์ „๋‹ฌ๋˜๋Š” ์ธ์ž ๋˜๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์˜คํผ๋žœ๋“œ๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ƒ๋žต๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ „์†ก

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก์„ ์œ„ํ•ด mov ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•ฉ๋‹ˆ๋‹ค:

mov ax, bx  ; bx ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ax ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ „์†ก

์œ„ ์ฝ”๋“œ๋Š” bx ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ax ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์‚ฐ์ˆ  ์—ฐ์‚ฐ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ๋‹ค์–‘ํ•œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. add, sub, mul, div ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ„ ๋ง์…ˆ, ๋บ„์…ˆ, ๊ณฑ์…ˆ, ๋‚˜๋ˆ—์…ˆ ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ax ๋ ˆ์ง€์Šคํ„ฐ์™€ bx ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ๋”ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค:

add cx, ax, bx  ; ax + bx์˜ ๊ฒฐ๊ณผ๋ฅผ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ

์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ

์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ๋Š” ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. cmp ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ , je, jne, jg, jl, jmp ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ ๋ถ„๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ax ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ ๋ ˆ์ด๋ธ” zero๋กœ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค:

cmp ax, 0   ; ax์™€ 0 ๋น„๊ต
je zero     ; ax๊ฐ€ 0์ด๋ฉด zero๋กœ ๋ถ„๊ธฐ

์œ„ ์ฝ”๋“œ๋Š” ax ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ zero๋ผ๋Š” ๋ ˆ์ด๋ธ”๋กœ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ์–ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ด๋Ÿฌํ•œ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•๊ณผ ๋‹ค์–‘ํ•œ ๋ช…๋ น์–ด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ•˜๋“œ์›จ์–ด์™€ ์ง์ ‘์ ์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋ช…๋ น์–ด์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฃผ์š”ํ•œ ๋‚ด์šฉ๋“ค์ž…๋‹ˆ๋‹ค:

๋ฐ์ดํ„ฐ ๋กœ๋“œ์™€ ์ €์žฅ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋ ˆ์ง€์Šคํ„ฐ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. mov ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’์„ bx ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค:

mov bx, [address]  ; ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ’์„ bx์— ๋กœ๋“œ

์œ„ ์ฝ”๋“œ์—์„œ address๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜๋‚˜ ๋ ˆ์ด๋ธ”์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. add, sub, mul, div ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ„ ๋ง์…ˆ, ๋บ„์…ˆ, ๊ณฑ์…ˆ, ๋‚˜๋ˆ—์…ˆ ๋“ฑ์˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ax ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ bx ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋”ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค:

add cx, ax, bx  ; ax + bx์˜ ๊ฒฐ๊ณผ๋ฅผ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ

๋น„ํŠธ ์—ฐ์‚ฐ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ๋น„ํŠธ ์—ฐ์‚ฐ์„ ์ง€์›ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋น„ํŠธ ๋‹จ์œ„ ์กฐ์ž‘์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. and, or, xor, not, shift ๋“ฑ์˜ ๋น„ํŠธ ์—ฐ์‚ฐ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ, ๋น„ํŠธ ๋’ค์ง‘๊ธฐ, ๋น„ํŠธ ์ด๋™ ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ax ๋ ˆ์ง€์Šคํ„ฐ์™€ bx ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ and ์—ฐ์‚ฐํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค:

and cx, ax, bx  ; ax์™€ bx๋ฅผ and ์—ฐ์‚ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ

๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ช…๋ น์–ด๋“ค์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. movs, cmps, scas, lods, stos ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋กœ๋“œํ•˜๊ณ  ์ €์žฅํ•˜๋ฉฐ, ๋ฌธ์ž์—ด ๊ฐ„์˜ ๋น„๊ต ๋ฐ ๊ฒ€์ƒ‰๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋ฌธ์ž์—ด์„ ํ•œ ๊ธ€์ž์”ฉ ์ฝ์–ด๊ฐ€๋ฉฐ ์ง€์ •๋œ ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๋ฐœ๊ฒฌ๋˜๋ฉด ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค:

mov cx, length    ; ๊ฒ€์ƒ‰ํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
mov al, search    ; ๊ฒ€์ƒ‰ํ•  ๊ฐ’
mov di, offset    ; ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ
repne scasb       ; ๋ฌธ์ž์—ด ๋‚ด์—์„œ ๊ฒ€์ƒ‰

์œ„ ์ฝ”๋“œ์—์„œ length๋Š” ๊ฒ€์ƒ‰ํ•  ๋ฌธ์ž์—ด์˜ ๊ธธ์ด, search๋Š” ์ฐพ์„ ๋ฌธ์ž์—ด์ด๋ฉฐ, offset์€ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ๋กœ๋”ฉ๊ณผ ์ €์žฅ, ์—ฐ์‚ฐ, ๋น„ํŠธ ์กฐ์ž‘ ๋“ฑ์„ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ์ œ์–ด๋ฌธ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์ œ์–ด๋ฌธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฃผ์š”ํ•œ ์ œ์–ด๋ฌธ๋“ค์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค:

์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ

์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ๋Š” ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” cmp ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ , je, jne, jg, jl, jmp ๋“ฑ์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ๋•Œ ๋ถ„๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • je (Jump if Equal): ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์œผ๋ฉด ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  • jne (Jump if Not Equal): ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  • jg (Jump if Greater): ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ํฌ๋ฉด ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  • jl (Jump if Less): ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ์ž‘์œผ๋ฉด ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.
  • jmp (Unconditional Jump): ๋ฌด์กฐ๊ฑด ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ax ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ zero๋กœ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค:

cmp ax, 0   ; ax์™€ 0 ๋น„๊ต
je zero     ; ax๊ฐ€ 0์ด๋ฉด zero๋กœ ๋ถ„๊ธฐ

์œ„ ์ฝ”๋“œ์—์„œ cmp ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ax ๋ ˆ์ง€์Šคํ„ฐ์™€ 0์„ ๋น„๊ตํ•˜๊ณ , je ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๊ต ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์œผ๋ฉด zero๋กœ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ณต๋ฌธ

๋ฐ˜๋ณต๋ฌธ์€ ์ผ๋ จ์˜ ์ž‘์—…์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” loop, rep, repe, repne๊ณผ ๊ฐ™์€ ๋ฐ˜๋ณต ์ง€์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

loop ๋ช…๋ น์–ด

loop ๋ช…๋ น์–ด๋Š” CX ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ๊ฐ์†Œ์‹œํ‚ค๊ณ , ๊ฐ์†Œ๋œ ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๋ฉด ์ง€์ •๋œ ๋ ˆ์ด๋ธ”๋กœ ๋ถ„๊ธฐํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ loop ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

loop label  ; CX ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ , 0๋ณด๋‹ค ํฌ๋ฉด label๋กœ ๋ถ„๊ธฐ

๋‹ค์Œ์€ loop ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 10๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค:

mov cx, 10   ; CX ๋ ˆ์ง€์Šคํ„ฐ์— 10์„ ์ €์žฅ
loop label   ; CX ๊ฐ’ 1 ๊ฐ์†Œ ๋ฐ ๋ถ„๊ธฐ

์œ„ ์˜ˆ์ œ์—์„œ loop ๋ช…๋ น์–ด๋Š” label๋กœ ๋ถ„๊ธฐํ•˜๊ธฐ ์ „์— CX ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ 1์”ฉ ๊ฐ์†Œ์‹œํ‚ค๋ฉฐ, CX ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๋ฉด ๊ณ„์† ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

rep, repe, repne ๋ช…๋ น์–ด

rep, repe, repne ๋ช…๋ น์–ด๋Š” ๋ฌธ์ž์—ด๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด ๋ฐ˜๋ณต ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. rep๋Š” ๋ฌด์กฐ๊ฑด ๋ฐ˜๋ณต, repe๋Š” ์กฐ๊ฑด์ด ์ฐธ์ธ ๊ฒฝ์šฐ ๋ฐ˜๋ณต, repne์€ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์ธ ๊ฒฝ์šฐ ๋ฐ˜๋ณต์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ rep ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค:

rep ๋ช…๋ น์–ด  ; ๋ฐ˜๋ณตํ•  ๋ช…๋ น์–ด

๋‹ค์Œ์€ rep ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณตํ•˜๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค:

mov cx, 5   ; CX ๋ ˆ์ง€์Šคํ„ฐ์— 5๋ฅผ ์ €์žฅ
mov al, 'A' ; ์ถœ๋ ฅํ•  ๋ฌธ์ž
mov ah, 0eh ; ๋ฌธ์ž ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” BIOS ํ•จ์ˆ˜
rep stosb   ; al ๊ฐ’์„ ๋ฌธ์ž์—ด์— ์ €์žฅํ•˜๊ณ  CX๊ฐ’ ๊ฐ์†Œ

์œ„ ์˜ˆ์ œ์—์„œ rep stosb๋Š” al ๊ฐ’์„ ๋ฌธ์ž์—ด์— ์ €์žฅํ•˜๋Š” ๋ช…๋ น์„ CX ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’ ๋งŒํผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์—์„œ๋Š” ์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ์ œ์–ด๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ์™€ ๋ฐ˜๋ณต๋ฌธ์„ ์ ์ ˆํžˆ ์กฐํ•ฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋กœ์ง์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์ œ์–ด ํ๋ฆ„์„ ์›ํ•˜๋Š”๋Œ€๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

5. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์˜ˆ์ œ ๋ฐ ์‹ค์Šต

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ์‹ค์Šตํ•˜๊ณ  ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ์‚ฌ์šฉ๋ฒ•๊ณผ ์›๋ฆฌ๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์˜ˆ์ œ ๋ฐ ์‹ค์Šต์— ๋Œ€ํ•œ ์ƒ์„ธํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

์˜ˆ์ œ 1: ๋‘ ์ˆ˜์˜ ํ•ฉ ๊ตฌํ•˜๊ธฐ

๋‹ค์Œ์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ž‘์„ฑ๋œ ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ax ๋ ˆ์ง€์Šคํ„ฐ์™€ bx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๋‘ ์ˆ˜์˜ ํ•ฉ์„ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค:

mov ax, 10   ; ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ธ 10์„ ax ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ
mov bx, 20   ; ๋‘ ๋ฒˆ์งธ ์ˆ˜์ธ 20์„ bx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ
add cx, ax, bx   ; ax์™€ bx์˜ ๊ฐ’์„ ๋”ํ•ด cx์— ์ €์žฅ

์œ„ ์ฝ”๋“œ์—์„œ mov ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ax ๋ ˆ์ง€์Šคํ„ฐ์— ์ฒซ ๋ฒˆ์งธ ์ˆ˜์ธ 10์„ ์ €์žฅํ•˜๊ณ , bx ๋ ˆ์ง€์Šคํ„ฐ์— ๋‘ ๋ฒˆ์งธ ์ˆ˜์ธ 20์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  add ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ax์™€ bx ๊ฐ’์„ ๋”ํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ cx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ cx ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์€ 10๊ณผ 20์˜ ํ•ฉ์ธ 30์ด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ 2: ๋ฌธ์ž์—ด ์ถœ๋ ฅํ•˜๊ธฐ

๋‹ค์Œ์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ž‘์„ฑ๋œ ์˜ˆ์ œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค:

mov ah, 9    ; ํ™”๋ฉด์— ๋ฌธ์ž์—ด ์ถœ๋ ฅํ•˜๋Š” BIOS ํ•จ์ˆ˜
mov dx, offset message   ; ์ถœ๋ ฅํ•  ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๋ฅผ dx ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ
int 21h      ; ์ธํ„ฐ๋ŸฝํŠธ ํ˜ธ์ถœํ•˜์—ฌ ๋ฌธ์ž์—ด ์ถœ๋ ฅ

์œ„ ์ฝ”๋“œ์—์„œ mov ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ah ๋ ˆ์ง€์Šคํ„ฐ์— 9๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ™”๋ฉด์— ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•˜๋Š” BIOS ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  mov ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ dx ๋ ˆ์ง€์Šคํ„ฐ์— ์ถœ๋ ฅํ•  ๋ฌธ์ž์—ด์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. offset์€ ๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ int ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์‹ค์Šต

์ด์ œ ์œ„์˜ ์˜ˆ์ œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ง์ ‘ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๊ณ  ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค.

  1. ์˜ˆ์ œ 1์„ ์ฐธ๊ณ ํ•˜์—ฌ ๋‘ ์ˆ˜์˜ ์ฐจ ๊ตฌํ•˜๊ธฐ

    • ๋‘ ๋ฒˆ์งธ ์ˆ˜์—์„œ ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๋บ€ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”.
    • ๋ ˆ์ง€์Šคํ„ฐ ๋ฐ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ ์ ˆํžˆ ํ™œ์šฉํ•˜์„ธ์š”.
  2. ์˜ˆ์ œ 2๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅํ•˜๊ธฐ

    • ์ž์‹ ์ด ์›ํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”.
    • mov ๋ช…๋ น์–ด์™€ int ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ , ์›ํ•˜๋Š” ๋ฉ”์‹œ์ง€์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜์„ธ์š”.

์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”ํ•˜๊ณ  ์‹คํ–‰ํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด์„ธ์š”. ์ด๋ฅผ ํ†ตํ•ด ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์˜ ์ž‘๋™ ์›๋ฆฌ์™€ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ๋ฒ•์„ ์‹ค์ œ๋กœ ๊ฒฝํ—˜ํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€