組合語言學習筆記 八

2021-04-20 07:04:08 字數 1628 閱讀 5613

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,...