gpt4 book ai didi

assembly - 如何在 assembly 中打印星形三角形?

转载 作者:行者123 更新时间:2023-12-02 22:13:00 24 4
gpt4 key购买 nike

我需要获得以下输出:

*
**
***
****
*****
******
*******
********
*********
**********

所以它有 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

我试了又试,但我无法得到我需要得到的东西。

由于所有这些pushpop,我似乎无法找到一种方法将行与星线分开。

说实话,我不太明白这些。有人告诉我,执行循环需要它们,但我不确定为什么,例如,在函数 star 中,我需要调用外循环。

我找不到任何有效的 pushpop 组合。我不断地得到很多星星或每行一颗星星或只有一颗星星。

我真的很困惑我要改变哪些部分并保持不变。我能够获得所需的输出,但输出永远不会停止增加。

我能够获得从 10 星开始一直到 1 星的输出,但从来都不是我想要的。

我做错了什么?这道题该怎么做?

最佳答案

您的第一行有 10 颗星,因为您在内部循环中使用了 [trianglerows]。我确定您打算使用 [trianglesize] (目前您在任何地方都没有使用)。然后在 down_triangle 中,您需要再次增加 [trianglesize] 而不是 [trianglerows]。最后,您可能希望 [trianglesize] 从 1 而不是 0 开始,即第一行有 1 颗星。

此外,请务必按照 Michael Petch 在下面的评论中所述更正您的内存使用情况,否则您的变量将被损坏,因为它们共享相同的内存。

关于assembly - 如何在 assembly 中打印星形三角形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49342767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com