位和位微處理辦法器指令系統(tǒng)和匯編語(yǔ)言編程_第1頁(yè)
位和位微處理辦法器指令系統(tǒng)和匯編語(yǔ)言編程_第2頁(yè)
位和位微處理辦法器指令系統(tǒng)和匯編語(yǔ)言編程_第3頁(yè)
位和位微處理辦法器指令系統(tǒng)和匯編語(yǔ)言編程_第4頁(yè)
位和位微處理辦法器指令系統(tǒng)和匯編語(yǔ)言編程_第5頁(yè)
已閱讀5頁(yè),還剩193頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

位和位微處理辦法器指令系統(tǒng)和匯編語(yǔ)言編程教學(xué)目的和要求

掌握16位微處理器的尋址方式、指令系統(tǒng)及匯編語(yǔ)言編程,了解32位微處理器的指令系統(tǒng),并結(jié)合附錄A能夠掌握匯編語(yǔ)言編程的上機(jī)操作教學(xué)重點(diǎn)

16位微處理器的尋址方式、指令系統(tǒng)及匯編語(yǔ)言編程(完整段模式)

32位匯編語(yǔ)言編程(簡(jiǎn)化段模式)

教學(xué)難點(diǎn)

微處理器的尋址方式與指令系統(tǒng)匯編語(yǔ)言編程的基本概念和編程方法

4.0入門(mén)

指令通常應(yīng)提供的信息

1.做什么操作

2.操作數(shù)從哪里來(lái)

3.操作結(jié)果放在哪里

4.對(duì)于調(diào)用和轉(zhuǎn)移指令,還要涉及轉(zhuǎn)移或調(diào)用地址的提供方式指令系統(tǒng)的特點(diǎn)8086/8088的指令系統(tǒng)完全相同,都能在x86系列CPU上運(yùn)行指令的特點(diǎn)體現(xiàn)在:格式上、功能上和尋址方式可變長(zhǎng)指令,如CISC指令1~8字節(jié)尋址方式多樣靈活,處理數(shù)據(jù)能力強(qiáng)有重復(fù)指令和運(yùn)算指令,擴(kuò)充了條件指令、移位/循環(huán)指令為加強(qiáng)軟件中斷功能和支持多處理器相同的工作,增設(shè)了有關(guān)的指令,如test,wait等指令的組成操作碼(OP)字段--標(biāo)明計(jì)算機(jī)要執(zhí)行什么操作操作數(shù)(operand)字段--指出指令在執(zhí)行過(guò)程中所需要的操作數(shù)(值為多少或者放在什么地方),以及操作結(jié)果送到哪里指令的一般格式每條指令為字節(jié)的整數(shù)倍長(zhǎng)(指令規(guī)整)操作數(shù)字段可以有零個(gè)、一個(gè)、二個(gè)或三個(gè)操作數(shù),通常稱為“一地址”,“二地址”或“三地址”指令。操作碼操作數(shù)。。。操作數(shù)示例1無(wú)操作數(shù)指令(控制類(lèi)指令),如:HLTLOCKCLCCLDCLIIRET

示例2單操作數(shù)指令,如:加1指令I(lǐng)NCAX

只需要指出加1的操作數(shù),它是“一地址”指令。

雙操作數(shù)指令,如:

ADDAX,BX

大多數(shù)運(yùn)算型指令都是雙操作數(shù)指令,對(duì)這種指令,有的機(jī)器(大中型)使用“三地址”指令:除給出參加運(yùn)算的兩個(gè)操作數(shù)外,還要指出運(yùn)算結(jié)果的存放地址操作指令現(xiàn)代微型計(jì)算機(jī)中多采用二地址指令,兩個(gè)操作數(shù)分別稱為“源操作數(shù)”和“目的操作數(shù)”,指令執(zhí)行后,把運(yùn)算結(jié)果放到目的操作數(shù)的地址之中。指令的操作碼在機(jī)器中的表示比較簡(jiǎn)單,只要對(duì)每一種操作指定相應(yīng)的二進(jìn)制代碼即可;而指令的操作數(shù)字段的情形就比較復(fù)雜。編址方式計(jì)算機(jī)中的編址設(shè)備:Register、系統(tǒng)主存和I/O設(shè)備編址方式:三個(gè)零地址空間:即對(duì)上述三種設(shè)備分別進(jìn)行編址,并分別采用不同的尋址方式,很復(fù)雜,如:PC/XT兩個(gè)零地址空間:對(duì)通用寄存器R進(jìn)行獨(dú)立編址,主存和I/O統(tǒng)一編址,地址碼的地址高端用于I/O地址,64K。優(yōu)點(diǎn):簡(jiǎn)化了指令系統(tǒng)缺點(diǎn):指令執(zhí)行過(guò)程復(fù)雜編址方式一個(gè)零地址空間:三種設(shè)備統(tǒng)一編址,寄存器、主存和I/O對(duì)應(yīng)低地址到高地址無(wú)零地址空間:指堆棧計(jì)算機(jī)CACHE和BUFFER是否需要編址?

尋址方式尋址方式的定義:指令中如何提供操作數(shù)或操作數(shù)地址的方式。規(guī)定如何對(duì)地址字段作出解釋以找到操作數(shù)。

*程序轉(zhuǎn)移時(shí)需提供轉(zhuǎn)移地址,這跟提供操作數(shù)地址在方法上沒(méi)有本質(zhì)區(qū)別,因此也歸入尋址方式的范疇。

指令系統(tǒng)設(shè)計(jì)包括操作碼字段和操作數(shù)字段一個(gè)指令系統(tǒng)能夠提供哪些尋址方式,能否為編制程序提供方便,這是指令系統(tǒng)設(shè)計(jì)的關(guān)鍵。需要說(shuō)明的是,在不同的計(jì)算機(jī)系統(tǒng)中,尋址方式的名稱和分類(lèi)并不統(tǒng)一,但基本可以歸結(jié)為以下幾種方式或它們的變型或組合:尋址方式固定尋址立即尋址(立即數(shù)尋址)寄存器尋址直接尋址間接尋址變址尋址

4.18086微處理器的尋址方式與指令系統(tǒng)

4.1.1尋址方式

一條指令包含操作碼和操作數(shù)兩部分,操作碼指出該指令要進(jìn)行的操作,操作數(shù)指出該指令需要的操作數(shù)或操作數(shù)的地址。指令根據(jù)一定的方式,找到操作數(shù)或操作數(shù)的地址,然后取出操作數(shù)進(jìn)行處理。尋找操作數(shù)地址的方式稱為尋址方式

表4-18086/8088的6種尋址方式

尋址方式匯編格式操作數(shù)位置寄存器尋址R寄存器寄存器間接尋址[R]內(nèi)存變址尋址X[R]內(nèi)存基址變址尋址X[BR+IR]內(nèi)存直接尋址[EA]內(nèi)存立即尋址n內(nèi)存代碼段一、寄存器尋址匯編格式:R(R是寄存器名)說(shuō)明:尋找的操作數(shù)在寄存器R中例【4-1】INCAX

二、寄存器間接尋址

匯編格式:[R](R是寄存器名)說(shuō)明:寄存器R的內(nèi)容是操作數(shù)在內(nèi)存的EA,先從寄存器R中取出操作數(shù)在內(nèi)存的EA,再根據(jù)EA和某段寄存器生成PA尋找操作數(shù),所以稱為間接尋址。能用來(lái)作間接尋址的寄存器只能是BX、SI、DI或BP四者之一例【4-2】MOVAX,[SI]二、寄存器間接尋址(續(xù))表4-2寄存器間接尋址方式物理地址生成段段寄存器EAPA數(shù)據(jù)段DS[BX](DS)左移4位+EA[SI][DI]附加數(shù)據(jù)段ES[BX](ES)左移4位+EA[SI][DI]堆棧段SS[BP](SS)左移4位+EA三、變址尋址

匯編格式:X[R](R是寄存器名,X表示位移量,其值是用8位或16位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù))。說(shuō)明:寄存器R內(nèi)容和位移量X之和是操作數(shù)在內(nèi)存的EA。先將寄存器R中的值和位移量X相加求出操作數(shù)在內(nèi)存的EA,再根據(jù)EA和某段寄存器生成PA尋找操作數(shù)。能用來(lái)作變址尋址的寄存器只能是BX、SI、DI或BP四者之一。例【4-3】MOVBX,2[BX]

三、變址尋址(續(xù))

表4-3變址尋址方式物理地址生成段段寄存器EAPA數(shù)據(jù)段DS[BX]+X(DS)左移4位+EA[SI]+X[DI]+X附加數(shù)據(jù)段ES[BX]+X(ES)左移4位+EA[SI]+X[DI]+X堆棧段SS[BP]+X(SS)左移4位+EA四、基址變址尋址

匯編格式:X[BR+IR]或X[BR][IR](BR為基址寄存器,IR為變址寄存器,X表示位移量,其值是用8位或16位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù))說(shuō)明:基址寄存器BR、變址寄存器IR的內(nèi)容和位移量X三者之和是操作數(shù)在內(nèi)存的EA。先將寄存器BR、IR中的值和位移量X相加求出操作數(shù)在內(nèi)存的EA,再根據(jù)EA和某段寄存器生成PA尋找操作數(shù)?;芳拇嫫髦荒苡肂X或BP,變址寄存器只能用SI或DI四、基址變址尋址(續(xù))表4-3基址變址尋址方式物理地址生成段段寄存器EAPA數(shù)據(jù)段DS[BX]+[SI]+X(DS)左移4位+EA[BX]+[DI]+X附加數(shù)據(jù)段ES[BX]+[SI]+X(ES)左移4位+EA[BX]+[DI]+X堆棧段SS[BP]+[SI]+X(SS)左移4位+EA[BP]+[DI]+X五、立即尋址

