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

基于DOSBox,如何用Loop编写输出递增X序列的Assembly程序?

编写汇编循环程序输出递增X序列

需求

我已经实现了能输出A123*B123*C123*的Loop汇编程序,现在需要编写Loop程序输出如下格式的递增X序列:

X

  XX

  XXX

  XXXX

  XXXXX

已完成的参考代码(输出A123B123C123*)

main    proc 
    mov cx, 3          ; 外层循环次数设为3
    mov ah, 2          ; DOS中断21h的功能号:输出DL寄存器中的字符
    mov dl, 'A'        ; 初始化DL为字符'A'
outer:  int 21h         ; 输出当前DL中的字符(依次为A、B、C)
    push dx            ; 将当前DL的值(A/B/C)压栈保存

    mov dl, '1'        ; 设置DL为'1'并输出
    int 21h
    mov dl, '2'        ; 设置DL为'2'并输出
    int 21h
    mov dl, '3'        ; 设置DL为'3'并输出
    int 21h
    mov dl, '*'        ; 设置DL为'*'并输出
    int 21h 

    pop dx             ; 从栈中恢复DL的原值
    inc dl             ; 将DL中的字符递增(A→B,B→C)
    loop outer         ; 外层循环:CX减1,不为0则跳回outer标签
    mov ah, 4ch        ; DOS中断功能号:程序退出
    int 21h            ; 执行退出中断
main    endp

实现递增X序列的完整代码

要实现每行X数量递增的效果,需要两层嵌套循环:外层循环控制总行数(5行),内层循环控制每行输出的X个数(第n行输出n个X)。同时要处理每行开头的空格和行间隔的空行。

main    proc 
    mov si, 5          ; 用SI保存外层循环的总行数(避免被内层循环修改CX)
    mov bx, 1          ; BX记录当前行要输出的X数量,从1开始递增
outer:
    ; 输出每行开头的两个空格
    mov ah, 2
    mov dl, ' '
    int 21h
    int 21h

    ; 内层循环:输出当前行的X
    mov cx, bx         ; 设置内层循环次数为当前X的数量
inner:
    mov dl, 'X'
    int 21h            ; 输出一个X
    loop inner         ; CX减1,不为0则继续输出X

    ; 输出换行+空行(对应示例中的行间隔)
    mov dl, 0Dh        ; 回车符(CR)
    int 21h
    mov dl, 0Ah        ; 换行符(LF)
    int 21h
    mov dl, 0Dh
    int 21h
    mov dl, 0Ah
    int 21h

    inc bx             ; 下一行的X数量加1
    dec si             ; 外层循环剩余行数减1
    jnz outer          ; 行数未耗尽则继续外层循环

    mov ah, 4ch        ; 程序退出
    int 21h
main    endp

代码逻辑说明

  • 用SI存储总行数:因为内层循环会修改CX寄存器,所以外层循环的计数需要用另一个寄存器(如SI)保存,避免冲突
  • BX动态记录X数量:从1开始,每完成一行就递增1,直到达到5
  • 空格与换行处理:每行开头固定输出两个空格,每行结束后输出两次回车换行,实现示例中的空行间隔
  • 循环控制:外层循环通过dec si和jnz outer判断是否继续,内层循环用loop inner完成X的重复输出

内容的提问来源于stack exchange,提问作者an2n

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:11:04