ユーザーが入力した値を取得して(結果の三角形のサイズを変えるため)、それを使用して減少するドットの行を書き込むことにより、画面上にドットの三角形を作成しようとしています。
コードは次のとおりです。
section .data
global _start
char db ' '
prompt_text db "Enter triangle size (2-99) "
prompt_length equ $-prompt_text
section .bss
tri_size resb 3
tri_size_length equ $-tri_size
section .text
_start:
call prompt
call insert_size
mov rax, [tri_size]
outer_loop:
mov rbx, [tri_size]
inner_loop:
call dot
dec bx
cmp bx, 0
jg inner_loop
call linefeed
call dec_length
dec ax
cmp ax, 0
jne outer_loop
call linefeed
call exit
prompt:
mov rax, 4
mov rbx, 1
mov rcx, prompt_text
mov rdx, prompt_length
int 80h
ret
insert_size:
mov rax, 3
mov rbx, 0
mov rcx, [tri_size]
mov rdx, tri_size_length
int 80h
ret
dot:
mov [char], byte '.'
call print_char
ret
linefeed:
mov [char], byte 10
call print_char
ret
print_char:
push rax
push rbx
push rcx
push rdx
mov rax, 4
mov rbx, 1
mov rcx, char
mov rdx, 1
int 80h
pop rdx
pop rcx
pop rbx
pop rax
ret
dec_length:
push rax
push rbx
push rcx
push rdx
mov rax, [tri_size]
dec ax
mov [tri_size], rax
pop rdx
pop rcx
pop rbx
pop rax
ret
exit:
mov rax, 1
mov rbx, 0
int 80h
問題:
- プログラムの実行時に、ユーザーが入力した数値を最初の行のドット数に使用したい。ただし、任意の数字を入力すると、それぞれに 1 つのドットを含む多数の行が印刷され、約 1 秒後に 32768 ドットを含む行が印刷されます。これに 32767 ドットのラインなどが続きます。各ラインのドット数は、1 ドットのラインまで減少し続けます。
32768 は 10000000_00000000 の 16 進数であることに気付きましたが、それ以外は完全に行き詰まっており、何か助けていただければ幸いです!
PS私はx84-64 Linuxを使用しており、YASMでアセンブルしています