微型計(jì)算機(jī)指令系統(tǒng).ppt
《微型計(jì)算機(jī)指令系統(tǒng).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《微型計(jì)算機(jī)指令系統(tǒng).ppt(69頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
第三章微型計(jì)算機(jī)指令系統(tǒng),指令系統(tǒng)是微處理器(CPU)所能執(zhí)行的指令的集合,它與微處理器有密切的聯(lián)系,不同的微處理器有不同的指令系統(tǒng)。在本章中我們主要講解INTEL公司生產(chǎn)的8086/8088CPU的尋址方式以及各種指令系統(tǒng),并通過(guò)具體實(shí)例講述了各條指令的功能和使用方法。通過(guò)本章的學(xué)習(xí),讀者應(yīng)該掌握以下內(nèi)容:?3種操作數(shù)的尋址方式?常用指令的格式、功能、以及對(duì)標(biāo)志位的影響,3、18086/8088的尋址方式,,,操作碼操作數(shù),匯編指令:,操作碼:指令操作類型;操作數(shù):指令所需操作數(shù)或操作數(shù)的地址;操作數(shù)可以有一個(gè),也可以有兩個(gè),一個(gè)源操作數(shù),一個(gè)目的操作數(shù)。例:MOVAX,CX;將CX的內(nèi)容送入AX中。,本章主要介紹8086/8088的指令系統(tǒng)以及在指令中為取得操作數(shù)地址所使用的尋址方式。,3、1、1立即尋址方式指令操作數(shù)部分直接給出指令的操作數(shù),操作數(shù)與操作碼一起存入代碼段中。立即數(shù)有8位和16位。例:MOVAL,5;源操作數(shù)為立即尋址指令執(zhí)行后,AL=05H,8位數(shù)據(jù)05H存入AL寄存器。例:MOVAX,3064H;源操作數(shù)為立即尋址指令執(zhí)行后,AX=3064H,16位數(shù)據(jù)3064H存入AX寄存器。,3、1、2寄存器尋址方式寄存器尋址方式的操作數(shù)是寄存器的值,指令中直接使用寄存器名,包括8位或16位通用寄存器和段寄存器??墒褂玫?6位寄存器:AX、BX、CX、DX、SI、DI、SP、BP;其中:AX、BX、CX、DX可分成兩8位使用。例:MOVAX,CX;(AX)(CX)MOVAL;(AL)(AL)-13、1、3內(nèi)存尋址方式在內(nèi)存尋址方式中,操作數(shù)是某個(gè)內(nèi)存單元的內(nèi)容(值),指令中給出的是內(nèi)存單元的有效地址EA(即偏移地址),段地址通常在隱含的某個(gè)段寄存器中。,,,1、直接尋址方式直接尋址方式的操作數(shù)的形式為:Variable或[Variable]在直接尋址方式中,操作數(shù)的偏移地址(有效地址EA)直接用指令加以指定(有直接地址值和標(biāo)號(hào)兩種形式),它存放在代碼段中指定操作碼之后,但操作數(shù)一般存放在存儲(chǔ)器的數(shù)據(jù)段中,所以必須先求出操作數(shù)的物理地址,然后再訪問(wèn)存儲(chǔ)器才能取得操作數(shù)。段地址隱含的由DS指定,也可以ES指定,但需在指令中指明。最后存儲(chǔ)器地址為:DS:偏移地址或ES:偏移地址。例:MOVAX,ES:[2000H]將ES:2000H單元內(nèi)容送入AX。例:MOVAX,LABLE或MOVAX,[LABEL]將標(biāo)號(hào)為L(zhǎng)ABLE(存放操作數(shù)單元的符號(hào)地址),即DS:LABLE中的內(nèi)容送入AX。,2、寄存器間接尋址寄存器間接尋址方式的操作數(shù)形式為:[reg]操作數(shù)的有效地址包含在基址寄存器BX,基址指針BP或一個(gè)變址寄存器(SI或DI)中。寄存器間接尋址要用方括號(hào)括起來(lái),以便與寄存器操作數(shù)相區(qū)別。例:MOVAX,[BX];將由BX決定的存儲(chǔ)單元的內(nèi)容送到AX寄存器。,,,,,,0000,0001,0002,0003,BB,AA,TAB:,,AX,,AHAL,AABB,,,,,間接尋址,數(shù)據(jù)段,,0001,BX,,,操作數(shù)在存儲(chǔ)器中,指令中寄存器內(nèi)容作為操作數(shù)所在單元的有效地址。(BX)(SI)(DI)(BP),,有效地址=,,段寄存器為DS,段寄存器為SS,物理地址計(jì)算方法:物理地址=(DS)*16+(BX)或(SI)或(DI)物理地址=(SS)*16+(BP),例:已知:(DS)=2100H,(DI)=2000H指令:MOVAX,[DI];(AX)((DI))物理地址=(DS)*16+(DI)=2100H*16+2000H=21000H+2000H=23000H指令結(jié)果:將23000H單元內(nèi)容送AL中,將23001H單元內(nèi)容送AH中。,,3、寄存器相對(duì)尋址方式操作數(shù)在存儲(chǔ)器內(nèi),指令中寄存器內(nèi)容與指令指定的位移量(DISP)之和作為操作數(shù)所在單元的有效地址。(BX)DISP8(SI)(DI)(BP)DISP16,有效地址=,,,段寄存器為DS,段寄存器為SS,,+,,,物理地址=(DS)*16+(BX)+DISP8(SI)、(DI)、DISP16類同。物理地址=(SS)*16+(BP)+DISP16,,例:如果(DS)=3000H,(SI)=2000H,COUNT=3000H,則執(zhí)行指令MOVAX,CONUT[SI],求出此種尋址方式對(duì)應(yīng)的有效地址和物理地址。有效地址=2000H+3000H=5000H物理地址=(DS)*16+5000H=30000H+5000H=35000H4、基址變址尋址方式:操作數(shù)在存儲(chǔ)器中,指令將基址寄存器(BX或BP)與變址寄存器(SI或DI)內(nèi)容之和作為操作數(shù)所在存儲(chǔ)單元的有效地址。,(BX)(SI)(BP)(DI),有效地址=,,,+,,,物理地址=(DS)*16+(BX)+(SI)或(DI)物理地址=(SS)*16+(BP)+(SI)或(DI)例:MOVAX,[BX+DI]或MOVAX,[BX][DI]DS:(BX)+(DI)字存儲(chǔ)單元內(nèi)容送AX。例:MOVAX,[BP+SI]或MOVAX,[BP][SI]SS:(BP)+(SI)字存儲(chǔ)單元內(nèi)容送AX。,例:如果(DS)=2100H,(BX)=0158H,(DI)=10A5H,EA=11FDH,則執(zhí)行指令MOVAL,[BX][DI]有效地址:EA=(BX)+(DI)=0158H+10A5H=11FDH物理地址:(DS)*16+有效地址=21000H+11FDH=221FDH執(zhí)行結(jié)果:將221FDH單元內(nèi)容送入寄存器AL中。,5、相對(duì)基址變址尋址方式操作數(shù)在存儲(chǔ)器內(nèi),指令將基址寄存器(BX或BP)與變址寄存器(SI或DI)的內(nèi)容之和再加上位移量(8位或16位),得到操作數(shù)所在單元的有效地址。(BX)(SI)DISP8(BP)(DI)DISP16,,,,,,,有效地址=,+,+,物理地址=(DS)*16+(BX)產(chǎn)生的有效地址物理地址=(SS)*16+(BP)產(chǎn)生的有效地址例:已知:(DS)=3000H,(BX)=2000H,(SI)=1000H,MK=0250H指令:MOVAX,MK[BX][SI]或MOVAX,MK[BX+SI]或MOVAX,[MK+BX+SI]有效地址:MK+(BX)+(SI)=0250H+2000H+0100H=3250H物理地址:(DS)*16+有效地址=30000H+3250H=33250H執(zhí)行結(jié)果:將33250H單元內(nèi)容送AL,33251H內(nèi)容送AH。,3、1、4段超越當(dāng)操作數(shù)在內(nèi)存單元時(shí),系統(tǒng)根據(jù)隱含約定,自動(dòng)將寄存器DS或SS的值作為段地址。然而,當(dāng)操作數(shù)段地址不在隱含的段寄存器時(shí),可以使用段超越前綴取代其隱含約定。段超越前綴形式為:段寄存器名:例如:MOVAX,ES:[BP];段地址在ESMOVAX,CS:[BX][SI];段地址在CS段地址的基本約定和允許超越的情況如表所示:,3、1、5對(duì)8086內(nèi)存尋址方式的注解(1)在匯編后,指令中的變量名有具體的偏移地址所取代。,,,,,,,,,(2)在寄存器相對(duì)尋址與相對(duì)基址變址方式中,位移量disp可以是符號(hào)常量或變量,匯編后為一個(gè)常數(shù),若是變量,則取其偏移地址。(3)在Microsoft宏匯編MASM(MicrosoftMacroAssembler)中,內(nèi)存操作數(shù)可以采用多種書(shū)寫形式。(4)操作數(shù)中使用變量的地方也可以用下列形式:變量名整數(shù)表達(dá)式。5)計(jì)算出的有效地址以16位表示,若超過(guò)0FFFFH,CPU將忽略所有溢出。(6)記憶8086內(nèi)存操作數(shù)形式的簡(jiǎn)易方法如下:[BX][SI]disp[BP][DI]每列選擇0項(xiàng)或一項(xiàng),構(gòu)成至少一項(xiàng),即可得到有效的內(nèi)存操作數(shù)形式。,,3、2標(biāo)志位在標(biāo)志寄存器FLAGS中有若干標(biāo)志位,這些標(biāo)志用來(lái)表示CPU當(dāng)前的操作方式和狀態(tài)信息。與普通應(yīng)用程序有關(guān)的主要是FLAGS中的9個(gè)標(biāo)志6個(gè)狀態(tài)標(biāo)志(CF、OF、SF、ZF、AF、PF)3個(gè)控制信息標(biāo)志(DF、IF、TF)3、2、1深入認(rèn)識(shí)CF和OF1、深入認(rèn)識(shí)CF和OFCF表示無(wú)符號(hào)溢出,即運(yùn)算結(jié)果超出了無(wú)符號(hào)數(shù)的表示范圍。OF表示帶符號(hào)溢出,即運(yùn)算結(jié)果超出了帶符號(hào)數(shù)的表示范圍。,,2、CF和OF判斷方法(1)加法①CF的判斷方法從十進(jìn)制角度來(lái)看,若無(wú)符號(hào)加的結(jié)果大于2n-1(n為位數(shù)),則CF=1,否則CF=0。從二進(jìn)制角度來(lái)看,若結(jié)果最高位向前有進(jìn)位,則CF=1,否則CF=0。②OF的判斷方法從十進(jìn)制角度來(lái)看,若帶符號(hào)加的結(jié)果不在范圍-2n-1~2n-1-1(n為位數(shù))內(nèi),則OF=1,否則OF=0。從二進(jìn)制角度來(lái)看,若兩個(gè)數(shù)同號(hào),而相加結(jié)果與之異號(hào),說(shuō)明溢出,則OF=1,否則OF=0。例:8位數(shù)加法,判斷CF和OF,二進(jìn)制加法看作無(wú)符號(hào)數(shù)看作帶符號(hào)數(shù)①00110000B66+00001001B+9+9,00111001B1515CF=0OF=0②00000111B7+7+11111011B+251+(-5),00000010B258+21CF=1OF=0現(xiàn)為2結(jié)果錯(cuò)③00001001B9+9+01111100B+124+(+124),10000101B133+133CF=0OF=1現(xiàn)為-123,結(jié)果錯(cuò)④10000111B135(-121)+11110101B+245+(-11),01111100B380-1321CF=1OF=1現(xiàn)為124,結(jié)果錯(cuò)現(xiàn)為124,結(jié)果錯(cuò),,,,,,,,,,,,,,,(2)減法①CF的判斷方法從十進(jìn)制角度來(lái)看,若無(wú)符號(hào)減數(shù)大于被減數(shù),則CF=1,否則CF=0。從二進(jìn)制角度來(lái)看,若結(jié)果最高位向前有借位,則CF=1,否則CF=0。②OF的判斷方法從十進(jìn)制角度來(lái)看,若帶符號(hào)減的結(jié)果不在范圍-2n-1~2n-1-1(n為位數(shù))內(nèi),則OF=1,否則OF=0。從二進(jìn)制角度來(lái)看,若兩個(gè)數(shù)異號(hào),而結(jié)果與被減數(shù)符號(hào)相反,說(shuō)明溢出,則OF=1,否則OF=0。,3、3指令系統(tǒng)8086/8088的指令系統(tǒng)可以分為6組:(1)數(shù)據(jù)傳送指令;(2)算術(shù)運(yùn)算指令;(3)邏輯指令與移位指令;(4)串操作指令;(5)控制轉(zhuǎn)移指令;(6)處理機(jī)控制指令;3、3、1數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令是最簡(jiǎn)單、最常用的一類指令,它是負(fù)責(zé)把數(shù)據(jù)、地址、或立即數(shù)傳送到寄存器或存儲(chǔ)單元中。,1.MOV(Move):傳送指令MOV指令的格式為:MOVdest,src;dest←src功能:將源操作數(shù)src復(fù)制到目的操作數(shù)dest中,結(jié)果目的操作數(shù)的內(nèi)容等于源操作數(shù)的內(nèi)容,源操作數(shù)src的內(nèi)容不變。對(duì)標(biāo)志位的影響:無(wú)語(yǔ)法格式:MOVreg/mem/seg,reg/mem/seg/imm說(shuō)明:(1)雙操作數(shù)指令不允許兩個(gè)操作數(shù)同時(shí)為段寄存器或存儲(chǔ)器操作數(shù)。MOVseg,seg;錯(cuò)誤MOVmem,mem;錯(cuò)誤,(2)立即數(shù)不能傳送到段寄存器中。MOVseg,imm;錯(cuò)誤(3)目的操作數(shù)不允許使用CS段寄存器。(4)dest與src必須類型匹配,即同時(shí)是字節(jié)或字類型。以下幾點(diǎn)要注意:寄存器具有明確的類型,例如,AL、AX分別為字節(jié)、字類型。若立即數(shù)沒(méi)有明確的類型,MASM負(fù)責(zé)將立即數(shù)擴(kuò)展為與目的操作數(shù)位數(shù)相同。有時(shí)MASM不能確定內(nèi)存操作數(shù)的類型,需要用byteptr和wordptr明確指出是字節(jié)或字類型。關(guān)于PTR的詳細(xì)介紹見(jiàn)第4章。只要其中一個(gè)操作數(shù)的類型確定即可。,,例:錯(cuò)誤的MOV指令如下所示:MOVAX,BL;類型不匹配MOVDS,1000H;不允許立即數(shù)送段寄存器MOV[BX],[SI];不允許內(nèi)存操作數(shù)之間傳送MOVES,CS;不允許段寄存器之間傳送MOVCS,AX;CS不能作為目的操作數(shù)例:設(shè)B是已定義的字節(jié)變量,以下是一些錯(cuò)誤和正確的指令。MOVAX,B;錯(cuò)誤,類型不匹配MOVA,0;正確,MASM可以判斷出要送字節(jié)0,2.XCHG(Exchange):交換指令XCHG指令的格式為:XCHGoprd1,oprd2;交換oprd1與oprd2的內(nèi)容語(yǔ)法格式為:XCHGreg/mem,reg/mem例:XCHGBX,[BP+SI]如指令執(zhí)行前:(BX)=6F30H,(BP)=0200H,(SI)=0046H,(SS)=2F00H,(2F00H)=4254H,OPR2的物理地址=2F00+0200+0046=2F246則指令執(zhí)行后:(BX)=5154H,(2F246H)=6F30H。,3、堆棧操作指令堆棧概念------存儲(chǔ)器的一段區(qū)域,按“先進(jìn)后出”的原則進(jìn)行存出操作。8086/8088系統(tǒng),堆棧位于堆棧段,其段地址由SS指示,SP寄存器作為指針,SP內(nèi)容始終指向棧頂所在存儲(chǔ)單元。作用:在調(diào)用一個(gè)過(guò)程時(shí),保存返回地址;暫時(shí)存放寄存器或存儲(chǔ)器單元操作數(shù)的內(nèi)容。指令格式:進(jìn)棧PUSHSRC;操作:(SP)(SP)-2,((SP)+1,(SP))(SRC)出棧POPDST;操作:(DST)((SP)+1,(SP)),(SP)(SP)+2,,,,,,,,,,,堆棧,SS:01F8,SS:01FA,SS:01FC,SS:01FE,,SP,AABB,(執(zhí)行PUSHAX之前),,,,,,,堆棧,SS:01F8,SS:01FA,SS:01FC,SS:01FE,,SP,AABB,(執(zhí)行PUSHAX之后),1101H,1101H,AX,,,,,,,堆棧,SS:01F8,SS:01FA,SS:01FC,SS:01FE,,SP,AABB,(執(zhí)行POPAX之后),1101H,AX,,1,,2,,3,8086/8088系統(tǒng)的堆棧具有如下特點(diǎn):堆棧是在內(nèi)存的堆棧段中,具有“先進(jìn)后出”的特點(diǎn);堆棧只有一個(gè)出入口,即當(dāng)前棧頂為空時(shí),棧頂和棧底指向同一內(nèi)存單元;堆棧有兩個(gè)基本操作:PUSH(進(jìn)棧)和POP(出棧)。PUSH操作使棧頂向低地址方向移動(dòng),而POP操作則剛好相反;堆棧操作只能作字操作;SS:SP在任何時(shí)候都指向當(dāng)前的棧頂。,4、地址傳送指令將操作數(shù)所在存儲(chǔ)器的地址送入目標(biāo)寄存器。指令格式:有效地址送寄存器:LEAreg16,mem;reg16mem指針?biāo)图拇嫫骱虳S:LDSreg16,mem32;把源操作數(shù)指定的4個(gè)相繼字節(jié)到由指令指定的寄存器及DS寄存器中。該指令常指定SI寄存器。指針?biāo)图拇嫫骱虴S:LESreg16,mem32;把源操作數(shù)指定的4個(gè)相繼字節(jié)送到由指令指定的寄存器及ES寄存器中。該指令常指定DI寄存器。,,LEA指令與MOV指令的區(qū)別:LEASI,BUFF指令是將標(biāo)號(hào)BUFF的偏移地址送入寄存器中;MOVSI,BUFF指令是將標(biāo)號(hào)BUFF所指存儲(chǔ)單元的內(nèi)容送入SI。,,,,,,,,BUFF=,0,1,2,3,4,5,48,00,FE,FF,LEASI,BUFF;執(zhí)行后:(SI)=0002HMOVSI,BUFF;執(zhí)行后:(SI)=0048H,,段起始地址,B、LDS或LES指令將源操作數(shù)指定的4個(gè)連續(xù)字節(jié)單元內(nèi)容分別送入指令指定的寄存器以及DS或ES中。其中:低16位送到一個(gè)指定的字寄存器,高16位送到DS或ES中。,,,,,,,,57H,13H,68H,24H,例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468H,DS:2480H,DS:2481H,DS:2482H,DS:2483H,,,,,,,,,,,,1357,2468,SI,DS,LDSSI,[2480],,4、標(biāo)志寄存器傳送指令指令格式:LAHF;(AH)(PSW低字節(jié))SAHF;(PSW低字節(jié))AHPUSHF;(SP)(SP)-2,((SP)+1,(SP))(PSW)POPF;(PSW)((SP)+1,(SP))(SP)(SP)+2,,,,,,說(shuō)明:LAHF/SAHF指令是寄存器AH與標(biāo)志寄存器PSW的低字節(jié)之間完成的字節(jié)型數(shù)據(jù)傳送。PUSHF/POPF指令是標(biāo)志寄存器PSW與堆棧間進(jìn)行的字型數(shù)據(jù)傳送。指令SAHF/POPF將影響標(biāo)志位。,4、2、2算術(shù)運(yùn)算指令1、加法指令指令格式:加法ADDDST,SRC;(DST)(SRC)+(DST)帶進(jìn)位加法ADCDST,SRC;(DST)(SRC)+(DST)+CF加1INCOPR;(OPR)(OPR)+1說(shuō)明:這在三條指令運(yùn)算結(jié)果將影響狀態(tài)標(biāo)志位,但是INC指令不影響標(biāo)志CF。,,,,2、減法指令指令格式:減法SUBDST,SRC;(DST)(DST)-(SRC)帶進(jìn)位減法SBBDST,SRC;(DST)(DST)-(SRC)-CF減1DECOPR;(OPR)(OPR)-1求補(bǔ)NEGOPR;(OPR)0FFFFH-(OPR)+1比較CMPOPR1,OPR2;(OPR1)-(OPR2)以上五條指令均可作字或字節(jié)運(yùn)算,而且除DEC不影響CF外,其他都按一般規(guī)則影響狀態(tài)標(biāo)志位。,3、乘法指令指令格式:無(wú)符號(hào)數(shù)乘法MULSRC;(AX)(AL)*(SRC)字節(jié)乘法;(DX,AX)(AX)*(SRC)字乘法帶符號(hào)數(shù)乘法IMULSRC;操作同上進(jìn)行字節(jié)運(yùn)算時(shí),目的操作數(shù)必須是累加器AL,乘積在寄存器AX中;進(jìn)行字運(yùn)算時(shí),目的操作數(shù)必須是累加器AX,乘積在寄存器DX,AX中。源操作數(shù)不允許使用立即數(shù)。乘法指令運(yùn)算結(jié)果只影響狀態(tài)標(biāo)志CF、OF。例:MULBX;無(wú)符號(hào)數(shù)乘法,BX乘上AX,,,4、除法指令指令格式:無(wú)符號(hào)數(shù)除法DIVSRC;(AL)(AX)/(SRC)除法的商(AH)(AX)/(SRC)除法余數(shù)或者(AX)(DX,AX)/(SRC)除法的商(DX)(DX,AX)/(SRC)除法余數(shù)帶符號(hào)數(shù)除法IDIVSRC;操作同上。,當(dāng)除數(shù)是字節(jié)數(shù)據(jù)時(shí),被除數(shù)必須放在AX中;當(dāng)除數(shù)是字?jǐn)?shù)據(jù)時(shí),被除數(shù)必須放在DX,AX中。除法指令運(yùn)算結(jié)果對(duì)狀態(tài)標(biāo)志無(wú)定義。8086/8088規(guī)定IDIV指令運(yùn)算結(jié)果余數(shù)的符號(hào)與被除數(shù)相同。帶符號(hào)數(shù)除法運(yùn)算中,當(dāng)被除數(shù)位數(shù)不夠時(shí),可進(jìn)行擴(kuò)展。,符號(hào)擴(kuò)展指令:字節(jié)擴(kuò)展到字CBW;將寄存器AL中的符號(hào)位擴(kuò)展到寄存器AH字?jǐn)U展到雙字CWD;將寄存器AX中的符號(hào)位擴(kuò)展到寄存器DX,,,,,,,7,0,AL,7,0,AH,0,15,AX,DX,15,0,CBW,CWD,,,5、壓縮BCD碼十進(jìn)制調(diào)整指令加法十進(jìn)制調(diào)整DAA;執(zhí)行的操作:這條指令執(zhí)行前必須先執(zhí)行ADD或ADC指令,加法指令必須把兩個(gè)壓縮的BCD碼相加,并把結(jié)果存放在AL寄存器中。減法十進(jìn)制調(diào)整DAS;執(zhí)行的操作:這條指令執(zhí)行之前,必須先執(zhí)行SUB或SBB指令,減法指令必須把兩個(gè)BCD碼相減,并把結(jié)果存放在AL寄存器中。,調(diào)整的方法:累加器AL低4位大于9或輔助進(jìn)位標(biāo)志位AF=1,則累加器AL加06H修正。累加器AL高4位大于9或輔助進(jìn)位標(biāo)志位AF=1,則累加器AL加60H修正。累加器AL高4位大于等于9,低4位大于9,則累加器AL進(jìn)行加66H修正。,例:進(jìn)行BCD碼加法運(yùn)算59+68=1270101100159+011010006811000001C1+0110011066100100111127,,,加法運(yùn)算結(jié)果為C1,AF=1,高位大于9,加66H進(jìn)行壓縮BCD調(diào)整,說(shuō)明:壓縮BCD碼加法或減法十進(jìn)制調(diào)整指令必須在ADD(ADC)或SUB(SBB)指令之后,調(diào)整結(jié)果對(duì)標(biāo)志OF無(wú)影響,對(duì)其它狀態(tài)標(biāo)志位均有影響。減法十進(jìn)制調(diào)整方法與加法十進(jìn)制調(diào)整方法類同,只是將加6變?yōu)闇p6操作。,6、非壓縮BCD碼十進(jìn)制調(diào)整指令指令格式:加法十進(jìn)制調(diào)整AAA;減法十進(jìn)制調(diào)整AAS;乘法十進(jìn)制調(diào)整AAM;除法十進(jìn)制調(diào)整AAD;,AAA指令將AL的內(nèi)容變換成一位非壓縮的十進(jìn)制數(shù)。AAA檢查AL低四位,如低四位是0--9的數(shù)字,AAA就清除AL的高四位,以及AF和CF標(biāo)志;如AL低四位表示的數(shù)大于9或AF=1,AAA執(zhí)行:加6到AL寄存器;加1到AH寄存器;置AF=1,CF=1;清除AL高四位為0。例:ADDAL,BL;AL和BL中的數(shù)相加AAA;非壓縮BCD碼調(diào)整,AAS指令檢查AL低四位,如低四位表示的數(shù)是0-9的數(shù)字,ASS清除AL高四位及CF和AF標(biāo)志;如AL低四位表示的數(shù)大于9或AF=1,AAS進(jìn)行如下調(diào)整:,AL減去6;AH減去1;置AF=1,CF=1;清除AL中高四位。例:SUBAL,BL;AAS,AAM指令的作用是用10(0AH)來(lái)除AL寄存器的內(nèi)容,并將除得的商和余數(shù)分別送到AH和AL來(lái)實(shí)現(xiàn)轉(zhuǎn)換。例:MULBL;AL*BLAAM,3、3、3邏輯指令與移位指令1、邏輯運(yùn)算指令:對(duì)字節(jié)或字?jǐn)?shù)據(jù)進(jìn)行按位的操作。格式:邏輯與ANDDST,SRC;(DST)(DST)AND(SRC)邏輯或ORDST,SRC;(DST)(DST)OR(SRC)邏輯非NOTOPR;(OPR)(OPR)異或XORDST,SRC;(DST)(DST)XOR(SRC)測(cè)試TESTOPR1,OPR2;(OPR1)AND(OPR2)(1)、邏輯與(AND)、或(OR)、異或(XOR)操作指令,,,,,AND指令主要用來(lái)屏蔽掉一個(gè)數(shù)中某些位,以便對(duì)剩下的其它位進(jìn)行某些處理。對(duì)那此兩個(gè)操作數(shù)都是1的位,目的操作數(shù)相對(duì)應(yīng)位就是1,其它各種組合的位,目的操作數(shù)相應(yīng)位都是0。,例:ANDAX,BX;兩個(gè)寄存器邏輯與ANDAL,MEM-BYTE;寄存器和存儲(chǔ)單元邏輯與ANDMEM-BYTE,AL;存儲(chǔ)單元和寄存器邏輯與,OR指令在兩個(gè)操作數(shù)相對(duì)應(yīng)位中有一個(gè)是1或兩個(gè)都是1時(shí),在目的操作數(shù)的該位產(chǎn)生一個(gè)1。例:ORBX,0C000B將BX的兩位最高的有效位(15和14位)置成1,而其它位不變。,XOR指令主要用于判斷兩個(gè)操作數(shù)中那些位是不同的。如兩個(gè)操作數(shù)相對(duì)應(yīng)位的值不同時(shí),在目的操作數(shù)產(chǎn)生一個(gè)1。相同為0,不同為1。例:XORBX,0C000B;,NOT指令改變寄存器或存儲(chǔ)單元的每一位狀態(tài),原來(lái)為0變?yōu)?,原為1變?yōu)?。例:NOTAX;AX各位取反,TEST指令是一條測(cè)試指令,它執(zhí)行的操作與AND相同,不過(guò)它不送回結(jié)果,只影響標(biāo)志位。例:TESTAL,00000001B;如AL最低位為0,則ZF=1。,2、移位指令邏輯左移SHLOPR,CNL算術(shù)左移SALOPR,CNL邏輯右移SHROPR,CNL算術(shù)右移SAROPR,CNT其中:OPR為操作數(shù),CNT為1或CL表示移位次數(shù),,,,,,0,CF,OPR,,,,,,0,CF,OPR,,,,,,CF,OPR,,,,例:設(shè)AL=10110100,CF=1在SALAL,1之后,AL=01101000CF=1在SARAL,1之后,AL=11011010CF=0在SHLAL,1之后,AL=01101000CF=1在SHRAL,1之后,AL=01011010CF=0,,,算術(shù)左移(SAL)和算術(shù)右移(SAR)實(shí)現(xiàn)帶符號(hào)數(shù)移位。SAR通過(guò)在整個(gè)移位過(guò)程中復(fù)制符號(hào)來(lái)保護(hù)操作數(shù)的符號(hào)。SAL不保護(hù)進(jìn)位,但如果符號(hào)位發(fā)生變化的話,就將1送OF標(biāo)志。每次移位,SAL都將操作數(shù)空出來(lái)的第0位置0。,邏輯左移(SHL)和邏輯右移(SHR)對(duì)無(wú)符號(hào)數(shù)的移位。SHL將操作數(shù)左移,空出來(lái)的第0位置0;SHR將操作數(shù)右移,空出來(lái)的高位(字節(jié)時(shí)第7位,字時(shí)第15位)置0。,例:將兩個(gè)非壓縮BCD碼(高位在BL,低位在AL)合并成壓縮BCD碼送AL。MOVCL,4;將計(jì)數(shù)值送CLSHLBL,CL;將高位移到BL的高4位ANDAL,0FH;清零AL高4位ORAL,BL;合并AL和BL形成壓縮BCD碼。,(2)、循環(huán)移位指令循環(huán)左移ROLOPR,CNT循環(huán)右移ROROPR,CNT帶進(jìn)位循環(huán)左移RCLOPR,CNT帶進(jìn)位循環(huán)右移RCROPR,CNT,,,,,,,,,CF,OPR,,,,,,,,,CF,OPR,,,,,,,,,CF,OPR,,,,,,,,,CF,OPR,,,例:設(shè)AL=10110100B,CF=1執(zhí)行下列語(yǔ)句:執(zhí)行ROLAL,1后,AL=01101001,CF=1執(zhí)行RORAL,1后,AL=01011010,CF=0執(zhí)行RCLAL,1后,AL=01101001,CF=1執(zhí)行RCRAL,1后,AL=11011010,CF=0,3、2、4串操作指令串操作:對(duì)存儲(chǔ)區(qū)中連續(xù)存放的字節(jié)或一串字進(jìn)行操作。1.與REP前綴相配合工作的指令MOVS、LODS、和STOS指令(1)REP重復(fù)串操作直到(CX)=0為止。格式:REPSTRINGPRIMITIVE其中STRINGPRIMITIVE可為MOVS,LODS或STOS指令。①如(CX)=0則退出REP,否則繼續(xù)執(zhí)行;②(CX)←(CX)-1;③執(zhí)行其后的串指令;④重復(fù)①~③。(2)MOVS串傳送指令格式:①M(fèi)OVSDST,SRC;②MOVSB(字節(jié));③MOVSW(字),(3)STOS存入串指令STOS指令的格式為:①STOSDST;②STOSB(字節(jié));③STOSW(字)。執(zhí)行的操作:字節(jié)操作:((DI))←(AL),(DI)←(DI)1字操作:((DI))←(AX),(DI)←(DI)2(4)LODS從串中取指令LODS指令的格式為:①LODSSRC;②LODSB(字節(jié));③LODSW(字)。執(zhí)行的操作:字節(jié)操作:((AL))←(SI),(SI)←(SI)1字操作:((AX))←(SI),(SI)←(SI)22.與REPE/REPZ和REPNE/REPNZ聯(lián)合工作的CMPS和SCAS指令,(1)REPE/REPZ當(dāng)相等/為零時(shí)重復(fù)串操作REPE/REPZ指令的格式為:REPE/REPZstringprimitive其中stringprimitive可為CMPS或SCAS指令。執(zhí)行的操作:①如(CX)=0或ZF=0(即某次比較的結(jié)果兩個(gè)操作數(shù)不等)時(shí)退出,否則繼續(xù)執(zhí)行;②(CX)←(CX)-1;③執(zhí)行其后的串指令;④重復(fù)①~③。(2)REPNE/REPNZ當(dāng)不相等/不為零重復(fù)串操作REPNE/REPNZ指令的格式為:REPNE/REPNZstringprimitive其中stringprimitive可為CMPS或SCAS指令。執(zhí)行的操作:除退出條件為(CX)=0或ZF=1外,其他操作與REPE指令完全相同。,(3)、串比較指令CMPSB;((SI))-((DI))(SI)(SI)1,(DI)(DI)1CMPSW;((SI))-((DI))(SI)(SI)2,(DI)(DI)2(4)SCAS串掃描指令SCAS指令的格式為:①SCASDST;②SCASB(字節(jié));③SCASW(字)。執(zhí)行的操作:字節(jié)操作:((AL))←(DI),(DI)←(DI)1字操作:((AX))←(DI),(DI)←(DI)2,,,,,3、2、5控制轉(zhuǎn)移指令控制轉(zhuǎn)移指令分成無(wú)條件轉(zhuǎn)移指令和條件轉(zhuǎn)移指令。1.無(wú)條件轉(zhuǎn)移指令轉(zhuǎn)移可以分成兩類:段內(nèi)轉(zhuǎn)移和段間轉(zhuǎn)移。段內(nèi)轉(zhuǎn)移是指在同一段的范圍之內(nèi)進(jìn)行轉(zhuǎn)移,此時(shí)只需改變IP寄存器的內(nèi)容,即用新的轉(zhuǎn)移目標(biāo)地址代替原有的IP的值就可達(dá)到轉(zhuǎn)移的目的。段間轉(zhuǎn)移則是要轉(zhuǎn)到另一個(gè)段去執(zhí)行程序,此時(shí)不僅要修改IP寄存器的內(nèi)容,還需要修改CS寄存器的內(nèi)容才能達(dá)到目的,因此此時(shí)的轉(zhuǎn)移目標(biāo)地址應(yīng)由新的段地址和偏移地址兩部分組成。,(1)直接短轉(zhuǎn)移JMPSHORTOPR;操作:(IP)(IP)+8位位移量(2)段內(nèi)直接轉(zhuǎn)移JMPNEARPTROPR;操作:(IP)(IP)+16位位移量(3)段內(nèi)間接轉(zhuǎn)移JMPWORDPTROPR;操作:(IP)(有效地址)(4)段間直接(遠(yuǎn))轉(zhuǎn)移JMPNEARPTROPR操作:(IP)←OPR的段內(nèi)偏移地址(CS)←OPR所在段的段地址(5)段間間接轉(zhuǎn)移JMPDWORDPTROPR操作:(IP)←(EA)(CS)←(EA+2),,,,2、條件轉(zhuǎn)移指令狀態(tài)標(biāo)志作為轉(zhuǎn)移的條件,當(dāng)滿足一定的條件時(shí),轉(zhuǎn)移到指定的地址,否則,將順序執(zhí)行下條指令。作為判斷條件的狀態(tài)標(biāo)志位有:CF、PF、ZF、SF和OF。根據(jù)單個(gè)標(biāo)志位的設(shè)置情況轉(zhuǎn)移這組包括10種指令,它們一般適用于測(cè)試某一次運(yùn)算的結(jié)果并根據(jù)其不同特征產(chǎn)生程序分支作不同處理的情況。結(jié)果為零(或相等)轉(zhuǎn)移JZ/JEOPR;ZF=1結(jié)果不為零(或不相等)轉(zhuǎn)移JNZ/JNEOPR;ZF=0結(jié)果為負(fù)轉(zhuǎn)移JSOPR;SF=1結(jié)果為正轉(zhuǎn)移JNSOPR;SF=0,溢出轉(zhuǎn)移JOOPR;OF=1無(wú)溢出轉(zhuǎn)移JNOOPR;OF=0奇偶位為1轉(zhuǎn)移JP/PEOPR;PF=1奇偶位為0轉(zhuǎn)移JNP/JPOOPR;PF=0低于/不高于或等于/進(jìn)位為1轉(zhuǎn)移JB/JNAE/JCOPR;CF=1不低于/高于或等于/進(jìn)位為0轉(zhuǎn)移JNB/JAE/JNCOPR;CF=0(2)比較兩個(gè)無(wú)符號(hào)數(shù),并根據(jù)比較的結(jié)果轉(zhuǎn)移。低于/不高于或不等于/進(jìn)位為1轉(zhuǎn)移JB/JNAE/JCOPR;CF=1且ZF=0不低于/高于或等于/進(jìn)位為0轉(zhuǎn)移JNB/JAE/JNCOPR;CF=0或ZF=1,低于或等于/不高于轉(zhuǎn)移JBE/JNAOPR;CF=1或CF=1不低于或不等于/高于轉(zhuǎn)移JNBE/JAOPR;CF=0且ZF=0(3)比較兩個(gè)帶符號(hào)數(shù),并根據(jù)比較結(jié)果轉(zhuǎn)移。小于或者不大于或者等于轉(zhuǎn)移JL(或JNGE)OPRSF⊕ZF=1小于或者不大于或者等于轉(zhuǎn)移JNL(或JGE)OPRSF⊕ZF=0小于或等于,或者不大于轉(zhuǎn)移JLE(或JNG)OPR(SF⊕ZF)∨ZF=1小于或等于,或者不大于轉(zhuǎn)移JNLE(或JG)OPR(SF⊕ZF)∨ZF=0,(4)測(cè)試CX的值為0則轉(zhuǎn)移指令JCXZOPR;(CX)=0則轉(zhuǎn)移3、循環(huán)控制指令(1)LOOP(LOOP)循環(huán)指令格式:LOOPOPR測(cè)試條件:(CX)≠0(2)LOOPZ/LOOPE(Loopwhilezeroorequal)當(dāng)為零或相等時(shí)循環(huán)指令格式:LOOPZ(或LOOPE)OPR測(cè)試條件:ZF=1且(CX)≠0(3)LOOPNZ/LOOPNE(Loopwhilenonzero,ornotequal)當(dāng)不為零或不相等時(shí)循環(huán)指令格式:LOOPNZ(或LOOPNE)OPR測(cè)試條件:ZF=0且(CX)≠0,4、子程序CALL調(diào)用指令(1)段內(nèi)直接調(diào)用格式:CALLDST執(zhí)行的操作:(IP)←(SP)-2;((SP)+1,(SP))←(IP);(IP)←(IP)+D16;(2)段內(nèi)間接調(diào)用格式:CALLDST執(zhí)行的操作:(SP)←(SP)-2;((SP)+1,(SP))←(IP);(IP)←(EA)(3)段間直接調(diào)用格式:CALLDST,執(zhí)行的操作:(SP)←(SP)-2;((SP)+1,(SP))←(CS);(SP)←(SP)-2;((SP)+1,(SP))←(IP);(IP)←偏移地址(指令的第2,3個(gè)字節(jié));(CS)←段地址(指令的第4,5個(gè)字節(jié))。(4)段間間接調(diào)用格式:CALLDST執(zhí)行的操作:(SP)←(SP)-2;((SP)+1,(SP))←(CS);(SP)←(SP)-2;((SP)+1,(SP))←(IP);(IP)←(EA);(CS)←(EA+2),RET返回指令段內(nèi)返回RET;(IP)((SP)+1,(SP))(SP)(SP)+2段內(nèi)帶立即數(shù)返回RETEXP;(IP)((SP))+1,(SP))(SP)(SP)+2(SP)(SP)+DISP16位移量段間返回RET;(IP)((SP)+1,(SP))(SP)(SP)+2(CS)((SP)+1,(SP))(SP)(SP)+2,,,,,,,,,,段間帶立即數(shù)返回RETEXP;(IP)((SP)+1,(SP))(SP)(SP)+2(CS)((SP)+1,(SP))(SP)(SP)+2(SP)(SP)+DISP16位移量3、2、6處理機(jī)控制指令1.標(biāo)志處理指令(1)CLC進(jìn)位位置0指令(Clearcarry)CF←0(2)CMC進(jìn)位位求反指令(Complementcarry)CF←CF(3)STC進(jìn)位位置1指令(Setcarry)CF←1(4)CLD方向標(biāo)志置0指令(Cleardirection)DF←0,,(5)STD方向標(biāo)志位置1指令(Setdirection)DF←1(6)CLI中斷標(biāo)志置0(關(guān)中斷)指令(Clearinterrupt)IF←0(7)STI中斷標(biāo)志置1(開(kāi)中斷)指令(Setinterrupt)IF←12.其它處理機(jī)控制指令(1)NOP空操作指令NOP指令的語(yǔ)法格式為:NOP(2)HLT停機(jī)指令HLT指令的語(yǔ)法格式為:HLT(3)WAIT等待指令WAIT指令的語(yǔ)法格式為:WAIT(4)ESC換碼指令ESC指令的語(yǔ)法格式為:ESCmem(5)LOCK封鎖前綴指令LOCK指令的語(yǔ)法格式為:LOCK,習(xí)題1.判斷下列指令是否正確。若不正確,指出錯(cuò)誤原因。(1)MOVSP,DL(2)POPCS(3)MOV[BP][SI],[DI(4)MOV[SP],[BP](5)JLEBX(6)MOVES,1000H(7)MOVAX,BX+2(8)MOVES,CS(9)ANDAX,[CX](10)SHRBL2.說(shuō)明指令DECAX與SUBAX,1的區(qū)別。3.IP寄存器能作為指令的操作數(shù)嗎?哪類指令的執(zhí)行會(huì)改變IP的值?4.在無(wú)符號(hào)數(shù)和帶符號(hào)數(shù)比較兩種情況下,分別給出下列條件成立時(shí)相關(guān)標(biāo)志位的值。(1)相等(2)不相等(3)小于(4)小于或等于(5)大于(6)大于或等,5.說(shuō)明CALL和RET指令要執(zhí)行的操作。6.如果過(guò)程的第一條指令是POPAX,那么AX的值將是什么?7.在哪兩種情況下,執(zhí)行DIV或IDIV指令將出錯(cuò)?8.給出與下列每組指令序列功能相同的一條指令。(1)MOVAH,ALSARAH,7(2)MOVDX,AXSARDX,15(3)TESTAX,1JZISZEROSTCJMPDONEISZERO:CLCDONE,9.寫出實(shí)現(xiàn)下列功能的指令序列。(1)將AL與BX中的兩個(gè)無(wú)符號(hào)數(shù)相加,結(jié)果放入AX。(2)將AL與BX中的兩個(gè)帶符號(hào)數(shù)相加,結(jié)果放入AX。10.分析下列指令序列完成什么功能。MOVCL,4SHLAX,CLMOVBL,DLSHRDX,CLSHLBL,CLORAH,BL11.給出下列各條指令執(zhí)行后AL以及CF、OF、SF和ZF的值。XORAL,ALMOVAL,255,INCALNOTALSHLALCMPALSUBAL,7FHSHLAL,112.寫出與下列指令功能相同的指令序列。(1)CLDREPMOVSB(2)CLDRDPSTOSD(3)CLDREPECMPSW,,,13.設(shè)AX與DX存放的均為4位十進(jìn)制數(shù)對(duì)應(yīng)的壓縮BCD碼,給出下列代碼的功能。ADDAL,DLDAAXCHGAL,AHADCAL,DHDAAXCHGAL,AH14.編寫實(shí)現(xiàn)下列功能的指令序列。(1)AL的高4位與低4位分別放入BH與BL的低4位,并將BH與BL的高4位清0。(2)將CX:BX:AX中的48位數(shù)加倍。其中,CX與AX分別作為最高16位與最低16位。(3)設(shè)AL的值為帶符號(hào)數(shù),若AL的絕對(duì)值小于10,則置CF=0,否則置CF=1。,(4)若AX和BX中的數(shù)恰好一個(gè)是奇數(shù)、一個(gè)是偶數(shù),則將奇數(shù)放入AX,偶數(shù)放入BX;否則,AX和BX不變。(5)將AX中的無(wú)符號(hào)數(shù)乘以10存入DX:AX(要求用移位、傳送和加法指令實(shí)現(xiàn))。(6)設(shè)字節(jié)變量X中存放著8位帶符號(hào)數(shù),計(jì)算4X-5+X/2,將結(jié)果存入AX中。(7)求1+2+…+100,結(jié)果放入AX中。,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 微型計(jì)算機(jī) 指令系統(tǒng)
鏈接地址:http://m.jqnhouse.com/p-11533167.html