組合語言_第8章 資料處理的2個基本問題
(1) 處理的資料在什麼地方? (2) 要處理的資料有多長? 為了描述上的簡潔,我們定義的描述性符號:reg 和 sreg reg,表示一個暫存器 sreg,表示一個段暫存器 reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di; sreg的集合包括:ds、ss、cs、es。
8.1 bx、si、di 和bp (1) 在8086CPU中,只有4個暫存器可以用在“[…]”中來進行記憶體單元的定址。 (2) 在[…]中,這4個暫存器可以單個出現,或只能以4種組合出現:bx和si、bx和di、bp和si、bp和di。 (3) 只要在[…]中使用暫存器bp,而指令中沒有顯性的給出段地址,段地址就預設在ss中。
8.2 機器指令處理的資料在什麼地方
-
絕大部分機器指令都是進行資料處理的指令,處理大致可分為3類:讀取、寫入、運算。
-
指令在執行前所要處理的資料可以在3個地方:CPU內部、記憶體、埠。
8.3組合語言中資料位置的表達
- 組合語言中用3個概念來表達資料的位置:
(1)立即數(idata)
對於直接包含在機器指令中的資料(執行前在CPU的指令緩衝器中),在組合語言中稱為:立即數(idata),在彙編指令中直接給出。
(2)暫存器
指令要處理的資料在暫存器中,在彙編指令中給出相應的暫存器名。
(3)段地址(SA)和偏移地址(EA)
指令要處理的資料在記憶體中,在彙編指令中可用[X]的格式給出EA,SA在某個段暫存器中。
①存放段地址的暫存器可以是預設的:
8.4 定址方式
- 當資料存放在記憶體中的時候,可以用多種方式來給定這個記憶體單元的偏移地址,這種定位記憶體單元的方法一般被稱為 定址方式。
8.5 指令要處理的資料有多長
- 8086CPU的指令,可以處理2種尺寸的資料,byte和word。所以機器指令中要指明,指令進行的是字操作還是位元組操作。 組合語言中用以下方法處理: (1)通過暫存器名指明要處理的資料的尺寸。 (2) 在沒有暫存器名存在的情況下,用操作符X ptr 指明記憶體單元的長度,X 在彙編指令中可以為word 或 byte。 (3)其他方法 有些指令默認了訪問的是字單元還是位元組單元。如,push [1000H]就不用指明訪問的是字單元還是位元組單元,因為push指令只進行字操作。
8.6 定址方式的綜合應用 修改記憶體中的內容:
8.7 div 指令
-
div:除法指令,使用div做除法的時候應注意以下問題:
(1) 除數:有8位和16位2種,在一個reg或記憶體單元中; (2) 被除數:預設放在AX或DX和AX中,如果除數為8位,被除數則為16位,預設在AX中存放;如果除數為16位,被除數則為32位,在DX和AX中存放,DX存放高16位,AX存放低16位。 (3) 結果:如果除數為8位,則AL儲存除法操作的商,AH儲存除法操作的餘數;如果除數為16位,則AX儲存除法操作的商,DX儲存除法操作的餘數;
-
格式如下: div reg div 記憶體單元
8.8 偽指令dd dd:用來定義dword(double word,雙字)型資料。 db 1 ;01H,佔1個位元組 dw 1 ;0001H 佔1個字 dd 1 ;00000001H 佔2個字
8.9 dup
-
dup是一個操作符,在組合語言中同db、dw、dd等一樣,也是由編譯器識別處理的符號。它是和db、dw、dd等資料定義偽指令配合使用的,用來進行資料的重複。
-
使用格式如下:
To be continue…