這兩個(gè)問(wèn)題是:1、處理的數(shù)據(jù)在什么地方。2、要處理的數(shù)據(jù)有多長(zhǎng)。
在本書(shū)中
reg:register,表示非段寄存器。
sreg:segment register,表示段寄存器。
BX:Base
Mix,基址寄存器。
SI:
(Source index),源變址寄存器。
DI:(Destination?index),目的變址寄存器。
BP:(Base Pointer),基址指針寄存器。
只有這四個(gè)寄存器可以放在[]中用來(lái)表示偏移地址,并且它們可以組合出現(xiàn)。
[bp]默認(rèn)的段地址存放在SS(Stack Segment)中,當(dāng)然你也可以指定其他的段寄存器。
這類(lèi)指令按照功能分為3類(lèi)——讀取、寫(xiě)入、運(yùn)算。
被處理的數(shù)據(jù)可以存放在CPU、內(nèi)存、端口。
8.3匯編語(yǔ)言中數(shù)據(jù)位置的表達(dá)
立即數(shù):直接包含在機(jī)器指令中,實(shí)際位置在CPU指令緩沖期中的數(shù)值型數(shù)據(jù),就是上面提到的idata。
寄存器:存儲(chǔ)在寄存器中的數(shù)據(jù)。
段地址和偏移地址:……
上述3個(gè)概念表達(dá)數(shù)據(jù)的位置。
本節(jié)給出了尋址方式的概念和總結(jié),見(jiàn)表8.2。
8.5指令要處理的數(shù)據(jù)有多長(zhǎng)
8086CPU能處理的數(shù)據(jù)長(zhǎng)度只有字節(jié)和字兩種。
匯編語(yǔ)言通過(guò)如下方式指明數(shù)據(jù)長(zhǎng)度:
1、通過(guò)寄存器名。
2、X ptr指明字或者字節(jié),具體可分為word ptr和byte ptr。P163展示了它們的使用方法。
3、有些操作默認(rèn)就是字操作或者字節(jié)操作,比如說(shuō)PUSH和POP就是字操作。
[bx+idata+si]可以寫(xiě)成[bx].idata[si],[bx+idata]可以寫(xiě)成[bx].idata。
div是除法指令。
1、除數(shù),有8位和16位兩種,在一個(gè)寄存器或這內(nèi)存單元中。
2、被除數(shù),默認(rèn)放在AX,或者AX+DX。
除數(shù)是8位,被除數(shù)就應(yīng)該是16位。除數(shù)是16位被除數(shù)應(yīng)該是32位。
前者被除數(shù)存儲(chǔ)在AX中,后者高位存儲(chǔ)在DX,低位存儲(chǔ)在AX中。
3、結(jié)果,
如果除數(shù)是8位,AL存儲(chǔ)商,AH存儲(chǔ)余數(shù)。
如果除數(shù)是16位,AX存儲(chǔ)商,DX存儲(chǔ)余數(shù)。
DIV用法如下:
DIV寄存器或者內(nèi)存單元
為什么只有一個(gè)操作數(shù)呢?因?yàn)楸怀龜?shù)已經(jīng)在AX或者DX+AX中了,所以這個(gè)操作數(shù)只需要是除數(shù)即可。
P168給出了各種商和余數(shù)的計(jì)算式,很好理解,在這里我只想解釋一下下圖紅圈所示的內(nèi)容應(yīng)該如何理解:

AX是16位寄存器,DX也是16位寄存器,它們又表示一個(gè)數(shù)字,所以(dx)×10000實(shí)際上代表的是高16位。因?yàn)?進(jìn)制中每4位是一個(gè)16進(jìn)制數(shù)字,所以AX中就有4個(gè)16進(jìn)制數(shù)字,因此如果(dx)想表示高16位,那它只能用它的值×0x10000了。如果還沒(méi)反應(yīng)過(guò)來(lái),那么(es)×16也可以寫(xiě)成(es)×0x1。
dd:double
word,用來(lái)定義雙字型數(shù)據(jù)。
dup定義了一段數(shù)據(jù),這段數(shù)據(jù)可能會(huì)被重復(fù)多次。其用法如下所示:
DUP (數(shù)據(jù))
這個(gè)數(shù)據(jù)可以是字節(jié)型、字型和雙字型,它經(jīng)常和db、dw、dd搭配使用,P170給出了具體的用法。