首页 > 程序人生 > 80×86汇编基础(二)寻址模式(Addressing Modes)

80×86汇编基础(二)寻址模式(Addressing Modes)

2009年11月17日 发表评论 阅读评论

1. 8086的寄存器寻址模式(Register Addressing Modes)
mov( bx, ax ) 把寄存器bx中的值copy到寄存器ax中,注意,这里要求两个寄存器必须是相同大小的(32位,16位,8位)

2. 8086的32位寻址模式(32-Bit Memory Addressing Modes)

2.1 位移寻址(Displacement-Only Addressing)
mov( J, al ) 把内存中J的值copy到AL寄存器中
mov( dl, K ) 把DL寄存器的值copy到内存中K中

2.2 寄存器间接寻址(Register Indirect Addressing)
mov( [eax], al ) 把地址为eax的值的内存copy到AL寄存器中

2.3 下标式寻址( Indexed Addressing)
mov( VarName[ eax ], al ) 把变量VarName的地址偏移eax的值,然后把所得到的地址中的内存中的值copy到寄存器AL中
mov( [ ebx + constant ], al ) 把以ebx的值做为地址,再正向偏移constant,然后把得到的地址中的值copy到寄存器AL中
mov( [ ebx – constant ], al ) 把以ebx的值做为地址,再负向偏移constant,然后把得到的地址中的值copy到寄存器AL中
mov( VarName[ ebx + constant ], al ) 先把VarName的地址正向偏移constant, 然后再加上ebx的值,然后把得到的地址中的值copy到寄存器AL中
mov( VarName[ ebx – constant ], al ) 先把VarName的地址负向偏移constant, 然后再加上ebx的值,然后把得到的地址中的值copy到寄存器AL中

2.4 比例下标寻址(Scaled Indexed Addressing)
VarName[ IndexReg32*scale ]
VarName[ IndexReg32*scale + displacement ]
VarName[ IndexReg32*scale – displacement ]
[ BaseReg32 + IndexReg32*scale ]
[ BaseReg32 + IndexReg32*scale + displacement ]
[ BaseReg32 + IndexReg32*scale – displacement ]
VarName[ BaseReg32 + IndexReg32*scale ]
VarName[ BaseReg32 + IndexReg32*scale + displacement ]
VarName[ BaseReg32 + IndexReg32*scale – displacement ]
2.4中的比例下标寻址与2.3中的下标寻址类似,scale的取值为1,2,4,8

最后需要注意的一点是,用到[]中来做为地址值的寄存器都是32位寄存器(在我们通过所用的32位系统上,这是前提)

分类: 程序人生 标签: , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须在 登录 后才能发布评论.