組合語言學習第八章 資料處理的兩個基本問題

2021-07-11 10:29:03 字數 3663 閱讀 6868

計算機cpu進行資料處理包括兩個基本的問題:1.資料在何處?     2.資料有多大?  本章作為乙個前面內容的總結性章節,主要來說明這兩個問題。我們定義兩個符號reg和sreg。其中reg為暫存器,sreg為段暫存器

reg包括:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl,sp,bp,si,di

sreg包括:ds,ss,sp,es

8.1  bx、 si、 di和bp

1.在8086cpu只有bx,si,di以及bp這四個暫存器可以用在'[...]'中進行記憶體定址:

比如下面的指令是正確的:

mov ax,[bx]

mov ax,[bx+si]

mov ax,[bx+di]

mov ax,[bp]

mov ax,[bp+si]

mov ax,[bp+di]

下面的指令是不正確的:

mov ax,[cx]

mov ax,[ax]

mov ax,[dx]

mov ax,[ds]

2.bx,si,di以及bp 這四個暫存器只有如下四種組合。bx與si,bx與di,bp與si,bp與di

比如下面的指令是正確的:

mov ax,[bx]

mov ax,[si]

mov ax,[di]

mov ax,[bp]

mov ax,[bx+si]

mov ax,[bx+di]

mov ax,[bp+si]

mov ax,[bp+di]

mov ax,[bx+si+idata]

mov ax,[bx+di+idata]

mov ax,[bp+si+idata]

mov ax,[bp+di+idata]

下面的指令是錯誤的:

mov ax,[bx+bp]

mov ax,[si+di]

3.只要再'[....]'使用暫存器bp定址,段暫存器預設在ss中。

比如如下指令:

mov ax,[bp]            (ax)=((ss)*16+(bp))

mov ax,[bp+idata] (ax)=((ss)*16+(bp)+idata)

mov ax,[bp+si] (ax)=((ss)*16+(bp)+(si))

mov ax,[bp+si+idata] (ax)=((ss)*16+(bp)+(si)+idata)

8.2 機器指令處理的資料在什麼地方

在執行機器指令的時候,我們往往總是關心執行指令所需的資料儲存在什麼地方。資料往往儲存在三個地方:cpu內部(暫存器),記憶體以及埠。

下圖說明了指令儲存資料的位置:

8.3 組合語言中資料位置的表達

(1)立即數:

直接包涵在彙編指令中的資料稱為立即數(執行前在cpu中的指令緩衝區)

例如: mov ax,1

add bx,2000h

(2)暫存器

執行指令所需要的資料在暫存器中:

比如: mov ax,bx

push bx

(3)段位址和偏移位址

指令要處理的資料在記憶體中則需要段位址加偏移位址進行定址

段位址可以是預設給出的(預設ds):

比如:mov ax,[0](預設段位址ds)

mov ax,[di](預設段位址ds)

mov ax,[bp]

(預設段位址ss)

mov ax,[bp+si]

(預設段位址ss)

mov ax,ds:[bp]

8.4 定址方式

當資料儲存在記憶體的時候,我們有多種方法可以求得其偏移位址,求得偏移位址的方法稱為定址方式。下圖為所有的定址方式的總結。

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

如何指定要處理的資料有多大有如下方式:

1.通過暫存器指明要處理資料的大小

比如字操作: mov ax,ds:[0]

比如位元組操作: mov al,ds:[0]

2.在沒有暫存器的情況下,可以使用x ptr指明需要處理資料大小。x可以為word或byte

比如字操作: mov word ptr ds:[0],1

比如位元組操作: mov byte ptr ds:[0],1

3.有些指令預設訪問資料大小

比如 push 指令

push [1000h]預設進行字操作

8.6定址方式的綜合應用

假設乙個公司的的資料存放在seg:60h為起始位址的記憶體區域,如下:

現在要個將137改為38,將40改為70,將'pdp'改為'vax'

我們可以通過[bx+si+idata]方式來定址,同時用x ptr指定要更改資料的長度。所以核心程式如下:

8.7  div指令

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儲存餘數。

格式如下:

div reg

div 記憶體單元

比如:

div byte ptr ds:[0]

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

div word ptr [bx+si+8]

含義:(ax)=[(dx)*10000h+(ax)]/((ds)*16+(bx)+(si)+8)的商

(dx)=[(dx)*10000h+(ax)]/((ds)*16+(bx)+(si)+8)的商

8.8偽指令dd

dw,db,dd

其中dw為定義乙個字空間,db為定義乙個位元組空間,dd為定義乙個雙字的空間

8.9  dup

dup也是乙個偽指令,是由編譯器識別的。往往dup配合著dw,db,dd使用進行資料的重複。

比如:db 3 dup (0)

定義了三個位元組,它們的值都為0,相當於 db 0,0,0

db 3 dup (0,1,2)

定義了九個位元組,它們的值為0,1,2,0,1,2,0,1,2相當於 db 0,1,2,0,1,2,0,1,2

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

處理的資料在哪個地方?要處理的資料有多長?我們首先對暫存器進行乙個分類 前面三個我們已經學習過了。把這幾個放在一起,顯然是為了說記憶體定位。這四個均可以單獨定位記憶體,也可以兩兩組合,但是需要注意以下的寫法是錯的 mov ax,bx bp mov ax,si di 也就是說bx可以和si di組合,...

彙編基礎 筆記6(《組合語言》第八章)

資料處理 1.要處理的資料在什麼地方 指令執行前,可能是 cpu內部 暫存器 指令緩衝器 記憶體 埠 2.資料多長?bx,si,di,bp 只有這四個可以用在中進行定址 且只能1.單個出現 2.以四個組合出現 bx si,bx di,bp si,bp di 中出現bp,則預設段位址為ss push指...

組合語言第八章知識點總結

絕大部分機器指令都是進行資料處理的指令,可以分為讀取 寫入 運算。使用 bx 為偏移位址時,大多數情況段位址預設在ds中 使用 bp 時,段位址預設在ss中。8086cpu指令可以處理兩種尺寸資料 byte和word。指令執行的是字操作還是位元組操作。用word ptr 和 byte ptr 指明指...