匯編格式:n(n是一個(gè)常數(shù),稱為立即數(shù))說(shuō)明:指令操作碼后面單元的內(nèi)容為操作數(shù)(常數(shù)n),操作數(shù)在內(nèi)存代碼段。立即尋址所提供的操作數(shù)直接放在指令中,它是緊跟在指令操作碼后面的一個(gè)可用8位或16位二進(jìn)制補(bǔ)碼表示的有符號(hào)數(shù)。立即尋址主要用來(lái)給寄存器或內(nèi)存單元賦初值例【4-6】MOVAX,2是將立即數(shù)2送到AX中六、直接尋址

匯編格式:含有變量的地址表達(dá)式或段寄存器:[EA]

說(shuō)明:在一條指令中直接給出某一內(nèi)存單元的EA,這個(gè)EA經(jīng)過(guò)匯編后放在這條指令的下一個(gè)字單元。例【4-7】MOVAX,[2000]是將數(shù)據(jù)段中EA為2000的內(nèi)存單元中的內(nèi)容送到AX中。4.1.38086指令系統(tǒng)

一、數(shù)據(jù)傳送指令表4-6數(shù)據(jù)傳送指令類(lèi)別操作碼格式一般數(shù)據(jù)傳送指令MOVMOVOPD,OPSXCHGXCHGOPD,OPSXLATXLATOPS或XLAT4.1.38086指令系統(tǒng)

一、數(shù)據(jù)傳送指令(續(xù)1)表4-6數(shù)據(jù)傳送指令類(lèi)別操作碼格式堆棧操作指令PUSHPUSHOPSPOPPOPOPD4.1.38086指令系統(tǒng)

一、數(shù)據(jù)傳送指令(續(xù)2)表4-6數(shù)據(jù)傳送指令類(lèi)別操作碼格式標(biāo)志寄存器傳送指令PUSHFPUSHFPOPFPOPFLAHFLAHFSAHFSAHF4.1.38086指令系統(tǒng)

一、數(shù)據(jù)傳送指令(續(xù)3)表4-6數(shù)據(jù)傳送指令類(lèi)別操作碼格式地址傳送指令LEALEAOPD,OPSLDSLDSOPD,OPSLESLESOPD,OPS輸入輸出指令I(lǐng)NINOPD,OPSOUTOUTOPD,OPS4.1.38086指令系統(tǒng)

二、算術(shù)運(yùn)算指令表4-7算術(shù)運(yùn)算指令類(lèi)別操作碼格式加法指令A(yù)DDADDOPD,OPSADCADCOPD,OPSINCINCOPD4.1.38086指令系統(tǒng)

二、算術(shù)運(yùn)算指令(續(xù)1)表4-7算術(shù)運(yùn)算指令類(lèi)別操作碼格式減法指令SUBSUBOPD,OPSSBBSBBOPD,OPSDECDECOPDNEGNEGOPDCMPCMPOPD,OPS4.1.38086指令系統(tǒng)

二、算術(shù)運(yùn)算指令(續(xù)2)表4-7算術(shù)運(yùn)算指令類(lèi)別操作碼格式乘法指令MULMULOPSIMULIMULOPS除法指令DIVDIVOPSIDIVIDIVOPS4.1.38086指令系統(tǒng)

三、位操作指令

表4-8位操作指令類(lèi)別操作碼格式邏輯運(yùn)算指令NOTNOTOPDANDANDOPD,OPSTESTTESTOPD,OPSOROROPD,OPSXORXOROPD,OPS4.1.38086指令系統(tǒng)

三、位操作指令(續(xù)1)

表4-8位操作指令類(lèi)別操作碼格式算術(shù)移位指令SALSALOPD,1或SALOPD,CLSARSAROPD,1或SAROPD,CL邏輯移位指令SHLSHLOPD,1或SHLOPD,CLSHRSHROPD,1或SHROPD,CL4.1.38086指令系統(tǒng)

三、位操作指令(續(xù)2)

表4-8位操作指令類(lèi)別操作碼格式不帶進(jìn)位的循環(huán)移位指令ROLROLOPD,1或ROLOPD,CLRORROROPD,1或ROROPD,CL帶進(jìn)位的循環(huán)移位指令RCLRCLOPD,1或RCLOPD,CLRCRRCROPD,1或RCROPD,CL4.1.38086指令系統(tǒng)

四、轉(zhuǎn)移指令

轉(zhuǎn)移指令分條件轉(zhuǎn)移指令和無(wú)條件轉(zhuǎn)移指令兩大類(lèi),其特點(diǎn)是改變程序的執(zhí)行順序(即改變指令指針I(yè)P的值),但不改變狀態(tài)標(biāo)志位的狀態(tài)。條件轉(zhuǎn)移指令根據(jù)條件標(biāo)志的狀態(tài)判斷是否轉(zhuǎn)移。無(wú)條件轉(zhuǎn)移指令則不作任何判斷,無(wú)條件地轉(zhuǎn)移到指令中指明的目的地址處執(zhí)行。轉(zhuǎn)移指令共有19條,具體見(jiàn)表4-94.1.38086指令系統(tǒng)

四、轉(zhuǎn)移指令

表4-9轉(zhuǎn)移指令類(lèi)別指令名稱操作碼轉(zhuǎn)移條件簡(jiǎn)單條件轉(zhuǎn)移相等/等于0轉(zhuǎn)JE/JZZF=1不相等/不等于0轉(zhuǎn)JNE/JNZZF=0為負(fù)轉(zhuǎn)JSSF=1為正轉(zhuǎn)JNSSF=0溢出轉(zhuǎn)JOOF=1未溢出轉(zhuǎn)JNOOF=04.1.38086指令系統(tǒng)

四、轉(zhuǎn)移指令(續(xù)1)

表4-9轉(zhuǎn)移指令類(lèi)別指令名稱操作碼轉(zhuǎn)移條件簡(jiǎn)單條件轉(zhuǎn)移進(jìn)位位為1轉(zhuǎn)JCCF=1進(jìn)位位為0轉(zhuǎn)JNCCF=0偶轉(zhuǎn)移JP/JPEPF=1奇轉(zhuǎn)移JNP/JPOPF=04.1.38086指令系統(tǒng)

四、轉(zhuǎn)移指令(續(xù)2)

表4-9轉(zhuǎn)移指令類(lèi)別指令名稱操作碼轉(zhuǎn)移條件無(wú)符號(hào)數(shù)條件轉(zhuǎn)移高于轉(zhuǎn)移JA/JNBECF=0且ZF=0高于或等于轉(zhuǎn)移JAE/JNBCF=0或ZF=1低于轉(zhuǎn)移JB/JNAECF=1且ZF=0低于或等于轉(zhuǎn)移JBE/JNACF=1或ZF=14.1.38086指令系統(tǒng)

四、轉(zhuǎn)移指令(續(xù)3)

表4-9轉(zhuǎn)移指令類(lèi)別指令名稱操作碼轉(zhuǎn)移條件帶符號(hào)數(shù)條件轉(zhuǎn)移大于轉(zhuǎn)移JG/JNLESF=OF且ZF=0大于或等于轉(zhuǎn)移JGE/JNLSF=OF且ZF=1小于轉(zhuǎn)移JL/JNGESF≠OF且ZF=0小于或等于轉(zhuǎn)移JLE/JNGSF≠OF且ZF=14.1.38086指令系統(tǒng)

四、轉(zhuǎn)移指令(續(xù)4)

表4-9轉(zhuǎn)移指令類(lèi)別操作碼轉(zhuǎn)移條件無(wú)條件轉(zhuǎn)移JMP無(wú)4.1.38086指令系統(tǒng)

五、字符串操作指令

為了方便地實(shí)現(xiàn)字符串操作,8086/8088提供了字符串操作指令。只要按規(guī)定設(shè)置好初始條件,選用正確的字符串操作指令,就可完成規(guī)定的操作,這些指令的前面可加重復(fù)前綴,能在條件滿足的情況下反復(fù)執(zhí)行,而不用考慮指針如何移動(dòng)、循環(huán)次數(shù)如何控制等問(wèn)題,從而簡(jiǎn)化了程序設(shè)計(jì)。字符串操作指令在使用格式和使用方法上有許多類(lèi)似的地方,它們隱含使用的寄存器、標(biāo)志位和符號(hào)見(jiàn)表4-104.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)1)

表4-10字符串操作指令使用中的一些隱含約定

源串指示器DS:SI目的串指示器ES:DI重復(fù)次數(shù)計(jì)數(shù)器CXSCAS指令的搜索值在AL/AX中LODS指令的目的地址AL/AX4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)2)

表4-10字符串操作指令使用中的一些隱含約定

STOS指令的源地址AL/AX傳送方向DF=0,SI、DI自動(dòng)增量(用CLD指令實(shí)現(xiàn))DF=1,SI、DI自動(dòng)減量(用STD指令實(shí)現(xiàn))…SB不帶操作數(shù)的字節(jié)操作指令…SW不帶操作數(shù)的字操作指令4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)3)

系統(tǒng)規(guī)定:源串一定要在當(dāng)前數(shù)據(jù)段中,目的串只允許在當(dāng)前附加數(shù)據(jù)段中。所有的串操作指令均以寄存器間接方式訪問(wèn)源串或目的串中的各元素,并自動(dòng)修改SI和DI的內(nèi)容。若DF=0,則每次操作后,SI、DI自動(dòng)增量(字節(jié)操作加1、字操作加2);若DF=1,則每次操作后,SI、DI自動(dòng)減量(字節(jié)操作減1、字操作減2),使之指向下一個(gè)元素

