微型計(jì)算機(jī)原理及接口技術(shù)第3章_第1頁
微型計(jì)算機(jī)原理及接口技術(shù)第3章_第2頁
微型計(jì)算機(jī)原理及接口技術(shù)第3章_第3頁
微型計(jì)算機(jī)原理及接口技術(shù)第3章_第4頁
微型計(jì)算機(jī)原理及接口技術(shù)第3章_第5頁
已閱讀5頁,還剩111頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

匯編語言第3章8086的尋址方式和指令系統(tǒng)

1、尋址方式:指令中用于說明操作數(shù)所在地址的方法,或者說是為獲取實(shí)際操作數(shù)地址而采取的方法稱為尋址方式。8086/8088的基本尋址方式有七種。2.指令:讓計(jì)算機(jī)完成某種操作的命令稱為指令。3.指令系統(tǒng):指令的集合即為指令系統(tǒng)。不同的計(jì)算機(jī)有不同的指令系統(tǒng),匯編語言的指令語句都與機(jī)器指令一一對應(yīng),匯編語言通過匯編程序?qū)⑵浞g成機(jī)器指令代碼(目標(biāo)代碼),讓CPU執(zhí)行某種操作。4.指令的一般格式:

[標(biāo)號:]

操作碼

[目的操作數(shù)][,源操作數(shù)];[注釋]AAA:MOVAX,CX;把CX寄存器的內(nèi)容送AX

STI;中斷標(biāo)志IF=1JMPAAA;跳轉(zhuǎn)到AAA標(biāo)號字段:是一個(gè)任選字段,性質(zhì)為符號偏移量,一般用于標(biāo)記跳轉(zhuǎn)指令的目的地址.在匯編過程中標(biāo)號會被替換為一個(gè)16位的數(shù)值偏移量.標(biāo)號必須位于語句開頭,結(jié)尾必須使用冒號。操作碼字段:也稱為指令助記符,指令助記符是必不可少的,指計(jì)算機(jī)所要執(zhí)行的操作,或稱為指出操作類型,是一種助記符。操作數(shù)字段:指在指令執(zhí)行操作的過程中所需要的操作數(shù)。該字段除可以是操作數(shù)本身外,也可以是操作數(shù)地址或是地址的一部分,還可以是指向操作數(shù)地址的指針或其它有關(guān)操作數(shù)的信息。注釋字段:是一個(gè)任選字段,用于說明程序片段或指令的功能,匯編過程中不處理這樣的字段,它只是用于提高源程序的可讀性.注釋必須使用分號作為開始。注釋是對該條或該段程序的解釋,可選項(xiàng)。[標(biāo)號:]

操作碼

[目的操作數(shù)][,源操作數(shù)];[注釋]3.18086/8088尋址方式一、立即尋址二、寄存器尋址三、直接尋址四、寄存器間接尋址五、寄存器相對尋址六、基址變址尋址七、相對基址變址尋址一、立即尋址操作數(shù)直接由指令提供的尋址方式稱為立即尋址方式。在立即尋址方式中所提供的操作數(shù)直接包含在指令中。它緊跟在操作碼的后面,與操作碼一起放在代碼段區(qū)域中。例如:MOVAX,3000HMOVAL,26HMOVCX,2A50H特點(diǎn):(1)立即數(shù)可以是8位的,也可以是16位的。若是16位的,則存儲時(shí)低位在前,高位在后。只能是整數(shù),不能是小數(shù)、變量或其它數(shù)據(jù)類型。以A~F打頭的數(shù)字,前面加數(shù)字0,防止與其他符號混淆。如:MOVAX,0FFFFH(2)立即數(shù)只能作為源操作數(shù),立即尋址主要用來給寄存器或存儲器賦初值。

(3)速度快(操作數(shù)直接由指令中獲得,不需要運(yùn)行總線周期)(4)立即數(shù)作為指令操作碼的一部分與操作碼一起放在代碼段區(qū)域中。【例3.1】MOVAX,

10執(zhí)行后(AX)=?其中:源操作數(shù)為立即尋址方式,立即數(shù)為10,存放在指令的下一單元。執(zhí)行:10→AX執(zhí)行后:(AX)=000AH【例3.2】MOVDL,3210HMOVDX,3210HMOVDL,10HMOVAX,A200HMOVAX,0A200H×√√×√二、寄存器尋址操作數(shù)存放在CPU的內(nèi)部寄存器中的尋址方式。例如:MOVDX,AX;把AX寄存器的內(nèi)容送給DX

MOVCL,AH特點(diǎn):(1)操作數(shù)放在CPU的寄存器中。

16位:AX、BX、CX、DX、SI、DI、SP、BP8位:AH、AL、BH、BL、CH、CL、DH、DL(2)采用寄存器尋址時(shí),操作就在CPU內(nèi)部進(jìn)行,不需要使用總線周期,速度快。(3)一條指令中,既可以對源操作數(shù)采用寄存器尋址,也可以對目的操作數(shù)采用寄存器尋址,也可二者均采用寄存器尋址。(4)源操作數(shù)的長度必須與目的操作數(shù)一致?!纠?.3】下列程序執(zhí)行后,(AX)=?,(BX)=?

MOVAX,1234HMOVBX,5678HADDAX,BX

該程序中MOV指令為數(shù)據(jù)傳送指令操作符,ADD指令為加法指令操作符,三條指令皆為雙操作數(shù)指令。第一、二條指令A(yù)X、BX皆為目的操作數(shù)地址,為寄存器尋址方式。第三條指令中,AX為目的操作數(shù),BX為源操作數(shù)。皆為寄存器尋址方式。

(AX)=68ACH,(BX)=5678H三、直接尋址操作數(shù)的有效地址EA(偏移地址)由指令直接提供的尋址方式稱為直接尋址方式。

在直接尋址方式中操作數(shù)地址的16位偏移量直接包含在指令中,它與操作碼一起存放在代碼段區(qū)域,操作數(shù)一般在數(shù)據(jù)段區(qū)域中,它的地址為數(shù)據(jù)段寄存器DS加上這16位地址偏移量。MOVAX,[2000H];設(shè)(DS)=3000H特點(diǎn):(1)如果指令中沒有指明操作數(shù)存放在哪一段,則系統(tǒng)默認(rèn)為數(shù)據(jù)段DS。如上例可寫成:MOVAX,[2000H]操作數(shù)的實(shí)際地址為數(shù)據(jù)段寄存器DS左移4位加上操作數(shù)的有效地址(16位地址偏移量)16位地址偏移量。(2)操作數(shù)的有效地址與操作碼一起存放在代碼段區(qū)域,操作數(shù)一般在數(shù)據(jù)段區(qū)域中。(3)直接尋址是對存儲器進(jìn)行訪問時(shí)可采用的最簡單的形式。這種尋址方法是以數(shù)據(jù)段的地址為基礎(chǔ),可在多達(dá)64KB的范圍內(nèi)尋找操作數(shù)。(4)段超越前綴:如果要對除DS以外的其他段寄存器(代碼段、堆棧段和附加段)所指出的存儲區(qū)進(jìn)行直接尋址,應(yīng)在指令中指定段寄存器-----段超越前綴。

