如何用汇编语言打印星号三角形?输出不符问题求助
汇编打印递增星号三角形的问题
问题描述
我想用汇编语言打印一个10行的星号三角形,每行星号数量从1个递增到10个,但现在输出的是每行星号从10个开始递增到20个,求修正方法。
期望输出
* ** *** **** ***** ****** ******* ******** ********* **********
当前错误输出
********** *********** ************ ************* ************** *************** **************** ***************** ****************** *******************
我的代码(未完成片段)
section .data char db ' ' trianglesize db 0; ;stars per line trianglerows db 10; section .text global _start _start mov rax, [triang
问题分析与解决方案
从你的错误输出能看出来,核心问题是当前行的星号起始值错设成了10,而不是1,导致每一行都从10个星号开始递增。我整理了一份完整的修正代码,还标注了关键调整点:
修正后的完整代码
section .data star db '*' newline db 0xA rows db 10 ; 总共要打印10行 current_stars db 1 ; 第一行先打印1个星号,初始值设为1 section .text global _start _start: mov bl, [rows] ; 用bl寄存器存剩余要打印的行数 print_row_loop: cmp bl, 0 je exit_program ; 行数打印完了就退出程序 mov cl, [current_stars] ; 用cl寄存器存当前行要打印的星号数 print_stars_loop: cmp cl, 0 je print_newline ; 这行星号打印完,就去打印换行 ; 调用sys_write打印单个星号 mov rax, 1 mov rdi, 1 mov rsi, star mov rdx, 1 syscall dec cl ; 星号数减1,继续循环打印 jmp print_stars_loop print_newline: ; 调用sys_write打印换行符 mov rax, 1 mov rdi, 1 mov rsi, newline mov rdx, 1 syscall inc byte [current_stars] ; 下一行的星号数加1 dec bl ; 剩余行数减1 jmp print_row_loop exit_program: ; 调用sys_exit退出程序 mov rax, 60 mov rdi, 0 syscall
关键调整说明
- 初始星号数修正:把
current_stars的初始值设为1,让第一行从1个星号开始,而不是10个 - 循环逻辑梳理:每次打印完一行后,星号数递增1,剩余行数递减1,确保循环10次后刚好完成从1到10的星号递增
- 补充了完整的系统调用逻辑(打印星号、换行、退出程序),让代码可以直接运行
内容的提问来源于stack exchange,提问作者Papbad
相关产品推荐
相关产品推荐