4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)4)

當(dāng)指令帶有重復(fù)前綴時(shí),則指令重復(fù)執(zhí)行,每執(zhí)行一次,就檢查一次重復(fù)條件是否成立,如成立,則繼續(xù)重復(fù);否則終止重復(fù),執(zhí)行后續(xù)指令①REP:重復(fù),即無(wú)條件重復(fù)CX寄存器中指定的次數(shù)②REPE/REPZ:相等/為0時(shí)重復(fù),即(CX)≠0(重復(fù)次數(shù)還未為0)同時(shí)ZF=1(比較時(shí)相等)時(shí)重復(fù),否則,重復(fù)終止。③REPNE/REPNZ:不相等/不為0時(shí)重復(fù),即(CX)≠0(重復(fù)次數(shù)還未為0)同時(shí)ZF=0時(shí)重復(fù),否則,重復(fù)終止

4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)5)

表4-11字符串操作指令

類(lèi)別操作碼格式字符串傳送MOVSMOVSOPD,OPSMOVSBMOVSBOVSWMOVSW4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)6)

表4-11字符串操作指令

類(lèi)別操作碼格式字符串比較CMPSCMPSOPD,OPSCMPSBCMPSBCMPSWCMPSW4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)7)

表4-11字符串操作指令

類(lèi)別操作碼格式字符串搜索SCASSCASOPDSCASBSCASBSCASWSCASW4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)8)

表4-11字符串操作指令

類(lèi)別操作碼格式字符串裝入LODSLODSOPSLODSBLODSBLODSWLODSW4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)9)

表4-11字符串操作指令

類(lèi)別操作碼格式字符串存儲(chǔ)STOSSTOSOPDSTOSBSTOSBSTOSWSTOSW4.1.38086指令系統(tǒng)

五、字符串操作指令(續(xù)10)

表4-11字符串操作指令

類(lèi)別操作碼功能重復(fù)前綴REP用于字符串傳送和字符串裝入指令前REPE/REPZ用于字符串比較指令、字符串搜索指令前REPNE/REPNZ用于字符串比較指令、字符串搜索指令前4.1.38086指令系統(tǒng)

六、處理機(jī)控制指令

表4-12處理機(jī)控制指令--標(biāo)志位控制指令

格式功能STC置進(jìn)位標(biāo)志,1→CFCLC清除進(jìn)位標(biāo)志,0→CFCMC進(jìn)位標(biāo)志取反,CF求反→CFSTD置方向標(biāo)志,1→DFCLD清除方向標(biāo)志,0→DF4.1.38086指令系統(tǒng)

六、處理機(jī)控制指令(續(xù)1)

表4-12處理機(jī)控制指令--標(biāo)志位控制指令(續(xù)1)

格式功能STI置中斷標(biāo)志,1→IFCLI清除中斷標(biāo)志,0→IF4.1.38086指令系統(tǒng)

六、處理機(jī)控制指令(續(xù)2)

表4-12處理機(jī)控制指令-CPU狀態(tài)控制指令格式功能HLT處理器暫停ESCOPD,OPS交權(quán)指令,將浮點(diǎn)指令交給浮點(diǎn)處理器執(zhí)行

WAIT等待指令,8086進(jìn)入等待狀態(tài)LOCK使CPU在執(zhí)行該指令期間封鎖總線,禁止其他的總線主設(shè)備占用總線

NOP空操作4.216位匯編語(yǔ)言編程

4.2.1偽指令

在匯編源程序中使用一些固定格式的約定符號(hào),這些符號(hào)主要用來(lái)告訴匯編程序如何工作,這就是匯編控制命令,也稱偽指令。偽指令和機(jī)器指令(在中所講的指令)最大的區(qū)別有2點(diǎn)①偽指令是在匯編源程序匯編期間,被匯編程序識(shí)別并解釋。主要是為變量申請(qǐng)內(nèi)存空間、建立堆棧、告訴匯編程序從何處開(kāi)始匯編以及到何處結(jié)束等。而可執(zhí)行指令是在程序執(zhí)行期間被CPU譯碼并執(zhí)行的

4.2.1偽指令

②匯編結(jié)束后偽指令就完成任務(wù),在程序執(zhí)行期間不再考慮它,因此偽指令不翻譯成目標(biāo)碼。而可執(zhí)行指令經(jīng)匯編程序匯編后,變成機(jī)器可以識(shí)別并執(zhí)行的目標(biāo)碼一、數(shù)據(jù)定義偽指令數(shù)據(jù)定義偽指令見(jiàn)表4-13

格式:[變量名]數(shù)據(jù)定義偽指令表達(dá)式[,…]功能:定義數(shù)據(jù)存儲(chǔ)區(qū),其類(lèi)型由所使用的數(shù)據(jù)定義偽指令指定4.2.1偽指令表4-13數(shù)據(jù)定義偽指令偽指令所申請(qǐng)的字節(jié)數(shù)DB1DW2DD4DF6DQ8DT104.2.1偽指令二、符號(hào)定義偽指令

①等價(jià)偽指令格式:符號(hào)名EQU表達(dá)式功能:用來(lái)為常量、表達(dá)式及其他各種符號(hào)定義一個(gè)等價(jià)的符號(hào)名,但它并不申請(qǐng)分配存儲(chǔ)單元。如果一個(gè)常量在程序中使用非常頻繁可以用一個(gè)符號(hào)來(lái)表示它,這就是符號(hào)常量。如假定學(xué)生成績(jī)處理程序中經(jīng)常使用某班的人數(shù)用等價(jià)偽指令定義為:NEQU40。指令MOVAX,N在匯編時(shí)用40代替N變成MOVAX,404.2.1偽指令

②等號(hào)偽指令格式:符號(hào)名=表達(dá)式功能:該語(yǔ)句的功能和EQU相似,不同的是等號(hào)偽指令能對(duì)所定義的符號(hào)名再重新定義,當(dāng)使用等號(hào)語(yǔ)句連續(xù)定義同一符號(hào)名時(shí),以最后一次定義的值為準(zhǔn)

4.2.1偽指令

三、段定義偽指令

格式:段名SEGMENT[定位方式][組合方式]['類(lèi)別']┇

段名ENDS

功能:定義了一個(gè)以SEGMENT偽指令開(kāi)始,以ENDS偽指令結(jié)束,以段名命名的存儲(chǔ)段

4.2.1偽指令

說(shuō)明:①段名是程序員為該段所起的名字,用來(lái)指出為該段分配的存儲(chǔ)區(qū)起始位置。一個(gè)程序模塊可以定義為若干段,段名可以各不相同,也可以重復(fù),匯編程序?qū)⒁粋€(gè)程序中的同名段處理成一個(gè)段。段的定義可以嵌套,但不能交叉。②定位方式、組合方式和類(lèi)別是可選項(xiàng),可省略。③數(shù)據(jù)段(或附加數(shù)據(jù)段)中一般定義常量和變量,是為程序的代碼段提供數(shù)據(jù)和保存計(jì)算結(jié)果的。它的一般格式如下:

DATASEGMENT

常量或變量定義

DATAENDS

4.2.1偽指令

④堆棧段為程序定義堆棧,堆棧的大小依賴于你所編寫(xiě)的程序?qū)Χ褩5氖褂贸潭?。如果你省略堆棧段定義,當(dāng)你的程序使用堆棧時(shí),系統(tǒng)會(huì)自動(dòng)建立堆棧。并且在匯編時(shí)會(huì)出現(xiàn)一個(gè)警告:“LINK:warningL4021:nostacksegment”。對(duì)于一般的小程序可省略堆棧段定義堆棧段的一般格式如下:

STACKSEGMENTSTACK DBnDUP(0)

STACKENDS

其中n是堆棧的長(zhǎng)度,由程序員根據(jù)需要自定4.2.1偽指令

⑤代碼段是程序?qū)?shù)據(jù)進(jìn)行處理的部分。在一個(gè)程序中,數(shù)據(jù)段、堆棧段和附加數(shù)據(jù)段都可以省略,代碼段不能省略代碼段的一般格式如下:

CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK,ES:EDATA假定偽指令

START:┇ 可執(zhí)行語(yǔ)句

MOVAH,4CHINT21HCODEENDSENDSTART程序結(jié)束偽指令五、置匯編地址計(jì)數(shù)器偽指令ORG

匯編地址計(jì)數(shù)器用符號(hào)“$”表示,它用來(lái)記錄正在被匯編程序匯編的語(yǔ)句地址,也就是說(shuō)其內(nèi)容標(biāo)出了匯編程序當(dāng)前的工作位置。在一個(gè)源程序中,往往包含了多個(gè)段,匯編程序在將該源程序匯編成目標(biāo)程序時(shí),每遇到一個(gè)新段,就為該段分配一個(gè)初值為0的匯編地址計(jì)數(shù)器,然后,再對(duì)該段中的語(yǔ)句匯編。在匯編過(guò)程中,對(duì)凡是需要申請(qǐng)分配存儲(chǔ)單元的語(yǔ)句和產(chǎn)生目標(biāo)代碼的語(yǔ)句,匯編地址計(jì)數(shù)器則按該語(yǔ)句目標(biāo)代碼的長(zhǎng)度增值。因此,段內(nèi)定義的所有標(biāo)號(hào)和變量的偏移地址就是當(dāng)前匯編地址計(jì)數(shù)器的值。匯編地址計(jì)數(shù)器符號(hào)“$”可出現(xiàn)在表達(dá)式中

