You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

汇编语言打印星号三角形出错求助:输出不符合预期

解决你的8086汇编星号三角形输出问题

我看了你的代码,能理解你想实现每行星号递增的三角形,但代码里有几个关键逻辑和定义错误,导致输出不符合预期,下面一步步给你拆解和修正:

原代码的核心问题

  • 变量定义错误:你想用space打印空格,但space db 10,"$"里的10是换行符(LF)的ASCII码,空格的ASCII码是32(或者直接写" "),这导致你原本的缩进逻辑变成了打印换行,直接打乱了输出结构。
  • 循环逻辑混乱:l1和l2的循环条件没有对应“每行星号数量递增”的需求,bl和al的计数逻辑和循环退出条件绑定错误,导致星号打印次数不符合预期。
  • 初始化顺序不合理:你先给cl赋值,再初始化数据段ds,虽然8086不会直接报错,但标准做法是先加载数据段,确保访问数据段变量时不会出现异常。
  • 换行时机错误:你在每行星号打印前就执行换行,导致输出顺序颠倒,无法形成每行递增的三角形。

修正后的代码(左对齐星号三角形)

下面是实现你想要的* ** *** ****(每行递增)的代码,我加了详细注释:

.model small
.stack 100h
.data
newline db 10, 13, "$"  ; 换行+回车,确保光标移到下一行开头
asterisk db "*$"        ; 单个星号+结束符
space db " $"           ; 单个空格+结束符(如果需要缩进可以保留,左对齐可忽略)
.code
start:
    mov ax, @data
    mov ds, ax          ; 先初始化数据段,这是8086汇编的标准操作

    mov cx, 1           ; cx记录当前行要打印的星号数量,从1开始递增
    mov dx, 4           ; dx记录总行数,对应你要的4行输出

print_line:
    ; 内层循环:打印当前行的cx个星号
    mov bx, cx          ; 用bx做星号计数器
print_asterisks:
    lea dx, asterisk
    mov ah, 09h         ; DOS中断09h:打印字符串到$
    int 21h
    dec bx
    jnz print_asterisks ; 计数器没到0就继续打印星号

    ; 星号打印完成后换行
    lea dx, newline
    int 21h

    ; 更新下一行的参数:星号数+1,剩余行数-1
    inc cx
    dec dx
    jnz print_line      ; 还有剩余行就继续循环

exit:
    mov ah, 4ch         ; DOS中断4ch:程序退出
    int 21h
end start

代码运行效果

这段代码运行后会输出:

*
**
***
****

如果你的需求是同一行内输出* ** *** ****(用空格分隔各组星号),可以调整代码去掉换行,换成在每组星号后打印空格,修改后的核心逻辑如下:

; 替换原print_line部分
print_groups:
    mov bx, cx
print_ast_group:
    lea dx, asterisk
    mov ah, 09h
    int 21h
    dec bx
    jnz print_ast_group

    ; 每组星号后打印空格(最后一组可以跳过)
    cmp dx, 1
    je skip_space
    lea dx, space
    int 21h
skip_space:

    inc cx
    dec dx
    jnz print_groups

这样运行后会在同一行输出:* ** *** ****

逻辑说明

  1. 先初始化数据段ds,确保能正确访问.data里的变量。
  2. 用cx控制当前组/行的星号数量,从1开始逐步递增。
  3. 内层循环负责打印当前数量的星号,用bx作为计数器。
  4. 根据需求选择换行或打印空格,完成每组/行的输出。
  5. 最后调用DOS中断4ch正常退出程序。

内容的提问来源于stack exchange,提问作者Zain UL Abdeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:06:58