我需要得到以下输出:
*
**
***
****
*****
******
*******
********
*********
**********
所以它有 10 行,我的星星将从 1 开始到 10。
目前我得到:
**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************
********************
我的代码:
section .data
char db ' '
trianglesize db 0; ;stars per line
trianglerows db 10;
section .text
global _start
_start
mov rax, [trianglerows] ;rows
outer_loop:
mov rbx, [trianglerows]
inner_loop:
call star
dec bx
cmp bx,0
jg inner_loop
call newline
call down_triangle
dec ax
cmp ax, 0
jne outer_loop
call newline
call exit
exit:
mov eax,1 ;sys_exit
mov ebx,0 ;return 0
int 80h;
ret
newline:
mov [char],byte 10
push rax;
push rbx;
mov eax,4; ;sys_write
mov ebx,1; ;stdout
mov ecx, char;
mov edx,1; ;size of new line
int 80h
pop rbx;
pop rax;
ret
star:
mov [char], byte '*';
push rax;
push rbx;
mov eax,4; ;sys_write
mov ebx,1; ;stdout
mov ecx, char;
mov edx,1;
int 80h;
pop rbx;
pop rax;
ret
down_triangle:
push rax;
push rbx;
mov rax, [trianglerows]
inc ax
mov [trianglerows],rax
pop rbx
pop rax
ret
我尝试了又尝试了,但我无法得到我需要得到的东西。
由于所有这些push
和pop
.
老实说,我不太了解这些。我被告知执行循环需要它们,但我不确定为什么,例如,在函数中star
我需要调用外部循环。
我找不到任何有效push
的组合pop
。我经常得到很多星或每行一颗星或只有一颗星。
我真的很困惑我正在改变哪些位并保持不变。我能够获得所需的输出,但输出永远不会增加。
我能够得到从 10 颗星开始下降到 1 颗星的输出,但从来都不是我想要的。
我究竟做错了什么?我该怎么做这个问题?