x86汇编使用push/pop实现循环输出A1~E5功能代码问题求助
修正后的可运行代码
.model small .stack .code m proc mov ax,0b800h mov es,ax mov di,7d0h mov ax,0731h ; ah固定为显示属性7,al为初始数字ASCII '1' push ax ; 数字状态存入栈,不占用额外通用寄存器 mov al,'A' ; al置为初始字母ASCII 'A',ah保持属性7不变 mov cx,5 x: stosw ; 写入当前字母+属性到显存 xchg ax, [sp] ; 交换ax与栈顶存储的数字状态,ax现在为数字的属性+值 stosw ; 写入当前数字+属性到显存 inc al ; 数字ASCII值递增 xchg ax, [sp] ; 交换回字母状态,更新后的数字状态重新存入栈顶 add di,158 ; 跳转至下一行对应起始位置(单行列数80*2字节 - 已写2字节=158) inc al ; 字母ASCII值递增 loop x mov ah,4ch int 21h m endp end m
实现说明
- 全程未使用
bx/dx/si等额外通用寄存器存储状态,所有临时数据全部通过栈内存存取,符合要求 - 利用
xchg ax, [sp]指令实现栈顶存储的数字状态与当前ax中字母状态的互换,无需额外寄存器中转 - 数字每次写入后递增并重新存回栈,保持状态延续,最终输出符合预期的
A1到E5序列
内容的提问来源于stack exchange,提问作者Hanson Deck
相关产品推荐
相关产品推荐

