과제 축소, 하나만
*****
****
***
**
*
section .bss
buf resb 1 ; 1바이트 버퍼 선언
section .text
global _start
_start:
mov rdi, 5 ; 최대 별 개수
lea rsi, [buf]
mov ebx, edi
mov edx, edi
.loop_start: ; 반복문
mov ecx, ebx
sub ecx, edx
mov rdi, rsi
.print_space: ; 공백 출력
test ecx, ecx
jz .print_star
mov byte [rsi], ' '
inc rsi
dec ecx
jmp .print_space
.print_star: ; 별찍기
mov ecx, edx
.print_star_loop:
test ecx, ecx
jz .newline
mov byte [rsi], '*'
inc rsi
dec ecx
jmp .print_star_loop
.newline: ; 줄내림
mov byte [rsi], 10
inc rsi
dec edx
test edx, edx
jnz .loop_start
mov rdx, rsi
sub rdx, buf
mov rsi, buf
mov rax, 1
mov rdi, 1
syscall
mov rax, 60
xor edi, edi
syscall
*
공백 `` 를 출력 버퍼에 반복해서 저장합니다. 각 줄별로 필요한 공백의 수N - 현재 별의 수
를 계산하고, 그 수만큼 공백을 버퍼에 저장합니다. 위의 공백 출력 후, 남은 공간에 해당하는 별을 버퍼에 저장합니다. 각 줄의 끝마다 줄내림 문자 \\n
을 추가합니다. 완성된 버퍼 문자열을 출력하고 종료합니다.