運算元直接包含在指令**中,可以是8或者16位。立即數作為指令的一部分,直接從biu指令佇列取出,因此速度更快。唯一缺點:只能作為源運算元。
指令中所需的運算元在cpu某個暫存器中,可以是8位/16位段暫存器,這個操作完全在cpu內部,因此執行也很快。
以下指令需要cpu以外的東西參與用符號或者常數表示
mov bx,var;mov bx,ds:var or mov bx,ds:var+0
mov bx,ds:[64h];常數表示要用方括號括起來,段暫存器不能省略。
事先將偏移量放在某個暫存器中(bx/bp/si/di),如同乙個位址指標。指示暫存器所在段的段暫存器可以省略,指令中使用的是bp則隱含使用ss,否則隱含使用ds
mov ax,[bx];mov ax,ds:[bx]
mov bh,[bp];mov bh,ss:[bp]
為什麼這麼規定呢?
bp是棧幀暫存器,子程式用它獲取主程式傳來的引數。很多子程式都使用堆疊傳參,所以非常有用。這也是bp最常見的用途,所以乾脆規定:bp預設就是跟ss聯用的。
ea=基址分量/變址分量+指令中給出的位移量
指令中使用bx/bp為基址定址,使用si//di為變址定址
隱含使用規則相同
mov ax,10h[si];mov ax,ds:10h[si]
mov table[di],al;mov ds:table[di],al;位移量為常數不能加方括號
這兩種定址方式只需要通過改變暫存器內容就可以用一條指令訪問不同的儲存單元,由於增加了乙個位移量資料,因此能夠很方便訪問陣列和**資料。
這是三個位址分量的和。
ea=基址+變址+偏移量
基址選用bx時隱含使用ds,選用bp時選用ss。
基址bx/bp二選一,變址si/di二選一方便訪問二維陣列
隱含使用si/di
尋找源運算元用si,目的運算元用di
傳操作完成後會自動修改si和di,指向下乙個運算元
in/out指令
如
in al,25h;
先送埠位址到dx 組合語言 80x86定址方式
1 立即定址方式 立即定址方式中指令的運算元是8位或16位立即數,並直接出現在指令中。例如 mov al,10h 源運算元為立即定址 執行後al 10h mov ax,0a48h 源運算元為立即定址 執行後ax 0a48h 立即定址只能用於源運算元,不能用於目的運算元。2 暫存器定址方式 暫存器定址...
80X86定址方式
1 與定址相關的暫存器 8086 暫存器 段暫存器cs ds es ss 基址暫存器bx bp 變址暫存器di si 專用暫存器ip sp 具體每個暫存器的作用就不仔細介紹了。80386 及其以上的暫存器 段暫存器cs ds es ss fs,gs 基址暫存器eax ebx ecx edx ebp ...
80X86定址方式總結
一 概論 擇子存放在六個段暫存器 cs,ss,ds,es,fs,gs 中 段總是由 cs 段暫存器來指示 堆疊段總是由 ss 段暫存器來指示 字元處理指令總是使用 es 段暫存器作為目標運算元的段暫存器 一般的資料段可用 ds es fs gs來指示,但 ds 作為資料段的預設段暫存器,用它來定址比...