在汇编语言中 , 我们主要涉及了7中存储方式 , 而涉及到数据在寄存器以及存储器之间的存取以及提出的方式就要显得复杂一些 . 本文旨在以通俗的语言描述这些寻址方式之间的联系 .
在认识以及应用这些寻址方式之前 , 我们首要应当了解一个数据在寄存器当中的物理地址是怎么算的 .
物理地址由段址和段内的偏移量决定的 , 这个段址有代码段寄存器(CS) , 数据段寄存器(DS) , 堆栈段寄存器(SS) , 都可以应用 , 具体用哪个可以自己来决定 . 偏移量通常可以存放在BX , BP , SI , DI中 , 当然了 , 具体想存在哪个里面自己定义就好 . 如果要用BP , 那么默认的段地址是在SS段 , 其他的默认是在DS段 .
举个例子 : 我有一个数L , 要把这个数放在存储器中 , 然后在之后要采用寄存器间接寻址找到它 , 我们可以这样做 :
MOV AX , L
MOV SI , 2000H ; 那个2000H是我们自己定义的哟
MOV [SI] , AX ; 这样子会把我们AX寄存器中L的值存放在[SI]这个地址里 .
[SI] 表示的是物理地址 , 计算的方式就是DS*16+SI ; 当然我们也不必知道它是怎么来的 , 我们只是了解它的意义就好了 .
在之后要想再使用这个L的值的话 , 就可以这样来做:
MOV AX , [SI]
这样子我们就可以通过AX这个寄存器来进行一些运算啦 .
同样的 , 如果一个程序中需要几个不同的像L一样的变量 , 那么我们在把它们放到存储器的时候只需要给 SI 赋不同的值就行了 , 不过要记得放在哪里了哟 .
利用这样的寻址方式来进行编程虽然比立即寻址要麻烦一些 , 但是从程序执行的效率来看 , 还是要更好一些 .