MOVBX,ES:[3000H];操作數(shù)在附加段ES(不能省略)

MOVAX,[2000H];數(shù)據(jù)段(可省略DS)(3)直接尋址的地址如果是數(shù)值地址,則必須用“[]”括起來,以區(qū)別立即數(shù)。允許用符號地址(即程序中的標(biāo)號)代替數(shù)值地址。【例3.4】寄存器AX內(nèi)容為:(AX)=1212H,數(shù)據(jù)段中定義的某數(shù)據(jù),其偏移地址是2000H,(DS)=3000H,(32000H)=4545H。執(zhí)行指令:MOVAX,[2000H]執(zhí)行后:(AX)=?執(zhí)行:(32000H)→(AX)執(zhí)行后:(AX)=4545H【例3.4】MOVAX,[2345H]MOVDX,AXMOVAX,2345HMOV[2345H],0AAAAH

四、寄存器間接尋址操作數(shù)的有效地址EA(偏移量)在以下四個(gè)寄存器SI、DI、BP、BX之一中。分為兩種情況:(1)以SI、DI、BX間接尋址,則通常操作數(shù)在現(xiàn)行數(shù)據(jù)段區(qū)域中,即數(shù)據(jù)段寄存器(DS)×16加上SI、DI、BX中的16位偏移量,為操作數(shù)的物理地址。

例如:MOVBX,[SI]

,操作數(shù)地址是:(DS)╳

16+(SI)(2)以寄存器BP間接尋址,則操作數(shù)在堆棧段區(qū)域中。即堆棧段寄存器(SS)×16與BP的內(nèi)容相加作為操作數(shù)的地址,例如:MOVAX,[BP]

,操作數(shù)地址是:(SS)╳

16+(BP)

若在指令中有段超越前綴,則BP的內(nèi)容也可以與其它的段寄存器相加,形成操作數(shù)地址。例如:MOVAX,DS:[BP],操作數(shù)地址是:(DS)╳

16+(BP)特點(diǎn):(1)指令中的基址寄存器是BX、SI、DI,則默認(rèn)為操作數(shù)在數(shù)據(jù)段DS中,指令中的基址寄存器若是BP,則默認(rèn)為操作數(shù)在堆棧段SS中。(2)如果要對其他段寄存器所指出的區(qū)域進(jìn)行尋址,則在指令中應(yīng)指出指定超越段前綴。(3)寄存器間接尋址方式適用于表格處理。執(zhí)行完一條指令后,只需修改寄存器的內(nèi)容(+1、+2、……)就可取出表格中的相應(yīng)項(xiàng)。(4)間址的寄存器用“[]”括起來,以區(qū)別寄存器尋址?!纠?.4】MOVAX,[BX]

若(DS)=2000H,(BX)=1000H,(AX)=2030H,(21000H)=0A0H,(21001H)=50H,指令執(zhí)行后,(AX)=?(AX)=50A0H物理地址=2000H╳16

+1000H=21000H【例3.4】MOVDX,[SI]MOVAX,[0023H]MOVAX,CXMOVAX,2345HMOV[0023H],01111HMOVAX,[BP]MOVAX,DS:[BP]MOVAX,ES:[0023H]

五、寄存器相對尋址(直接變址尋址、變址尋址)操作數(shù)的有效地址EA是在指令中給定一個(gè)基址寄存器(或變址寄存器)的內(nèi)容和一個(gè)8位或16位的相對偏移量兩者之和。段寄存器用DS段寄存器用SS有效地址EA計(jì)算方法如下:特點(diǎn):(1)SI、DI、BX默認(rèn)的段寄存器為DS,BP默認(rèn)的段寄存器為SS。(2)可以使用段寄存器超越前綴來尋址其他段。(3)寄存器相對尋址方式適用于表格處理。表首的地址可設(shè)置為偏移量指針,利用修改基址或變址寄存器的內(nèi)容來獲得表格中的內(nèi)容?!纠?.5】ADD[BX]+6,AX設(shè)(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0050H執(zhí)行指令后:(AX)=?,(BX)=?,(DS)=?(20036H)=?(AX)=0040H,(BX)=0030H,(DS)=2000H,(20036H)=0090H。六、基址變址尋址操作數(shù)的有效地址是一個(gè)基址寄存器(BX或BP)和一個(gè)變址寄存器(SI或DI)兩個(gè)的和。但指令中不能同時(shí)出現(xiàn)兩個(gè)基址寄存器或兩個(gè)變址寄存器。例如:MOVAX,[BX+SI]特點(diǎn):(1)基址寄存器為BX時(shí),默認(rèn)為數(shù)據(jù)段DS,基址寄存器為BP時(shí),默認(rèn)為堆棧段SS;(2)可以使用段寄存器超越前綴來尋址其他段。(3)基址變址尋址方式適用于數(shù)組或表格處理。首地址可設(shè)置在基址寄存器中,變址寄存器用于訪問數(shù)組中的元素或表格中的內(nèi)容?;芳拇嫫骱妥冎芳拇嫫骶梢孕薷摹2僮鲾?shù)的有效地址EA計(jì)算方法如下:【例3.6】MOVAL,[BX+SI](或MOVAL,[BX][SI])若指令執(zhí)行前,(DS)=1000H,(BX)=0010H,(SI)=0002H,(10012H)=45H則有效地址EA=(BX)+(SI)=0012H,物理地址PA=(DS)×10H+EA=10012H指令執(zhí)行后(AL)=45H。七、相對基址變址尋址

把BX和BP看成是基址寄存器,把SI、DI看成是變址寄存器,把一個(gè)基址寄存器(BX或BP)的內(nèi)容加上一個(gè)變址寄存器(SI或DI)的內(nèi)容,再加上指令中指定的8位或16位偏移量(當(dāng)然要以一個(gè)段寄存器作為地址基準(zhǔn))作為操作數(shù)的偏移地址。例如:MOVAX,6[BX][SI]

