1. 程式人生 > >170406 彙編-第八章資料型別、div和dup

170406 彙編-第八章資料型別、div和dup

1625-5 王子昂 總結《2017年4月6日》 【連續第187天總結】

A.彙編第八章

B.資料處理的兩個基本問題:

處理的資料在什麼地方

要處理的資料有多長

這兩個問題,必須在機器指令中給以明確或隱含的說明,否則計算機就無法工作。

在8086CPU中,只有bx,si,di和bp四個暫存器中能夠使用於[...]來進行記憶體單元的定址。

而ax,cx,dx等等都是不可以放於其中的

在[...]中,這四個暫存器可以單獨出現,也可以以bx/bp+si/di的組合出現。

不能以bx+bp或si+di的組合出現

只要在[...]中出現了bp暫存器,並且指令中沒有顯式給出段地址,那麼段地址將預設為ss暫存器的內容

機器指令不關心資料的值,只關心資料存放在哪裡。

一共有3種可能:CPU、記憶體、埠

在組合語言中表達資料的位置有3種概念:

立即數(idata)

直接包含在機器指令中的資料,(執行前在CPU的指令緩衝器中),組合語言稱之為立即數。

暫存器

段地址和偏移地址(記憶體)

8086CPU的指令可以處理兩種長度的資料,byte和word即位元組和字。

通過暫存器指明長度:

eg:ax和bx是處理字單位的資料。al和ah是處理位元組單位的資料。

在沒有暫存器名存在的情況下,用操作符X ptr指明記憶體單元的長度,X在彙編指令中可以為word或byte

eg:mov word ptr ds:[0],1

mov byte ptr ds:[0],1

另外還有一些命令預設指明瞭訪問單元的長度,例如push指令只進行字操作

定址方式的綜合運用:

在C語言中,一個結構體中的字元陣列的訪問方法為:

dec.cp[i]='x';

其中,dec表示結構體變數的地址,cp指明瞭結構體中資料項的地址,而i用來定位cp中的每一個字元

在組合語言種,一個結構化的資料包含了多個型別不同的資料項。通常,用[bx+idata+si]的方式訪問。也可以:

bx.idata[si]='x';

一般用bx定位整個結構體,idata定位某一個數據項,si定位陣列項中的每個元素。

div是除法指令,使用的時候需要注意以下幾個問題:

除數:有8位和16位兩種,在一個reg(暫存器)或記憶體單元中

被除數:預設放在AX或DX+AX中。如果除數為8位,則被除數為16位,預設存放在AX中;如果除數為16位,被除數則為32位,在DX和AX中存放,DX存放高16位,AX存放低16位

結果:如果除數為8位,則AL儲存除法操作的商,AH儲存除法操作的餘數;如果除數為16位,則AX儲存除法操作的商,DX儲存除法操作的餘數。

之前用db和dw定義位元組型資料和字型資料。dd是用來定義dword雙字型資料的,佔4個位元組。

dup是一個偽指令操作符,用來進行資料的重複。

eg:db 3 dup (0)

等價於db 0,0,0

db 3 dup (0,1,2)

等價於db 0,1,2,0,1,2,0,1,2

db 3 dup ('abc','ABC')

等價於db 'abcABCabcABCabcABC'

dup在需要申請大量空間的時候非常有用,例如100、1000個位元組的空間時,使用dup可以替代重複輸入1000次

OD設定

C.明日計劃

彙編第八章實驗,綜合複習