組合語言 知識點回顧

2021-06-07 07:47:58 字數 2814 閱讀 1584

1.什麼叫零位址指令 一位址指令 二位址指令?

指令中的位址碼字段用來指出運算元的位址。根據一條指令中所含運算元位址的數量。可分為三位址指令、雙位址指令、單位址指令和零位址指令。

零位址指令只有操作碼,沒有運算元。這種指令有兩種情況:一是無需運算元,另一種是運算元為預設的(隱含的),預設為運算元在暫存器中,指令可直接訪問暫存器。

零位址指令,如 nop, clr

一位址指令,如 inc r1

二位址指令,如 add r1, r2

三位址指令,如 add r1, r2, r3 

2.什麼叫定址方式?

定址方式就是尋找運算元運算元位址的方式。

8086提供了與運算元有關和與i/o埠位址有關的兩類定址方式。與運算元有關的定址方式有七種,分別是立即定址,

暫存器定址

,直接定址,暫存器間接定址,

暫存器相對定址

,基址加變址定址,相對基址加變址定址;與i/0埠有關的定址方式有直接埠定址和間接埠定址方式。另外還有隱含定址,即把要尋找的位址包含在操作碼中。

3.寫出與資料有關的7種定址方式,並舉例說明

運算元直接存放在指令中,緊跟在操作碼之後的定址方式就是立即數定址方式,這種定址方式的操作碼後面的位元組內容就是運算元本身,不需要在其他位址單元去取。

例如:mov ax,2345h

mov al,0eh

指令所要的運算元已儲存在某暫存器中,或把目標運算元存入暫存器。把在指令中指出所使用暫存器(即:暫存器的助憶符)的

定址方式

稱為暫存器定址方式。 

例如:mov ax,bx

add ax,bx

8086

指令系統

提供了以下5種針對儲存器的定址方式。

直接定址、暫存器間接定址、

暫存器相對定址

、基址加變址定址和相對基址加變址定址。用於說明運算元所在

儲存單元

的位址。由於匯流排介面單元biu能根據需要自動引用

段暫存器

得到段值,所以這五種方式也就是確定存放運算元的儲存單元有效位址ea的方法。有效位址ea是乙個16位的無符號數,在利用這五種方法計算有效位址時,所得的結果認為是乙個無符號數。

(1).直接定址:

指令中給出的位址碼即為運算元的有效位址,就是

直接定址方式

。例子: mov ax,[2000h] -->2000h為存放運算元單元號的符號位址

mov ax,2000h -->2000h為源運算元,立即數

上面兩者是不等效的運算元在儲存器中,運算元的有效位址用si,di,bx和bp 四個暫存器之一來指定

例子: mov ax,[bx]

計算公式: 實體地址=16d*(ds)+(bx)

實體地址=16d*(ds)+(si)

實體地址=16d*(ds)+(di)

實體地址=16d*(ss)+(bp)你就想成:你要找的"門戶號(家)"其實就在你家的樓上或者樓下,你要找到它,就 必須知道它在你樓上幾樓,或者在樓下幾樓!就ok了!

例子: mov ax,count[si]

mov ax,[count+si]

其中 count為位移量的符號位址

計算公式: 實體地址=16d*(ds)+(bx)+8位位移量

實體地址=16d*(ds)+(bx)+16位位移量

實體地址=16d*(ds)+(bx)+16位位移量

實體地址=16d*(ss)+(bp)+8位偏移量你就想成:你要找的"門戶號(家)"是跟住在同一棟樓的不同"單元號",你要找到它,就必須知道它是該棟的哪個"單元號",並且住在幾樓!那樣你就可以找到它了 !

例子: mov ax,[bx][di]

mov ax,[bx+di]

計算公式: 實體地址=16d*(ds)+(bx)+(si)

實體地址=16d*(ds)+(bx)+(di)

實體地址=16d*(ss)+(bp)+(si)

實體地址=16d*(ss)+(bp)+(di)你就想成:你要找的"門戶號(家)"是跟住在同一棟樓的不同"單元號",它比你高幾層樓或者低幾層樓,然後用的你目前的樓數+/-就可以得出你要找的住在幾樓了!

例子: mov ax,mask[bx][si]

mov ax,mask[bx+si]

mov ax,[mask+bx+si]

以上三個例子是等效的!!

計算公式: 實體地址=16d*(ds)+(bx)+(si)+8位位移量

實體地址=16d*(ds)+(bx)+(di)+16位位移量

實體地址=16d*(ss)+(bp)+(si)+8位位移量

實體地址=16d*(ss)+(bp)+(di)+16位位移量

4.暫存器間接定址,可以使用哪些暫存器作為間址暫存器? :

mov ax,[bx]

運算元的ea在基址暫存器bx,bp或者變址暫存器si,di中,而運算元的段位址在資料段ds,或堆疊段ss中。

如果有效位址由bx,si,di指出,則預設為資料段,而用bp指出則對應於堆疊段。

5.立即定址方式和暫存器定址方式的運算元有實體地址麼? :

除立即定址和暫存器定址外,無論是哪種定址方式,關鍵在於如何求出實體地址,基址或者段值+變址或者偏移量

對於立即定址和暫存器定址,相當於直接給出了運算元

。所以沒有實體地址

7.什麼是段超越?段超越字首代表什麼?

段超越字首用來改變預設段定址,通常內址定址是資料段或者堆疊段,但你可以在指令前面加上段超越字首,就可以訪問到其它段內的資料。

知識點回顧

回顧 簡介 python 安裝 python3.8.5 why?python解釋型語言,安裝python3 直譯器 lib pip命令 pip list pip install x pip uninstall 解除安裝 pip install 版本號 pip freeze requiremente....

知識點回顧

方法 變數作用域 方法過載 ref 引用傳參,側重於在方法中一定要修改引數,傳入方法前必須賦值 out 側重於輸出,方法返回前 引數使用前 必須賦值 params 可變引數,只能修飾陣列型別,只能在方法列表的最後.如果沒有給可變引數賦值,那麼可變引數會自動初始化長度為0.方法遞迴 迴圈 方法自己呼叫...

c 知識點回顧

過載只與函式的引數有關,而與函式的返回型別無關 int 形參 實參 0 char short int double 形參 實參 float double 用省略號 表示,即函式可以有任意個任意型別的引數。如,int printf const char format,在乙個函式中,可指定多個 甚至全部...