相對基址變址尋址的表示形式:

6[BX][SI]或[BX+6][SI]或[BX+6+SI]

其中:方括號[]有相加的含義注意:(1)隱含尋址:操作數(shù)隱含在指令中。如:DAA,操作數(shù)隱含在AL中。(2)I/O端口尋址直接I/O端口尋址:指令中直接提供端口地址。如:INAL,60H

間接I/O端口尋址:指令中直接指出存放端口地址寄存器DX。如:MOVDX,303HINAL,DX(3)一條指令中可以同時(shí)存在幾種尋址方式。如:MOV[BX],AL練習(xí):指出下列指令中,源操作數(shù)和目的操作數(shù)分別采用的什么尋址方式。

MOVAX,1200HMOVAX,BXMOVAX,[1200H]MOVAX,[DI]MOV[BX],ES:[SI+1100H]MOVAX,[BP+SI]MOVAX,[BX][SI+1100H]立即尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址基址變址尋址相對基址變址尋址練習(xí):已知DS=2000H,BX=0100H,SI=0002H,存儲單元[20100H]~[20103H]依次存12H,34H,56H,78H,[21200H]~[21203H]依次存放2AH,4CH,B7H,65H,說明下列指令源操作數(shù)的尋址方式以及指令執(zhí)行完后AX寄存器的內(nèi)容。(1)MOVAX,1200H(2)MOVAX,BX(3)MOVAX,[1200H](4)MOVAX,[BX](5)MOVAX,[BX+1100H](6)MOVAX,[BX+SI](7)MOVAX,[BX][SI+1100H]AX=1200HAX=0100HAX=4C2AHAX=3412HAX=4C2AHAX=7856HAX=65B7H3.2指令的機(jī)器碼表示方法(P65----P70)

閱讀:

知識點(diǎn):匯編語言、機(jī)器語言、匯編語言源程序、匯編的方法。編碼方法:了解掌握。

3.38086指令系統(tǒng)

8086的指令可以分為六大類:

1、數(shù)據(jù)傳送指令

2、算術(shù)運(yùn)算指令

3、邏輯運(yùn)算和移位指令

4、字符串處理指令

5、控制轉(zhuǎn)移指令

6、處理器控制指令1、數(shù)據(jù)傳送指令

1)通用數(shù)據(jù)傳送指令

MOV、

PUSH、POPXCHG、XLAT2)輸入輸出指令

IN、OUT

3)目的地址傳送指令

LDS、LEA、LES4)標(biāo)志傳送指令

LAHF、SAHF、PUSHF、POPF1)、通用傳送指令

MOV目的,源;功能:完成字(16位)或字節(jié)(8位)數(shù)據(jù)傳送,[目的操作數(shù)OPRD1]←[源操作數(shù)OPRD2]注意:(1)MOV指令可在CPU內(nèi)部寄存器之間、寄存與存儲器之間傳送數(shù)據(jù)、立即數(shù)送到寄存器或存儲單元。(2)立即數(shù)不能作為目的操作數(shù),只能作為源操作數(shù)。

MOV1000H,AL;(╳)(3)CS、IP不能作為目的操作數(shù)。

MOVCS,AX;(╳)

MOVIP,AX;(╳)

(4)除源操作數(shù)為立即數(shù)外(mem←data),兩個(gè)操作數(shù)中必須有一個(gè)為寄存器。即不允許在兩個(gè)存儲器單元之間直接傳送數(shù)據(jù)。

MOV[2000H],[1000H];(╳)

MOVAL,AREAl;(√)

MOVAREA2,AL

(AREAl、AREA2為同一段內(nèi)的存儲單元地址)(5)通用傳送指令MOV是唯一允許以段寄存器作為操作數(shù)的指令,但不允許通過MOV指令直接以立即數(shù)方式給段寄存器賦值,不允許在兩個(gè)段寄存器之間直接傳送數(shù)據(jù)??梢酝ㄟ^AX為橋梁來完成這樣的傳送:

MOV

AX,DATAMOV

DS,AX

堆棧操作指令

PUSH源

功能:將源操作數(shù)壓入堆棧先修改堆棧指針SP,然后將數(shù)據(jù)壓入堆棧。

SP=SP-2;[SP]=操作數(shù)低8位;[SP+1]=操作數(shù)高8位。例如:PUSHBX

執(zhí)行過程為:SP=SP-2,[SP]=BH;[SP+1]=BL,

POP目的

功能:將數(shù)據(jù)彈出堆棧先將數(shù)據(jù)彈出堆棧,然后修改堆棧指針SP。SP=SP+2

注意:(1)堆棧存儲數(shù)據(jù)的原則為先進(jìn)后出(2)堆棧在存儲器中的位置由SS、SP確定。SP指針可由MOV指令在初始化中設(shè)置。在8086系統(tǒng)中堆棧指針SP始終指向棧頂,即:始終指向最后壓入棧中的數(shù)據(jù)的地址。(3)8086系統(tǒng)中棧的操作是以字為單位的。SP總是指向偶地址單元。一次入棧操作,SP-2,直至SP=0棧滿為止。一次出棧操作,SP+2。(4)操作數(shù)可以是16位通用寄存器、段寄存器(CS除外)和內(nèi)存單元,也可以用除立即尋址外的所有尋址方式。(5)PUSH、POP指令必須成對使用,在一個(gè)程序中不能出現(xiàn)非成對的PUSH、POP指令例:設(shè)SS=2000H,SP=40H,BX=3120H,AX=25FEH,

依次執(zhí)行下列指令:

PUSHBXPUSHAXPOPBX

說明堆棧中的數(shù)據(jù)和

SP的變化情況。交換操作指令

XCHG目的,源;功能:完成數(shù)據(jù)交換,把一個(gè)字節(jié)或一個(gè)字的源操作數(shù)與目的操作數(shù)相交換。例1:XCHGAL,CL例2:設(shè)AX=2000H,DS=3000H,BX=1800H,(31A00H)=1995H,執(zhí)行指令:

XCHGAX,[BX+200H]

指令執(zhí)行后:(AX)=1995H,(31A00H)=2000H

注意:(1)可實(shí)現(xiàn)8位或16位數(shù)據(jù)的交換。兩個(gè)操作數(shù)的位數(shù)必須相同。(2)交換能在寄存器之間、寄存器與存儲器之間進(jìn)行。兩個(gè)操作數(shù)中必須有一個(gè)為寄存器。即不允許在兩個(gè)存儲器單元之間直接交換數(shù)據(jù)。(3)段寄存器和立即數(shù)不能作為一個(gè)操作數(shù)。(4)交換指令XCHG不影響標(biāo)志位。表轉(zhuǎn)換指令