4.2.1偽指令

匯編地址計(jì)數(shù)器的值可以用偽指令ORG進(jìn)行設(shè)置。格式:ORG數(shù)值表達(dá)式功能:將匯編地址計(jì)數(shù)器設(shè)置成數(shù)值表達(dá)式的值。其中,數(shù)值表達(dá)式的值應(yīng)為非負(fù)的整數(shù),其值在0~65535之間

例【4-15】匯編地址計(jì)數(shù)器和偽指令ORG舉例

DATASEGMENT ORG4 BUFDB'readme' ORG$+5 NUMDB-2 DATAENDS4.2.2匯編語(yǔ)言中的常量、變量及標(biāo)號(hào)

一、常量常量是指在程序執(zhí)行期間不變的量。在8086/8088宏匯編語(yǔ)言中可使用的常量見(jiàn)表4-14。常量主要用于偽指令中給變量賦初值,或者用作機(jī)器指令語(yǔ)句中的立即操作數(shù)、變址尋址和基址變址尋址中的位移量。常量一般可以直接以數(shù)值形式出現(xiàn)在匯編語(yǔ)句中,這種常量稱數(shù)值常量。但對(duì)經(jīng)常使用的數(shù)值常量,可以事先為它定義一個(gè)名字,然后在語(yǔ)句中用名字來(lái)表示該常量,這種常量稱符號(hào)常量。偽指令EQU和等號(hào)“=”可用來(lái)實(shí)現(xiàn)將數(shù)值常量定義成符號(hào)常量

4.2.2匯編語(yǔ)言中的常量、變量及標(biāo)號(hào)表4-148086/8088宏匯編語(yǔ)言中所使用的常量常量分類(lèi)格式X的取值舉例二進(jìn)制常量XX…XB0或101000001B八進(jìn)制常量XX…XOXX…XQ0~71234Q十進(jìn)制常量XX…XXX…XD0~9123,123D十六進(jìn)制常量XX…XH0~9A~F1234H,0A12FH字符常量'XX…X'"XX…X"ASCII字符'0123'"readme"4.2.2匯編語(yǔ)言中的常量、變量及標(biāo)號(hào)二、變量

在匯編語(yǔ)言中,變量是一個(gè)數(shù)據(jù)單元的名字,即數(shù)據(jù)存放地址的符號(hào)表示。它有3個(gè)屬性:①變量的段屬性。指變量所在段的首地址,當(dāng)需要訪問(wèn)該變量時(shí),它所在段的首地址一定要在某一段寄存器中②變量的偏移屬性。指變量所在段的首地址到變量所在的存儲(chǔ)單元之間的距離,用字節(jié)數(shù)表示。它表示變量在某段的相對(duì)位置,也就是我們所說(shuō)的偏移地址(或有效地址)EA③變量的類(lèi)型。指存取某變量所需要的字節(jié)數(shù)

變量的定義格式如下:

[變量名]數(shù)據(jù)定義偽指令表達(dá)式[,…]

匯編語(yǔ)言中的符號(hào)常量名、變量名、段名、過(guò)程名、標(biāo)號(hào)都稱為標(biāo)識(shí)符。標(biāo)識(shí)符是由字母、數(shù)字(0~9)、特殊字符(?、.、@、_、$)等組成的字符串,但該字符串不能以數(shù)字或下劃線‘_’作為開(kāi)始字符。標(biāo)識(shí)符最大長(zhǎng)度不能超過(guò)31個(gè)字符,并且匯編語(yǔ)言對(duì)字母的大寫(xiě)和小寫(xiě)沒(méi)有統(tǒng)一要求,也就是說(shuō),匯編語(yǔ)言對(duì)標(biāo)識(shí)符中字母的大寫(xiě)和小寫(xiě)不作區(qū)分,如ABC、aBc、Abc和aBC都認(rèn)為是同一個(gè)標(biāo)識(shí)符。注意不能使用匯編語(yǔ)言的保留字如算術(shù)運(yùn)算指令名ADD、SUB等做標(biāo)識(shí)符:①數(shù)值表達(dá)式②ASCII字符串(只有用DB定義變量時(shí),才允許字符串長(zhǎng)度超過(guò)2個(gè)字符)③地址表達(dá)式。如果該地址表達(dá)式為一變量(或標(biāo)號(hào))名,用DW偽指令是取它的偏移地址來(lái)初始化變量,用DD偽指令是取它的段首址和偏移地址來(lái)初始化變量

表達(dá)式的幾種方式④?(表示所定義的變量初值不確定)⑤重復(fù)子句格式:nDUP(表達(dá)式)其中,n是重復(fù)因子,只能取正整數(shù),它表示定義了n個(gè)存儲(chǔ)單元,其類(lèi)型由它前面的數(shù)據(jù)定義偽指令確定。而每個(gè)存儲(chǔ)單元中的初值由DUP后面圓括號(hào)中的表達(dá)式給定,如果是“?”,則表示變量的初值不確定⑥可以是以上表達(dá)式組成的序列,各表達(dá)式之間用逗號(hào)隔開(kāi)例【4-16】有下面的數(shù)據(jù)段,畫(huà)出其內(nèi)存分配圖DATASEGMENTTABLEDB1,2,3,2DUP(6,-2)COUNTEREQU$-TABLEVARYDW1234HCHARDB’123’,3DUP(1)POINTER1DWVARYPOINTER2DDCHARDATAENDS

標(biāo)號(hào)是機(jī)器指令語(yǔ)句存放地址的符號(hào)表示,也可以是過(guò)程名。過(guò)程名實(shí)際上是過(guò)程入口地址的符號(hào)表示,即過(guò)程第一條機(jī)器指令語(yǔ)句的存放地址標(biāo)號(hào)的用法有兩種:①在代碼段某一指令的前面,是當(dāng)前一條指令語(yǔ)句地址的符號(hào)表示,用來(lái)提供一個(gè)轉(zhuǎn)移地址,讓其他的指令向此指令轉(zhuǎn)移,一般的機(jī)器指令語(yǔ)句前不需要標(biāo)號(hào)②用來(lái)表示過(guò)程入口地址

三、標(biāo)號(hào)4.2.3匯編語(yǔ)言中的運(yùn)算符號(hào)和表達(dá)式

數(shù)值表達(dá)式是利用算術(shù)、邏輯、移位或關(guān)系運(yùn)算符將常量連結(jié)在一起構(gòu)成的表達(dá)式,它的運(yùn)算結(jié)果是一個(gè)數(shù)值①算術(shù)運(yùn)算符共有+、-、*、/、MOD5個(gè),其中*、/、MOD優(yōu)先級(jí)相同,+、-優(yōu)先級(jí)相同,并且*、/、MOD優(yōu)先級(jí)高于+、-??衫美ㄌ?hào)改變一個(gè)表達(dá)式某一部分的優(yōu)先級(jí)。MOD是取余數(shù),如7MOD3的值是1②邏輯運(yùn)算符有AND、OR、XOR、NOT4個(gè),分別是邏輯與、邏輯或、邏輯異或、邏輯非。邏輯運(yùn)算是按位進(jìn)行的,所以運(yùn)算的結(jié)果仍是整數(shù)常量一、數(shù)值表達(dá)式

③移位運(yùn)算符有左移SHL和右移SHR2個(gè)運(yùn)算符。SHL表示將常量左移運(yùn)算符右邊常量規(guī)定的次數(shù),SHR表示將常量右移運(yùn)算符右邊常量規(guī)定的次數(shù),所空的位補(bǔ)0④關(guān)系運(yùn)算符有EQ、NE、GT、LT、GE、LE共6個(gè)運(yùn)算符,分別是等于、不等于、大于、小于、大于或等于、小于或等于。關(guān)系運(yùn)算的結(jié)果是兩個(gè)特殊的量,若關(guān)系不成立,則結(jié)果為0;否則為0FFFFH

地址表達(dá)式的值是段內(nèi)偏移地址,它具有段、偏移地址及類(lèi)型三個(gè)屬性。地址表達(dá)式是由變量、常量、標(biāo)號(hào)、寄存器和運(yùn)算符組成的有意義的式子地址表達(dá)式除可使用數(shù)值表達(dá)式的運(yùn)算符外,還可根據(jù)需要使用一些特殊運(yùn)算符二、地址表達(dá)式

用來(lái)指明某個(gè)變量、標(biāo)號(hào)或地址表達(dá)式的類(lèi)型屬性,或者使它臨時(shí)兼有與原定義所不同的類(lèi)型屬性,但保持它們?cè)瓉?lái)的段屬性和偏移地址屬性不變。其格式是:類(lèi)型PTR地址表達(dá)式根據(jù)地址表達(dá)式的不同值,類(lèi)型可以是BYTE、WORD、DWORD、NEAR、FAR

1.類(lèi)型運(yùn)算符PTR

為了將源程序中的指令正確地翻譯成目標(biāo)代碼,匯編程序要求每個(gè)語(yǔ)句中操作數(shù)的類(lèi)型要明確,如果是雙操作數(shù)指令,還要求源操作數(shù)和目的操作數(shù)類(lèi)型一致,既同時(shí)為字節(jié)類(lèi)型或同時(shí)為字類(lèi)型。下面分4種情況說(shuō)明:①對(duì)于單操作數(shù)指令,操作數(shù)的類(lèi)型必須明確②對(duì)于雙操作數(shù)指令,只要有一個(gè)操作數(shù)類(lèi)型明確就可以了③如果兩個(gè)操作數(shù)類(lèi)型都明確,則它們的類(lèi)型必須一致④如果兩個(gè)操作數(shù)類(lèi)型都不明確,就要用PTR來(lái)指定類(lèi)型了

