8086 CPU 寻址方式

时间:2021-03-20 07:59:50

8086 CPU 寻址方式

http://blog.csdn.net/daiyutage/article/details/9141251

 

8086 CPU 寻址方式灵活。有以下几种

         idata 表示常量

       1.   [ idata ] 用一个常量来表示地址,可用于直接定位内存单元,但是在 MASM中要显实在的说明 ds 段寄存器, 比如 mov ax, ds:[0]  ,表示把 ds 寄存器中所在段的地址+偏移地址 0 的内存单元中的值赋给ax  , 不能用

mov  ax, [0] ,这样在masm 中会当作mov ax, 0,   在windows的 debug 和 nasm 中可以用 mov ax, [..] 的方式定位内存,段地址默认放在 ds 中。

     2.   [bx]  用一个变量来表示内存地址,可用于间接定位一个内存单元。 比如 mov ax, [bx] ,段地址默认放在ds 中

     3.  [bx+idata]  用一个变量加常量表示内存地址,可在一个其实地址的基础上用变量间接定位一个内存单元

        比如:

          mov  ax, [bx+idata]

          mov ax, [idata+bx]

          mov ax, idata[bx]

         都是等价的,相当于高级语言中的数组表示方法。

      4.   [bx+si] 用两个变量表示地址。

      5.   [bx+di] 等价于 [bx+si].

      6.   [bx+si+idata]  用两个变量和一个常量表示地址。

      7    [bx+di+idata] 等价于 [bx+si+idata].

 

        关于 bx,si,di,bp

      在 8086 CPU 中,只有这四个寄存器可以用在 [...] 中进行内存单元的寻址,比如

       mov  ax, [bx]

       mov ax,  [bx+si]

       mov ax, [bx+di]

       mov  ax,[ bp]

       mov ax, [bp+si]

       mov ax, [bp+di]

     在[..]中,bx,di,si,bp,可以单个出现,但是只能以四种组合方式出现

        bx和si,  bx和di,  bp和si, bp和di

       比如

       mov  ax,[bx+bp]

       mov  ax,[si+di]

       这两条指令是错误的。

     只要在[...]中使用寄存器bp, 而指令中没有显实的给出段地址,段地址默认在 ss 中

       mov ax, [bp]         段地址在 ss中

        mov ax,[bp+idata]      段地址在 ss中

       mov ax,[bp+si]           段地址在 ss中

       mov ax, [bp+si+idata]      段地址在 ss中

 

       也可以显实的指定段寄存器

             mov ax, ds:[bp]

             mov ax, es:[bx]

             mov ax, ss:[bx]

             mov ax ,cs:[bx+si]

      -------------------------------------------------------------------------------------------------        

        寻址方式总结

                寻址方式                                                                              名称

                [idata]                                                                                直接寻址

                [bx]                                                                                      寄存器间接寻址

                [si]                                                                                       寄存器间接寻址

                [di]                                                                                       寄存器间接寻址

                [bp]                                                                                      寄存器间接寻址
              

                [bx+idata]                                                                            寄存器相对寻址
                [ si+idata]                                                                            寄存器相对寻址

                [di +idata]                                                                           寄存器相对寻址

                [bp+ idata]                                                                           寄存器相对寻址

 

                [bx+si]                                                                                 基址变址寻址

                [bx+di]                                                                                 基址变址寻址

                [bp+si]                                                                                 基址变址寻址

                [bp+di]                                                                                 基址变址寻址

               

                [bx+si+idata]                                                                        相对基址变址寻址

                [bx+di+idata]                                                                        相对基址变址寻址

                [bp +si +idata]                                                                      相对基址变址寻址

                [bp+di+idata]                                                                        相对基址变址寻址