当前位置:编程问答 > 汇编语言 >

汇编语言基本概念(续6)

前面已经讲述了几种不同的寻址方式,这些寻址方式总结出来,就在于偏移地址的表示方式,偏移地址可以用常量也可以用变量,或者常量加上变量。这些方式都是可以接收的。另外8086CPU还设置了两个独立的寄存器SI,DI用来辅助BX,这两个寄存器都是16位的,因此,不能分成两个8位,同时书写方式也同前面所述的一样,可以灵活如下:

 

image

D:\Temp\NPP593~1.BIN\tmp>debug
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=1400  ES=1400  SS=1400  CS=1400  IP=0100   NV UP EI PL NZ NA PO NC
1400:0100 0000          ADD    [BX+SI],AL                         DS:0000=CD
-d 2000:1000 BE 00 06 00 00 00
               ^ Error
-e 2000:1000 BE 00 06 00 00 00
-d 2000:1000
2000:1000  BE 00 06 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:1010  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:1020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:1030  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:1040  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:1050  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:1060  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
2000:1070  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
-a
1400:0100 mov ax,2000
1400:0103 mov ds,ax
1400:0105 mov bx,1000
1400:0108 mov si,0
1400:010B mov ax,[bx+si]
1400:010D inc si
1400:010E mov cx,[bx+si]
1400:0110 inc si
1400:0111 mov di,si
1400:0113 add cx,[bx+di]
1400:0115
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=1400  ES=1400  SS=1400  CS=1400  IP=0103   NV UP EI PL NZ NA PO NC
1400:0103 8ED8          MOV    DS,AX                             
-t

AX=2000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=2000  ES=1400  SS=1400  CS=1400  IP=0105   NV UP EI PL NZ NA PO NC
1400:0105 BB0010        MOV    BX,1000                           
-t

AX=2000  BX=1000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=2000  ES=1400  SS=1400  CS=1400  IP=0108   NV UP EI PL NZ NA PO NC
1400:0108 BE0000        MOV    SI,0000                           
-t

AX=2000  BX=1000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=2000  ES=1400  SS=1400  CS=1400  IP=010B   NV UP EI PL NZ NA PO NC
1400:010B 8B00          MOV    AX,[BX+SI]                         DS:1000=00BE
-t

AX=00BE  BX=1000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000 
DS=2000  ES=1400  SS=1400  CS=1400  IP=010D   NV UP EI PL NZ NA PO NC
1400:010D 46            INC    SI                                
-t

AX=00BE  BX=1000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0001  DI=0000 
DS=2000  ES=1400  SS=1400  CS=1400  IP=010E   NV UP EI PL NZ NA PO NC
1400:010E 8B08          MOV    CX,[BX+SI]                         DS:1001=0600
-t

AX=00BE  BX=1000  CX=0600  DX=0000  SP=FFEE  BP=0000  SI=0001  DI=0000 
DS=2000  ES=1400  SS=1400  CS=1400  IP=0110   NV UP EI PL NZ NA PO NC
1400:0110 46            INC    SI                                
-t

AX=00BE  BX=1000  CX=0600  DX=0000  SP=FFEE  BP=0000  SI=0002  DI=0000 
DS=2000  ES=1400  SS=1400  CS=1400  IP=0111   NV UP EI PL NZ NA PO NC
1400:0111 89F7          MOV    DI,SI                             
-t

AX=00BE  BX=1000  CX=0600  DX=0000  SP=FFEE  BP=0000  SI=0002  DI=0002 
DS=2000  ES=1400  SS=1400  CS=1400  IP=0113   NV UP EI PL NZ NA PO NC
1400:0113 0309          ADD    CX,[BX+DI]                         DS:1002=0006
-t

AX=00BE  BX=1000  CX=0606  DX=0000  SP=FFEE  BP=0000  SI=0002  DI=0002 
DS=2000  ES=1400  SS=1400  CS=1400  IP=0115   NV UP EI PL NZ NA PE NC
1400:0115 0000          ADD    [BX+SI],AL                         DS:1002=06
-

总结一下前面所述的寻址方式如下:

【1】[idata]用一个常量来表示地址,可以直接定义一个内存单元,在MASM中用ds:[20],段前缀

【2】[bx]用一个变量来表示内存地址,可以间接定义一个内存单元,这里除了bx之外还可以si,di

【3】[bx+idata]用一个变量加上常量来表示内存地址,可在一个起始地址的基础上用变量间接定位一个内存单元,常用的写法有idata[bx]或[idata+bx]及[bx].idata

【4】[bx+si]用两个变量来表示地址

【5】[bx+si+idata]用两个变量加一个常量来表示地址,其写法同第三个一样也有三种。

D:\Temp\NPP593~1.BIN\tmp>debug
-e 2000

补充:软件开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,