跨段前綴“:”用于臨時(shí)給變量、標(biāo)號(hào)或地址表達(dá)式指定一個(gè)段屬性,且只能在所出現(xiàn)的語(yǔ)句中有效,它并不改變地址表達(dá)式的偏移地址和類(lèi)型屬性,它的格式是:①段寄存器名:地址表達(dá)式,②段名:地址表達(dá)式

MOVAX,[SI]等價(jià)于MOVAX,DS:[SI],默認(rèn)從數(shù)據(jù)段中取數(shù)據(jù)。若改為MOVAX,ES:[SI],則從附加數(shù)據(jù)段中取數(shù)據(jù)

2.跨段前綴“:”

屬性分離運(yùn)算符可分離出變量、標(biāo)號(hào)的段、偏移地址及類(lèi)型的屬性值。其格式是:分離運(yùn)算符變量或標(biāo)號(hào),運(yùn)算結(jié)果是一個(gè)數(shù)值常量

3.屬性分離運(yùn)算符

①段屬性分離運(yùn)算符SEG。該運(yùn)算符分離出其后變量或標(biāo)號(hào)所在段的首地址②偏移屬性分離運(yùn)算符OFFSET。該運(yùn)算符分離出其后變量或標(biāo)號(hào)的偏移地址

③類(lèi)型分離運(yùn)算符TYPE

該運(yùn)算符取其后變量或標(biāo)號(hào)的類(lèi)型。如果是變量,其類(lèi)型值由變量的類(lèi)型確定,某一變量類(lèi)型的類(lèi)型值和該變量在內(nèi)存中所占的字節(jié)數(shù)相同

①取變量所含的數(shù)據(jù)存儲(chǔ)單元個(gè)數(shù)運(yùn)算符LENGTH,格式:LENGTH變量。它的取值根據(jù)定義該變量時(shí),數(shù)據(jù)定義偽指令后面第一個(gè)表達(dá)式的形式而定,如果第一個(gè)表達(dá)式為重復(fù)子句“nDUP(表達(dá)式)”,則取值為前面的重復(fù)因子n,如果為其他形式的表達(dá)式,則取值為1

②取變量所含的數(shù)據(jù)存儲(chǔ)區(qū)大小運(yùn)算符SIZE,格式:SIZE變量。它的取值為:LENGTH變量*TYPE變量,也就是說(shuō),它的取值是一個(gè)變量所占內(nèi)存的實(shí)際字節(jié)數(shù)

4.其他運(yùn)算符③字節(jié)分離運(yùn)算符HIGH和LOW格式:HIGH常量或地址表達(dá)式;LOW常量或地址表達(dá)式其中,HIGH分離出其后常量或地址表達(dá)式的高8位,LOW分離出其后常量或地址表達(dá)式的低8位。匯編語(yǔ)言中的常用的運(yùn)算符的優(yōu)先級(jí)見(jiàn)表4-17。4.2.4順序與分支程序的設(shè)計(jì)

順序型結(jié)構(gòu)程序的特征是在程序的指令中無(wú)轉(zhuǎn)移指令,計(jì)算機(jī)從程序的第一條指令開(kāi)始順序執(zhí)行,直到程序的最后一條指令為止

例【4-29】在一個(gè)表中存放著0到9十個(gè)數(shù)字的立方值,編程從鍵盤(pán)輸入0到9之間的任意一個(gè)數(shù),查表找出這個(gè)數(shù)的立方值4.2.4順序與分支程序的設(shè)計(jì)

有分支控制的程序結(jié)構(gòu)稱為分支型結(jié)構(gòu)(或稱選擇結(jié)構(gòu))。分支型結(jié)構(gòu)可分為二分支型結(jié)構(gòu)和多分支型結(jié)構(gòu)。在分支程序中,不同的條件往往是通過(guò)標(biāo)志寄存器中條件標(biāo)志的不同狀態(tài)反映的。因此分支程序設(shè)計(jì)中一個(gè)至關(guān)重要的問(wèn)題是根據(jù)各標(biāo)志的不同狀態(tài)選用合適的轉(zhuǎn)移指令。轉(zhuǎn)移指令分條件轉(zhuǎn)移指令和無(wú)條件轉(zhuǎn)移指令兩大類(lèi)

一、條件轉(zhuǎn)移語(yǔ)句格式:[標(biāo)號(hào):]操作符短標(biāo)號(hào)功能:如果條件滿足,則(IP)+位移量→IP4.2.4順序與分支程序的設(shè)計(jì)

在轉(zhuǎn)移指令中,位移量為當(dāng)前(IP)到轉(zhuǎn)移目的地址處的字節(jié)距離。如果當(dāng)前(IP)到某標(biāo)號(hào)(即轉(zhuǎn)移的目的地址)的位移量在-128~127之間,則該標(biāo)號(hào)稱為短標(biāo)號(hào)。當(dāng)位移量為正時(shí),表示向前轉(zhuǎn);當(dāng)位移量為負(fù)時(shí),表示向后轉(zhuǎn),條件轉(zhuǎn)移指令的目的地址均是短標(biāo)號(hào)條件轉(zhuǎn)移指令共有18條,分成以下三類(lèi)

1.簡(jiǎn)單條件轉(zhuǎn)移指令共有10條,根據(jù)單個(gè)標(biāo)志的狀態(tài)決定是否轉(zhuǎn)移

2.無(wú)符號(hào)數(shù)條件轉(zhuǎn)移指令共有4條,根據(jù)多個(gè)標(biāo)志的狀態(tài)決定是否轉(zhuǎn)移,這類(lèi)指令將比較對(duì)象視為無(wú)符號(hào)數(shù)

3.帶符號(hào)數(shù)條件轉(zhuǎn)移指令共有4條,根據(jù)多個(gè)標(biāo)志的狀態(tài)決定是否轉(zhuǎn)移,這類(lèi)指令將比較對(duì)象視為帶符號(hào)數(shù)4.2.4順序與分支程序的設(shè)計(jì)

二、無(wú)條件轉(zhuǎn)移無(wú)條件轉(zhuǎn)移指令使CPU無(wú)條件地轉(zhuǎn)移到指令中指明的目的地址處執(zhí)行,在程序中用它將各分支的出口重新匯集到一起構(gòu)成多分支結(jié)構(gòu),特別是當(dāng)條件轉(zhuǎn)移指令的轉(zhuǎn)移范圍超過(guò)-128~127個(gè)字節(jié)時(shí),往往要借助無(wú)條件轉(zhuǎn)移指令實(shí)現(xiàn)4.2.4順序與分支程序的設(shè)計(jì)

無(wú)條件轉(zhuǎn)移指令和要轉(zhuǎn)移的目的地址可以在同一段,也可以在另一段。前者稱為段內(nèi)轉(zhuǎn)移,后者稱為段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移指令只改變指令指針I(yè)P的內(nèi)容,而段間轉(zhuǎn)移指令則要同時(shí)改變指令指針I(yè)P和代碼段寄存器的內(nèi)容。無(wú)條件轉(zhuǎn)移指令可通過(guò)各種尋址方式得到要轉(zhuǎn)移的目的地址,常用的有直接尋址和間接尋址兩種,表4-18列出了無(wú)條件轉(zhuǎn)移指令的格式和功能說(shuō)明無(wú)條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令有兩點(diǎn)重要區(qū)別:一是前者的轉(zhuǎn)移是無(wú)條件的,不做任何判斷便轉(zhuǎn)向目的單元;二是前者的轉(zhuǎn)移范圍不受限制,而后者只能在-128~127個(gè)字節(jié)范圍內(nèi)轉(zhuǎn)移4.2.4順序與分支程序的設(shè)計(jì)例【4-30】編程實(shí)現(xiàn)符號(hào)函數(shù)

4.2.4順序與分支程序的設(shè)計(jì)

對(duì)于多路分支的程序,如果直接用條件轉(zhuǎn)移指令實(shí)現(xiàn),那么N路分支,就需要N-1條條件轉(zhuǎn)移指令,程序顯得冗長(zhǎng)繁瑣,可用跳轉(zhuǎn)表來(lái)實(shí)現(xiàn)多路分支例【4-31】對(duì)學(xué)生的成績(jī)分類(lèi),分類(lèi)標(biāo)準(zhǔn)見(jiàn)表4-19。下面的程序是由入口地址組成跳轉(zhuǎn)表的多路分支程序4.2.5循環(huán)程序設(shè)計(jì)

循環(huán)型結(jié)構(gòu)有REPEAT-UNTIL模式(見(jiàn)圖4-8)和WHILE模式(見(jiàn)圖4-9)。

4.2.5循環(huán)程序設(shè)計(jì)

REPEAT-UNTIL和WHILE兩種模式的共同點(diǎn)是都有初始化部分、工作部分、調(diào)整部分和控制部分。這四部分的作用是:①初始化部分,又稱循環(huán)的預(yù)置部分。在循環(huán)體工作之前,把工作變量(保存中間結(jié)果或最后結(jié)果)、控制變量(控制循環(huán)是否結(jié)束)、地址單元、工作寄存器等置初值,為循環(huán)做好準(zhǔn)備,初始化工作可保征循環(huán)程序在正確的初始狀態(tài)下工作②工作部分,這是整個(gè)循環(huán)程序的核心部分,它由需要重復(fù)操作的指令序列組成,工作部分隨求解問(wèn)題所采用的算法不同而異