XLAT轉(zhuǎn)換表名或XLAT;功能:完成一個(gè)字節(jié)的代碼轉(zhuǎn)換。主要用于數(shù)制轉(zhuǎn)換、函數(shù)表查表、代碼轉(zhuǎn)換等場合。例3.31TABLEDB40H,79H,24H,30H,19HDB12H,02H,78H,00H,18H

MOVBX,OFFSETTABLEMOVAL,5XLAT

;查表;(AL)=12H注意:(1)表的基地址在BX中(表首地址)。(2)寄存器AL的內(nèi)容作為某一項(xiàng)到表首的偏移量表格最多包含256字節(jié)。(3)轉(zhuǎn)換后的結(jié)果存放在AL中。2)輸入輸出指令(1)輸入指令I(lǐng)N

INAL,端口地址

INAX,端口地址

INAL,DX;端口地址存放在DX寄存器中

INAX,DX功能:從I/O端口輸入數(shù)據(jù)至AL或AX。注意:當(dāng)端口地址≤255(00~FFH)時(shí),可用直接端口尋址。當(dāng)端口地址≥255(00FFH~FFFF)時(shí),則必須用DX間接尋址(16位端口地址),保存端口地址,最多可尋址64K個(gè)端口。(2)輸出指令OUT

OUT端口地址,AL OUT端口地址,AX OUTDX,AL OUTDX,AX功能:將AL或AX的內(nèi)容輸出至I/O端口。IN、OUT指令提供了8位和16位兩種使用方式,選用哪一種,取決于外設(shè)端口的數(shù)據(jù)總線的寬度。若外設(shè)端口的數(shù)據(jù)總線為8位,則只能用8位指令,使用AL;若外設(shè)端口的數(shù)據(jù)總線為16位,則只能用16位指令,使用AX。例:INAL,0F1H;從F1H端口讀入一個(gè)字節(jié)到AL

INAX,80H;從80H端口讀入低位字節(jié)到AL,;從81H端口讀入高位字節(jié)到AX.

MOVDX,310H;端口地址送DXINAL,DX

OUT85H,AL;AL中的一個(gè)字節(jié)寫入端口85H

MOVDX,300H;端口地址送DXOUTDX,AL

3)地址目標(biāo)傳送指令(1)取有效地址指令LEA

LEA目的,源功能:把源操作數(shù)的地址偏移量傳送至目的操作數(shù)。注意:①源操作數(shù)必須是一個(gè)存儲單元地址。目的操作數(shù)必須是一個(gè)16位的通用寄存器。②傳送到16位的通用寄存器的是存儲器的有效地址EA,而不是該存儲單元的內(nèi)容。例:LEABX,[2728H]

;BX←2728H

LEABX,[BX+SI]

;BX←(BX+SI)③通常用于將一個(gè)16位的通用寄存器作為地址指針。例:假設(shè)SI=1000H,DS=5000H,(51000H)=1234H

執(zhí)行指令

LEABX,[SI]

則BX=1000HMOVBX,[SI]

則BX=1234H(2)將雙字地址指針裝入DS和另一個(gè)寄存器指令LDS

LDS目的,源功能:把4個(gè)字節(jié)的地址指針(包括2個(gè)字節(jié)的段地址和2個(gè)字節(jié)的偏移量)傳送到DS和reg中,完成一個(gè)地址指針的傳送。指令將段地址送入DS,偏移量部分送入一個(gè)16位的指針寄存器或變址寄存器。例如:LDSSI,[BX]

;將把BX所指的連續(xù)4個(gè)字節(jié)單元的內(nèi)容,低2個(gè)字節(jié)送入SI,高2個(gè)字節(jié)送入DS。注意:①源操作數(shù)可以是存儲單元地址,或用通用寄存器作間址的存儲單元地址。目的操作數(shù)必須是16位的通用寄存器。②目的操作數(shù)的段地址必須送到DS中。③傳送的是存儲單元的內(nèi)容,而不是存儲器的有效地址EA

。例:假設(shè)DS=1200H,(12450H)=F346H,(12452H)=0A90H

執(zhí)行指令

LDSSI,[450]

則SI=F346H,DS=0A90H

(3)將地址指針裝入ES和另一個(gè)寄存器指令LES

LES目的,源功能:這條指令除將地址指針的段地址送入ES外,其他同LDS。例如:LESDI,[BX]4.標(biāo)志寄存器傳送指令標(biāo)志寄存器傳送指令共有四條指令。均影響標(biāo)志位。標(biāo)志寄存器FR(即程序狀態(tài)字PSW

)(1)

LAHF(LOADAHWITHFLAG)

LAHF;(AH)←(FR)0~7功能:將標(biāo)志寄存器中的SF、ZF、AF、PF和CF(即低8位)傳送至AH寄存器的指定位,空位沒有定義。(2)SAHF(STOREAHWITHFLAG)

SAHF;(FR)0~7←(AH)功能:將寄存器AH的指定位,送至標(biāo)志寄存器的SF、ZF、AF、PF和CF位(即低8位)。根據(jù)AH的內(nèi)容,影響上述標(biāo)志位,對OF、DF和IF無影響。(3)PUSHF(PUSHFLAG)

PUSHF;將FR入棧。功能:將標(biāo)志寄存器FR壓入堆棧頂部,同時(shí)修改堆棧指針,不影響標(biāo)志位。(4)POPF(POPFLAG)

POPF

;將棧頂?shù)膬?nèi)容彈出到FR中。功能:堆棧頂部的一個(gè)字,傳送到標(biāo)志寄存器FR,同時(shí)修改堆棧指針,影響標(biāo)志位。二、算術(shù)運(yùn)算指令

8086提供加、減、乘、除四種基本算術(shù)操作。這些操作都可用于字節(jié)或字的運(yùn)算,也可以用于帶符號數(shù)與無符號數(shù)的運(yùn)算。

帶符號數(shù)用補(bǔ)碼表示。同時(shí)8086也提供了十進(jìn)制調(diào)整指令,故可以進(jìn)行十進(jìn)制算術(shù)運(yùn)算。

算術(shù)運(yùn)算指令涉及兩種數(shù)據(jù)類型無符號數(shù)

