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,在乙個函式中,可指定多個 甚至全部...