③調(diào)整部分,為了保證工作部分每次在新的意義下工作,每執(zhí)行一次工作部分,必須對(duì)操作數(shù)或操作數(shù)地址進(jìn)行修改,為下一次循環(huán)作準(zhǔn)備,同時(shí)控制變量也作相應(yīng)的調(diào)整,為控制部分的條件判定作準(zhǔn)備。例如利用計(jì)數(shù)來(lái)控制的循環(huán),每循環(huán)一次,計(jì)數(shù)值都要調(diào)整(增加或減少),控制部分根據(jù)計(jì)數(shù)器的值來(lái)決定是否退出循環(huán)。通常的循環(huán)結(jié)構(gòu)是調(diào)整和工作部分同步工作,工作部分和調(diào)整部分合在一起,統(tǒng)稱為循環(huán)體。④控制部分:為了能在正確的時(shí)機(jī)退出循環(huán),要有出口測(cè)試,控制部分是用來(lái)控制循環(huán)程序是繼續(xù)執(zhí)行還是終止??刂撇糠质菍?duì)修改過(guò)的控制變量進(jìn)行測(cè)試,若達(dá)到預(yù)定要求,則循環(huán)結(jié)束,否則循環(huán)繼續(xù)執(zhí)行??刂撇糠指鶕?jù)實(shí)際情況可分為計(jì)數(shù)控制(又分為正計(jì)數(shù)和倒計(jì)數(shù))和條件控制兩種

4.2.5循環(huán)程序設(shè)計(jì)

REPEAT-UNTIL和WHILE兩種模式的區(qū)別是,REPEAT-UNTIL模式是先執(zhí)行循環(huán)體,再判斷條件是否成立,因此對(duì)于REPEAT-UNTIL模式不管條件是否成立循環(huán)體至少執(zhí)行一次;WHILE模式是先判斷條件是否成立再執(zhí)行循環(huán)體,因此對(duì)于WHILE模式循環(huán)體可能一次也得不到執(zhí)行

4.2.5循環(huán)程序設(shè)計(jì)

例【4-32】已知有N個(gè)數(shù)據(jù)存放在以BUF為首地址的字節(jié)存儲(chǔ)區(qū)中,編程統(tǒng)計(jì)其中負(fù)數(shù)的個(gè)數(shù)。

在本例中,用到了三個(gè)寄存器,這三個(gè)寄存器的功能分別是:

AX:累加器,用來(lái)累加BUF中負(fù)數(shù)的個(gè)數(shù),初值為0

BX:地址寄存器,用來(lái)指示BUF的地址,初值為BUF的首地址

CX:計(jì)數(shù)器,用計(jì)數(shù)方式控制循環(huán)何時(shí)結(jié)束,初值為BUF的長(zhǎng)度N

4.2.5循環(huán)程序設(shè)計(jì)

如何控制循環(huán)是循環(huán)程序設(shè)計(jì)中的一個(gè)重要環(huán)節(jié),下面介紹最常見(jiàn)的兩種循環(huán)控制方法:計(jì)數(shù)控制和條件控制一、計(jì)數(shù)控制當(dāng)循環(huán)次數(shù)已知時(shí),通常使用計(jì)數(shù)控制,計(jì)數(shù)控制又有正計(jì)數(shù)和倒計(jì)數(shù)兩種形式①倒計(jì)數(shù)先將循環(huán)次數(shù)N送入循環(huán)計(jì)數(shù)器中,每循環(huán)1次,計(jì)數(shù)器減1,直到循環(huán)計(jì)數(shù)器中的內(nèi)容為0時(shí)結(jié)束循環(huán)

下面以例【4-32】的代碼段為例說(shuō)明這個(gè)問(wèn)題。

LEABX,BUF MOVCX,N ;初始化部分

MOVAX,0CYCLE: CMPBYTEPTR[BX],0 JGENEXT ;工作部分

INCAXNEXT: INCBX DECCX;修改部分

JNZCYCLE;控制部分4.2.5循環(huán)程序設(shè)計(jì)

②正計(jì)數(shù)先將0送入循環(huán)計(jì)數(shù)器中,每循環(huán)1次,計(jì)數(shù)器加1,直到循環(huán)計(jì)數(shù)器中的內(nèi)容與循環(huán)次數(shù)N相等時(shí)結(jié)束循環(huán)下面將例【4-32】的代碼段改寫(xiě)為用CX進(jìn)行正計(jì)數(shù)來(lái)說(shuō)明這個(gè)問(wèn)題

LEABX,BUF MOVCX,0 ;初始化部分

MOVAX,0CYCLE:CMPBYTEPTR[BX],0 JGENEXT ;工作部分

INCAXNEXT: INCBX INCCX ;修改部分

CMPCX,N ;控制部分

JNZCYCLE

4.2.5循環(huán)程序設(shè)計(jì)

二、條件控制有些情況下,循環(huán)次數(shù)無(wú)法事先確定,但它與問(wèn)題中的某些條件有關(guān),這些條件可以通過(guò)指令來(lái)測(cè)試,如果測(cè)試的結(jié)果滿足循環(huán)條件,則繼續(xù)循環(huán),否則結(jié)束循環(huán)例【4-33】編程統(tǒng)計(jì)AX中1的個(gè)數(shù)。

【分析】

每次判斷AX的最低位,如果最低位為1則BL加1;否則BL不加1。然后AX邏輯右移1位,左邊補(bǔ)0,在某一時(shí)刻AX必然為0。因此,可以將AX是否為0作為條件控制循環(huán)

4.2.6子程序設(shè)計(jì)

子程序設(shè)計(jì)是使程序模塊化的一種重要手段。當(dāng)設(shè)計(jì)一個(gè)比較復(fù)雜的程序時(shí),將程序劃分為若干個(gè)相對(duì)獨(dú)立的模塊,確定各模塊的入口及出口參數(shù),為各模塊分配不同的名字,對(duì)每一個(gè)模塊編制獨(dú)立的程序段(即子程序),最后將這些子程序根據(jù)調(diào)用關(guān)系連成一個(gè)整體。這樣既便于分工合作,又可避免重復(fù)勞動(dòng),節(jié)省存儲(chǔ)空間,提高程序設(shè)計(jì)的效率和質(zhì)量,使程序簡(jiǎn)潔、清晰、易讀,便于修改和擴(kuò)充

4.2.6子程序設(shè)計(jì)一、定義子程序子程序的定義格式是:子程序名PROC[NEAR/FAR] ┇

子程序名ENDP

子程序也稱為過(guò)程,PROC、ENDP是定義子程序時(shí)必須使用的保留字,PROC和ENDP相當(dāng)于一對(duì)括號(hào),將子程序的指令包括在內(nèi)。如果主程序和子程序位于同一代碼段,則稱為段內(nèi)調(diào)用,此時(shí)在PROC后可加NEAR說(shuō)明此子程序是近過(guò)程。如果主程序和子程序不在同一代碼段,則稱為段間調(diào)用,此時(shí)在PROC后可加FAR說(shuō)明此子程序是遠(yuǎn)過(guò)程。如果NEAR和FAR都不寫(xiě),系統(tǒng)默認(rèn)該子程序是近過(guò)程4.2.6子程序設(shè)計(jì)

二、子程序的調(diào)用和返回

為了實(shí)現(xiàn)子程序的調(diào)用和返回,可使用子程序調(diào)用指令CALL和返回指令RET

1.子程序調(diào)用指令CALL

子程序調(diào)用指令CALL的格式是:CALLOPD。根據(jù)OPD尋址方式的不同,又分為直接調(diào)用和間接調(diào)用。因此,子程序調(diào)用指令CALL共有4種組合,見(jiàn)表4-214.2.6子程序設(shè)計(jì)

對(duì)于段間間接調(diào)用,需要雙字單元存放子程序的入口地址信息,第一個(gè)字單元中放子程序入口的偏移地址,第二個(gè)字單元中放子程序所在段的段首址,見(jiàn)表4-22

2.返回指令RETRET指令通常作為子程序的最后一條指令,用來(lái)控制CPU返回到主程序的斷點(diǎn)處繼續(xù)向下執(zhí)行,RET指令的語(yǔ)句格式及功能見(jiàn)表4-234.2.6子程序設(shè)計(jì)

無(wú)論是段內(nèi)返回還是段間返回,當(dāng)RET指令執(zhí)行后,主程序的斷點(diǎn)地址信息已送回到IP、CS中,堆?;謴?fù)了轉(zhuǎn)子前的狀態(tài)

RET指令的另一種格式是:RETN,其中N是偶數(shù)。該指令用來(lái)廢除棧頂N個(gè)無(wú)用的參數(shù)。其操作是在正常RET操作之后再做SP+N→SP

4.2.6子程序設(shè)計(jì)

三、調(diào)用子程序前后怎樣保存和恢復(fù)寄存器

如果在子程序中要用到某些寄存器(或存儲(chǔ)單元),就會(huì)破壞這些寄存器(或存儲(chǔ)單元)在轉(zhuǎn)子前原有的內(nèi)容。當(dāng)執(zhí)行完子程序返回?cái)帱c(diǎn)繼續(xù)執(zhí)行主程序時(shí),只能以被破壞的現(xiàn)場(chǎng)為背景進(jìn)行工作,這顯然是不對(duì)的。因此,必須考慮現(xiàn)場(chǎng)的保存和恢復(fù)。一般情況下,在子程序的開(kāi)始安排一些保存現(xiàn)場(chǎng)的指令,在子程序的返回指令之前再恢復(fù)現(xiàn)場(chǎng)。例如,若子程序SUBP中改變了寄存器AX、BX、CX的內(nèi)容,則在子程序的開(kāi)始處將這些寄存器的內(nèi)容入棧保存,在子程序的返回指令之前用出棧指令依次恢復(fù),具體實(shí)現(xiàn)方法如下:4.2.6子程序設(shè)計(jì)

