如何在装配中打印星形的三角形?

Pap*_*bad 3 assembly x86-64 nasm yasm

我需要获得以下输出:

*
**
***
****
*****
******
*******
********
*********
**********
Run Code Online (Sandbox Code Playgroud)

所以它的10行,而我的星星将从1开始到10。

目前我得到:

**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************
********************
Run Code Online (Sandbox Code Playgroud)

我的代码:

*
**
***
****
*****
******
*******
********
*********
**********
Run Code Online (Sandbox Code Playgroud)

我尝试了又尝试了又尝试了,但是我无法获得所需的东西。

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

老实说,我对此不太了解。有人告诉我,执行循环需要它们,但是我不确定为什么要在函数star中调用外部循环。

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

我真的不知道要更改哪些位并保持不变。我能够获得所需的输出,但是输出从未停止增加。

我能够得到从10颗星开始下降到1颗星的输出,但是从来没有我想要的。

我究竟做错了什么?我该怎么办?

Sha*_*suk 5

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

另外,请确保按照以下评论中的Michael Petch所述纠正您的内存使用情况,否则您的变量将因为共享相同的内存而被破坏。

  • @ Ped7g:那么系统调用问题是次要的。由于OP不在使用可以以32位表示的范围之外的地址,因此如果IA32仿真位于内核中且具有“ int 0x80”,则该代码将起作用。这不是首选方法,但是它将在给定的一组约束下工作。由于OP正在输出,因此可以假定他使用的是支持IA32仿真的64位系统。因此,专注于语义和逻辑问题的沙龙对OP具有更大的价值。OP可以专注于此,然后进行清理。 (2认同)