[์์คํ ํดํน] ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ณ ํผ๋ผ๋ฏธ๋ ๋ง๋ค๊ธฐ (1)
https://youtu.be/FFFr5GnelJI ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์ด์ฉํด์ ๋ณ ํผ๋ผ๋ฏธ๋๋ฅผ ๋ง๋ค์ด๋ณธ๋ค. $nano pyramid.s ๋ณ ํผ๋ผ๋ฏธ๋๋ฅผ ๋ง๋ค ์์ค์ฝ๋ ํ์ผ์ ์์ฑํด์ค๋ค. section .data STAR db '*' EMPTY db 0x0a section .text global _start _start:
dangsdangs.tistory.com
์ด ๊ธ์ ์ด์ด์ ๋ณ ํผ๋ผ๋ฏธ๋๋ฅผ ์์ฑํด๋ณธ๋ค.
ํด๋น ์ ํ๋ธ๋ฅผ ๋ณด๋ฉฐ ๊ณต๋ถํ๋ค.
#include <stdio.h>
int main(void){
int n=7,i,j;
for(int i=0; i<n; i++){
for(int j=0;j<=i;j++){
printf("*");
}
printf("\n");
}
for(int i=n-1; i>0; i--){
for(int j=0;j<i;j++){
printf("*");
}
printf("\n");
}
return 0;
}
ํ์ฌ ์์ฑํ๋ ค๋ ์ด์ ๋ธ๋ฆฌ์ฝ๋๋ฅผ C์ธ์ด๋ก ํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
r10๊ณผ r9๊ฐ ๊ฐ๊ฐ j, i ์ญํ ์ด ๋๋ค.
section .data
STAR db '*'
EMPTY db 0x0a
section .text
global _start
_start:
mov rax,1 ;WRITE ์์คํ
์ฝ ์ค์
mov rdi,1 ;๊ธฐ๋ณธ ์ถ๋ ฅ ๋ชจ๋
mov rdx,1 ;์ถ๋ ฅ ๊ธธ์ด ์ค์
mov r10,0 ;์ธ๋ฑ์ค (๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ)์
mov r9,[rsp+16] ;์
๋ ฅ๋ ๋ฌธ์์ด ์ฐพ๊ธฐ
cmp r9,0 ;์
๋ ฅ์ด ์๋ ๊ฒฝ์ฐ
je _done ;ํ๋ก๊ทธ๋จ ์ข
๋ฃ
mov cl,[r9] ;์ค์ง ํ ๋ฐ์ดํธ๋ง cl์ ์ ์ฅ
movzx r9,cl ;๋ฌธ์ ํํ์ cl์ r9์ ์ ์ฅ
sub r9, 0x30 ;r9๊ฐ ์ธ๋ฑ์ค๊ฐ ๋จ
mov r8,r9
xor r9,r9
call _syscall ;์๋กญ๊ฒ ๋ง๋ค syscallํจ
_small:
cmp r10, r9
je _up;
mov rsi, STAR ;๋ณ ์ถ๋ ฅ
syscall ;์ถ๋ ฅ
mov rax,1 ;WRITE ์์คํ
์ฝ ์ค์
inc r10 ;j๋ฅผ 1 ์ฆ๊ฐ
jmp _small ;์๊ธฐ์์ ํธ์ถ
_up:
cmp r9,r8 ;i==n์ด ๋ ๊ฒฝ์ฐ
je _down ;๋ด๋ ค๊ฐ๋ ํจ์ ์คํ
mov rsi, EMPTY ;์ค๋ฐ๊ฟ ์ถ๋ ฅ
syscall
mov rax,1
mov r10,0
add r9,1
jmp _small
_down:
cmp r9,0 ;i๊ฐ 0์ด ๋ ๊ฒฝ์ฐ
je _done
mov rsi,EMPTY ;i๊ฐ 0์ด์๋๊ฒฝ์ฐ ์ค๋ฐ๊ฟ ์ค์
syscall;
mov rax, 1
mov r10,0 ;j์ด๊ธฐํ
sub r9,1 ;i๋ฅผ 1 ๊ฐ์
jmp _big ;๋ค์ ์ถ๋ ฅ
_big:
cmp r10,r9 ; i==j
je _down
mov rsi,STAR
syscall
mov rax,1
inc r10
jmp _big
_done:
mov rax,60
mov rdi,0
syscall
_syscall:
syscall
ret
_small, _big์ c์ธ์ด๋ก ์น๋ฉด ์์ for๋ฌธ์ด๊ณ ,
_up, _down์ i๊ฐ ๋ณํ๋ ๋ฐ for๋ฌธ์ด ๋๋ค.
$nasm -f elf64 -o pyramid.o pyramid.s
$ld -o pyramid pyramid.o
$ ./pyramid 7
์คํ ๊ฐ๋ฅํ ํ์ผ๋ก ๋ณ๊ฒฝ ํ ์คํ์์ผ๋ณธ๋ค.

์์ฃผ ์ ์๋ํ๋ค!
'ํ๋ก์ ํธ > ์์คํ ํดํน' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์์คํ ํดํน] ๋ฒํผ ์ค๋ฒํ๋ก์ฐ ์ทจ์ฝ์ ํดํน ์ค์ต (1) (0) | 2023.01.25 |
|---|---|
| [์์คํ ํดํน] ์ ์ฝ๋ ์ ์ ๋ฐ ์ต์คํ๋ก์ ์ค์ต (0) | 2023.01.20 |
| [์์คํ ํดํน] ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ณ ํผ๋ผ๋ฏธ๋ ๋ง๋ค๊ธฐ (1) (0) | 2023.01.18 |
| [์์คํ ํดํน] ๋๋ฒ๊น (0) | 2023.01.17 |
| [์์คํ ํดํน] ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ฐ๋ณต๋ฌธ ๊ตฌํ (0) | 2023.01.16 |