四、主程序和子程序間的參數(shù)傳遞

主程序在調(diào)用子程序之前,必須把需要子程序處理的原始數(shù)據(jù)傳遞給子程序,即為子程序準(zhǔn)備入口參數(shù)。子程序?qū)θ肟趨?shù)進(jìn)行一系列處理之后得到處理結(jié)果,該結(jié)果必須送給調(diào)用它的主程序,即提供出口參數(shù)以便主程序使用。這種主程序?yàn)樽映绦驕?zhǔn)備入口參數(shù)、子程序?yàn)橹鞒绦蛱峁┨幚斫Y(jié)果的過(guò)程稱為主程序和子程序間的參數(shù)傳遞。常用的參數(shù)傳遞方法有寄存器法、約定單元法和堆棧法三種,本節(jié)主要講解前兩種方法

1.寄存器法寄存器法就是子程序的入口參數(shù)和出口參數(shù)都在約定的寄存器中。此法的優(yōu)點(diǎn)是參數(shù)傳遞快,編程也較方便,且節(jié)省內(nèi)存單元。但由于寄存器個(gè)數(shù)有限,而且在處理過(guò)程中要經(jīng)常使用寄存器,如果要傳遞的參數(shù)很多,將導(dǎo)致無(wú)空閑寄存器供編寫(xiě)程序使用。所以寄存器法只適用于要傳遞參數(shù)較少的情況4.2.6子程序設(shè)計(jì)

例【4-34】寄存器法參數(shù)傳遞舉例,編寫(xiě)子程序求兩個(gè)數(shù)的最大公約數(shù)

【分析】X和Y中放著兩個(gè)整數(shù),在主程序中分別用寄存器AX和BX將這兩個(gè)整數(shù)傳遞給計(jì)算這兩個(gè)整數(shù)最大公約數(shù)的子程序GCDP,子程序GCDP將計(jì)算結(jié)果用寄存器AX傳回主程序,存放在GCD中。這道題的核心是求兩個(gè)整數(shù)最大公約數(shù)的子程序GCDP,它用的是輾轉(zhuǎn)相減法。當(dāng)兩個(gè)整數(shù)不相等時(shí)用大數(shù)減去小數(shù),直到兩個(gè)數(shù)相等為止。假定X、Y的值分別為32、24,處理過(guò)程見(jiàn)表4-244.2.6子程序設(shè)計(jì)

2.約定單元法約定單元法是把入口參數(shù)和出口參數(shù)都在約定的存儲(chǔ)單元中。此法的優(yōu)點(diǎn)是每個(gè)子程序要處理的數(shù)據(jù)或送出的結(jié)果都有獨(dú)立的存儲(chǔ)單元,編寫(xiě)程序時(shí)不易出錯(cuò)。缺點(diǎn)是要占用一定數(shù)量的存儲(chǔ)單元例【4-35】用約定單元法重寫(xiě)例【4-34】,求兩個(gè)整數(shù)最大公約數(shù)和最小公倍數(shù)

【分析】

數(shù)據(jù)段的變量X、Y、GCD、LCM是約定的存儲(chǔ)單元,這些存儲(chǔ)單元主、子程序都可使用。參數(shù)存放在X、Y中可由GCDP子程序使用,子程序處理結(jié)束后將結(jié)果存入GCD,主程序計(jì)算最小公倍數(shù)送LCM,計(jì)算X、Y最小公倍數(shù)的方法是:LCM=(X*Y)/GCD4.2.6子程序設(shè)計(jì)

子程序也可以不帶參數(shù),只是完成某種功能。下面的程序是在屏幕上輸出一個(gè)空行。NEWLINEPROC PUSHAX PUSHDX MOVAH,2 MOVDL,0DH INT21H

MOVDL,0AH INT21H POPDX POPAX RETNEWLINEENDP4.2.7常用的DOS和BIOS調(diào)用

我們?cè)诰幹茀R編源程序時(shí),常常希望能從鍵盤(pán)輸入字符或在顯示器上顯示出程序運(yùn)行的結(jié)果。但由于計(jì)算機(jī)機(jī)種的不同、外設(shè)型號(hào)的差異,控制它們工作的程序也會(huì)有差異。如果每次都需要我們根據(jù)自己的工作環(huán)境來(lái)設(shè)計(jì)控制這些外設(shè)工作的程序,則必須要先搞清楚與之有關(guān)的設(shè)備、電路、接口等各方面的問(wèn)題,既復(fù)雜,效率又低,也沒(méi)有通用性正確的做法是:把這些控制過(guò)程編寫(xiě)成程序,作為操作系統(tǒng)的一部分事先放在系統(tǒng)盤(pán)上,用戶在需要時(shí)只要按規(guī)定的格式設(shè)置好參數(shù),直接調(diào)用即可。這種方式叫做利用操作系統(tǒng)的標(biāo)準(zhǔn)功能調(diào)用進(jìn)行輸入/輸出。這樣既便于操作系統(tǒng)對(duì)外設(shè)進(jìn)行統(tǒng)一管理,也便于用戶在編制程序時(shí),不用考慮輸入/輸出的控制細(xì)節(jié),提高了工作效率,使編制出來(lái)的程序更具有通用性4.2.7常用的DOS和BIOS調(diào)用DOS提供了系統(tǒng)功能調(diào)用,編號(hào)從0~57H,主要分為設(shè)備管理、文件管理、目錄管理、及其它功能調(diào)用四大類(lèi)在微機(jī)的只讀存儲(chǔ)器ROM中的程序,一部分是BASIC語(yǔ)言解釋程序,另一部分是基本輸入/輸出系統(tǒng)BIOS。BIOS的主要功能是驅(qū)動(dòng)系統(tǒng)中所配置的常用外設(shè),如顯示器、鍵盤(pán)、打印機(jī)、磁盤(pán)驅(qū)動(dòng)器以及異步通信接口等,使程序員不必過(guò)多地關(guān)心這些設(shè)備具體的物理特性和邏輯結(jié)構(gòu)細(xì)節(jié)(如外設(shè)寄存器地址、命令及狀態(tài)格式等),從而能方便地控制各種輸入/輸出操作。與DOS的設(shè)備管理系統(tǒng)功能調(diào)用相比,使用BIOS能完成更復(fù)雜的輸入/輸出操作表4-25中列出了最常用的DOS和BIOS調(diào)用,更詳細(xì)的內(nèi)容要查閱有關(guān)的資料

4.3.180286相對(duì)8086增加的指令

1.立即數(shù)入棧指令格式:PUSHnnnn,功能:將字立即數(shù)nnnn壓入堆棧

2.將所有寄存器的內(nèi)容壓入堆棧指令格式:PUSHA,功能:將8個(gè)16位通用寄存器的內(nèi)容按AX、CX、DX、BX、SP、BP、SI、DI的順序入棧。

4.332位微處理器的尋址方式與指令系統(tǒng)

格式:POPA,功能:將從棧頂開(kāi)始的8個(gè)存儲(chǔ)字依次彈出堆棧并按DI、SI、BP、SP、BX、DX、CX、AX的順序分別傳送。

4.?dāng)U充的帶符號(hào)整數(shù)乘法指令

格式1:IMULOPD,OPS

格式2:IMULOPD,OPS1,OPS2

其中,OPD是16位通用寄存器,格式1中的OPS可以是16位通用寄存器、字存儲(chǔ)器、8或16位立即數(shù);格式2中的OPS1可以是16位通用寄存器、字存儲(chǔ)器,但不能為立即數(shù);格式2中的OPS2只能為8或16位立即數(shù)3.彈出堆棧指令功能:格式1是OPD乘以O(shè)PS,將乘積送OPD;格式2將OPS1乘以O(shè)PS2,乘積送OPD5.串輸入指令格式1:[REP]INS目標(biāo)串,DX

格式2:[REP]INSB格式3:[REP]INSW

功能:以DX中的值為外設(shè)端口地址,從此端口輸入一字符存入由ES:DI(或EDI)所指的存儲(chǔ)器中,且根據(jù)方向標(biāo)志DF和串操作的類(lèi)型來(lái)修改DI(或EDI)的值,利用REP前綴可以連續(xù)輸入串字符存入存儲(chǔ)器中,直到CX(或ECX)減到零為止其中,格式1中的目標(biāo)串為目標(biāo)操作數(shù)的符號(hào)地址,該符號(hào)地址確定了目標(biāo)操作數(shù)的屬性(字或字節(jié)),DX寄存器中的內(nèi)容為外設(shè)端口地址。當(dāng)符號(hào)地址的屬性為字節(jié)時(shí),則該指令每次讀入一個(gè)字節(jié),DI內(nèi)容加1或減1;當(dāng)符號(hào)地址的屬性為字時(shí),則該指令每次讀入一個(gè)字,DI內(nèi)容加2或減2。格式2和格式3中已確定了串操作的類(lèi)型,并且不帶操作數(shù),INSB為字節(jié)串輸入,INSW為字串輸入4.3.180286相對(duì)8086增加的指令6.串輸出指令格式1:[REP]OUTSDX,源串格式2:[REP]OUTSB格式3:[REP]OUTSW

