我正在尝试通过获取用户输入的值(以改变生成的三角形的大小)并使用它来编写递减的点线来在屏幕上创建一个点三角形。
这是代码:
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
问题:
- 在运行程序时,我希望用户输入的数字用于第一行的点数。但是,当我输入任何数字时,会打印出大量的行,每行都带有一个点,然后大约一秒钟后,会打印出包含 32768 个点的行。接下来是一条有 32767 个点的线等。每条线上的点数继续减少,直到有 1 个点的线。
我注意到 32768 是 10000000_00000000 的十六进制,但除此之外我完全被卡住了,我真的很感激任何帮助!
PS我正在使用x84-64 linux并使用YASM组装