8位無符號數(shù)的范圍為0~25516位無符號數(shù)的范圍為0~65535有符號數(shù)(數(shù)據(jù)本身用補(bǔ)碼表示)

8位有符號數(shù)的范圍為-128~+12716位有符號數(shù)的范圍為-32768~+32767算術(shù)運(yùn)算指令分為:1)加法指令

ADD、ADC、INC2)減法指令

SUB、SBB、DEC、NEG、CMP3)乘法指令

MUL、IMUL4)除法指令

DIV、IDIV、CBW、CWD5)BCD碼運(yùn)算指令1.加法指令(Addition)(1)加法指令A(yù)DD

ADD目的,源功能:完成兩個(gè)操作數(shù)相加,結(jié)果送至目的操作數(shù)中。(2)帶進(jìn)位位加法指令A(yù)DC

ADC目的,源;目的源+目的+CF功能:這條指令與ADD指令類似,只是在兩個(gè)操作數(shù)相加時(shí),要把進(jìn)位標(biāo)志CF的目前值加上去,結(jié)果送至目的操作數(shù)。ADC指令主要用于多字節(jié)運(yùn)算中。注意:(1)源操作數(shù)為寄存器、存儲單元,立即數(shù)。(2)目的操作數(shù)為寄存器及存儲單元。(3)影響6個(gè)標(biāo)志位CF、OF、PF、SF、ZF和AF。例如:

ADDAL,18HADCBL,CLADCAX,BXADDAL,COST[BX]ADDCOST[BX],BL⑶增量(加1)指令I(lǐng)NC格式:INC目的;功能:完成對指定的操作數(shù)加1,然后返回目的操作數(shù)。此指令主要用于在循環(huán)程序中修改地址指針和循環(huán)次數(shù)等。如:INCBX;(BX)←(BX)+1INCCX;(CX

)←(CX

)+1注意:

INC指令執(zhí)行的結(jié)果影響除進(jìn)位標(biāo)志CF以外的5個(gè)標(biāo)志位AF、OF、PF、SF和ZF。⑴減法指令SUB格式:SUB目的,源;功能:將目的操作數(shù)減去源操作數(shù),結(jié)果送目的操作數(shù)。例如:SUB AX,BX;(AX)←(AX)-(BX)

SUB [BP],CL;DS:BP存儲單元的內(nèi)容減去CL的內(nèi)容

SUBDX,1850H2、減法指令⑵帶進(jìn)位位減法指令SBB格式:

SBB目的,源;目的←目的-源-CF

功能:主要用于多字節(jié)減法。⑶減量(減1)指令DEC格式:DEC

目的例如:DECBX⑷取負(fù)(求補(bǔ))指令NEG格式:NEG目的功能:對操作數(shù)取補(bǔ),即用零減去操作數(shù)。操作數(shù)為通用寄存器、存儲單元。例如:NEGAL;(AL)←0-(AL)(AL=0011

1100)則取補(bǔ)后為1100

0100即0000

0000-0011

1100=1100

0100

若在字節(jié)操作時(shí)對-128(或在字操作時(shí)對-32768取補(bǔ)),則操作數(shù)沒變化,但標(biāo)志OF置位。此指令影響標(biāo)志AF、CF、OF、PF、SF和ZF。此指令的結(jié)果一般總是使標(biāo)志CF=1。除非在操作數(shù)為零時(shí),才使CF=0。⑸比較指令CMP格式:CMP目的,源功能:

比較指令完成兩個(gè)操作數(shù)相減,使結(jié)果反映在標(biāo)志位上,但并不把結(jié)果送回目的操作數(shù)(即比較指令是不帶回送的減法)。比較指令主要用于比較兩個(gè)數(shù)之間的關(guān)系。在比較指令之后,根據(jù)ZF標(biāo)志即可判斷兩者是否相等。如:CMPAL,80H根據(jù)符號位判斷比較結(jié)果:(1)兩個(gè)數(shù)A、B相等用ZF=1判斷。(2)兩個(gè)無符號數(shù)的大小用CF判斷。

CF=1,A<B;CF=0,A>B。(3)兩個(gè)有符號數(shù)的大小用SF⊕OF判斷。

SF⊕OF=1,A<B;SF⊕OF=0,A>B。3、乘法指令乘法指令分為無符號乘法指令和帶符號乘法指令兩類:(1)無符號乘法指令MUL(8位/16位)格式:

MUL源;

8位:(AX)←(AL)╳(OPRD)

16位:(DX)(AX)←(AX)╳(OPRD)功能:完成字節(jié)與字節(jié)相乘、字與字相乘,且默認(rèn)的操作數(shù)放在AL或AX中,而源操作數(shù)由指令給出。8位數(shù)相乘,結(jié)果為16位數(shù),放在AX中;16位數(shù)相乘結(jié)果為32位數(shù),高16位放在DX,低16位放在AX中。規(guī)定:①源操作數(shù)只能是通用寄存器和存儲單元,不能為立即數(shù)。②影響標(biāo)志位CF和OF。(2)帶符號數(shù)乘法指令I(lǐng)MUL(8位/16位)格式:

IMUL源;

8位:(AX)←(AL)╳(OPRD)

16位:(DX)(AX)←(AX)╳(OPRD)功能:這是一條帶符號數(shù)的乘法指令,同MUL一樣可以進(jìn)行字節(jié)與字節(jié)、字和字的乘法運(yùn)算。結(jié)果放在AX或DX,AX中。規(guī)定:同MUL。4、除法指令(1)無符號數(shù)除法指令DIV(8位/16位)

格式:DIV源;

8位:(AL)←(AX)/源操作數(shù)

(AH)(余數(shù))

16位:(AX)←(DX)(AX)/源操作數(shù)

(DX)(余數(shù))功能:完成字節(jié)與字節(jié)除法,且默認(rèn)的商放在AL中,余數(shù)在AH中;字與字除法,商放在AX中,余數(shù)放在DX中。(2)帶符號數(shù)除法IDIV

格式:IDIV源;

