如何修改emu8086汇编金字塔程序以生成指定数字图案?
修复后的EMU8086汇编程序
你的原程序存在两个关键问题:一是包含多余的空格打印循环,二是固定打印字符'1'未随行数递增。以下是修改后的代码,可直接输出目标图案:
.model small .stack 100h .data nl db 0dh, 0ah, '$' ; 换行符 .code main proc mov ax, @data mov ds, ax mov cx, 5 ; 外层循环次数(总行数) mov bx, 1 ; 当前行要打印的数字及次数 for_1: push cx ; 保存外层循环计数器 mov cx, bx ; 设置内层循环次数(等于当前数字) mov dl, '0' ; 从ASCII'0'开始 add dl, bx ; 加上bx得到对应数字的ASCII码(1→'1',2→'2'...) mov ah, 02h ; DOS输出字符功能号 for_3: int 21h ; 打印当前数字 loop for_3 ; 内层循环,打印bx次数字 lea dx, nl ; 加载换行符地址 mov ah, 09h int 21h ; 执行换行 inc bx ; 数字加1,行数加1 pop cx ; 恢复外层循环计数器 loop for_1 ; 外层循环,执行5次 mov ah, 4ch int 21h ; 程序退出 main endp end main
修改说明
- 移除原程序中无用的
for_2空格打印循环,目标图案无需前置空格。 - 将固定的
mov dl, '1'改为从'0'出发加bx,通过ASCII码计算得到当前行对应的数字字符。 - 确保内层循环次数
cx正确设置为当前行的数字值bx,保证每行打印对应次数的数字。
内容的提问来源于stack exchange,提问作者Zeke
相关产品推荐
相关产品推荐

