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