8位:(AL)←(AX)/源(AH)(余數(shù))16位:(AX)←(DX)(AX)/源(DX)(余數(shù))功能:該指令執(zhí)行過程同DIV指令,但I(xiàn)DIV指令認(rèn)為操作數(shù)的最高位為符號位,除法運(yùn)算的結(jié)果商的最高位也為符號位。除法指令注意點(diǎn):1、除法指令執(zhí)行后所有的標(biāo)志位都不確定,即或是0,或是1,但都無意義。2、用IDIV指令時(shí),如果商超出范圍,會作為除數(shù)為0的情況來處理,即產(chǎn)生0號中斷,不影響OF。3、8086指令系統(tǒng)中規(guī)定除數(shù)的符號和被除數(shù)的符號相同。4、數(shù)據(jù)擴(kuò)展。(3)字節(jié)轉(zhuǎn)換為字?jǐn)U展指令CBW格式:CBW功能:該指令執(zhí)行時(shí)將AL寄存器的最高位擴(kuò)展到AH,即若AL的D7=0(<80H,正數(shù)),則AH=0;若AL的D7=1(≥80H,負(fù)數(shù)),則AH=0FFH。

CBW指令不影響標(biāo)志位。(4)字轉(zhuǎn)換為雙字?jǐn)U展指令CWD格式:CWD功能:該指令執(zhí)行時(shí)將AX寄存器的最高位擴(kuò)展到DX,即若AX的D15=0,則DX=0;若AX的D15=1,則DX=0FFFFH。

CWD指令不影響標(biāo)志位。5)BCD碼運(yùn)算指令用4位二進(jìn)制碼表示一個(gè)十進(jìn)制碼,這種代碼叫BCD碼。分類:組合(壓縮)BCD碼非組合(非壓縮)BCD碼例如:十進(jìn)制:28

組合BCD碼:00101000

非組合BCD碼:0000001000001000

BCD碼只有0~9共10種編碼。結(jié)論:用普通二進(jìn)制數(shù)運(yùn)算指令對BCD碼進(jìn)行運(yùn)算,要進(jìn)行調(diào)整。BCD碼運(yùn)算例如:8+7=159+9=18用組合BCD碼表示:

0000100000001001+00000111+0000100100001111(0F)00010010(12)調(diào)整方法:在個(gè)位上補(bǔ)上一個(gè)6,即結(jié)果再加6。

0000111100010010+00000110+0000011000010101(15)00011000(18)相關(guān)的BCD轉(zhuǎn)換指令見下表。

十進(jìn)制調(diào)整指令指令格式指令說明AAA非壓縮的BCD碼加法調(diào)整(ASCII碼調(diào)整)DAAAAS非壓縮的BCD碼減法調(diào)整(ASCII碼調(diào)整)DAS壓縮的BCD碼減法調(diào)整AAM乘法后的非組合BCD碼調(diào)整AAD除法前的非組合BCD碼調(diào)整壓縮的BCD碼加法調(diào)整三、邏輯運(yùn)算和移位指令1)邏輯運(yùn)算指令A(yù)ND、OR、NOT、XOR、TEST2)移位指令(1)非循環(huán)(算術(shù)邏輯)移位指令

SAL、SHL、SAR、SHR(2)循環(huán)移位指令ROL、ROR、RCL、RCR1)邏輯運(yùn)算指令邏輯運(yùn)算指令包括:AND(與)、OR(或)、NOT(非)、XOR(異或)、TEST(測試)。比如:AND AX,0F0FH

;AX=3538H,將它們轉(zhuǎn)換成BCD碼

;指令執(zhí)行完AX=0508HOR AX,00FFH;AX和00FFH相或,保留低8位

XOR AX,AX

;AX內(nèi)容本身進(jìn)行異或,結(jié)果AX清零NOTBL;BL取反TEST和AND(與)執(zhí)行同樣操作,但TEST指令不送回操作結(jié)果,而僅僅影響標(biāo)志位。如:TESTAX,8000H

;如AX的最高位為1,則

ZF=0,否則ZF=1

例如:若要檢測AL中的最高位是否為1,為1則轉(zhuǎn)移。可用以下指令:

TESTAL,80HJNZTHERE……THERE:各邏輯運(yùn)算指令的常用功能:1、AND指令用于對一個(gè)數(shù)據(jù)的指定位清0

如:ANDAL,0FH;高4位清02、OR指令用于對一個(gè)數(shù)據(jù)的指定位置1

如:ORAL,02H;D1位置13、XOR指令常用于寄存器清0,或某些位取反如:XORCL,0FH;CL=FFH,高4位不變,低4位取反

4、NOT指令常用于將某個(gè)數(shù)據(jù)取成反碼,在加1得到補(bǔ)碼。如:NOTAL;AL中的內(nèi)容取反碼

INCAL;再加1得到補(bǔ)碼5、TEST指令常用于檢測指定位是1還是0

如:TESTAL,01H

;如AL的最低位為1,則

ZF=0,否則ZF=1

①計(jì)數(shù)值是移位的次數(shù),可以是1或寄存器CL②算術(shù)/邏輯移位指令可以對寄存器或存儲器單元進(jìn)行指定的移位,可以進(jìn)行字節(jié)或字操作。(1)算術(shù)/邏輯(非循環(huán))移位指令(a)算術(shù)左移指令SAL

SAL目的,計(jì)數(shù)值(b)邏輯左移指令SHL

SHL目的,計(jì)數(shù)值(c)算術(shù)右移指令SAR

SAR目的,計(jì)數(shù)值(d)邏輯右移指令SHRSHR目的,計(jì)數(shù)值2)移位指令

左移一位,只要左移以后的數(shù)未超出一個(gè)字節(jié)或一個(gè)字的表達(dá)范圍,則原數(shù)的每一位的權(quán)增加了一倍,相當(dāng)于原數(shù)乘2。右移一位相當(dāng)于除以2。例如:乘10的操作在數(shù)的輸入輸出過程中乘10的操作是經(jīng)常要進(jìn)行的。而X×10=X×2+X×8,也可以采用移位和相加的辦法來實(shí)現(xiàn)×10。為保證結(jié)果完整,先將AL中的字節(jié)擴(kuò)展為字。

MOVAH,0SALAX,1;X×2MOVBX,AX;移至BX中暫存

SALAX,1;X×4SALAX,1;X×8ADDAX,BX;X×10

