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.明日計劃
彙編第八章實驗,綜合複習