一、操作數的尋址方式
立即尋址方式
格式: 操作碼 數字表達式(将資料送入寄存器中)
源操作數可以是8位也可以是16位。
MOV AH, F5H (位元組操作) F5H稱為立即數(8位操作數)
MOV AL, 8AH (位元組操作) 8AH稱為立即數
直接尋址方式
指令格式: 操作碼 寄存器(16位) , 位址表達式(将位址的内容送入寄存器中)
MOV AX,ES:[2000H] 将ES:2000H單元内容送入AX。
MOV AX,LABLE 或 MOV AX,[LABEL]将标号為LABLE(存放操作數單元的符号位址) ,即DS:LABLE中的内容送入AX。LABLE要在段定義中指明。
此時,字操作和字元操作的等效:
MOV AX,(2000H);隻需要寫低位元組位址
MOV AL,(2000H); MOV AH,(2001H)
寄存器尋址方式
格式:操作碼 寄存器,寄存器(将寄存器中的内容送入另一個寄存器)
可操作性的寄存器:
1)8 位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL
2)16 位寄存器r16:AX、BX、CX、DX、SI、DI、BP、SP
3)4個段寄存器seg: CS、DS、SS、ES
注意點
1、目的和源寄存器的 位數必須相同,不同 位數寄存器之間不能傳送資料處理 如: MOV BX,AH
如果要将資料送入段寄存器(CS、DS、ES、SS),必須先将這個數送入一個非段寄存器,然後在送到段寄存器
寄存器間接尋址方式
格式:操作碼 寄存器,(寄存器) (BX決定的存儲單元的内容送到AX寄存器 )
MOV AX, [BX] ;AX←DS:[BX]
注意點
對于BX、SI、DI,預設的段位址在DS段寄存器
對于BP,預設的段位址在SS段寄存器
實體位址計算方法:
實體位址 = (DS)×16 + (BX)或(SI)或(DI)
實體位址 = (SS)× 16 + (BP)
寄存器相對尋址方式
格式:操作碼 寄存器,相對值DISP+基址或變址寄存器
MOV AX, [SI+06H] ;AX←DS:[SI+06H]
MOV AX, 06H[SI] ;AX←DS:[SI+06H]
位址計算
DISP可以是16位,也可以是8位,DISP是一個數值的代号!
基址變址尋址方式
格式: 操作碼 寄存器,(基址寄存器)+(變址寄存器)
MOV AX, [BX+SI] ;AX←DS:[BX+SI]
MOV AX, [BX][SI] ;AX←DS:[BX+SI]
有效位址由基址寄存器(BX或BP)的内容加上變址寄存器(SI或DI)的内容構成:
有效位址=BX/BP+SI/DI
段位址對應BX基址寄存器預設是DS,對應BP基址寄存器預設是SS;可用段超越字首改變
相對基址變址尋址方式
格式:操作碼 寄存器,DISP+(基址寄存器)+(變址寄存器)
有效位址=BX/BP+SI/DI+8/16位偏移量
MOV AX, [BX+DI+6] ;AX←DS:[BX+DI+6]
MOV AX, 6[BX+DI] ; MOV AX, 6[BX][DI]
段超越
當操作數在記憶體單元時,系統根據隐含約定,自動将寄存器DS或SS的值作為段位址。然而,當操作數段位址不在隐含的段寄存器時,可以使用段超越字首取代其隐含約定。
BP預設SS,BX預設DS,通過段超越可以進行修改。
注意:不是所有的段都可做段超越字首
例題講解
指出下列指令錯誤:
1)MOV AH,BX; //一個8位,一個16位,不比對
2)MOV [SI],[BI]; //src和dst都是間接尋址,然而操作數隻能有一個是這樣的形式
3)MOV AX,[SI][DI]; //[BX/BP] [SI/D] 顯然不符合
4)MOV AX[BX][BP]; //和3同樣問題
5) MOV [BX],ES:AX; //正确的形式應該是 MOV [BX],ES:[AX] ;但是就算這樣也是錯的,錯誤原因和2一樣
6)MOV CS,AX; //CS不能通過指派改變,隻能通過跳轉指令
7)MOV DS,2000H; //正确應該是MOV AX,2000H; MOV DS,AX;
二、轉移位址的尋址方式
段内相對尋址
JMP DISP (disp:8位或16位的位址偏移量)
此時,轉移位址應該是代碼段寄存器CS内容加上指令指針IP内容,再加上相對位址位移量DISP。
段内間接尋址
JMP CX; CX的内容為轉移位址的段内偏移量
JMP WORD PTR CX
WORD PTR是尋址一個字的标記,指令中必須加上
CX的内容為新的IP值(這個與相對尋址差別開),程式轉移到新的入口處 ,CX值不能超出該段的區域
段間直接尋址
JMP FAR PTR ADD1;
ADD1為轉移位址的标号
FAR表示轉移距離大于±32K,或是不同段之間轉移。
指令操作碼後的第二個字将賦予代碼段寄存器CS,第一個字将賦予指令指針寄存器IP。最後CS内容和IP内容相加則得轉移位址。
段間間接尋址
JMP DWORD PTR[BP][DI]
段間間接尋址隻适用于存貯器尋址方式
确定轉移位址需要32位資訊 相當于兩個字,是以用DWORD,段間間接尋址隻适用于存貯器尋址方式