版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
An
Introduction
to
DatabaseSystem微型計算機原理及應(yīng)用河北經(jīng)貿(mào)大學(xué)信息技術(shù)學(xué)院河北經(jīng)貿(mào)大學(xué)信息技術(shù)學(xué)院第三章
8086指令系統(tǒng)第三章8086/8088的指令系統(tǒng)8086的尋址方式指令的機器碼表示方式8086的指令系統(tǒng)3.1
8086的尋址方式一、立即尋址
三、直接尋址五、變址尋址二、寄存器尋址四、寄存器間接尋址六、基址加變址尋址計算機的指令一般由操作碼和操作數(shù)組成,操作碼規(guī)定了指令的功能;而操作數(shù)則規(guī)定了指令操作的對象。操作數(shù)可以以立即數(shù)的形式存放在指令中,但在大多數(shù)情況下,操作數(shù)是以地址的形式存放在指令(指示操作數(shù)在哪兒)。用于說明操作數(shù)所在地址的方法稱為尋址方式。在微機中,操作數(shù)存放在:1、在指令中;2、在CPU的某一內(nèi)部寄存器中;3、在內(nèi)存的數(shù)據(jù)區(qū)中;4、I/O端口。在8086CPU中,內(nèi)存地址是由數(shù)據(jù)段地址和段內(nèi)偏移量組成。而指令中規(guī)定的地址即為段內(nèi)偏移量(邏輯地址)——有效地址EA,有效地址EA構(gòu)成的方法不同,則為不同的尋址方式。8086的尋址方式操作數(shù)(8位或16的常數(shù))直接包含在指令中,緊跟在操作碼后面,與操作碼一起放在代碼段區(qū)域中。操作數(shù)im既可是8位的,也可是16位的。例:MOVMOVAX,imAL,26H一、立即尋址方式(Immediate
Addreing)操作碼imLimH碼段MAXAH
ALimHimL二、寄存器尋址AXDS(Register
Addreing)操作數(shù)放在指令規(guī)定的寄存器中。例:MOV
DS,AX操作數(shù)的有效地址EA是指令的一部分,它與操作碼一起放在代碼段區(qū)域中。操作數(shù)的物理地址為數(shù)據(jù)段寄存器DS加上16位地址偏移量。例:若(DS)=3000HMOV
AX,[2000H]指令中存儲單元的地址也可用符號地址表示。例:AREA1
DW
0867H
MOV
AX,AREA1注意區(qū)分:AREA1MOVEQU
0867HAX,AREA1操作碼00205030300003200032001碼段數(shù)據(jù)段AHAL3050三、直接尋址方式(Direct
Addreing)操作數(shù)在存儲單元中。操作數(shù)的有效地址EA在指令碼所指定的寄存器中??勺鳛殚g址的寄存器有SI、DI、BX、BP,若:1、操作數(shù)在數(shù)據(jù)段DS中:則以寄存器BX、SI或DI間接尋址。2、操作數(shù)在堆棧段中:則以寄存器BP間接尋址。例:若(DS)=2000H,(SI)=1000HMOV
AX,[SI]操作碼A050200002100021001AX碼段數(shù)據(jù)段AHAL50A0四、寄存器間接尋址方式(Register Indirect
Addreing)四、寄存器間接尋址方式
(續(xù))(Register Indirect
Addreing)3、指令中可以使用段超越前綴。如:MOV BX
,
DS:[BP]MOV AX
,
ES:[SI]操作碼操作碼00305030300003500035001AX碼段數(shù)據(jù)段MOV
AX,COUNT
[SI]或
MOV AX,
[COUNT
+SI]操作數(shù)在存儲單元中。操作數(shù)的有效地址是以指令指定的寄存器內(nèi)容加上指令中給定的8位或16位位移量。若指令指定的寄存器是BX、SI或DI,段寄存器使用DS;若指令指定的寄存器是BP,則段寄存器使用SS。例:若(DS)=3000H,(SI)=2000H,COUNT=3000H3050物理地址=16×DS+SI+COUNT=30000H
H
H=35000H五、寄存器相對尋址方式(Register
Relative
Addreing)六、基址變址尋址方式(Based
Indexed
Addreing)操作數(shù)在存儲單元中。操作數(shù)的有效地址是一個基址寄存器(BX或BP)和一個變址寄存器(SI或DI)的內(nèi)容之和,兩個寄存器均由指令指定。一般由基址寄存器決定所使用的段寄存器。若指令指定的寄存器是BX,段寄存器使用DS;物理地址=16×DS+BX+SI
或
=16×DS+BX+DI若指令指定的寄存器是BP,則段寄存器使用SS。物理地址=16×SS+BP+SI
或
=16×SS+BP+DI例:MOV AX
,[BX][SI]若DS=3000H,SI=2000H,BX=3000H,(35000H)=0ABCDH則:物理地址=16×DS+BX+SI=35000H
AX=0ABCDH七、相對基址變址尋址方式所使用的段寄存器。若指令指定的寄存器是BX,段寄存器使用DS;物理地址=16×DS+BX+SI+8位或16位位移量或
=16×DS+BX+DI
+8位或16位位移量若指令指定的寄存器是BP,則段寄存器使用SS物理地址=16×SS+BP+SI
+8位或16位位移量或=16×SS+BP+DI
+8位或16位位移量(Relative
Based
Indexed
Addreing)操作數(shù)在存儲單元中。操作數(shù)的有效地址是基址寄存器(BX或BP)內(nèi)容加上變址寄存器(SI或DI)的內(nèi)容、再加上指令中指定的8位或16位位移量。一般由基址寄存器決定例:
MOV
AX,COUNT
[BX]
[SI]若:DS=3000H,SI=0300H,BX=1500H,COUNT
=0200H,(31A00H)=26BFH則:物理地址=16×DS+BX+SI+COUNT=
31A00H
AX=26BFH1、指令中使用方括號的地址表達(dá)式必須遵循下列規(guī)則:立即數(shù)可以出現(xiàn)在方括號內(nèi),表示直接地址;只有SI、BP、DI、BX可以出現(xiàn)在方括號內(nèi),它們可以單獨出現(xiàn),也可以相加后出現(xiàn),或以寄存器與立即數(shù)相加的形式出現(xiàn),但BX和BP或SI和DI不能同時出現(xiàn)在同一個[]內(nèi),SI和DI也不能同時出現(xiàn);方括號有相加的含義,下面幾種寫法都是等價的:1200[BX][SI] [BX
][SI] [BX+
SI
]方括號內(nèi)包含BP,則隱含使用SS提供基地址;其余情況均使用DS提供基地址。需說明的幾個問題存儲器操作的類型約定段允許超越段邏輯地址取指令CS無IP堆棧操作SS無SP通用數(shù)據(jù)讀寫DSCS、ES、SSEA源數(shù)據(jù)串DSCS、ES、SSSI目的數(shù)據(jù)串ES無DI用BP
作為基寄存器SSCS、DS、ESEA2、段超越:在8088系統(tǒng)中,數(shù)據(jù)通常在數(shù)據(jù)段中,但若需要,數(shù)據(jù)也可存放在碼段,堆棧段以及附加段中,這種情況就是段超越。應(yīng)用時,需在指令中加以說明。例:MOV
AX,ES:[0500H]ES表示數(shù)據(jù)在附加段中; :
是修改屬性運算符。需說明的幾個問題(續(xù))3、其它尋址方式隱含尋址:指令中不指明操作數(shù)I/O端口尋址:8086有直接端口尋址和間接端口尋址兩種方式,端口尋址范圍分別為0-0FFH和0-FFFFH。轉(zhuǎn)移類指令尋址一條指令有幾種尋址方式需說明的幾個問題(續(xù))第三章8086/8088的指令系統(tǒng)8086的尋址方式指令的機器碼表示方式8086的指令系統(tǒng)3.2
指令的機器碼表示方式匯編語言(AssemblyLanguage)是面向機器的程序設(shè)計語言。在匯編語言中,用助記符(Memoni)代替操作碼,用地址符號(Symbol)或標(biāo)號(Label)代替地址碼。這樣用符號代替機器語言的二進(jìn)制碼。就把機器語音變成了匯編語言。于是匯編語言亦稱為符號語言。使用匯編語言編寫的程序,機器不能直接識別,要由一種程序?qū)R編語言翻譯成機器語言,這種起翻譯作用的程序叫匯編程序,匯編程序是系統(tǒng)軟件中語言處理系統(tǒng)軟件。匯編語言把匯編程序翻譯成機器語言的過程稱為匯編。匯編語言比機器語言易于讀寫、易于調(diào)試和修改,同時也具有機器語言執(zhí)行速度快,占內(nèi)存空間少等優(yōu)點,但在編寫復(fù)雜程序時具有明顯的局限性,匯編語言依賴于具體的機型,不能通用,也不能在不同機型之間移植。第三章8086/8088的指令系統(tǒng)8086的尋址方式指令的機器碼表示方式8086的指令系統(tǒng)3.3 8086的指令系統(tǒng)8088的指令系統(tǒng)分為以下幾個功能組:數(shù)據(jù)傳送、二進(jìn)制算數(shù)運算、十進(jìn)制算
數(shù)運算、邏輯操作、移位和轉(zhuǎn)移、程序控制、串操作、標(biāo)志控制段寄存器和雜項。一、數(shù)據(jù)傳送指令功能:將源操作數(shù)的一個字節(jié)(B)或一個字(W)傳送到目的操作數(shù)所指的單元。說明:*指令中至少要有一項明確指出傳送的是字節(jié)還是字;*
可用不同的尋址方式;*
不影響標(biāo)志位;*
源操作數(shù)不變;*存儲器之間,立即數(shù)與段寄存器,段寄存器之間不能用一條指令完成數(shù)據(jù)傳送。1、
MOV
OPRD1,OPRD2源操作數(shù)目的操作數(shù)立即數(shù)存儲器段寄存器DS、ES、SS通用指針變址寄存器MOV指令允許傳送數(shù)據(jù)的途徑如下圖所示例
MOV AL
,
’B’將字符B的ASCⅡ碼(42H)傳送到AL例MOVAX,DATAMOVDS,AX數(shù)據(jù)段賦值,存儲器之間,立即數(shù)與段寄存器,段寄存器之間不能用一條指令完成數(shù)據(jù)
傳送。一、數(shù)據(jù)傳送指令一、數(shù)據(jù)傳送指令將立即數(shù)傳送到存儲器時,要使用修改屬性運算符PTR,可以通過PTR指明存入字節(jié)還是字。例:MOV BYTE
PTR
[BX]
,
10H將10H傳送到[BX]
,字節(jié)傳送MOV WORD
PTR
[BX]
,
10H將0010H傳送到[BX],字傳送數(shù)據(jù)段說明舉例:;數(shù)據(jù)段說明開始DATAAREA1AREA2ARRAYSEGMENTDB
14H,3BHDB 3
DUP(0)DW
3100H,01A6HSTRING
DB
‘GOOD’AREA1AREA1ARRAYSTRING143B0000000031A601‘G’‘O’‘O’‘D’一、數(shù)據(jù)傳送指令DATA
ENDS
;數(shù)據(jù)段說明結(jié)束例:MOV AX
,
OFFSET
ARRAY其中OFFSET
為屬性操作符該指令的功能是:ARRAY的值(0005H)送AX一、數(shù)據(jù)傳送指令例:MOVAL
,
AREA1;(AREA1)→
ALMOVAREA2
,
AL;(AL)→AREA2
即0002H單元2、交換指令指令格式:XCHG
OPRD1,OPRD2功能:把一個字或一個字節(jié)的源操作數(shù)與目的操作數(shù)交換。交換可在寄存器之間、寄存器與存儲器之間進(jìn)行。但段寄存器不能作為操作數(shù),也不能直接交換兩個存儲單元中的內(nèi)容。一、數(shù)據(jù)傳送指令執(zhí)行指令前AX31B0H31801H31800H31801H31800H執(zhí)行指令后AX19H95H31HB0H1995H2、交換指令(續(xù))例:設(shè)AX=31B0H,DS=3000H,BX=1800H,(31800H)=1995H,執(zhí)行指令
XCHG AX,
[BX]
的過程為:一、數(shù)據(jù)傳送指令3、堆棧操作指令部.操通用堆棧是以“先進(jìn)后出”的方式工作的一個存儲區(qū),進(jìn)棧指令
PUSH
OPRD功能:將一個字的源操作數(shù)傳送至由SP所指向的堆棧的頂操作:PUSH
操作時,先修改SP
的值,使
SP
-
2 SP
后,把源作數(shù)(字)壓入堆棧中SP
指示的位置上。OPRD可以是16位的寄存器,段寄存器,存儲器中的字。指令執(zhí)行后AX=2A8CHSP2000:
0130H2000:
012EH例:PUSH AX
指令執(zhí)行過程:指令執(zhí)行前AX=2A8CHSP2000:
0130H2000:
0000H2000:
0000H2AH8CHSP一、數(shù)據(jù)傳送指令(續(xù))一、數(shù)據(jù)傳送指令(續(xù))3、堆棧操作指令②
出棧指令
POP
OPRD功能:把當(dāng)前SP
所指向的堆棧頂部的一個字送到指定的目的操作數(shù)中。(CS不能作為目的操作數(shù))操作:每執(zhí)行一次出棧操作,SP+2
→SP
,指向新的棧頂。例:設(shè)SS=2000H,SP=0130H,(20130H)=396EH,BX=4FAEH,執(zhí)行指令POP執(zhí)行指令前BX=4FAEH2000:
0000H2000:
0000H2000:
0130HSP
→SP
→72H39H6EH72H39H6EHBX的過程如下圖所示:執(zhí)行指令后BX=396EHSP
→2000:
0132H2000:
0131H2000:
0130H一、數(shù)據(jù)傳送指令(續(xù))3、堆棧操作指令③
推入通用寄存器至堆棧
PUSHA功能:將所有通用寄存器、指針寄存器及變址寄存器推入堆棧。④
彈出堆棧至通用寄存器
POPA功能:將所有通用寄存器、指針寄存器及變址寄存器推入堆棧。一、數(shù)據(jù)傳送指令4.
輸入輸出指令①輸入指令I(lǐng)N指令格式:
IN
AL,n或
IN AX,n
;n為£
255
的端口地址INAL,DX或IN
AX,DX;端口地址放在DX中。第一種格式,端口地址n(00~FFH)直接包含在IN指令里,共允許尋址256個端口。當(dāng)端口地址號大于FFH時,必須用第二種尋址方式,即先將端口號送入DX寄存器,再執(zhí)行輸入操作。功能:從8位端口讀入一個字節(jié)到AL,或從16位端口讀入一個字到AX。例:用IN指令從輸入端口讀取數(shù)據(jù)E3H端口9DHAL(1)
IN
AL,0E3H執(zhí)行指令前22H執(zhí)行指令后E3H端口9DHAL9DH(2)
IN
AX,80H執(zhí)行指令前80H端口81H端口5BH17HAX3355H執(zhí)行指令后80H端口81H端口5BH17HAX17
5BH一、數(shù)據(jù)傳送指令4.
輸入輸出指令①輸入指令I(lǐng)N
(續(xù))一、數(shù)據(jù)傳送指令指令格式:OUTn
,AL或OUTn
,AXOUTDX,AL或OUTDX,AX功能:將AL中的一個字節(jié)寫到一個8位端口,或把AX中的一個字寫到一個16位端口。4.
輸入輸出指令②輸出指令OUT例:用OUT
指令對輸出端口進(jìn)行操作1)
OUT
84H,AX84H85H66H77H端口執(zhí)行指令前AX
3F46H84H85H端口執(zhí)行指令后AX
3F46H2)
MOVOUT執(zhí)行指令前AL9AH端口300H
22HDX,300HDX,AL執(zhí)行指令后AL9AH端口300H46H3FH一、數(shù)據(jù)傳送指令②輸出指令OUT4.
輸入輸出指令MOVAL,0BAH;被除數(shù)-38送ALMOVCH,03H;除數(shù)+3
送CHCBW;把字節(jié)擴展為字,使AX=0FFBAHIDIVCH;AL=0F4H=-12(商),AH=0FEH=-2(余數(shù))指令執(zhí)行后,不影響標(biāo)志位5.
擴展指令①
把字轉(zhuǎn)換成雙字指令
CWD功能:把AX中字的符號位擴展送到DX寄存器的所有位中去。若(AX)
<
8000H
,
則(DX)
=
0000H
;若(AX)?
8000H
,
則(DX)=
0FFFFH例:編程求-38/3的商和余數(shù)。一、數(shù)據(jù)傳送指令5.
擴展指令②
把字節(jié)轉(zhuǎn)換為字指令
CBW功能:把AL中字節(jié)的符號位擴展到AH的所有位。若(AL)
<80H,擴展后(AH)=00H,若(AL)?80H,擴展后(AH)=0FFH。該指令執(zhí)行后,不影響標(biāo)志位。一、數(shù)據(jù)傳送指令二、二進(jìn)制算術(shù)運算指令8088指令系統(tǒng)提供了加、減、乘、除四種基本運算指令,可處理無符號或帶符號的8位或16位二進(jìn)制數(shù)的算術(shù)運算(帶符號數(shù)是用補碼表示)。還提供了各種調(diào)整操作指令,故可進(jìn)行壓縮的或非壓縮的十進(jìn)制數(shù)的算術(shù)運算。絕大部分算術(shù)運算指令都影響狀態(tài)標(biāo)志位。1.
加法指令①
ADD
OPRD1,OPRD2功能:將源和目的操作數(shù)相加,結(jié)果送到目的操作數(shù)中,即 OPRD1+OPRD2
→
OPRD1二、算術(shù)運算指令這兩條指令的源操作數(shù)OPRD2可以是寄存器、存儲器或立即數(shù),目的操作數(shù)OPRD1只能用寄存器和存儲單元。注意,源操作數(shù)和目的操作數(shù)不能同時為存儲器,而且它們的類型必須一致,即都是字節(jié)或字。它們影響的標(biāo)志位為:CF、OF、PF、SF、ZF和AF。二、算術(shù)運算指令1.
加法指令②
ADC
OPRD1,OPRD2功能:OPRD1+OPRD2+CF
→OPRD1二、算術(shù)運算指令執(zhí)行指令A(yù)DDADCAX,CX;(AX)=5389H
,CF=1DX,BX;(DX)=1128H
,CF=0結(jié)果:(AX)=5389H
,(DX)=1128H,(BX)=1025H,
(CX)=0E024H標(biāo)志位SF
=0,
ZF
=0,
CF
=0,
OF=0,
AF
=01.
加法指令例:設(shè),(AX)= 7365H,
(BX)=1025H,(CX)=0E024H
(DX)=0102H二、算術(shù)運算指令2.
減法指令①
SUB
OPRD1,OPRD2功能:OPRD1-
OPRD2
→
OPRD1②
SBB
OPRD1,OPRD2功能:OPRD1-OPRD2
-CF→OPRD1這兩條指令均影響AF、CF、OF、PF、SF和ZF二、算術(shù)運算指令3.
乘法指令①
無符號數(shù)乘法指令
MUL
src功能:完成將AL(字節(jié))或AX(字)中的無符號數(shù)與源操作數(shù)相乘。雙倍長度的乘積送回到AX或DX:AX。字節(jié)操作數(shù):(AL)
·
(src)→AX字操作數(shù):(AX)
·
(src)
→
DX:AX影響標(biāo)志位CF、OF:若乘積的高半部分(在字節(jié)相乘時為AH,在字相乘時為DX)不為零,則標(biāo)志CF=1,OF=1;否則CF=0,OF=0。例:設(shè)(AL)=90H,(BL)=04H。執(zhí)行指令MUL BL后,(AX)=0240H,CF
=1,
OF
=1二、算術(shù)運算指令3.
乘法指令②帶符號數(shù)乘法指令I(lǐng)MUL
src功能:完成兩個帶符號數(shù)相乘,操作以及對標(biāo)志位的影響與MUL指令完全類似。二、算術(shù)運算指令功能:對兩個無符號數(shù)進(jìn)行除法運算。源操作數(shù)可以是字節(jié)或字。字節(jié)操作數(shù):(AX)/(
src
)(字節(jié))商→AL(最大為FFH),余數(shù)→AH字操作數(shù):(DX:AX)/(
src
)(字)在字節(jié)操作中,若被除數(shù)只有8位,則必須將8位被除數(shù)送AL,并將AH清0,然后相除。在字操作中,若被除數(shù)只有16位,除數(shù)也是16位,則必須將16位被除數(shù)送AX,并將DX清0,然后相除。DIV指令執(zhí)行后,所有標(biāo)志位均無定義。商→AX(最大為FFFFH),余數(shù)→DX4.
除法指令①無符號數(shù)除法指令DIV
src二、算術(shù)運算指令I(lǐng)DIV
src功能:執(zhí)行的操作與DIV相同,但操作數(shù)都必須是帶符號數(shù),商和余數(shù)也都是帶符號數(shù),而且規(guī)定余數(shù)的符號和被除數(shù)的相同,且所有標(biāo)志位均無定義。對于IDIV指令,字節(jié)操作時要求被除數(shù)為16位,字操作時要求被除數(shù)為32位。如果被除數(shù)不滿足這個條件,不能簡單地將高位置0,而應(yīng)該先用符號擴展指令(CWD、CBW)將被除數(shù)轉(zhuǎn)換成除法指令所要求的格式,再執(zhí)行除法指令。4.
除法指令②帶符號數(shù)除法指令:5.
增量減量指令二、算術(shù)運算指令①
INC
OPRD增量指令(單操作數(shù))功能:對目的操作數(shù)加1,結(jié)果送回目的操作數(shù)。即OPRD+1→
OPRD。目的操作數(shù)可以在通用寄存器或內(nèi)存中。指令執(zhí)行后影響AF、OF、PF、SF和ZF,但不影響CF。例:INCINCBL
例:對內(nèi)存單元的內(nèi)容加1必須說明該單元CX的類型INC
BYTE
PTR[BX]INCWORD
PTR[BX]執(zhí)行后不影響CF影響AF、OF、PF、SF和ZF二、算術(shù)運算指令5.
增量減量指令②
DEC
OPRD
減量指令功能:OPRD
-1→OPRD6.
NEG
OPRD
取補指令功能:0
-
OPRD
→
OPRD如操作數(shù)為0,執(zhí)行該指令后,結(jié)果仍為0,且CF=0,否則CF=1。若字節(jié)操作數(shù)為80H(-128),字操作數(shù)為8000H(-32768),執(zhí)行NEG指令后操作數(shù)無變化,但OF
=1。二、算術(shù)運算指令指令執(zhí)行后影響AF、CF、OF、PF、SF和ZF。7、比較指令
CMP
OPRD1,OPRD2功能:將目的操作數(shù)減去源操作數(shù),但不送結(jié)果,僅將結(jié)果反映在標(biāo)志位上,接著可用條件轉(zhuǎn)移指令決定程序的流向。例2:已知(AL)=80H執(zhí)行指令
CMP
AL
,
80H執(zhí)行結(jié)果
(AL)=
80H
ZF=1二、算術(shù)運算指令比較指令主要用在希望比較兩個數(shù)之間的關(guān)系,而又不破壞原操作數(shù)的場合。即兩者是否相等,或兩個中哪一個大。一般有下列幾種情況:*
在比較指令之后,根據(jù)ZF標(biāo)志即可判斷兩者是否相等。若兩者相等,執(zhí)行CMP指令后,ZF=1,否則為0。*
若是兩個無符號數(shù)進(jìn)行比較,則在比較指令之后,可根據(jù)CF的狀態(tài)判斷大小。*
若是判斷兩個帶符號數(shù)的大小,可根據(jù)
SF和OF進(jìn)行判斷。在執(zhí)行CMP
AX,BX后1、當(dāng)無溢出(OF=0),若SF=0,則AX>BX;否則AX<BX。2、當(dāng)產(chǎn)生溢出(OF=1),若SF=0,則AX<BX;否則AX>BX。即:OF“異或”SF=0,則AX>BX;OF“異或”SF=1,則AX<BX。比較指令的應(yīng)用例:求兩個多字節(jié)無符號數(shù)之和。加數(shù)在DATA1開始的單元中,被加數(shù)在DATA2開始的單元中,字節(jié)長度為5,和存放在DATA2中。設(shè)置循環(huán)計數(shù)器0送CF,0送SI結(jié)束取加數(shù)送AL被加數(shù)+加數(shù)送DATA2修改循環(huán)次數(shù)及指針加完YN程序框圖:源程序段:MOV
CX,5MOV
SI,0CLCLOP:
MOVADCINCDECJNZAL,DATA1[SI]DATA2[SI],ALSICXLOPHLT例:在BLOCK開始的內(nèi)存單元中有100個16位帶符號數(shù),請尋找出最大值并送MAX單元。MOV
BX,OFFSET
BLOCK;設(shè)置塊指針AMOVAX,[BX];取一數(shù)送AXINCBX;修改指針I(yè)NCBXMOVCX,99;設(shè)置比較次數(shù)GAIN:CMP
AX,[BX]
;比較JGNEXT;AX>[BX]轉(zhuǎn)NEXTMOVAX,[BX];小于,則大數(shù)送AXNEXT:INCBX;修改指針I(yè)NCBXDECCX;比較次數(shù)減一JNZAGAIN;未完,繼續(xù)MOVHLTMAX,AX;完,則存大數(shù)例:實現(xiàn)兩個組合十進(jìn)制數(shù)加法運算。設(shè)AL
=28H,BL
=68HAL
=
90H,
CF
=
0,
AF
=
1;
AL+06H→AL,AL
=
96H執(zhí)行
ADD
AL,BL;DAA結(jié)果AL
=
96H,
CF
=
0,
AF
=
01、DAA
組合BCD碼加法調(diào)整指令功能:將兩個組合BCD碼相加后,存放在AL中的結(jié)果,調(diào)整為正確的組合BCD數(shù)。DAA指令要緊跟在ADD或ADC指令之后使用,以實現(xiàn)組合的十進(jìn)制數(shù)加法運算。影響除OF以外的所有標(biāo)志位。三、十進(jìn)制算數(shù)指令2、DAS 組合BCD碼減法調(diào)整指令功能:在兩個組合十進(jìn)制數(shù)用SUB或SBB相減后,結(jié)果已存放在AL中的情況下,用DAS對AL進(jìn)行調(diào)整,在AL中得到正確的組合十進(jìn)制
數(shù)。影響AF、CF、PF、SF、ZF。對OF未定義。三、十進(jìn)制算數(shù)指令3、AAA
未組合BCD碼加法調(diào)整指令功能:在用ADD或ADC指令對兩個未組合BCD碼作加法后,運算結(jié)果已存在AL中,用AAA指令對AL中的數(shù)據(jù)進(jìn)行調(diào)整,產(chǎn)生一個未組合的十進(jìn)制和放在AX中。例:實現(xiàn)兩個未組合十進(jìn)制數(shù)加法運算。設(shè)AL=08H,BL=07HADD
AL,BL;
AL
=
0FHAAA
;
AX
=
0105H未組合十進(jìn)制數(shù)的和放在AX中三、十進(jìn)制算數(shù)指令4、AAS
未組合BCD碼減法調(diào)整指令功能:在用SUB或SBB指令對兩個未組合十進(jìn)制數(shù)進(jìn)行相減后,對AL中所得結(jié)果進(jìn)行調(diào)整,在AL中得到一個正確的未組合十進(jìn)制數(shù)之差。如果有借位,則CF置1。影響AF、CF,對OF、PF、SF、ZF
未定義。三、十進(jìn)制算數(shù)指令5、AAM功能:把在AX中的兩個未組合十進(jìn)制數(shù)相乘的結(jié)果進(jìn)行十進(jìn)制數(shù)的調(diào)整,使得在AX中得到正確的未組合十進(jìn)制數(shù)的乘積。指令執(zhí)行后影響標(biāo)志位PF、SF、ZF,對AF、CF、OF
未定義。例:設(shè)(AL)=09H,(BL)=06H執(zhí)行
BL;(AL)=
36H;調(diào)整得(AH)=05H,MULAAM(AL)=
04H即
(AX)=
0504H
為未組合十進(jìn)制數(shù)09和06相乘的結(jié)果54三、十進(jìn)制算數(shù)指令6、
未組合十進(jìn)制數(shù)除法調(diào)整指令
AAD功能:能把AX中的兩個未組合的十進(jìn)制數(shù),在兩個數(shù)相除以前進(jìn)行校正。這樣在兩個未組合的十進(jìn)制數(shù)相除以后,可以得到正確的未組合十進(jìn)制結(jié)果。例:設(shè)AX中存有兩個未組合BCD數(shù)0307H,即十進(jìn)制數(shù)37,BL中存有一個未組合十進(jìn)制數(shù)05H,若要完成37/5的運算,可用以下兩條指令:AAD
;(AH)·10+(AL)=37=25H
ALDIV
BL
;(AL)=7(商),(AH)=2(余數(shù))注意:加法、減法和乘法的十進(jìn)制調(diào)整指令都是緊跟在加法、減法和乘法運算指令之后,對運算結(jié)果進(jìn)行調(diào)整。而除法的十進(jìn)制調(diào)整指令A(yù)AD則不同,它是在除法運算之前進(jìn)行調(diào)整。三、十進(jìn)制算數(shù)指令四、邏輯運算指令8088/8086可以對字節(jié)或字操作數(shù)按位操作,包括邏輯與、或、非、異或及測試1、AND邏輯與指令格式:AND
OPRD1,OPRD2功能:對兩個操作數(shù)進(jìn)行按位“邏輯與”操作,結(jié)果送回目的操作數(shù)。主要用于使操作數(shù)的某些位保持不變(和
‘1’相與),而使某些位清0(和‘0’相與)例:設(shè)(AX)=3538H,執(zhí)行指令
AND AX,0F0FH
后
;(AX)
=0508H四、邏輯運算指令2、TEST測試指令格式:TEST
OPRD1,OPRD2功能:對兩個操作數(shù)進(jìn)行“邏輯與”操作,但不回送結(jié)果,即指令執(zhí)行后兩操作數(shù)不變。該指令常用在要檢測某些條件是否滿足,但又不希望改變原有操作數(shù)的情況下。緊跟在這條指令后面的往往是一條件轉(zhuǎn)移指令,根據(jù)測試結(jié)果產(chǎn)生分支,轉(zhuǎn)向不同的處理程序。例如,要判斷在BX寄存器中16位數(shù)的最高位是否為‘
1’,可用指令
TEST
BX,8000H若最高位為‘
1’,指令執(zhí)行后,ZF
=
0,若不是‘
1’,則ZF
=
1(結(jié)果是0)四、邏輯運算指令3、OR“邏輯或”指令格式:OR
OPRD1,OPRD2功能:對兩個操作數(shù)進(jìn)行按位“邏輯或”操作,結(jié)果送回目的操作數(shù)。該指令主要用于使操作數(shù)的某些位保留
(和‘0’相或),而使某些位置1(和‘1’相或)。例如:AX中存放兩個未組合BCD數(shù)0509H,要將它們分別轉(zhuǎn)換成ASCII碼,結(jié)果仍放在AX中,則可用如下指令實現(xiàn):OR
AX,3030H
;(AX)
=
3539H四、邏輯運算指令4、XOR異或操作指令格式:XOR
OPRD1,OPRD2功能:對兩個操作數(shù)進(jìn)行按位邏輯異或運算,結(jié)果送回目的操作數(shù)。
主要用于使操作數(shù)的某些位保留(和‘0’相異或),而使某些位取反(和‘
1’相異或)。例如:欲使BH寄存器中的高4位取反,低4位保持不變,可執(zhí)行指令XOR
BH,0F0H四、邏輯運算指令5、NOT邏輯非指令(取反指令)指令格式:NOT
srcsrc例:設(shè)(BX)=8DCFH,執(zhí)行NOTBX
后,(BX)=7230H功能:將目的操作數(shù)求反后送回目的操作數(shù),即src目的操作數(shù)可以是8位或16位寄存器或存儲器。指令執(zhí)行后對標(biāo)志位沒有影響四、邏輯運算指令1、移位指令格式:SAL
OPRD,CNT
SAL算術(shù)左移指令格式:SHL
OPRD,CNT
SHL
邏輯左移指令CF
?
MSB
LSB
?0
SHL/SAL
指令功能:以上兩條指令的功能完全相同,均將寄存器或存儲器中目的操作數(shù)的各位左移,每移一次,最低有效位LSB補0,而最高有效位MSB進(jìn)入標(biāo)志位CF。移動一次,相當(dāng)于將目的操作數(shù)乘以2。指令中的計數(shù)值CNT決定所要移位的次數(shù)。若只需要移位一次,可直接將指令中的CNT置1,若移位次數(shù)大于1,應(yīng)先將移位次數(shù)送進(jìn)CL寄存器,再把CL放在指令的CNT位置上。例:MOVAH,06H;
06H→AHSALAH,1;(AH)左移一位,AH=0CHMOVCL,03H;03H→CL,設(shè)移位次數(shù)SHLDI,CL;(DI)左移三次SAL BYTE
PTR[BX],1
;將內(nèi)存單元的內(nèi)容左移一位五、移位和循環(huán)移位指令例:MOVAL,10000000B
;
-128→ALMOVCL,03H
;03H→CL,設(shè)移位次數(shù)SARAL,CL
;(AL)右移3次,AL=11110000B=-16用這種方法可以實現(xiàn)帶符號數(shù)的除2(右移一次)、除4
(右移兩次)、除8
(右移三次)等操作。五、移位和循環(huán)移位指令0
fi
MSB
LSB
fi
CF
SHR
指令功能:對目的操作數(shù)中的各位進(jìn)行右移,每執(zhí)行一次移位操作,操作數(shù)右移一位,最低位進(jìn)入CF,最高位補0。右移次數(shù)由計數(shù)值決定,同SAL/SHL指令一樣。若目的操作數(shù)是無符號數(shù),每右移一次,使目的操作數(shù)除以2,例如,右移2次相當(dāng)于除以4,右移3次相當(dāng)于除以8等等。但用這種方法作除法時,余數(shù)將被丟掉。2.
SHR
邏輯右移指令指令格式:SHROPRD,CNT例:MOVAL,10000101B;
133→ALMOVCL,03H;03H→CL,設(shè)移位次數(shù)SHRAL,CL;(AL)右移3次,AL=00010000B用這種方法可以實現(xiàn)無符號數(shù)的除2(右移一次)、除4
(右移兩次)、除8
(右移三次)等操作。五、移位和循環(huán)移位指令MSB
LSB
fi
CF
SAR
指令功能:它的功能與SHR相似,移位次數(shù)由CNT決定。每移位一次,OPRD各位右移一位,最低位進(jìn)入CF,但最高位(即符號位)保持不變,而不是補0。每移一次,相當(dāng)于對帶符號數(shù)進(jìn)行除2操作。指令格式:SAR
OPRD,CNT例:MOV
AL,
10000000B
;-128→ALMOV
CL, 03H
;03H→CL,設(shè)移位次數(shù)SAR
AL,
CL
;(AL)右移3次,AL=11110000B=-16用這種方法可以實現(xiàn)帶符號數(shù)的除2(右移一次)、除4
(右移兩次)、除8
(右移三次)等操作。指令執(zhí)行后對標(biāo)志位的影響:標(biāo)志位CF
總是為目的操作數(shù)最后被移出的那一位的值。標(biāo)志位OF(溢出標(biāo)志):只有當(dāng)CNT=1(移位次數(shù))時才有效,用以表示移位前后符號位是否改變,若改變,OF=
1,否則OF=0。即對左移指令(SAL/SHL),若移位后最高有效位與標(biāo)志位CF
不相等,則OF=1,否則OF=0。而對右移指令,若移位后,操作數(shù)的最高有效位與次高位不同,則OF=1,否則OF=0。3.SAR算術(shù)右移指令標(biāo)志位ZF、SF根據(jù)指令執(zhí)行后目的操作數(shù)的狀態(tài)來決定,PF只有當(dāng)目的操作數(shù)在AL中時才有效。標(biāo)志位AF
未定義。例1:設(shè)(BL)=
5AH,
執(zhí)行指令SHL BL,1
后(BL)=0B4H,標(biāo)志位CF=0,OF=1例2:設(shè)(DS)=2800H,(DI)=180AH,(2980AH)=1256H執(zhí)行MOV
CL,02HSAR [
DI],CL后(2980AH)=0495H,CF=1,ZF=0,SF=0五、移位和循環(huán)移位指令4.循環(huán)移位指令① ROL循環(huán)左移指令指令格式:ROLOPRD,CNT操作CFMSB
?LSB② ROR循環(huán)右移指令指令格式:ROROPRD,CNTMSB
fi
LSB操作CF五、移位和循環(huán)移位指令操作MSB
?
LSB?
CF
?④ RCR帶進(jìn)位循環(huán)右移指令指令格式:RCR
OPRD,CNT操作fi
CF
fi
MSB
fi
LSB4.循環(huán)移位指令(續(xù))③RCL帶進(jìn)位循環(huán)左移指指令令格式:RCL
OPRD,CNT五、移位和循環(huán)移位指令循環(huán)移位指令(續(xù))四條指令都按指令中CNT規(guī)定的移位次數(shù)進(jìn)行循環(huán)移位,移位后的結(jié)果仍送回目的操作數(shù)。OPRD可以是8/16位的寄存器或內(nèi)存操作數(shù),移位次數(shù)可以是1,也可以由CL寄存器的值指定。標(biāo)志位CF的值由最后一次被移出的值決定;OF位僅在
CNT為1時才有效,在移位后操作數(shù)的最高有效位(符號位)發(fā)生變化時,則OF=1,否則OF置0.例:設(shè)CF=1,(AL)=0B4H,若執(zhí)行指令ROL AL,
1
;則(AL)
=
69H,
CF
=
1,
OF
=
1若執(zhí)行指令RCR
AL
,
1
;
則(AL)
=
0DAH
,
CF
=0,
OF
=
0五、移位和循環(huán)移位指令六、控制轉(zhuǎn)移指令通常,程序中的指令都是順序地逐條執(zhí)行的,指令的執(zhí)行順序由CS和IP決定,每取出一條指令,指令指針I(yè)P自動進(jìn)行調(diào)整,指向下一條指令。當(dāng)程序執(zhí)行到某些特定位置,需要脫離程序的正常執(zhí)行順序,而把它轉(zhuǎn)移到指定的目標(biāo)時,可以利用控制轉(zhuǎn)移指令來改變CS和IP的值,從而改變指令的執(zhí)行順序。這類指令可分為:無條件轉(zhuǎn)移和過程調(diào)用、條件轉(zhuǎn)移、循環(huán)控制及中斷等幾類。。1.
無條件轉(zhuǎn)移指令JMP指令格式:JMP
DOPD指令功能:使程序無條件地轉(zhuǎn)移到指令中指定的目的地址去執(zhí)行。DOPD可以是立即數(shù)、通用寄存器或內(nèi)存單元指令的執(zhí)不影響標(biāo)志位。分為三種不同類型的轉(zhuǎn)移:①②③短轉(zhuǎn)移(相對轉(zhuǎn)移,相對下一條指令的偏移值,-128——127之內(nèi));近轉(zhuǎn)移(相對轉(zhuǎn)移,段內(nèi)轉(zhuǎn)移);遠(yuǎn)轉(zhuǎn)移(絕對轉(zhuǎn)移,段間轉(zhuǎn)移)。六、控制轉(zhuǎn)移指令1.
無條件轉(zhuǎn)移指令JMP段內(nèi)直接轉(zhuǎn)移指令:指令碼中直接給出轉(zhuǎn)移的目的地址。格式1:JMP
SHORT 標(biāo)號
;
直接短轉(zhuǎn)移指令轉(zhuǎn)移范圍在-128
~
+127個字節(jié)之內(nèi)。(IP)+8位偏移量→
IP格式2:JMP
NEAR
PTR 標(biāo)號(或JMP 標(biāo)號);直接近轉(zhuǎn)移指令轉(zhuǎn)移范圍在-32768
~ 個字節(jié)之內(nèi)。六、控制轉(zhuǎn)移指令OPRD指令轉(zhuǎn)向的16位有效地址放在16位寄存器或字存儲單元中。例:若JMPBX指令執(zhí)行前,(BX)=4500H,則指令執(zhí)行時,將當(dāng)前IP修改成4500H,程序轉(zhuǎn)到代碼段內(nèi)偏移地址為4500H處執(zhí)行。2、轉(zhuǎn)移指令(續(xù))段內(nèi)間接轉(zhuǎn)移指令:格式:JMP
WORD
PTR六、控制轉(zhuǎn)移指令指令中用遠(yuǎn)標(biāo)號直接給出了轉(zhuǎn)向的段地址和偏移量。只要用指令中給出的偏移地址和段地址分別取代IP和CS的內(nèi)容,就使程序從一個代碼段轉(zhuǎn)到另一代碼段去執(zhí)行。FAR
PTR
OPRD六、控制轉(zhuǎn)移指令2、轉(zhuǎn)移指令(續(xù))段間直接轉(zhuǎn)移指令:指令格式為:JMP目標(biāo)地址事先放在存儲器的4個連續(xù)單元中。轉(zhuǎn)移指令中給出存放目標(biāo)地址的存儲單元的首地
址。地址低的字為偏移量,地址高的字為段地址。六、控制轉(zhuǎn)移指令PTR
OPRD2、轉(zhuǎn)移指令(續(xù))段間間接轉(zhuǎn)移指令指令格式為:
JMP
DWORD六、控制轉(zhuǎn)移指令條件轉(zhuǎn)移指令條件轉(zhuǎn)移指令是根據(jù)上一條指令執(zhí)行后,CPU設(shè)置的狀態(tài)標(biāo)志作為判別測試條件來決定是否轉(zhuǎn)移。若滿足指令所規(guī)定的條件,則程序轉(zhuǎn)移到指定目標(biāo);若不滿足條件,則程序順序往下執(zhí)行指令。2.
條件轉(zhuǎn)移指令六、控制轉(zhuǎn)移指令注意:所有條件轉(zhuǎn)移指令的目標(biāo)地址都是采用相對
尋址方式。即:以IP為基準(zhǔn)的-128~+127個字節(jié)的范圍之內(nèi)。且指令執(zhí)行后不影響標(biāo)志位。OPRD條件轉(zhuǎn)移指令可以分為以下兩大類:1、根據(jù)單個標(biāo)志位的條件轉(zhuǎn)移指令2、組合條件的條件轉(zhuǎn)移指令和JCXZ測試轉(zhuǎn)移指令指令助記符
測試條件
指令功能
JCC
F
=
1有進(jìn)位
轉(zhuǎn)移
JN
CC
F
=
0無進(jìn)位
轉(zhuǎn)移
JZ
/JEZF
=
1結(jié)果為零/相等
轉(zhuǎn)移
JN
Z
/JN
EZF
=
0結(jié)果非零/不等
轉(zhuǎn)移
JSSF
=
1符號為負(fù)
轉(zhuǎn)移
JN
SSF
=
0符號為正
轉(zhuǎn)移
JOO
F
=
1溢出
轉(zhuǎn)移
JN
OO
F
=
0無溢出
轉(zhuǎn)移
JP
/JPEPF
=
1奇偶位為1/為偶
轉(zhuǎn)移
JN
P
/
JPOPF
=
0奇偶位為0/為奇
轉(zhuǎn)移
六、控制轉(zhuǎn)移指令2.
條件轉(zhuǎn)移指令①根據(jù)單個標(biāo)志位的條件轉(zhuǎn)移指令指令基本格式:JXX
目標(biāo)類別
指令助記符
測試條件
含義
無符號
JA
/JN
B
ECF=
0
AN
D
Z
F=
0A>B數(shù)比較
測試
JA
E
/JN
BJB
/JN
A
EJB
E
/JN
ACF=
0
O
R
Z
F=
1CF=
1
AN
D
Z
F=
0CF=
1
O
R
Z
F=
1A
?BA<BA
£B帶符號
JG
/JN
LESF=O
F
A
N
D
Z
F=
0A>B數(shù)比較
測試
JG
E
/JN
LJL/JN
G
EJLE
/JN
GSF=O
F
O
R
Z
F=
1SF?OF
A
ND
Z
F=
0SF?OF
OR
Z
F=
1A
?BA<BA
£B六、控制轉(zhuǎn)移指令2.
條件轉(zhuǎn)移指令②組合條件的條件轉(zhuǎn)移指令例;某學(xué)生的英語成績在AL中,若低于60分,則打印‘F’;若高于或等于85分,則打印‘G’;打印‘P’;試編程實現(xiàn)。FAIL:程序段:CMP
AL,60JB
FAILCMP
AL,85JAE
GOODMOV
AL,‘P’JMP
PRINTMOV
AL,‘F’JMP
PRINTAL,‘G’GOOD:
MOVPRINT:;與60分比較;小于60分,轉(zhuǎn)FAIL;大于60分,與85分比較;大于等于85分,轉(zhuǎn)GOOD;其它,‘P’送AL;轉(zhuǎn)打印程序;‘F’送AL;轉(zhuǎn)打印程序;‘G’送AL;打印AL中的字符3.
重復(fù)(循環(huán))控制指令循環(huán)控制指令用來控制一個程序段的重復(fù)執(zhí)行,重復(fù)次數(shù)由CX寄存器中的內(nèi)容決定。轉(zhuǎn)移的目標(biāo)地址必須在控制指令的-128
~+127字節(jié)范圍內(nèi)。這類指令的執(zhí)行均不影響
標(biāo)志位。六、控制轉(zhuǎn)移指令1、LOOP
OPRD功能:用于控制重復(fù)執(zhí)行一系列指令。指令執(zhí)行前必須先
將重復(fù)次數(shù)放在CX寄存器中,每執(zhí)行一次LOOP指令,CX自動減1。若減1后CX?0,則轉(zhuǎn)移到指令指定的目標(biāo)地址處繼續(xù)循環(huán);若自動減1后CX=0,則結(jié)束循環(huán),順序執(zhí)行
LOOP指令的下一條指令。指令LOOPAGAIN相當(dāng)于DECCXJNZAGAIN六、控制轉(zhuǎn)移指令例;將設(shè)有八種商品,其價格分別是83元、76元、、、58元(見OLD表);現(xiàn)將每種商品提價7元,編程計算提價后的商品價格程序段:OLD DB
83H,76H,65H,84HDB
71H,49H,62H,58HNEW
DB
8DUP(?)…MOV
CX,08HMOV
BX,0NEXT:
MOV
AL,OLD[BX
]ADD
AL,7DAAMOVINCNEW[BX
]
,ALBXLOOP
NEXT…2、LOOPE/LOOPZ
相等或結(jié)果為0且CX≠0時循環(huán)格式:LOOPE 標(biāo)號LOOPZ
標(biāo)號功能:用于控制重復(fù)執(zhí)行一組指令。指令執(zhí)行前,先將重復(fù)次數(shù)送到CX中,每執(zhí)行一次指令,CX自動減1,減1后:若CX?0且ZF=1,則轉(zhuǎn)到指令所指定的標(biāo)號處重復(fù)執(zhí)行;若CX=0或ZF=0,便退出循環(huán),順序執(zhí)行下一條指令。例:設(shè)在BUF1開始的內(nèi)存中有一個由50個字節(jié)組成的數(shù)組,現(xiàn)要對數(shù)組中的元素進(jìn)行測試,直到找到第一個非0元素或查完了為止。LOOPEAG程序段:LEA
SI,BUF1DEC
SIMOV
CX,50AG:
INC
SICMP [
SI],0六、控制轉(zhuǎn)移指令3、LOOPNE/LOOPNZ不相等或結(jié)果不為0循環(huán)格式:LOOPNELOOPNZ標(biāo)號標(biāo)號功能:用于控制重復(fù)執(zhí)行一組指令。指令執(zhí)行前,先將重復(fù)次數(shù)送到CX中,每執(zhí)行一次指令,CX自動減1,若減1后CX?0且ZF=0,則轉(zhuǎn)到指令所指定的標(biāo)號處重復(fù)執(zhí)行;若CX=0或ZF=1,便退出循環(huán),順序執(zhí)行下一條指令。六、控制轉(zhuǎn)移指令4、調(diào)用與返回指令①調(diào)用指令指令格式:CALL 過程名執(zhí)行CALL指令時,首先保留斷點于堆棧中,然后轉(zhuǎn)移到目標(biāo)單元。該指令的執(zhí)行對標(biāo)志寄存器無影響。過程調(diào)用有段內(nèi)調(diào)用和段間調(diào)用兩種類型。六、控制轉(zhuǎn)移指令CALL指令和被調(diào)用的過程在同一代碼段中。段內(nèi)直接調(diào)用:CALL指令后面直接書寫過程名的標(biāo)號,即指令中給出了偏移量。執(zhí)行的操作是:(SP)
-2 SP
,
IP
入棧;(IP)
+
偏移量
IP
(給出目標(biāo)地址)段內(nèi)調(diào)用:例:CALL PROG-N
:PROG-N是一個近標(biāo)號,設(shè)調(diào)用前:CS=2000H,IP=1050H,SS=5000H,SP=0100H,PROG-N與CALL指令的字節(jié)距離(DISP)為1234H,則指令執(zhí)行過程為:SP-2→ SP,SP=0100-2=00FEH六、控制轉(zhuǎn)移指令段內(nèi)間接調(diào)用:CALL指令中指定的16位通用寄存器或存儲單元的內(nèi)容為目標(biāo)地址。段內(nèi)調(diào)用:例:指令CALL
BX
設(shè)
(BX)
=
0200H解:該指令的操作數(shù)是BX寄存器,它包含了過程的16位偏移地址EA=0200H,執(zhí)行CALL指令后,0200H→IP,即轉(zhuǎn)到段內(nèi)偏移地址為
0200H處執(zhí)行程序。例:DS=1000H,BX=200H,SI=300H,(10500H)=3210H;執(zhí)行指令
CALL WORD
PTR
[BX+SI]
后,IP=(
DS
*
16+BX+SI)=(10500H)=3210H六、控制轉(zhuǎn)移指令段間調(diào)用:。CALL指令和被調(diào)用的過程不在同一代碼段中段間直接調(diào)用指令:目標(biāo)地址直接在CALL指令中,該指令操作為:SP減2,把現(xiàn)行的碼段寄存器CS的內(nèi)容入棧,CS由指令中包含的段字代替。SP又一次減2,
IP入棧,且IP由在指令中的地址偏移字代替。例:CALLFAR
PROG-F
:PROG-F是一個遠(yuǎn)標(biāo)號,設(shè)調(diào)用前:CS=1000H,IP=205AH,SS=2500H,SP=0050H,PROG-F所在單元的地址指針CS=3000H,IP=0500H,則指令執(zhí)行過程為:SP-2→SP,SP=0050H-2=004EH,CS=1000H入棧;SP-2→SP,SP=004EH-2=004CH,IP=205FH入棧;轉(zhuǎn)子程序入口,3000H送CS,0500H送IP;實現(xiàn)調(diào)用六、控制轉(zhuǎn)移指令段間間接調(diào)用指令:這類指令的操作數(shù)必須是存儲單元,從該單元開始存放的雙字表示過程的入口地址,其中前2個字節(jié)是偏移量,后兩個字節(jié)為代碼段基地址。指令中用
DWORD PTR說明是對存儲單元進(jìn)行雙字操作。的CS:IP
分別為:(10200H)=IP(10202H)
=
CS即(IP)=31F4H(CS)=5200H段間調(diào)用:例:CALL
DWORD
PTR [
BX
]設(shè)執(zhí)行
CALL
指令前, (DS)
=
1000H
, (BX)
=
0200H
,(10200H)
=
31F4H
, (10202H)
=
5200H
。執(zhí)行指令時,先將返回地址的偏移量和段地址都入棧,再轉(zhuǎn)向過程入口。指令中操作數(shù)的物理地址=DS·16+BX=10200H,從該單元開始取得的雙字就是過程的入口地址。所以,入口地址六、控制轉(zhuǎn)移指令4、調(diào)用與返回指令②
RET指令:該通常作為一個子程序的最后一條指令,它用以返回到調(diào)用這個子程序的斷點處。段內(nèi)返回指令是把SP所指的堆棧頂部的一個字的內(nèi)容彈回到指令指針,且SP加2。若是段間返回指令,除了上述操作外,把新的SP所指的堆棧頂部的一個字的內(nèi)容彈回到CS,SP再加2。
RET指令對標(biāo)志位無影響。六、控制轉(zhuǎn)移指令②RET
指令:(續(xù))RET
n
(帶立即數(shù)返回指令):這種指令允許返回地址出棧后,再從堆棧中彈出
n個字節(jié)的數(shù)據(jù),也就是讓SP再加上
n,n為0000~FFFFH范圍內(nèi)的任何一個偶數(shù)。例如,指令RET 8表示從堆棧中彈出地址后,再使SP
的值加上8。RET
n
指令可以讓調(diào)用過程的主程序通過堆棧向過程傳遞參數(shù)。這些參數(shù)必須在調(diào)用過程前推入堆棧,過程在運行中可以通過堆棧指針找到它們。當(dāng)過程返回時,這些參數(shù)已沒有用處,應(yīng)該把它們從堆棧中彈出。使用帶立即數(shù)返回指令后,可以在過程返回主程序時,使SP自動增量,從而不需要用POP指令就能把這些參數(shù)從堆棧中彈出。六、控制轉(zhuǎn)移指令4.
中斷指令中斷的概念所謂中斷是指計算機在執(zhí)行正常的程序的過程中,由于某些事件發(fā)生,需要暫時終止當(dāng)前程序的運行,轉(zhuǎn)到中斷服
務(wù)程序去為臨時發(fā)生的事件服務(wù),中斷服務(wù)程序執(zhí)行完畢后,又返回正常程序繼續(xù)運行,這個過程稱為中斷。六、控制轉(zhuǎn)移指令4.
中斷指令8088的中斷源分為內(nèi)部中斷和外部中斷內(nèi)部中斷包括:除法運算出錯和溢出錯誤等,或是為便于對程序進(jìn)行調(diào)試而設(shè)置的。此外,也可在程序中安排中斷指令
INT
n
,產(chǎn)生內(nèi)部中斷。外部中斷主要用以處理I/O設(shè)備與CPU之間的通信等。當(dāng)
CPU響應(yīng)中斷時,需要保存IP當(dāng)前值,保存標(biāo)志位等,然后通過一個中斷向量表,實現(xiàn)間接調(diào)用。六、控制轉(zhuǎn)移指令4.
中斷指令①
軟件中斷指令
INT
n
;n
=
0
~
255操作:CPU先將標(biāo)志寄存器內(nèi)容入棧保護(hù),再把當(dāng)前斷點的段基地址CS和偏移地址IP入棧保護(hù),并清除中斷標(biāo)志
IF和單步標(biāo)志TF。然后將中斷類型號n
乘以4,找到中斷服務(wù)程序的入口地址表的表頭地址,從中斷向量表中獲得中斷服務(wù)程序的入口地址,將其置入CS和IP寄存器,
CPU就自動轉(zhuǎn)到相應(yīng)的中斷服務(wù)程序中去執(zhí)行。六、控制轉(zhuǎn)移指令②INTO
溢出中斷指令當(dāng)帶符號數(shù)進(jìn)行算術(shù)運算時,如果溢出標(biāo)志
OF=1,則可由INTO指令產(chǎn)生類型為4的中斷,若OF=0,則INTO指令不產(chǎn)生中斷,CPU繼續(xù)往下執(zhí)行指令。為此,在帶符號數(shù)算術(shù)運算指
令之后,應(yīng)安排一條INTO指令,一旦溢出就能
及時向CPU提出中斷請求。六、控制轉(zhuǎn)移指令③IRET
中斷返回指令所有中斷服務(wù)程序的最后一條指令必須是
IRET,用以退出中斷過程,返回到斷點處。該指令執(zhí)行時,先從堆棧中依次彈出程序斷點,送到
IP和CS寄存器中,接著彈出標(biāo)志寄存器的內(nèi)容,送回標(biāo)志寄存器,然后按CS:IP的值使CPU返回斷點,繼續(xù)執(zhí)行原來被中斷的程序。六、控制轉(zhuǎn)移指令JCXZOPRD測試轉(zhuǎn)移指令功能:根據(jù)CX寄存器的內(nèi)容是否為0,使程序產(chǎn)生分支,進(jìn)入不同程序段。若(CX)=0,則轉(zhuǎn)移。六、控制轉(zhuǎn)移指令JCXZ
若CX為0
轉(zhuǎn)移指令格式:JCXZ 標(biāo)號功能:若CX寄存器為零,則轉(zhuǎn)移到指令中標(biāo)號所指定的地址處,否則將往下順序執(zhí)行,它不對CX寄存器進(jìn)行自動減1的操作。這條指令主要用在循環(huán)程序開始處。為了要使程序跳過循環(huán),只要事先把CX寄存器清零。六、控制轉(zhuǎn)移指令七、串操作指令*
串操作指令是用于處理存放在存儲器中的字或字節(jié)數(shù)據(jù),字符串長度可達(dá)64K字節(jié)。*串操作指令共有五種基本指令,可以對字符串進(jìn)行傳送、比較、搜索及存和取操作。*在串操作指令前加重復(fù)前綴,指令就重復(fù)執(zhí)行,直至CX寄存器中的操作次數(shù)滿足為止,重復(fù)過程
可以被中斷。*串操作指令的源串位于當(dāng)前數(shù)據(jù)段中,以SI為指針,目的串必須位于當(dāng)前附加段中,以DI為指針。每執(zhí)行一次串操作指令,指針SI和DI會自動修改,標(biāo)志位DF=0為遞增方向,這時在每次操作后SI、DI增量,字節(jié)操作時加1,字操作時加2;DF=1為遞減方向,這時在每次操作后SI、DI減量,字節(jié)操作時減1,字操作時減2。*要處理的字符串長度(字節(jié)或字?jǐn)?shù))放在CX寄存器中。七、串操作指令1、MOVS串傳送指令(不影響標(biāo)志位)格式:1)
MOVS
OPRD1,OPRD22)MOVSB
(字節(jié)傳送指令)MOVSW
(字傳送指令)功能:把由SI作指針的源串中的一個字節(jié)或一個字,傳送到由DI作指針的目的串中,且自動修改指針SI和DI??煞奖愕貙崿F(xiàn)在存儲單元之間傳送數(shù)據(jù)。若在指令前加前綴REP
則可執(zhí)行至CX=0
。七、串操作指令例:編寫程序段把數(shù)據(jù)段中以SRC為偏移地址,長度為
100個字節(jié)的字符串,傳送到附加段中以LOC為偏移地址的存儲區(qū)域中。SI,SRCDI,LOCCX,100;清除DF,地址增量程序段:LEALEAMOVCLDREP
MOVSBAGAIN:MOVSDECJNZLOC,SRCCXAGAIN指令REP
MOVSB也可用幾條指令代替七、串操作指令2)CMPSB
(字節(jié)操作)CMPSW
(字操作)功能:將以SI為指針的源串中的一個字(或字節(jié))與DI為指針的目的串中的一個字(或字節(jié))相比較(相減),但不影響操作數(shù),結(jié)果反映在標(biāo)志位上,同時相應(yīng)修改源串和目的串的指針,指向串中的下一個元素。標(biāo)志位:AF、CF、OF、PF、ZF和SF反映兩個串的相應(yīng)元素之間的關(guān)系。2、CMPS串比較指令格式:1)
CMPS
OPRD1,OPRD2在CMPS指令前可以加重復(fù)前綴,即REPECMPS或REPZ CMPS
;其功能相同,若比較結(jié)果為CX≠0(指定的長度還未比較完)和ZF=1(兩串相等),則重復(fù)比較,直至CX=0(比完了)或ZF=0(兩串不相等)時才停止操作。也可改用重復(fù)前綴REPNE或REPNZ,它們表示:若
CX≠0(串沒有結(jié)束)和串不等(ZF=0)則重復(fù)比較,直至CX=0或ZF=1時才停止比較。例:在自KA和KB單元開始各有一個由30個字符組成的字符串,檢查這兩個字符串是否相等,并在GG單元中建立一個標(biāo)志(相等為00,不等為FFH)初始化(KA)和(KB)相應(yīng)字符比較串相等否?0送GGFF送GG暫停YN程序段:LEA
SI,KALEA
DI,KBMOV
CX,30CLDREPE
CMPSBJNZ
L1MOV
GG,0JMP
L2L1:
MOV
GG,0FFHL2:
HLT初始化:KA指針?biāo)蚐IKB指針?biāo)虳I串長送CX指針增量變化功能:
*
將AL(字節(jié)操作)或AX(字操作)的內(nèi)容減去附加段中以DI為指針的目的串元素,結(jié)果反映在標(biāo)志位上,但不改變目的串元素及累加器的內(nèi)容。*操作后自動修改指針DI,使之指向下一個待搜索的串元素。3、SCAS串搜索指令格式:1)
SCAS
目的串2)
SCASB
或SCASW利用SCAS指令,可在內(nèi)存中搜索所需要的數(shù)據(jù)(關(guān)鍵字)。指令執(zhí)行前應(yīng)先將關(guān)鍵字存放在累加器中。SCAS指令前也可加重復(fù)前綴REPE/REPZ,表示相等繼續(xù)搜索,不等提前退出; REPNE/REPNZ表示不等繼續(xù)搜索,相等提前退出。七、串操作指令例:內(nèi)存中以BUF0單元開始的區(qū)域連續(xù)存放著一個長度為80的字符串(ASCII碼串),查找字符串中是否有字符‘B’,若有,將關(guān)鍵字的地址送BX,若沒有查到,則將BX寄存器清0。塊首址送DI關(guān)鍵字送AL塊長送CX增量調(diào)整指針?biāo)阉麝P(guān)鍵字搜索到否?塊指針減一0送BX暫停YNDI送BX程序段:LEA
DI,BUF0MOV AL,‘
B’MOV
CX,80CLDREPNE
SCASBJZ
NEXTMOV
BX,0JMP
DONENEXT:
DEC
DIMOV
BX,DIDONE:
HLT功能:把數(shù)據(jù)段中以SI為指針的串元素,傳送到AL(字節(jié)操作)或AX(字操作)中,同時修改SI,使它指向串中的下一個元素。
該指令一般不加重復(fù)前綴。4、LODS從串中取指令格式:1)
LODS
SRC2)LODSB或LODSW例:設(shè)
(DS)
=
7000H, (SI)
=0100H,(70100H)
=08H,
(70101H)
=12H,
DF=0,執(zhí)行指令
LODSW
后,(AX)
=1208H,
(SI)
=
0102H
.七、串操作指令功能:把累加器AL或AX中的一個字節(jié)或字,傳送到附加段中以DI為目標(biāo)指針的目的串中,同時修改指針DI,以指向串中的下一個單元。STOS指令可與REP重復(fù)前綴連用,即執(zhí)行指令REPSTOS,能方便地用累加器中的一個常數(shù),對一個數(shù)據(jù)串進(jìn)行初始化。5、STOS存入串指令格式:1)
STOS
OPRD2)STOSB
或STOSW例:設(shè)(DS)=2000H,(ES)=1000H,(DI)
=
0500H
,
(AL)
=20H
,
(CX)
=10
,
DF
=0執(zhí)行指令REP STOSB
后,內(nèi)存中10500H
~
10509H單元被置為20H,同時使
(DI)=050AH,(CX)=0。七、串操作指令例:在以BLOCK為起始地址的內(nèi)存緩沖區(qū)中,有一個長度為100
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度年福建省高校教師資格證之高等教育心理學(xué)考試題庫
- 2024年度山西省高校教師資格證之高等教育法規(guī)高分通關(guān)題型題庫附解析答案
- 第七章 膳食營養(yǎng)指導(dǎo)與疾病預(yù)防課件
- 二年級數(shù)學(xué)(上)計算題專項練習(xí)匯編
- 保密工作培訓(xùn)心得體會
- 2020屆中考科學(xué)(杭州版)復(fù)習(xí)同步練習(xí)題:第三篇-主題3-第六單元-電流熱效應(yīng)和電功率的測量
- 購買保險欺騙退還本金指導(dǎo)案例
- 高級室內(nèi)裝飾設(shè)計人員理論知識試題求答案(5篇模版)
- 2024年專業(yè)石材安裝服務(wù)協(xié)議模板
- 2024年度德邦速運協(xié)議條款明細(xì)
- 期中測評試卷(1-4單元)(試題)-2024-2025學(xué)年人教版三年級數(shù)學(xué)上冊
- GB/T 15822.1-2024無損檢測磁粉檢測第1部分:總則
- 新質(zhì)生產(chǎn)力解讀課件
- 學(xué)生對教師評價表(共8頁)
- 批發(fā)零售大個體 E204-3批發(fā)和零售業(yè)產(chǎn)業(yè)活動單位(個體經(jīng)營戶)商品銷售和庫存
- 異辛酸鈉合成工藝及建設(shè)項目
- 西電計組課程設(shè)計報告
- 汽車買賣合同工商示范文本
- SC鍍鋅鋼管緊定式連接施工工法(共12頁)
- 梅克爾憩室PPT參考幻燈片
- 動車組火災(zāi)檢測(報警)系統(tǒng)
評論
0/150
提交評論