次の出力を取得する必要があります。
*
**
***
****
*****
******
*******
********
*********
**********
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
た。私は常に多くの星を獲得するか、1 行に 1 つの星を獲得するか、または 1 つだけの星を獲得します。
私は文字通り、どのビットを変更して同じままにしているのか困惑しています。必要な出力を得ることができましたが、増加することはありませんでした。
星 10 個から星 1 個まで出力を得ることができましたが、望んだ結果にはなりませんでした。
私は何を間違っていますか?この質問はどうすればいいですか?