彙編 (七) 資料處理的兩個基本問題

2021-09-25 07:45:41 字數 3361 閱讀 4466

兩個基本問題

暫存器seg:ax,bx,cx,dx,ah,al,ch,cl,dh,dl,sp,bp,si,di;

段暫存器sreg: (segment register)ds,ss,cs,es

1.1 bx,si,di,bp

[bx]

[si]

[di]

[bp]

[bx+si]

[bx+di]

[bp+si]

[bp+di]

[bx+si+idata]

[bx+di+idata]

[bp+si+idata]

[bp+di+idata]

mov ax,[bp+si+idata]     //(ax)=((ss)*16+(bp)+(si)+idata)
1.2 機器指令處理的資料在什麼地方

指令在執行前,所要處理的資料可以在3個地方:

cpu內部,記憶體,埠。

彙編指令                       指令執行前資料的位置

mov bx,[0]                    記憶體,ds:0 單元

mov bx,ax                    cpu內部,ax暫存器

mov bx,1                      cpu內部,指令緩衝器

1.3 定址方式

可以用多種方式來給定這個記憶體單元的偏移位址,這種定位記憶體單元的方式成為   定址方式。

8086cpu定址方式如下:

定址方式

含義

名稱

[idata]

ex=idata;sa=(ds

)直接定址

[bx]

ex=(bx);sa=(ds

)暫存器間接定址

[si]

ex=(si);sa=(ds

)[di]

ex=(di);sa=(ds

)[bp

]ex=(bp);sa=(ss

)[bx+idata]

ex=(bx)+idata;sa=(ds

)暫存器相對定址

[si+idata]

ex=(si)+idata;sa=(ds

)[di+idata]

ex=(di)+idata;sa=(ds

)[bp+idata]

ex=(bp)+idata;sa=(ss

)[bx+si]

ex=(bx)+(si);sa=(ds

)基址變址定址

[bx+di]

ex=(bx)+(di);sa=(ds

)[bp

+si]

ex=(bp)+(si);sa=(ss

)[bp

+di]

ex=(bp)+(di);sa=(ss

)[bx+si+idata]

ex=(bx)+(si)+idata;sa=(ds

)相對基址變址定址

[bx+di+idata]

ex=(bx)+(di)+idata;sa=(ds

)[bp

+si+

idata]

ex=(bp)+(si)+idata;sa=(ss

)[bp

+di+

idata]

ex=(bp)+(di)+idata;sa=(ss)

1.4 指令要處理的資料有多長

在8086cpu中,可以處理兩種尺寸的資料:位元組byte 和 字word.

所以在機器指令中要指明指令進行的是字操作還是位元組操作,方法如下:

(1)通過暫存器名指明要處理的資料尺寸

下面指令中,指明了對字word進行操作:

mov ax,1

下面指令中,指明了對位元組byte進行操作:

mov al,1

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

下面指令中,word ptr 指明了指令訪問的記憶體單元是乙個字單元:

mov word ptr [bx]

下面指令中,byte ptr 指明了指令訪問的記憶體單元是乙個位元組單元:

mov byte ptr [bx]

(3)其他方法

有些指令預設訪問字單元還是位元組單元,比如push指令只對字word操作。

1.5 div指令

div是除法指令,注意以下問題:

除數:有8位和16位兩種,在乙個reg或記憶體單元中。

被除數:預設放在ax 或 dx和ax中。

如果除數為8位,被除數字16位,魔法在ax中存放。

如果除數為16位,被除數字32位,在dx和ax中存放,dx存放高16位,ax存放低16位。

結果:如果除數為8位,則al儲存除法操作的商,ah儲存除法操作的餘數。

如果除數為16位,則ax儲存除法操作的商,dx存放除法操作的餘數。

格式:div reg

div 記憶體單元

舉例:div byte ptr ds:[0]

含義:(al)=(ax)/((ds)*16+0)的商

(ah)=(ax)/((ds)*16+0)的餘數

div word ptr es:[0]

含義:(ax)=[(dx)*10000h+(ax)]/((es)*16+0)的商

(dx)=[(dx)*10000h+(ax)]/((es)*16+0)的餘數

1.6 偽指令db,dw,dd

db 1   //define 1 byte,01h

dw 1  //define 1 word,0001h

dd 1  //define 1 double word, 00000001h

1.7 dup

dup是乙個操作符,用來進行資料重複。

格式:db 重複的次數 dup (重複的位元組型資料)

dw 重複的次數 dup (重複的字型資料)

dd 重複的次數 dup (重複的雙字型資料)

舉例:db 3 dup ('abc','abc')    //定義了18個位元組,『abcabcabcabcabcabc』

彙編 資料處理的兩個基本問題

只有這四個暫存器可以用來進行暫存器間接定址 暫存器 其中,bp隨機訪問,沒有規則 四個暫存器可以單個出現,亦可以以以下組合出現 bx與si di,bp與si di bp預設段位址在ss中 1 由暫存器名指明 2 由x ptr給出 mov word ptr ds 0 1 move byte ptr d...

資料處理的兩個基本問題

計算機是進行資料處理,運算的機器,所以存在兩個問題 處理的資料的位置 處理的資料的長度 這兩個問題,必須在機器指令中給出說明 有時候是明確的,有時候是隱式的 否者計算器就無法工作。定義的描述性符號 總結 在8086中,只有這四個暫存器可以用在 中進行記憶體定址。在 中,他們可以單個出現,或者以組合形...

組合語言 資料處理的兩個基本問題

bx si di bp 在8086中只有這四個暫存器用於 bx si di bp 定址 這四個暫存器可以單獨出現或只能以四種組合出現 bx和is bx和di,bp和si,bp和di 機器指令處理的資料在什麼地方 處理大致分為三類 讀取,寫入,運算 指令執行的前一刻,計算機要處理的資料可以在三個地方 ...