(2)循環(huán)移位指令(a)ROL目的,計(jì)數(shù)值;循環(huán)左移(b)ROR目的,計(jì)數(shù)值;循環(huán)右移(c)RCL目的,計(jì)數(shù)值;帶進(jìn)位循環(huán)左移(d)RCR目的,計(jì)數(shù)值;帶進(jìn)位循環(huán)右移移位指令格式:操作碼目的,計(jì)數(shù)值功能:將目的操作數(shù)的內(nèi)容移位n次。特點(diǎn):①算術(shù)移位助記符為SA,邏輯移位為SH,循環(huán)移位為RO,帶進(jìn)位位的循環(huán)移位為RC。R為右移,L為左移。②目的操作數(shù)可以是累加器AX(AL),可以是任一個(gè)通用寄存器reg,也可以是一個(gè)存儲單元mem;其尋址方式可以采用除立即尋址外的任何尋址方式。③n=1時(shí),只移1位;n>1時(shí),可將指令格式中的CNT改為CL寄存器,并在移位指令前將移位次數(shù)預(yù)先送入CL寄存器中。④影響CF、SF、ZF、PF標(biāo)志,在移1位時(shí),影響OF標(biāo)志。五、控制轉(zhuǎn)移類指令控制轉(zhuǎn)移指令:凡是能改變指令執(zhí)行順序的指令統(tǒng)稱為控制轉(zhuǎn)移指令。

轉(zhuǎn)移類指令可改變CS與IP的值或僅改變IP的值,以改變指令執(zhí)行的順序。

控制轉(zhuǎn)移指令分類:

1、無條件轉(zhuǎn)移指令

JMP

2、子程序調(diào)用和返回指令

CALLRET

3、條件轉(zhuǎn)移指令

J__/JN__

4、循環(huán)控制指令

LOOP

5、中斷指令

INTn

6、處理器控制命令

HLTNOP程序轉(zhuǎn)移的地址

程序的尋址是由CS和IP完成的,為使程序轉(zhuǎn)移到一個(gè)新的地址執(zhí)行,同時(shí)改變CS和IP或只改變IP的內(nèi)容均可。(1)段間轉(zhuǎn)移、段間調(diào)用

同時(shí)改變CS和IP內(nèi)容。調(diào)用時(shí)將下一條指令的IP入棧(SP-2),CS入棧(SP-2),返回時(shí)出棧。

(2)段內(nèi)轉(zhuǎn)移、段內(nèi)調(diào)用

只改變IP的內(nèi)容。調(diào)用時(shí)將下一條指令的IP入棧(SP-2),返回時(shí)出棧??煞譃?6位偏移量NEAR和8位偏移量SHORT,16位偏移量適用于無條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令;8位偏移量適用于條件轉(zhuǎn)移指令,范圍為-128~+127。直接轉(zhuǎn)移:轉(zhuǎn)移的目的地址直接出現(xiàn)在指令中。如:JMP100HCALL1000H:0100HJMPAAA間接轉(zhuǎn)移:轉(zhuǎn)移的目的地址間接存儲于某一個(gè)寄存器或某一個(gè)內(nèi)存變量中。如:MOVBX,#4500HJMPBX注:四種程序?qū)ぶ贩绞剑憾蝺?nèi)直接轉(zhuǎn)移、段內(nèi)間接轉(zhuǎn)移、段間直接轉(zhuǎn)移、段間間接轉(zhuǎn)移的CS和IP的入棧和出棧是由機(jī)器自動完成的。1.無條件轉(zhuǎn)移指令格式:JMP目的功能:轉(zhuǎn)移到目的地址所指向的存儲器單元處執(zhí)行程序。規(guī)定:目的操作數(shù)可為除立即數(shù)外的各種尋址方式。無條件轉(zhuǎn)移指令可以轉(zhuǎn)移到存儲器的任何程序段。(1)段內(nèi)直接轉(zhuǎn)移指令①短轉(zhuǎn)移:JMP標(biāo)號;(IP)←(IP)+符號地址規(guī)定:8位地址偏移量為符號地址(標(biāo)號)。由SHORT指出,范圍為-128~+127。②近轉(zhuǎn)移:JMPNEARPTR標(biāo)號;(IP)←(IP)+符號地址規(guī)定:16位地址偏移量為符號地址(標(biāo)號)。NEAR可省略(指令可寫成JMP標(biāo)號)。例1:偏移量IP

機(jī)器碼程序

00000405PROG_S:ADDAL,05H000290NOP0003EBFBJMPSHORTPROG_S000590NOPEND(IP)←(IP)+符號地址0000H=0005H+符號地址符號地址=-5=FBHFFFBH(2)段內(nèi)間接轉(zhuǎn)移指令格式:JMPWORDPTR目的;(IP)←[EA]規(guī)定:目的操作數(shù)可為除立即數(shù)外的各種尋址方式。若為16位寄存器,則(IP)←(reg);若為存儲器中的一個(gè)字,則(IP)←(add+1)(add)。例2:JMPBX

若BX=4500H,

指令執(zhí)行后:

IP=4500H,轉(zhuǎn)移到偏移地址為4500H處執(zhí)行。例3:JMPWORDPTR5[BX]

若DS=2000H,BX=100H,(20105)=04F0H

指令執(zhí)行后:IP=04F0H(3)段間直接(遠(yuǎn))轉(zhuǎn)移指令格式:JMPFARPTR標(biāo)號;(IP)←標(biāo)號指令所在的段內(nèi)偏移地址(CS)←標(biāo)號指令所在的段地址例4:JMPFARPTRPROG_F

…PROG_F:…

若PROG_F標(biāo)記的指令,所在的CS=3500H,IP=0080H

指令執(zhí)行后:轉(zhuǎn)到3500:0080H處執(zhí)行。(4)段間間接轉(zhuǎn)移指令格式:

JMPDWORDPTROPRD;功能:(IP)←[EA]、(CS)←[EA+2]例5:JMPDWORDPTR[SI+0125H]

若CS=1200H,IP=05H,DS=2500H,SI=1300H,(26425)=4500H,(26427)=32F0H.

分析:EA=SI+0125H=1425HPA=DS×16+EA=26425H

將26425H單元開始連續(xù)4個(gè)單元的內(nèi)容賦給CS、IPCS=32F0H,IP=4500H,程序轉(zhuǎn)入32F0:4500H處執(zhí)行。JMP1000HJMPPROG_1JMPCXJMPWORDPTR[CX]JMP2000H:0100HJMPFARPTRPROG_2JMPDWORDPTR[BX+SI]練習(xí):指出指令的轉(zhuǎn)移方式。段內(nèi)直接轉(zhuǎn)移段內(nèi)直接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移段內(nèi)間接轉(zhuǎn)移段間直接轉(zhuǎn)移段間直接轉(zhuǎn)移段間間接轉(zhuǎn)移2.子程序調(diào)用和返回指令(P105)(1)子程序調(diào)用指令CALL

CALL指令用來調(diào)用一個(gè)過程或子程序。

CALL

NAME;在主程序中,調(diào)用NAME子程序

……NAMEPROCNEAR(或FAR);子程序,命名為NAME……

RET

