基于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
相关产品推荐
相关产品推荐