功能:該指令與串輸入指令的操作剛好相反,該指令中DS:SI(或ESI)指向源串,以DX中的值為外設(shè)端口地址。執(zhí)行時(shí)根據(jù)DF的值和源串的類(lèi)型自動(dòng)修改SI(或ESI)的內(nèi)容,利用REP前綴可以連續(xù)輸出源串中的內(nèi)容,直到CX(或ECX)減到零為止4.3.180286相對(duì)8086增加的指令

7.移位指令格式:SHLOPD,OPS(邏輯左移指令)

SHROPD,OPS(邏輯右移指令)

SALOPD,OPS(算術(shù)左移指令)

SAROPD,OPS(算術(shù)右移指令)

ROLOPD,OPS(不帶進(jìn)位的循環(huán)左移指令)

ROROPD,OPS(不帶進(jìn)位的循環(huán)右移指令)4.3.180286相對(duì)8086增加的指令

RCLOPD,OPS(帶進(jìn)位的循環(huán)左移指令)

RCROPD,OPS(帶進(jìn)位的循環(huán)右移指令)功能:這8條指令的格式和8086/8088的指令是相同的,區(qū)別是在8086/8088的指令系統(tǒng)中OPS只能是CL或1,在80286指令系統(tǒng)OPS中可以是任一8位立即數(shù)

8.裝入地址指針指令格式:LDSOPD,OPSLESOPD,OPS

其中,OPD為16位或32位(80386)的通用寄存器,OPS為存儲(chǔ)器。功能:將OPS所指的4或6(80386)個(gè)內(nèi)存單元中的2個(gè)字或3個(gè)字先后送給OPD和相應(yīng)的段寄存器中,LDS和LES指令分別隱含DS和ES段寄存器。

4.3.180286相對(duì)8086增加的指令4.3.280386的尋址方式和80386相對(duì)80286增加的指令

80386微處理器增加了8個(gè)32位的通用寄存器(EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP)和段寄存器FS和GS,不僅兼容80286的16位尋址方式,還新增了32位尋址方式。在這種尋址方式下,有效地址由表中的4個(gè)分量計(jì)算產(chǎn)生,見(jiàn)表4-26。當(dāng)基址寄存器為ESP或EBP時(shí)默認(rèn)的段寄存器為SS,其它方式下默認(rèn)的段寄存器均為DS4.3.280386的尋址方式和80386相對(duì)80286增加的指令4.3.280386的尋址方式和80386相對(duì)80286增加的指令

1.直接尋址指令中給出的位移量就是有效地址

2.基址尋址以8個(gè)32位的通用寄存器中的任意一個(gè)作為基址寄存器形成操作數(shù)的有效地址

3.基址加位移尋址以8個(gè)32位的通用寄存器中的任意一個(gè)作為基址寄存器,再加上8、16或32位位移量形成操作數(shù)的有效地址

4.3.280386的尋址方式和80386相對(duì)80286增加的指令

4.比例變址和位移尋址選取除ESP外7個(gè)通用寄存器中的任意一個(gè)作為變址寄存器,將其內(nèi)容乘以比例常數(shù),再加上8、16或32位位移量,形成操作數(shù)的有效地址5.基址加比例變址尋址以8個(gè)32位的通用寄存器中的任意一個(gè)作為基址寄存器,選取除ESP外7個(gè)通用寄存器中的任意一個(gè)作為變址寄存器,將變址寄存器的內(nèi)容乘以比例常數(shù),加上基址寄存器的內(nèi)容形成操作數(shù)的有效地址

6.基址加比例變址加位移尋址有效地址=基址+(變址╳比例常數(shù))+位移量80386相對(duì)80286增加的指令有:

1.堆棧操作指令格式1:PUSHOPS/POPOPD

擴(kuò)展功能:PUSH指令可將32位的OPS壓入堆棧;POP指令可將棧頂?shù)?個(gè)字彈出給32位的通用寄存器或32位的存儲(chǔ)器

4.3.280386的尋址方式和80386相對(duì)80286增加的指令4.3.280386的尋址方式和80386相對(duì)80286增加的指令

格式2:PUSHFS/PUSHGS/POPFS/POPGS中使用的FS和GS是80386以上的微處理器增加的2個(gè)附加段寄存器格式3:PUSHA/PUSHAD/POPA/POPAD指令中操作數(shù)為隱含。PUSHA可以將全部16位通用寄存器按AX、CX、DX、BX、SP、BP、SI、DI的順序入棧;PUSHAD可以將全部32位通用寄存器按EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI的順序入棧。POPA/POPAD則彈出由PUSHA/PUSHAD保存的通用寄存器值,出棧順序和上述的入棧順序相反

2.地址指針傳送指令格式:LFSOPD,OPS功能:OPS先后裝入OPD和段寄存器FS中,OPD為16位或32位通用寄存器格式:LGSOPD,OPS功能:OPS先后裝入OPD和段寄存器GS中,OPD為16位或32位通用寄存器

格式:LSSOPD,OPS功能:OPS先后裝入OPD和段寄存器SS中,OPD為16位或32位通用寄存器4.3.280386的尋址方式和80386相對(duì)80286增加的指令4.3.280386的尋址方式和80386相對(duì)80286增加的指令

3.基本傳送指令格式:MOVOPD,OPS擴(kuò)展功能:OPD和OPS可以是32位操作數(shù),它要求OPD和OPS必須等長(zhǎng),否則必須用擴(kuò)展傳送指令MOVZX和MOVSX,這2條指令只存在于80386以上的微處理器中,格式為:MOVZX/MOVSXOPD,OPS。MOVZX為零擴(kuò)展傳送指令,它將OPS中的無(wú)符號(hào)數(shù)在高位加0擴(kuò)展成和OPD等長(zhǎng),然后傳送給OPD;MOVSX為符號(hào)擴(kuò)展傳送指令,它將OPS中的帶符號(hào)數(shù)在高位加OPS的符號(hào),擴(kuò)展成和OPD等長(zhǎng),然后傳送給OPD

4.交換指令格式:SWAPOPD,OPS擴(kuò)展功能:32位的OPD和OPS中的內(nèi)容相互交換,不能同時(shí)為存儲(chǔ)器數(shù)。5.加法和減法指令格式1:加法(ADDOPD,OPS/ADCOPD,OPS),減法(SUBOPD,OPS/SBBOPD,OPS)格式2:加1指令(INCOPD),減1指令(DECOPD)擴(kuò)展功能:OPD和OPS均可為32位通用寄存器或存儲(chǔ)器數(shù),不能同時(shí)為存儲(chǔ)器數(shù)4.3.280386的尋址方式和80386相對(duì)80286增加的指令4.3.280386的尋址方式和80386相對(duì)80286增加的指令

6.乘法指令無(wú)符號(hào)乘法指令格式:MULOPS

被乘數(shù)、OPS(乘數(shù))和乘積的長(zhǎng)度、位置見(jiàn)表4-27。其中,OPS和被乘數(shù)(EAX)可為32位通用寄存器或存儲(chǔ)器數(shù)

4.3.280386的尋址方式和80386相對(duì)80286增加的指令

帶符號(hào)乘法指令格式1:IMULOPS。功能和MULOPS基本相同,指令中的被乘數(shù)和乘數(shù)均認(rèn)為是帶符號(hào)數(shù)格式2:IMULOPD,OPS;(OPD)*(OPS)→OPD

格式3:IMULOPD,OPS,立即數(shù) ;(OPS)*立即數(shù)→OPD

格式4:IMULOPD,立即數(shù) ;(OPD)*立即數(shù)→OPD

規(guī)律:如果操作數(shù)多于一個(gè),則后兩個(gè)數(shù)相乘,結(jié)果放在第一個(gè)操作數(shù)中

4.3.280386的尋址方式和80386相對(duì)80286增加的指令

7.除法指令無(wú)符號(hào)除法指令格式:DIVOPS

被除數(shù)、OPS(除數(shù))和商的長(zhǎng)度、位置見(jiàn)表4-28

其中,OPS和被除數(shù)(EDX:EAX)可為64位通用寄存器或存儲(chǔ)器數(shù)帶符號(hào)除法指令格式:IDIVOPS

功能:和DIVOPS基本相同,指令中的被除數(shù)和除數(shù)均認(rèn)為是帶符號(hào)數(shù)4.3.280386的尋址方式和80386相對(duì)80286增加的指令4.3.280386的尋址方式和80386相對(duì)80286增加的指令

8.比較指令格式:CMPOPD,OPS

擴(kuò)展功能:OPD和OPS可為32位通用寄存器或存儲(chǔ)器數(shù),不能同時(shí)為存儲(chǔ)器數(shù),OPS也可為32位立即數(shù)

9.求補(bǔ)指令格式:NEGOPD

擴(kuò)展功能:將32位的OPD求補(bǔ)后送回到OPD中

4.3.280386的尋址方式和80386相對(duì)80286增加的指令10.邏輯指令格式:ANDOPD,OPS ;邏輯與指令

OROPD,OPS ;邏輯或指令

XOROPD,OPS ;邏輯異或指令

NOTOPD,OPS ;邏輯非指令

TESTOPD,OPS;邏輯測(cè)試指令擴(kuò)展功能:OPD和OPS可為32位通用寄存器或存儲(chǔ)器數(shù),不能同時(shí)為存儲(chǔ)器數(shù),OPS也可為32位立即數(shù)4.3.280386的尋址方式和80386相對(duì)80286增加的指令11.移位指令格式 SHLOPD,OPS(邏輯左移指令)

SHROPD,OPS(邏輯右移指令)

SALOPD,OPS(算術(shù)左移指令)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論