本章對前面的所有內(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)
顯性的給出存放段地址的寄存器。

指令要處理的數(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……