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

8086汇编中BP与AX相减寻址的问题解决方法请教

解决8086汇编中栈数组[BP-AX]寻址不支持的问题

8086的寻址规则确实不允许[BP-AX]这类基址寄存器直接减去通用寄存器的形式,你可以通过以下两种通用方法解决:

方法1:先计算目标地址到通用寄存器,再间接寻址

先把BP - AX的结果存入可作为基址寄存器的BX(或SI/DI),再用该寄存器间接访问内存:

; 保留你之前的偏移计算步骤
MOV AX, 2 ; AX = idx
MOV BX, 2 ; multiplier
MUL BX    ; AX = idx * 2
MOV BX, 2 ; BX = a[0]相对于BP的偏移(2)
ADD AX, BX; AX = 总偏移量6

; 新增计算目标地址的步骤
MOV BX, BP
SUB BX, AX   ; BX = BP - 6,对应a[2]的栈地址
MOV [BX], 5  ; 完成赋值

方法2:将偏移量转为负数,用基址加偏移的形式

通过NEG指令把计算出的正偏移转为负数,再和BP相加(等价于BP减去原偏移),存入BX后访问:

; 前面的偏移计算步骤不变,得到AX=6
NEG AX       ; AX = -6
MOV BX, BP
ADD BX, AX   ; BX = BP + (-6) = BP-6
MOV [BX], 5

这两种方法都符合8086的寻址规范,且适用于所有符合作业限制(index*2≤16字节,DX=0)的场景,不管索引是常量还是变量都能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:51