;子程序返回

NAMEENDP

執(zhí)行過程:①CALL指令的下一條指令的地址(返回地址)入棧;②從CALL指令中得到子程序的入口地址,執(zhí)行子程序;③執(zhí)行RET指令,從棧中彈出返回地址,返回主程序。NEAR近調(diào)用、段內(nèi)調(diào)用段內(nèi)直接調(diào)用:CALL(NEARPTR)NAME段內(nèi)間接調(diào)用:

CALL目的(SP)←(SP-2),IP入棧,(IP)←子程序的地址FAR遠(yuǎn)調(diào)用、段間調(diào)用段間直接調(diào)用:CALLFARPTRNAME段間間接調(diào)用:CALLDWORDPTR[]

(SP)←(SP-2),CS入棧;(SP)←(SP-2),IP入棧;(CS)(IP)←子程序的地址子程序返回指令RET格式:RET;近調(diào)用:(IP)←棧頂彈出一個(gè)字,(SP)←(SP)+2遠(yuǎn)調(diào)用:(IP)←棧頂彈出一個(gè)字,(SP)←(SP)+2

(CS)←棧頂彈出一個(gè)字,(SP)←(SP)+2

RETn

;n為彈出值彈出返回地址(NEAR:IP;FAR:IP和CS),(SP)←(SP+2),彈出n個(gè)字節(jié)的數(shù)據(jù),(SP)←(SP+n)規(guī)定:RETn指令要求n為0----0FFFFH范圍內(nèi)的偶數(shù),相當(dāng)于子程序返回后,將棧中的n個(gè)單元騰出來了。主要用于主程序?yàn)槟硞€(gè)子程序提供一定的參數(shù)或參數(shù)地址。例1:CALLPROG_NCS=2000H,IP=1050H,SS=5000H,SP=0100H,DISP=1234H分析執(zhí)行CALL指令的過程。①修改地址指針,返回地址入棧;

SP←SP-2=00FEH,返回地址IP=1050+3=1053H②執(zhí)行子程序;入口地址:CS=2000H,IP=1053H+1234H=2287H③執(zhí)行RET指令I(lǐng)P←棧頂彈出一個(gè)字即1053H,SP←SP+2=0100H

3.條件轉(zhuǎn)移指令

8086的條件轉(zhuǎn)移指令是根據(jù)標(biāo)志寄存器中各標(biāo)志位的狀態(tài),決定程序是否進(jìn)行轉(zhuǎn)移。條件轉(zhuǎn)移指令的目的地址必須在現(xiàn)行的代碼段(CS)內(nèi),并且以當(dāng)前指令指針寄存器IP內(nèi)容為基準(zhǔn),其位移必須在-128~+127的范圍之內(nèi)。格式:

操作碼短標(biāo)號功能:當(dāng)條件滿足時(shí),轉(zhuǎn)到目的地址處繼續(xù)執(zhí)行。

(1)直接標(biāo)志轉(zhuǎn)移指令(J__/JN__)

CF:結(jié)果有進(jìn)位轉(zhuǎn)移JC

無進(jìn)位轉(zhuǎn)移JNCZF:結(jié)果為零轉(zhuǎn)移JZ/JE

不為零轉(zhuǎn)移JNZ/JNESF:結(jié)果為負(fù)數(shù)轉(zhuǎn)移JS

正數(shù)轉(zhuǎn)移JNSPF:結(jié)果奇偶校驗(yàn)為偶轉(zhuǎn)移JP/JPE

為奇轉(zhuǎn)移JNP/JPOOF:結(jié)果溢出轉(zhuǎn)移轉(zhuǎn)移JO

不溢出轉(zhuǎn)移JNO(2)間接標(biāo)志轉(zhuǎn)移

①無符號數(shù)比較轉(zhuǎn)移指令

A----高于,B----低于,E----等于高于或不低于等于轉(zhuǎn)移:JA/JNBE

高于等于或不低于轉(zhuǎn)移:JAE/JNB

小于或不大于等于轉(zhuǎn)移:JB/JNAE

小于等于或不大于轉(zhuǎn)移:JBE/JNA②帶符號數(shù)比較轉(zhuǎn)移指令

G----大于,L----小于,E----等于高于或不低于等于轉(zhuǎn)移:JG/JNLE

高于等于或不低于轉(zhuǎn)移:JGE/JNL

小于或不大于等于轉(zhuǎn)移:JL/JNGE

小于等于或不大于轉(zhuǎn)移:JLE/JNG注意:條件轉(zhuǎn)移指令是根據(jù)某些標(biāo)志位的狀態(tài)或兩個(gè)數(shù)的比較結(jié)果來決定轉(zhuǎn)移的。對有符號數(shù),通過比較和測試的結(jié)果實(shí)現(xiàn)轉(zhuǎn)移,這類指令通常對溢出標(biāo)志位OF和符號標(biāo)志位SF進(jìn)行測試,分大于、等于、小于3種情況。對無符號數(shù),這類指令通常測試標(biāo)志位CF,分高于、等于、低于3種情況。在使用這些條件轉(zhuǎn)移指令時(shí),一定要注意被比較數(shù)的具體情況及比較后所能出現(xiàn)的預(yù)期結(jié)果。課本例題:

CMPAL,60JBFAILCMPAL,85JAEGOODMOVAL,‘P’JMPPRINTFAIL:MOVAL,‘F’JMPPRINTGOOD:MOVAL,‘G’PRINT:……4.循環(huán)控制指令

用來控制需要重復(fù)進(jìn)行的操作,這組指令主要對CX或標(biāo)志位ZF進(jìn)行測試,確定是否循環(huán)。循環(huán)控制指令的目的地址也是在現(xiàn)行的代碼段(CS)內(nèi),并且以當(dāng)前指令指針寄存器IP內(nèi)容加指令中的8位偏移量,其位移都是負(fù)值。(1)LOOP短標(biāo)號;(CX)←(CX)-1,若CX≠0,則循環(huán),否則順序執(zhí)行。(2)LOOPNZ/LOOPNE短標(biāo)號;(CX)←(CX)-1,若CX≠0且ZF=0,則循環(huán),否則順序執(zhí)行。(3)LOOPZ/LOOPE短標(biāo)號;(CX)←(CX)-1,若CX≠0

且ZF=1,則循環(huán),否則順序執(zhí)行。(4)JCXZ標(biāo)號;若CX=0,則循環(huán),否則順序執(zhí)行。課本例題:

OLDDB83H,76H,65H,84H,DB71

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論