1.兩個描述性的符號 reg和sreg
reg來表示乙個暫存器 ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di
sreg表示乙個段暫存器 ds、ss、cs、es
2.只有這4個暫存器(bx、bp、si、di)可以用在「[…]」 中來進行記憶體單元的定址
只要在[…]中使用暫存器bp,而指令中沒有顯性的給出段位址,段位址就預設在ss中
3.指令在執行前,所要處理的資料可以在三個地方:
cpu內部、記憶體、埠
(埠我們將在後面的課程中進行討論,cpu內部就是在暫存器中)
4.定址方式?
當資料存放在記憶體中的時候,我們可以用多種方式來給定這個記憶體單元的偏移位址,這種定位記憶體單元的方法一般被稱為定址方式。
5.8086cpu的指令,可以處理兩種尺寸的資料,byte和word:
(1)通過暫存器名指明要處理的資料的尺寸。
(2)在沒有暫存器名存在的情況下,用操作符x ptr指明記憶體單元的長度,x在彙編指令中可以為word或byte。
(3)其他方法
注意:在沒有暫存器參與的記憶體單元訪問指令中,用word ptr或byte ptr顯性地指明所要訪問的記憶體單元的長度是很必要的。
否則,cpu無法得知所要訪問的單元是字單元,還是位元組單元。
有些指令預設了訪問的是字單元還是位元組單元,比如push、pop
6.用[bx+idata+si]的方式來訪問結構體中的資料:
用bx定位整個結構體,用idata定位結構體中的某乙個資料項,用 si 定位陣列項中的每個元素 。
為此,組合語言提供了更為貼切的書寫方式。
如:[bx].idata、[bx].idata[si]
7.div 指令
div指令格式:
div reg
div 記憶體單元
(1)除數:有8位和16位兩種,在乙個reg或記憶體單元中
(2)被除數:預設放在ax或dx和ax中,如果除數為8位,被除數則為16位,預設在ax中存放;
如果除數為16位,被除數則為32位,在dx和ax中存放,dx存放高16位,ax存放低16位。
(3)結果:如果除數為8位,則al儲存出發操作的商,ah儲存除法操作的餘數;
如果除數為16位,則ax儲存除法操作的商,dx儲存除法操作的餘數。
8.偽指令 dd
dd是用來定義dword (double word雙字)型資料的。
示例:data segment
db 1
dw 1
dd 1
data ends
在data段中定義了三個資料:
第乙個資料為01h,在data:0處,佔1個位元組;
第二個資料為0001h,在data:1處,佔1個字;
第三個資料為00000001h,在data:3處,佔2個位元組;
9.dup
dup是乙個操作符,在組合語言中同db、dw、dd 等一樣,也是由編譯器識別處理的符號。
它是和db、dw、dd 等資料定義偽指令配合使用的,用來進行資料的重複。
dup的使用格式如下:
db 重複的次數 dup (重複的位元組型資料)
dw 重複的次數 dup (重複的字型資料)
dd 重複的次數 dup (重複的雙字資料)
組合語言學習筆記
學習參考資料 大灰狼 講彙編 資料匯流排,位址匯流排,控制匯流排。位址匯流排有多少條就決定了cpu最大的記憶體使用量。80386有32位位址匯流排,所以它的定址能力就是4g.暫存器 通用暫存器,段暫存器,ax暫存器 通用暫存器,存放資料。高位位元組ah,低位位元組al。實體地址表示方法 位址加法器,...
組合語言學習筆記
cs ip是指向程式執行的位置 code segment ds 儲存記憶體中取資料的位址,data segment ss sp是指向堆疊的位置 stack segment cx 裡儲存的是loop執行的標誌 loop執行時,cx cx 1,若此時cx裡值為0,則跳出loop,否則繼續loop 初始 ...
組合語言學習筆記
編譯下面的程式,生成列表檔案,觀察標號在機器碼中變成了什麼?小組中的同學都說一說,說出你看到了什麼,說出你的疑問,讓小夥伴們一起解決。下面是程式 這個程式的功能沒有意義,只用於觀察程式中的標號 assume cs codesg,ds datasg datasg segment a db 1,2,3,...