微機原理 定址方式總結

2021-10-04 06:56:21 字數 3538 閱讀 8244

格式: 操作碼 數字表示式(將資料送入暫存器中)

源運算元可以是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值不能超出該段的區域

add1為轉移位址的標號

far表示轉移距離大於±32k,或是不同段之間轉移。

指令操作碼後的第二個字將賦予**段暫存器cs第乙個字將賦予指令指標暫存器ip。最後cs內容和ip內容相加則得轉移位址。

段間間接定址只適用於存貯器定址方式

確定轉移位址需要32位資訊 相當於兩個字,所以用dword,段間間接定址只適用於存貯器定址方式

這種定址方式可計算出存放轉移位址的存貯單元的首位址,與此相鄰的4個單元中,前兩個單元存放16位的段內偏移位址,而後兩單元存放的是16位的段位址

通過對運轉流程的觀察,可以確定,通過jmp操作只會對**段產生影響。

使**跳轉到我們所指定的**位址。

微機原理定址方式總結

基本格式 操作碼 目的運算元據 源運算元 表示可有可無 零運算元指令 操作碼 隱含操作物件 單運算元指令 操作碼 運算元 雙運算元指令 操作碼 運算元 運算元 多運算元指令 三個運算元及以上 a.立即定址 也就是立即數尋找,且立即數隻在源運算元。例 mov ax,1200h b.暫存器定址 參加操作...

微機原理 8086的定址方式

以mov指令為例,其格式為 mov 目的運算元,源運算元1.立即定址 可以是8位或16位,如 mov ax,1234h2.暫存器定址 運算元事先存放在暫存器中,如 mov ax,bx mov al,bl3.儲存器定址 我們將運算元的位址偏移量稱為有效位址 effective address,ea e...

微機介面原理定址方式以及8086系統常用指令

例如 例如 3.1.直接定址方式 3.2.暫存器間接定址 若有效位址存放在bp暫存器中,則運算元在堆疊段中,即運算元實體地址為 可使用段跨越字首來取得其他段中的資料,如 暫存器相對定址方式 以bp作為基址 基址變址定址方式 相對基址變址定址方式 當偏移量為16位時,則在符號位址前加操作運算子near...