數(shù)據(jù)處理的兩個基本問題

本章對前面的所有內(nèi)容是具有總結(jié)性的;我們知道,計算機(jī)是進(jìn)行數(shù)據(jù)處理、運(yùn)算的機(jī)器,那么有兩個基本的問題就包含在其中:

(1)處理的數(shù)據(jù)在什么地方?

(2)要處理的數(shù)據(jù)有多長?

我們定義的描述性符號:reg和sreg

為了描述上的簡潔,在以后的課程中,我們將使用兩個描述性的符號 reg來表示一個寄存器,用sreg表示一個段寄存器。

reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di;

sreg的集合包括:ds、ss、cs、es。

1.總結(jié)一下內(nèi)存單元的用法

只有這4個寄存器(bx、bp、si、di)可以用在“[…]” 中來進(jìn)行內(nèi)存單元的尋址。

正確的指令

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]

在“[…]” 中,這4個寄存器(bx、bp、si、di)可以單個出現(xiàn),或只能以四種組合出現(xiàn):bx和si、bx和di、bp和si、bp和di

錯誤的用法:

mov ax,[bx+bp]

mov ax,[si+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]

只要在[…]中使用寄存器bp,而指令中沒有顯性的給出段地址,段地址就默認(rèn)在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)

附:mov ax,[0]

mov ax,[bx]

mov ax,[bx+8]

mov ax,[bx+si]

mov ax,[bx+si+8]

段地址默認(rèn)在ds中!


mov ax,[bp]

mov ax,[bp+8]

mov ax,[bp+si]

mov ax,[bp+si+8]

段地址默認(rèn)在ss中!


mov ax,ds:[bp] 含義:(ax)=((ds)*16+(bp))

mov ax,es:[bx] 含義:(ax)=((es)*16+(bx))

mov ax,ss:[bx+si] 含義:(ax)=((ss)*16+(bx)+(si))

mov ax,cs:[bx+si+8] 含義:(ax)=((cs)*16+(bx)+(si)+8)

顯性的給出存放段地址的寄存器。


附:計算機(jī)尋址方式

指令要處理的數(shù)據(jù)有多長?

(1)通過寄存器名指明要處理的數(shù)據(jù)的尺寸。

(2)在沒有寄存器名存在的情況下,用操作符X ptr指明內(nèi)存單元的長度,X在匯編指令中可以為word或byte。

(3)其他方法

如:下面的指令中,寄存器指明了指令進(jìn)行的是字操作:

mov ax,1

mov bx,ds:[0]

mov ds,ax

mov ds:[0],ax

inc ax

add ax,1000


下面的指令中,寄存器指明了指令進(jìn)行的是字節(jié)操作:

mov al,1

mov al,bl

mov al,ds:[0]

mov ds:[0],al

inc al

add al,100


下面的指令中,用word ptr指明了指令訪問的內(nèi)存單元是一個字單元:

mov word ptr ds:[0],1

inc word ptr [bx]

inc word ptr ds:[0]

add word ptr [bx],2


下面的指令中,用byte ptr指明了指令訪問的內(nèi)存單元是一個字節(jié)單元:

mov byte ptr ds:[0],1

inc byte ptr [bx]

inc byte ptr ds:[0]

add byte ptr [bx],2


例子:假設(shè)我們用Debug查看內(nèi)存的結(jié)果如下:2000:1000 FF FF FF FF FF FF……

那么指令:

mov ax,2000H

mov ds,ax

mov byte ptr [1000H], 1

將使內(nèi)存中的內(nèi)容變?yōu)椋?000:1000 01 FF FF FF FF FF……

而指令:

mov ax,2000H

mov ds,ax

mov word ptr [1000H],1

將使內(nèi)存中的內(nèi)容變?yōu)椋?000:1000 01 00 FF FF FF FF……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容