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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:39:00