最新六章匯編語言及其程序設(shè)計(jì)課件_第1頁
最新六章匯編語言及其程序設(shè)計(jì)課件_第2頁
最新六章匯編語言及其程序設(shè)計(jì)課件_第3頁
最新六章匯編語言及其程序設(shè)計(jì)課件_第4頁
最新六章匯編語言及其程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩263頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

六章匯編語言及其程序設(shè)計(jì)六章匯編語言及其程序設(shè)計(jì)1主要內(nèi)容匯編程序及其開發(fā)過程指令格式及尋址方式8086匯編語言的基本語法順序、分支、循環(huán)結(jié)構(gòu)程序設(shè)計(jì)子程序設(shè)計(jì)主要內(nèi)容匯編程序及其開發(fā)過程2最新六章匯編語言及其程序設(shè)計(jì)課件3最新六章匯編語言及其程序設(shè)計(jì)課件4最新六章匯編語言及其程序設(shè)計(jì)課件5最新六章匯編語言及其程序設(shè)計(jì)課件6最新六章匯編語言及其程序設(shè)計(jì)課件7最新六章匯編語言及其程序設(shè)計(jì)課件8流程圖的畫法起止框執(zhí)行框流程線條件滿足?條件滿足?YYNN判斷框AA連接點(diǎn)流程圖的畫法起止框執(zhí)行框流程線條件滿足?條件滿足?YYNN判9指令格式及尋址方式指令格式操作碼操作數(shù)OPCODEDW0127形式1OPCODEDW0127形式2OPCODEDW0127形式3DATA/DISPDATA/DISP1~2個(gè)字節(jié)1~2個(gè)字節(jié)MODREGR/MDATA/DISPDATA/DISP1~2個(gè)字節(jié)1~2個(gè)字節(jié)方向位,0:REG字段指出的寄存器為源操作數(shù)寄存器1:REG字段指出的寄存器為目的操作數(shù)寄存器字位,0:參加運(yùn)算的操作數(shù)為字節(jié)操作數(shù)1:參加運(yùn)算的操作數(shù)為字操作數(shù)指令格式及尋址方式指令格式操作碼操作數(shù)OPCODE10MOD含義MOD含義00存儲(chǔ)器方式,無位移量01存儲(chǔ)器方式,有8位位移量10存儲(chǔ)器方式,有16位位移量11寄存器方式,無位移量MOD字段編碼表REGW=1W=0REGW=1W=0000AXAL100SPAH001CXCL101BPCH010DXDL110SIDH011BXBL111DIBHREG字段編碼表MOD含義MOD含義00存儲(chǔ)器方式,無位移量11存儲(chǔ)器方式寄存器方式有效地址的計(jì)算公式W=0W=100011011000(BX)+(SI)(BX)+(SI)+D8(BX)+(SI)+D16ALAX001(BX)+(DI)(BX)+(DI)+D8(BX)+(DI)+D16CLCX010(BP)+(SI)(BP)+(SI)+D8(BP)+(SI)+D16DLDX011(BP)+(DI)(BP)+(DI)+D8(BP)+(DI)+D16BLBX100(SI)(SI)+D8(SI)+D16AHSP101(DI)(DI)+D8(DI)+D16CHBP110D16(BP)+D8(BP)+D16DHSI111(BX)(BX)+D8(BX)+D16BHDIMODR/M存儲(chǔ)器方式寄存器方式有效地址的計(jì)算公式W=0W=100011128086/8088常用指令集數(shù)據(jù)傳送指令(14條)傳送MOV堆棧操作PUSH,POP交換XCHG輸入、輸出IN,OUT轉(zhuǎn)換XLAT地址傳送LEA,LDS,LES標(biāo)志傳送PUSHF,POPF,LAHF,SAHF8086/8088常用指令集傳送MOV堆棧操作PUSH,13算術(shù)運(yùn)算指令(20條)加法ADD,ADC,AAA,DAA加“1”INC減法SUB,SBB,AAS,DAS減“1”DEC比較CMP求補(bǔ)NEG乘法MUL,IMUL,AAM除法DIV,IDIV,AAD符號(hào)擴(kuò)展CBW,CWD算術(shù)運(yùn)算指令(20條)加法ADD,ADC,AAA,14邏輯運(yùn)算指令(13條)求反NOT邏輯乘AND邏輯加OR異或XOR測試位TEST左/右移位SHL,SHR,SAL,SAR左/右循環(huán)移位ROL,ROR,RCL,RCR邏輯運(yùn)算指令(13條)求反NOT邏輯乘AND邏輯加OR異或X15字符串指令(10條)傳送串MOVS,MOVSB/MOVSW串比較CMPS,CMPSB/CMPSW串掃描SCAS,SCASB/SCASW取字符串LODS,LODSB/LODSW存字符串STOS,STOSB/STOSW重復(fù)前綴REP,REPZ,REPNZ字符串指令(10條)傳送串MOVS,MOVSB/MOVS16控制轉(zhuǎn)移指令(28條)子程序調(diào)用CALL子程序返回RET無條件轉(zhuǎn)移JMP條件轉(zhuǎn)移JZ,JNZ,JC,JNC,JO,JNO,JS,JNS,JP,JNP,JA,JAE,JB,JBE,JG,JGE,JL,JLE循環(huán)LOOP條件循環(huán)LOOPNE,LOOPE寄存器CX=0轉(zhuǎn)移JCXZ中斷INT,INTO中斷返回IRET控制轉(zhuǎn)移指令(28條)子程序調(diào)用CALL子程序返回RET無條17處理機(jī)控制指令(12條)清除CF標(biāo)志CLC進(jìn)位有效位CF求反CMC置CF標(biāo)志STC置DF標(biāo)志STD清除DF標(biāo)志CLD置IF標(biāo)志STI清除IF標(biāo)志CLI處理機(jī)暫停HLT等待狀態(tài)WAIT將數(shù)據(jù)傳送給協(xié)處理器(提供到數(shù)據(jù)/地址線上)ESC保證總線的控制LOCK無操作NOP處理機(jī)控制指令(12條)清除CF標(biāo)志CLC進(jìn)位有效位CF求反18尋址方式(重點(diǎn))概述目的大多數(shù)情況下,指令不直接給出操作數(shù)本身,而是給出存放操作數(shù)的寄存器或者是內(nèi)存單元的地址。大多數(shù)情況下,操作數(shù)地址也不是直接給出,而是給出計(jì)算操作數(shù)地址的方法,稱之為尋址方式尋址方式的種類與數(shù)據(jù)有關(guān)的尋址方式(7種)與轉(zhuǎn)移地址有關(guān)的尋址方式(4種)尋址方式(重點(diǎn))19MOV指令(簡介)指令格式mov目的,源功能:該指令將源內(nèi)容送至目的地址內(nèi)例:movax,bx將寄存器bx中的內(nèi)容送到寄存器ax中MOV指令(簡介)20與數(shù)據(jù)有關(guān)的尋址方式立即尋址方式操作數(shù)直接存放在指令中,緊跟在操作碼之后,它作為指令的一部分存放在代碼段里,這種操作數(shù)稱為立即數(shù)。立即數(shù)可以是8位的或者16位的。(386之后的機(jī)器也可以是32位的)立即數(shù)方式用來表示常數(shù),它經(jīng)常用來給寄存器賦初值。只能用于源操作數(shù)字段,不能用于目的操作數(shù)字段,且源操作數(shù)長度應(yīng)與目的操作數(shù)長度一致。與數(shù)據(jù)有關(guān)的尋址方式21立即數(shù)尋址方式舉例MOVAL,5----------指令執(zhí)行后(AL)=05HMOVAX,3064H------指令執(zhí)行后(AX)=3064H6430……………………OP…………指令A(yù)X立即數(shù)尋址方式舉例6430……OP…………指令A(yù)22寄存器尋址操作數(shù)在寄存器中,指令中指定寄存器號(hào)。16位的操作數(shù),寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP。8位的操作數(shù),寄存器可以是AH,AL,BH,BL,CH,CL,DH,DL。例:MOVAX,BX指令執(zhí)行前:(AX)=3064H(BX)=1234H指令執(zhí)行后:(AX)=1234H(BX)=1234H這種方式中,不需要訪問存儲(chǔ)器來取得操作數(shù),所以這種方式可以得到較高的運(yùn)算速度寄存器尋址例:MOVAX,BX指令執(zhí)行前23立即數(shù)尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址基址變址尋址相對基址變址尋址不需要計(jì)算操作數(shù)的地址需要計(jì)算操作數(shù)的有效地址立即數(shù)尋址寄存器尋址直接尋址寄存器間接尋址寄存器相對尋址基址24操作數(shù)的地址段地址偏移地址+我們把這個(gè)偏移地址稱為有效地址(EA)有效地址(EA)=基址+變址+位移量存放在指令中的一個(gè)8位、16位的數(shù),但它不是立即數(shù),而是一個(gè)地址。存放在變址寄存器(SI,DI)中的內(nèi)容,它通常用來訪問數(shù)組中的某個(gè)元素或字符串中的某個(gè)字符存放在基址寄存器(BX,BP)中的內(nèi)容,它是有效地址中的基址部分,通常用來指向數(shù)據(jù)段中數(shù)組或字符串的首地址操作數(shù)的地址段地址偏移地址+我們把這個(gè)偏移地址稱為有效地址(25段偏移CSIPSSSP或BPDSBX、DI、SI或一個(gè)16位數(shù)ESDI(用于串指令)8086/8088段寄存器和相應(yīng)存放偏移地址的寄存器之間的默認(rèn)組合成分16位尋址位移量0,8,16位基址寄存器BX,BP變址寄存器SI,DI16位尋址是有效地址的三種成分的組成段偏移CSIPSSSP或BPDSBX、DI、SI或一個(gè)16位26直接尋址方式操作數(shù)的有效地制只包含位移量一種成分,其值就存放在代碼段中指令的操作碼之后。位移量的值就是操作數(shù)的有效地址。例:MOVAX,[2000H]假設(shè)(DS)=3000H物理地址=3000H*16+2000H=32000H30000H32000H6430……………………OP…………代碼段5030…………數(shù)據(jù)段AX假設(shè)(32000H)=3050H則指令執(zhí)行后,AX=3050H直接尋址方式例:MOVAX,[2000H]假27可以用符號(hào)來代替數(shù)值地址MOVAX,VALUEMOVAX,[VALUE]如果在附加段,則應(yīng)指定段前綴MOVAX,ES:VALUEMOVAX,ES:[VALUE]直接尋址方式只適用于處理單個(gè)變量。例如某個(gè)存放在存儲(chǔ)器中的變量,可以用直接尋址方式先把變量取出送到一個(gè)寄存器中,然后再做進(jìn)一步的處理可以用符號(hào)來代替數(shù)值地址直接尋址方式只適用于處理單個(gè)變量。例28寄存器間接尋址方式操作數(shù)的有效地址只包含基址寄存器或變址寄存器的內(nèi)容。因此有效地址就在某個(gè)寄存器中,而操作數(shù)在存儲(chǔ)器中。16位尋址,可用的寄存器是BX,BP,SI,DI。使用BX、SI、DI,其默認(rèn)段是數(shù)據(jù)段DS使用BP,其默認(rèn)段是堆棧段SS例:MOVAX,[BX]如果(DS)=2000H(BX)=1000H物理地址=2000H*16+1000H=21000H如果(21000H)=50A0H指令執(zhí)行后AX=50A0H20000H21000H……………………A050…………數(shù)據(jù)段AX寄存器間接尋址方式可以用于表格處理,執(zhí)行完一條指令后,只需修改寄存器內(nèi)容就可以取出表格的下一項(xiàng)。寄存器間接尋址方式例:MOVAX,[BX]如果(DS29寄存器相對尋址方式操作數(shù)的有效地址為基址寄存器或變址寄存器的內(nèi)容和指令中指定的位移量之和。例:MOVAX,COUNT[SI](也可以表示為MOVAX,[COUNT+SI])如果(DS)=3000H(SI)=2000HCOUNT=3000H物理地址=3000H*16+2000H+3000H=35000H如果(35000H)=1234H指令執(zhí)行后AX=1234H30000H35000H0030……………………OP…………代碼段3412…………數(shù)據(jù)段AX…………33000HCOUNTSI寄存器相對尋址方式同樣可以用于表格的處理,表格的首地址可設(shè)置為偏移量的地址,利用修改基址或變址寄存器中的內(nèi)容來取得表格中的值寄存器相對尋址方式例:MOVAX,COUNT[SI]30基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器和一個(gè)變址寄存器的內(nèi)容之和例:MOVAX,[BX][DI](也可以表示為MOVAX,[BX+DI])如果(DS)=2100H(BX)=0158H(DI)=10A5H物理地址=2100H*16+0158H+10A5H=221FDH如果(221FDH)=1234H指令執(zhí)行后AX=1234H21000H221FDH……………………3412…………數(shù)據(jù)段AX…………21158HBXDI基址變址尋址方式同樣可以用于數(shù)組或表格的處理,表格的首地址可存放在基址寄存器中,利用變址寄存器來訪問數(shù)組或表格中的元素基址變址尋址方式例:MOVAX,[BX][DI](也31相對基址變址尋址方式操作數(shù)的有效地址是一個(gè)基址寄存器與一個(gè)變址寄存器的內(nèi)容和指令中指定的位移量之和。例:MOVAX,MASK[BX][SI](也可以表示為MOVAX,[MASK+BX+SI])如果(DS)=3000H(BX)=2000H(SI)=1000HMASK=0250H物理地址=3000H*16+2000H+1000H+0250H=33250H如果(33250H)=1234H指令執(zhí)行后AX=1234H相對基址變址尋址方式常用于二維數(shù)組的尋址,如存儲(chǔ)器中存放著由多個(gè)記錄組成的文件,則位移量可以指向文件之首,基址寄存器指向某個(gè)記錄,變址寄存器則指向該記錄中的一個(gè)元素33250H30000H5002……………………OP…………代碼段3412…………數(shù)據(jù)段AX…………32000HBXSI…………32250HMASK相對基址變址尋址方式例:MOVAX,MASK[BX]32與轉(zhuǎn)移地址有關(guān)的尋址方式目的確定轉(zhuǎn)移指令(條件轉(zhuǎn)移指令、無條件轉(zhuǎn)移指令)及轉(zhuǎn)子指令(CALL)的轉(zhuǎn)向地址當(dāng)轉(zhuǎn)移發(fā)生在段內(nèi)的時(shí)候,給出即將轉(zhuǎn)移去執(zhí)行的那條指令的偏移地址,并用該偏移地址取代IP寄存器中的內(nèi)容當(dāng)轉(zhuǎn)去執(zhí)行的指令與原來執(zhí)行的指令不在同一段時(shí),則還需要用新的代碼段基址取代CS寄存器中原有的內(nèi)容與轉(zhuǎn)移地址有關(guān)的尋址方式33種類段內(nèi)直接尋址段內(nèi)間接尋址段間直接尋址段間間接尋址種類34段內(nèi)直接尋址轉(zhuǎn)向的有效地址是當(dāng)前IP寄存器的內(nèi)容和指令中指定的8位或16位位移量之和無條件轉(zhuǎn)移指令在位移量為8位的時(shí)候稱為短跳轉(zhuǎn)JMPSHORTQUESTIPIP+8位位移量無條件轉(zhuǎn)移指令在位移量為16位的時(shí)候稱為近跳轉(zhuǎn)JMPNEARPTRPROGIAIPIP+16位位移量特點(diǎn)指令中的位移量是轉(zhuǎn)向的有效地址與當(dāng)前IP值之差,所以這一程序段在內(nèi)存的不同區(qū)域運(yùn)行時(shí),轉(zhuǎn)移指令本身不會(huì)發(fā)生變化,符合程序再定位的要求位移量IP+EA段內(nèi)直接尋址位移量IP+EA35段內(nèi)間接轉(zhuǎn)移轉(zhuǎn)向的有效地址是一個(gè)寄存器或是一個(gè)存儲(chǔ)單元的內(nèi)容。

這個(gè)寄存器或者存儲(chǔ)單元中的內(nèi)容可以用除立即數(shù)以外的任何一種尋址方式獲得

(IP)(EA)數(shù)據(jù)尋址方式根據(jù)數(shù)據(jù)尋址方式計(jì)算出有效地址的值轉(zhuǎn)向的有效地址這種尋址方式和以下的兩種尋址方式都不能用于條件轉(zhuǎn)移指令。即,條件轉(zhuǎn)移指令只能使用段內(nèi)直接尋址,而無條件轉(zhuǎn)移指令JMP和CALL可以使用四種尋址方式中的任何一種。段內(nèi)間接轉(zhuǎn)移數(shù)據(jù)尋址方式根據(jù)數(shù)據(jù)尋址轉(zhuǎn)向的有效地址這種尋址方36假設(shè):(DS)=2000H,(BX)=1256H,(SI)=528FH,位移量=20A1H(232F7)=3280H,(264E5H)=2450H

JMPBX執(zhí)行該指令后,(IP)=1256H

JMPTABLE[BX]執(zhí)行該指令后,(IP)=((DS)*16+(BX)+位移量)=(20000H+1256H+20A1H)=(232F7H)=3280H

JMP[BX][SI](IP)=((DS)*16+(BX)+(SI))=(20000H+1256H+528H)=(264E5H)=2450H寄存器相對尋址方式基址變址尋址方式假設(shè):(DS)=2000H,(BX)=1256H,寄存37段間直接尋址指令中直接提供了轉(zhuǎn)向的段地址和偏移地址,所以只要用指令中指定的偏移地址取代IP寄存器的內(nèi)容,用指令中指定的段地址取代CS寄存器中的內(nèi)容完成的操作JMPFARPTROPR(IP)OPR的段內(nèi)偏移地址(CS)OPR所在的段地址段間直接尋址38段間間接尋址用存儲(chǔ)器中的兩個(gè)相繼字的內(nèi)容來取代IP和CS寄存器中的原始內(nèi)容,以達(dá)到段間轉(zhuǎn)移的目的。

存儲(chǔ)單元的地址是由指令指定除立即數(shù)方式和寄存器方式以外的任何一種數(shù)據(jù)尋址方式獲得完成的操作JMPDWORDPTROPR(IP)(EA)(CS)(EA+2)例JMPDWORDPTR[BX+8](BX)=3706H,(DS)=1000H物理地址=(DS)*16+(BX)+8=10000H+3706H+8=1370EH

………B2H67H05H33H………………1370EHCSIP指令執(zhí)行后,(IP)=67B2H,(CS)=3305H段間間接尋址………B2H67H05H33H………………137398086宏匯編語言的基本語法匯編語句指令性語句經(jīng)匯編之后,有目標(biāo)程序與之對應(yīng),是有實(shí)際操作的語句。一般指令性語句一條指令性語句對應(yīng)一條8086/8088機(jī)器指令宏語句該語句由偽操作符定義,通過宏定義、宏調(diào)用、宏擴(kuò)展的過程來實(shí)現(xiàn)宏語句。一個(gè)宏語句對應(yīng)一組目標(biāo)代碼程序8086宏匯編語言的基本語法匯編語句40macronameMACRO[dummyparameterlist]…………宏定義體……ENDMmacroname[actualparameterlist]macronameMACRO[dummypara41指令性語句格式[標(biāo)號(hào):][前綴]指令助記符[操作數(shù)][,操作數(shù)][;注釋]標(biāo)號(hào):代表“:”后面語句的存儲(chǔ)地址,供轉(zhuǎn)移指令(JMP)、轉(zhuǎn)子指令(CALL)、循環(huán)指令(LOOP)使用。由字母、數(shù)字組成串(第一個(gè)字符非數(shù)字)前綴:是與串操作運(yùn)算(MOVS、CMPS、SCAS、LODS、STOS)以及總線封鎖指令(LOCK)配合使用的部分。它們是REP、REPZ、REPE、REPNZ、REPNE等等。

LOOP1:REPMOVSDEST,SOURCE操作數(shù)的數(shù)目可以為0,1或2,用“,”隔開指令性語句格式42指示性語句功能:對程序的起止信息、分段情況、變量說明、內(nèi)存結(jié)構(gòu)等進(jìn)行說明。格式:[名字]偽操作指令[參數(shù),……,參數(shù)][;注釋]PC宏匯編的偽指令段定義偽指令:SEGMENT,ENDS,ASSUME,GROUP,ORG符號(hào)定義偽指令:EQU,=,LABEL數(shù)據(jù)定義偽指令:DB,DW,DD,DQ,DT,RECORD,STRUC指示性語句43過程定義偽指令:PROC,ENDP宏處理偽指令:MACRO,REPT,IRPC條件匯編偽指令:IF,ENDIF,IFDIF,IFDEF基本元素匯編語言字符集大寫字母:A~Z小寫字母:a~z數(shù)字:0~9符號(hào):+,-,*,/,<,>,(,),[,],;,,,.,:,_,‘,“,@,$,&,#,?,!

注:匯編語言源程序中,大小寫字母作用相同過程定義偽指令:PROC,ENDP44常量與數(shù)值表達(dá)式常量在匯編時(shí)已經(jīng)確定的值。在指令中作為直接操作數(shù),或者給變量賦初值類型數(shù)值常量:以數(shù)值的形式直接寫在語句中符號(hào)常量:預(yù)先為它定義一個(gè)名字,然后在語句中用名字來表示該常量(提高程序的可讀性)用EQU或=來定義例:PORTEQU83HALPHT=35*21常量與數(shù)值表達(dá)式45數(shù)據(jù)形式格式X取值范圍例子注釋二進(jìn)制XXXXXXXXB0,101110101B八進(jìn)制XXXXOXXXXQ0~70~7735O421Q十進(jìn)制XXXXXXXXD0~90~937562358D缺省形式十六進(jìn)制XXXXH0~F0FB23H最前面的一個(gè)字符必須是0~9ASCII‘XX’“XX”ASCII字符128個(gè)‘OK’“Pass”十進(jìn)制實(shí)數(shù)XX.XXE±XX0~923.456E-7各種形式常量的格式返回?cái)?shù)據(jù)形式格式X取值范圍例子注釋二進(jìn)制XXXXX46標(biāo)號(hào)標(biāo)號(hào)是為一組機(jī)器指令所起的名字,用于程序轉(zhuǎn)移指令、調(diào)用指令和循環(huán)指令的操作數(shù)(轉(zhuǎn)向地址),一般在CS段內(nèi)定義和使用。標(biāo)號(hào)的屬性:段地址、段內(nèi)偏移地址和類型標(biāo)號(hào)所處的代碼段的段基址,稱為該標(biāo)號(hào)的段地址

標(biāo)號(hào)所處的位指向?qū)τ诙问椎刂返南鄬Φ刂?,稱為該標(biāo)號(hào)的段內(nèi)偏移地址形式一:標(biāo)號(hào)形式二:OFFSET標(biāo)號(hào)LC1:MOVAL,20H……JMPLC1MOVBX,OFFSETLB1MOVBX,OFFSETLB1與MOVBX,LB1有什么不同?標(biāo)號(hào)LC1:MOVAL,20HMOVBX,OFF47標(biāo)號(hào)有FAR(遠(yuǎn)標(biāo)號(hào))和NEAR(近標(biāo)號(hào))種類型近標(biāo)號(hào):該標(biāo)號(hào)的定義在本段在機(jī)器指令助記符之前,加一標(biāo)號(hào)名字,后面緊跟一個(gè)冒號(hào)“:”LC1:MOVAL,20H……JMPLC1遠(yuǎn)標(biāo)號(hào):該標(biāo)號(hào)的定義不在本段過程定義時(shí),為過程起的名字也是標(biāo)號(hào),可作為轉(zhuǎn)子指令的操作數(shù),這類標(biāo)號(hào)的類型在定義子過程時(shí)確定

PROPPROCFAR……

PROPENDP標(biāo)號(hào)有FAR(遠(yuǎn)標(biāo)號(hào))和NEAR(近標(biāo)號(hào))種類型48注:標(biāo)號(hào)在使用時(shí)(1)循環(huán)指令、條件轉(zhuǎn)移指令只能引用NEAR型,并且定義標(biāo)號(hào)語句和使用標(biāo)號(hào)語句的相對距離只能在–128~+127字節(jié)范圍內(nèi)(2)無條件轉(zhuǎn)移指令、調(diào)用(轉(zhuǎn)子)指令可引用NEAR和FAR兩種類型的標(biāo)號(hào)(3)如果同一段內(nèi),無條件轉(zhuǎn)移指令語句到定義該標(biāo)號(hào)語句的距離在–128~+127字節(jié)范圍內(nèi),則可在使用的標(biāo)號(hào)前指定為短標(biāo)號(hào):記為SHORT標(biāo)號(hào)注:標(biāo)號(hào)在使用時(shí)49變量變量的定義及格式變量是內(nèi)存中一個(gè)數(shù)據(jù)區(qū)的名字,可以作為指令的存儲(chǔ)器操作數(shù)來引用變量定義的格式:[變量名]變量類型定義符表達(dá)式[,……]變量名:由用戶定義(符合標(biāo)識(shí)符定義的規(guī)范)變量類型:DB:1個(gè)字節(jié)DW:2個(gè)字節(jié),即1個(gè)字DD:4個(gè)字節(jié),即2個(gè)字DQ:8個(gè)字節(jié),即4個(gè)字DT:10個(gè)字節(jié),即5個(gè)字變量變量名:由用戶定義(符合標(biāo)識(shí)符定義的規(guī)范)變量類型:50表達(dá)式算術(shù)運(yùn)算符:+,-,*,/,邏輯運(yùn)算符:NOT,AND,OR,XOR關(guān)系運(yùn)算符:EQ----相等NE----不相等LT----小于GT----大于LE----小于或等于GE----大于或等于表達(dá)式51分析操作符TYPE

格式:TYPE變量或標(biāo)號(hào)

說明:變量:則匯編程序?qū)⒒厮驮撟兞款愋桶淖止?jié)數(shù)標(biāo)號(hào):則匯編程序?qū)⒒厮痛碓摌?biāo)號(hào)類型的數(shù)值。NEAR(-1)、FAR(-2)例:ARRAYDW1,2,3ADDSI,TYPEARRAY匯編的結(jié)果為ADDSI,2分析操作符例:ARRAYDW1,2,352LENGTH

格式:LENGTH變量

說明:回送分配給該變量的單元數(shù),表達(dá)式中帶

DUP時(shí)有效,非DUP時(shí),回送1例:FEESDW100DUP(0)MOVCX,LENGTHFEES則匯編結(jié)果為:MOVCX,100例:ARRAYDW1,2MOVCX,LENGTHARRAY則匯編結(jié)果為:MOVCX,1LENGTH例:FEESDW100DUP(0)則匯53SIZE

格式:SIZE變量

說明:回送分配給該變量的字節(jié)數(shù),此值是LENGTH值和TYPE值的乘積例:ARRAYDW1,2,3MOVCX,SIZEARRAY則匯編結(jié)果為:MOVCX,2OFFSET

格式:OFFSET變量或標(biāo)號(hào)

說明:回送該變量或標(biāo)號(hào)的偏移地址值例:MOVBX,OFFSETOPR則匯編程序?qū)PR的偏移地址回送給指令,在執(zhí)行時(shí),將該偏移地址裝入BX寄存器中SIZE例:ARRAYDW1,2,3則匯編結(jié)果54SEG

格式:SEG變量或標(biāo)號(hào)

說明:回送該變量或標(biāo)號(hào)的段地址例:MOVBX,SEGOPR則匯編程序?qū)PR所在的段基址送入BX寄存器屬性操作符

I.PTR

格式:類型PTR表達(dá)式

類型:BYTE,WORD,DWORD,FAR,NEAR表達(dá)式:是存儲(chǔ)器操作數(shù)

說明:用來給已分配的存儲(chǔ)地址賦予另一種屬性,使該地址具有另一種類型例:MOV[BX],5非法指令MOVBYTEPTR[BX],5MOVWORDPTR[BX],5SEG例:MOVBX,SEGOPR則匯編程序?qū)P55II.段超越前綴說明:用來表示一個(gè)標(biāo)號(hào)、變量或地址表達(dá)式的段屬性例:用段前綴來指定某段的地址操作數(shù)MOVAX,ES:[BX+SI]III.SHORT說明:表明JMP指令中轉(zhuǎn)移地址的屬性–128~+127II.段超越前綴56指示性語句(說明性語句)存儲(chǔ)分配語句數(shù)值表達(dá)式如3*20?–保留存儲(chǔ)空間但不存入數(shù)據(jù)例:ABCDB0,?,?,0DEFDW?,52存儲(chǔ)空間分配如圖所示ASCII字符串例:MESSAGEDB‘HELLO’存儲(chǔ)空間分配如圖所示00----00----3400……………………ABCDEF48454C4C4F……………………MESSAGE指示性語句(說明性語句)00----00----3400……57nDUP(?)–重復(fù)因子n為正整數(shù),表示數(shù)據(jù)項(xiàng)重復(fù)n次例:ARRAY1DB2DUP(0,1,2,?)ARRAY2DB100DUP(?)內(nèi)存分配如圖所示nDUP(表達(dá)式[表達(dá)式,……])例:ARRAY3DB100DUP(0,2DUP(1,2),0,3)000102--000102----………………ARRAY1ARRAY2--……100個(gè)字節(jié)返回nDUP(?)–重復(fù)因子n為正整數(shù),表示數(shù)據(jù)項(xiàng)重復(fù)n次058段定義段定義語句段名SEGMENT[邊界類型][連接類型][‘類別’]……段名ENDS邊界類型:用來指明段的起始邊界連接類型:段的連接方式類別:表示段的類別,連接程序只使同類別的段發(fā)生關(guān)聯(lián)段值設(shè)定偽指令語句ASSUME格式ASSUME段寄存器:段名[,段寄存器:段名,……]段定義59SEGASEGMENT……SEGAENDSSEGBSEGMENT……SEGBENDSCODESEGMENT

ASSUMEDS:SEGA,ES:SEGB,CS:CODE,SS:NOTHING

MOVAX,SEGAMOVDS,AXMOVAX,SEGBMOVES,AX……CODEENDSSEGASEGMENT60ORG–置匯編單元計(jì)數(shù)器語句功能:用來指出其后的程序段或數(shù)據(jù)塊存放的起始地址的偏移量格式:ORG表達(dá)式匯編程序用語句中表達(dá)式之值作為起始地址連續(xù)存放程序例:VECTORSSEGMENTORG10VECT1DW47A5HORG20VECT2DW0C596H……VECTORSENDSVECT1偏移地址為0AHVECT2偏移地址為14HORG–置匯編單元計(jì)數(shù)器語句VECT1偏移地址為0AHV61地址計(jì)數(shù)器$匯編程序?qū)υ闯绦蜻M(jìn)行匯編時(shí),使用$保存當(dāng)前正在匯編的指令的偏移地址。開始匯編或在每一段開始時(shí),地址計(jì)數(shù)器初始化為0,以后在匯編過程中,每處理一條指令,地址計(jì)數(shù)器增加一個(gè)值,此值為該指令所需要的字節(jié)數(shù)例JNE$+6當(dāng)上一條指令執(zhí)行的結(jié)果不為零時(shí),轉(zhuǎn)向地址是JNE指令的首地址加上6

注:$+6必須為另一條指令的首地址,否則,匯編程序?qū)⒅甘境鲥e(cuò)信息地址計(jì)數(shù)器$62例:計(jì)算字符串的長度STRINGDB“THISISABOOK”能否用分析操作符SIZE來計(jì)算?COUNTEQU$-STRING例:計(jì)算數(shù)的個(gè)數(shù)ARRAYDW1,2,3,4,5,6COUNTEQU($-ARRAY)/2010002000300040005000600……$ARRAY0000H0001H0002H0003H0004H0005H0006H0007H0008H0009H000AH000BH例:計(jì)算字符串的長度能否用分析操作符SIZE來計(jì)算?COUN63過程定義過程也稱為“子程序”CALL指令調(diào)用過程,RET指令結(jié)束過程過程具有“NEAR”屬性和“FAR”屬性,如果不指定屬性,匯編程序認(rèn)為它是“NEAR”屬性具有NEAR屬性的過程,只能由屬于該過程的段中的其它程序調(diào)用具有FAR屬性的過程,可以由任意段調(diào)用格式過程名PROCNEAR或FAR……RET過程名ENDP過程定義64SEGXSEGMENT……SUBTPROCFAR……

RETSUBTENDP……CALLFARPTRSUBT……SEGXENDSSEGYSENGMENT……CALLFARPTRSUBT……SEGYENDSSEGXSEGMENT65DOS下程序正常結(jié)束的方式MOVAH,4CHINT21H主程序名PROCFARPUSHDSMOVAX,0PUSHAX……RET主程序名ENDPDOS下程序正常結(jié)束的方式66順序結(jié)構(gòu)程序設(shè)計(jì)數(shù)據(jù)傳送指令一般傳送指令格式:MOV目的,源功能:將源內(nèi)容送至目的地址內(nèi)說明:該指令有7種格式MOVMEM/REG1,MEM/REG2MOVAX,BXMOVAX,[2000H]MOV[2000H],DSMOVREG,DATAMOVAL,5不可兩個(gè)內(nèi)存位置直接傳送數(shù)據(jù)順序結(jié)構(gòu)程序設(shè)計(jì)數(shù)據(jù)傳送指令不可兩個(gè)內(nèi)存位置直接傳送數(shù)據(jù)67MOVAC,MEMMOVMEM,ACMOVSEGREG,MEM/REGMOVDS,AXMOVMEM/REG,SEGREGMOVAX,DSMOVMEM/REG,DATAMOVAX,3168H段寄存器之間不能傳送數(shù)據(jù)MOV指令不能改變CS當(dāng)前的內(nèi)容MOVAC,MEM段寄存器之間不能MOV指令不能改變68立即數(shù)通用寄存器段寄存器內(nèi)存MOV指令傳送方向圖立即數(shù)通用寄存器段寄存器內(nèi)存MOV指令傳送方向圖69交換指令格式:XCHGOPR1,OPR2功能:將源操作數(shù)OPR2內(nèi)容和目的操作數(shù)OPR1內(nèi)容互換(OPR1)(OPR2)說明段寄存器不能作為操作數(shù)無法將兩個(gè)內(nèi)存內(nèi)容互換例:XCHGBX,[BP+SI](BX)=6F30H(BP)=0200H(SI)=0046H(SS)=2F00H(2F246H)=4154HOPR2的物理地址=2F00H*16d+0200H+0046H=2F246H指令執(zhí)行后:(BX)=4154H([BP+SI])=6F30H交換指令指令執(zhí)行后:70堆棧操作命令格式PUSHSRC執(zhí)行的操作(16位指令)(SP)(SP)-2((SP)+1,(SP))(SRC)POPDST執(zhí)行的操作(16位指令)(DST)((SP)+1,(SP))(SP)(SP)+2注意:8086/8088中,不允許立即數(shù)進(jìn)棧標(biāo)志寄存器的內(nèi)容入棧和出棧:PUSHF和POPF堆棧操作命令注意:8086/8088中,不允許立即數(shù)進(jìn)棧71例:PUSHAX將寄存器AX的內(nèi)容壓入堆棧PUSHDS將寄存器DS的內(nèi)容壓入堆棧PUSHWORDPTR[BX]將內(nèi)存單元中的字壓入堆棧POPCX將堆棧棧頂16位的字送入寄存器CX中PUSHFMOVBP,SPAND[BP],0FEFFHPOPF修改標(biāo)志寄存器中TF的值例:72地址傳送指令取偏移地址指令格式:LEAREG,SRC執(zhí)行的操作(REG)SRC功能:將內(nèi)存變量的偏移地址送入16位的通用寄存器中例LEABX,[BX+SI+0F62H](BX)=0400H(SI)=003CH執(zhí)行后BX=0400H+003CH+0F62H=139EH說明:LEA指令與分析操作符OFFSET功能類似,LEA的功能更強(qiáng),指令中的操作數(shù)可帶下標(biāo)地址傳送指令73取32位地址指令LDS,LES格式:LDSREG,SRCLESREG,SRC執(zhí)行的操作(REG)(SRC)(SREG)(SRC+2)功能:內(nèi)存的一個(gè)雙字存儲(chǔ)地址,內(nèi)容的高十六位為段地址,低十六位是偏移量地址。將偏移量地址送入指定的寄存器中,段地址送入DS或ES中例ADDRDD11223344H…………LDSSI,ADDR執(zhí)行后,(DS)=1122H(SI)=3344H取32位地址指令LDS,LES74DATASEGMENTADDRDD56781234HBUFDW5DUP(20)AD-BUFDDBUFSTRINGDB‘a(chǎn)bcd’AD-STRINGDDSTRINGOFF-STRINGDWSTRINGDATAENDSCODESEGMENTASSUME

CS:CODE,DS:DATASTART:

MOVAX,DATAMOVDS,AXLESDI,ADDRLEABX,ADDRMOVAX,SEGADDRENDSTARTMOVCX,BUFLDSSI,AD-BUFMOVAL,STRINGMOVAX,OFF-STRINGLESBX,AD-STRINGMOVAX,4C00HINT21HCODEENS34H12H78H56H14H00H14H00H14H00H14H00H14H00H04H00H8FH1FH61H62H63H64H12H00H8FH1FH12H00H1F8FH:0000HADDRBUFAD-BUFSTRINGAD-STRINGOFF-STRING0004H000EH0012H0016H001AH數(shù)據(jù)段存放段地址和偏移地址存放偏移地址ES:DI=5678H:1234HBX=0000HAX=1F8FHCX=0014HDS:SI=1F8FH:0004HAX=0012HAL=61HES:BX=1F8FH:0012HDATASEGMENTADDRD75算術(shù)運(yùn)算指令二進(jìn)制加法運(yùn)算指令A(yù)DD,ADC,INCADD指令格式:ADDDST,SRC執(zhí)行的操作(DST)(SRC)+(DST)影響標(biāo)志位:CF,OF,ZF,SF(只考慮主要的標(biāo)志位)例ADDDX,0F0F0H指令執(zhí)行前(DX)=4652H1111000011110000+010001100101001010011011101000010指令執(zhí)行后:(DX)=3742HZF=0,SF=0,CF=1,OF=0算術(shù)運(yùn)算指令76帶進(jìn)位的加法指令A(yù)DC格式:ADCDST,SRC執(zhí)行的操作:(DST)(SRC)+(DST)+CF例:設(shè)目的操作數(shù)存放在DX和AX,其中DX存放高位字。源操作數(shù)存放在BX,CX中,其中BX存放高位字。指令執(zhí)行前:(DX)=0002H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H指令序列為:ADDAX,CX(1)ADCDX,BX(2)指令1執(zhí)行后:(AX)=0D389H,SF=1,ZF=0,CF=1,OF=0指令2執(zhí)行后:(DX)=0008H,SF=0,ZF=0,CF=0,OF=00002H0F365HDXAX0005H0E024HBXCX帶進(jìn)位的加法指令A(yù)DC0002H0F365HDXAX000577INC指令格式:INCOPR執(zhí)行的操作:(OPR)(OPR)+1INC指令78例:X=124,Y=5,將X+Y的結(jié)果存于RESULT單元中。DATASEGMENTXDB124YDB5RESULTDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,XADDAL,YMOVRESULT,ALMOVAH,4CHINT21HCODEENDSENDSTART例:X=124,Y=5,將X+Y的結(jié)果存于RES79二進(jìn)制減法指令SUB,SBB,DEC,NEG,CMPSUB減法指令格式:SUBDST,SRC執(zhí)行的操作:(DST)(DST)-(SRC)SBB帶借位減法指令格式:SBBDST,SRC執(zhí)行的操作:(DST)(DST)-(SRC)-CFDEC減1指令格式:DECOPR執(zhí)行的操作:(OPR)(OPR)-1二進(jìn)制減法指令SUB,SBB,DEC,NEG,CMP80NEG求補(bǔ)指令格式:NEGOPR執(zhí)行的操作:(OPR)-(OPR)說明:把操作數(shù)按位求反后末位加1,因而執(zhí)行的操作也可以表示為:(OPR)0FFFFH-(OPR)+1CMP比較指令格式:CMPOPR1,OPR2執(zhí)行的操作:(OPR1)-(OPR2)說明:該指令執(zhí)行的操作與SUB指令執(zhí)行的操作一樣,

但不保存結(jié)果。

根據(jù)該指令執(zhí)行的結(jié)果設(shè)置標(biāo)志位NEG求補(bǔ)指令81例:設(shè)X,Y,Z均位雙精度數(shù),他們分別存放在地址為X,X+2,Y,Y+2,Z,Z+2的存儲(chǔ)單元中中,存放時(shí)高位字在高地址中,低位字在低地址中,在8086中如何實(shí)現(xiàn)WX+Y+24-ZDATASEGMENTXDD11223344HYDD55667788HZDD22336699HWDD?DATAENDS443322118877665599663322--------XX+2YY+2ZZ+2WW+2CODESEGMENTASSUMECS:CODE,DS:DATACODEENDSENDSTARTSTART:MOVAX,DATAMOVDS,AX

MOVAX,XMOVDX,X+2

ADDAX,YADCDX,Y+2

ADDAX,24ADCDX,0

SUBAX,ZSBBDX,Z+2

MOVW,AXMOVW+2,DX

MOVAX,4C00HINT21H例:設(shè)X,Y,Z均位雙精度數(shù),他們分別存放在地DATA82二進(jìn)制乘法指令:MUL,IMULMUL無符號(hào)數(shù)乘法格式:MULSRC執(zhí)行的操作:字節(jié)操作數(shù):(AX)(AL)*(SRC)字操作數(shù):(DX,AX)(AX)*(SRC)IMUL帶符號(hào)數(shù)乘法格式:IMULSRC執(zhí)行的操作與MUL相同注:乘法指令只對CF和OF有定義對于MUL指令:如果乘積的高一半為0,則CF和OF均為0,否則為1。這樣的條件媽設(shè)置可以用來檢查字節(jié)乘積的結(jié)果是字節(jié)還是字對于IMUL指令:如果乘積的高一半是低一半的符號(hào)擴(kuò)展,則CF和OF均為0,否則為1二進(jìn)制乘法指令:MUL,IMUL注:乘法指令只對CF和OF有83例:如(AL)=0B4H,(BL)=11H,求指令I(lǐng)MULBL和MULBL的結(jié)果解:(AL)=0B4H

無符號(hào)數(shù)為180D,帶符號(hào)數(shù)為-76D(BL)=11H

無符號(hào)數(shù)為17D,帶符號(hào)數(shù)為17D

執(zhí)行

IMULBL

的結(jié)果為(AX)=0FAF4H=-1292D,CF=OF=1

執(zhí)行

MULBL

的結(jié)果為(AX)=0BF4H=3060D,CF=OF=1例:如(AL)=0B4H,(BL)=11H,求指令84二進(jìn)制除法指令:DIV,IDIV無符號(hào)數(shù)除法DIV格式:DIVSRC執(zhí)行的操作:字節(jié)操作:16位的被除數(shù)在AX中,8位的除數(shù)為源操作數(shù),結(jié)果的8位商在AL中,8位余數(shù)在AH中(AL)(AX)/(SRC)的商(AH)(AX)/(SRC)的余數(shù)字操作:32位的被除數(shù)在DX,AX中,DX為高位字;16位的除數(shù)為源操作數(shù),結(jié)果的16位商在AX中,16位的余數(shù)在DX中(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余數(shù)二進(jìn)制除法指令:DIV,IDIV85帶符號(hào)數(shù)除法IDIV格式:IDIVSRC執(zhí)行的操作:與DIV執(zhí)行的操作相同。但操作數(shù)必須是帶符號(hào)數(shù),商和余數(shù)也都是帶符號(hào)數(shù)帶符號(hào)數(shù)除法IDIV86例:如(AX)=0400H,(BL)=0B4H,求指令I(lǐng)DIVBL和DIVBL的結(jié)果解:(AX)=0400H

無符號(hào)數(shù)為1024D,帶符號(hào)數(shù)為+1024D(BL)=0B4H

無符號(hào)數(shù)為180D,帶符號(hào)數(shù)為-76D

執(zhí)行DIVBL的結(jié)果為(AH)=7CH=124D余數(shù)(AL)=05H=5D商

執(zhí)行IDIVBL的結(jié)果為(AH)=24H=36D余數(shù)(AL)=0F3H=-13D商例:如(AX)=0400H,(BL)=0B4H,求指87符號(hào)位擴(kuò)充:CBW,CWDCBW字節(jié)轉(zhuǎn)換為字格式:CBW執(zhí)行的操作:AL的內(nèi)容符號(hào)為擴(kuò)展到AH,形成AX中的字。即如果(AL)的最高有效位為0,則(AH)=0;如果(AL)的最高有效位為1,則(AH)=0FFHCWD字轉(zhuǎn)換為雙字格式:CWD執(zhí)行的操作:AX的內(nèi)容符號(hào)擴(kuò)展到DX,形成DX:AX中的雙字。即如果(AX)的最高有效位為0,則(DX)=0;如果(AX)的最高有效位為1,則(DX)=0FFFFH符號(hào)位擴(kuò)充:CBW,CWD88例:算術(shù)綜合運(yùn)算舉例,計(jì)算(V-(X*Y+W-540))/X

其中,X,Y,W,V均為16位帶符號(hào)數(shù),已分別裝入X,Y,W,V單元

中,要求上式計(jì)算的結(jié)果的商存入AX寄存器,余數(shù)存入DX寄存器DATASEGMENT

XDW1234H

YDW2345H

WDW3456H

VDW4567HDATAENDS

MOVAX,X

IMULY

MOVCX,AX

MOVBX,DX

MOVAX,W

CWD

ADDCX,AX

ADCBX,DX

SUBCX,540

SBBBX,0

MOVAX,V

CWD

SUBAX,CX

SBBDX,BX

IDIVXCODESEGMENT

ASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA

MOVDS,AX

MOVAH,4CH

INT21HCODEENDSENDSTART例:算術(shù)綜合運(yùn)算舉例,計(jì)算(V-(X*Y+W-898086/8088位處理運(yùn)算指令邏輯運(yùn)算指令NOT指令格式:NOTOPR執(zhí)行的操作:(OPR)(OPR)AND指令格式:ANDDST,SRC執(zhí)行的操作:(DST)(DST)∧(SRC)OR指令格式:ORDST,SRC執(zhí)行的操作:(DST)(DST)∨(SRC)8086/8088位處理運(yùn)算指令90XOR指令格式:XORDST,SRC執(zhí)行的操作:(DST)(DST)⊕(SRC)TEST指令格式:TESTDST,SRC執(zhí)行的操作:(DST)∧(SRC)注:該指令執(zhí)行完畢,設(shè)置相應(yīng)的標(biāo)志位,不保存結(jié)果XOR指令91例1要求將AL的第5位置1MOVAL,43HORAL,20H0100001100100000OR01100011例2要測試AL寄存器中第2位是否為1,若為1則轉(zhuǎn)移到EXIT去執(zhí)行TESTAL,00000100BJNEEXIT例1要求將AL的第5位置192移位指令算術(shù)移位指令格式:SALDST,計(jì)數(shù)值SARDST,計(jì)數(shù)值算術(shù)移位指令適用于帶符號(hào)數(shù)的運(yùn)算,用SAL來乘以2,用SAR來除以2計(jì)數(shù)值可以為1,多于1時(shí),為CL中的內(nèi)容CF的內(nèi)容被改變,SF,PF,ZF也根據(jù)目的操作數(shù)的新值而改變。當(dāng)符號(hào)位改變時(shí),OF置1CF0SAL移位示意圖CFSAR移位示意圖移位指令CF0SAL移位示意圖CFSAR移位示意圖93例MOVCL,5SAR[DI],CL如果指令執(zhí)行前:(DS)=0F800H(DI)=180AH(0F980A)=0064H則實(shí)際的物理地址為=0F800H*16d+180AH=0F980A指令執(zhí)行后,(0F980A)=0003HCF=0,PF=1,ZF=0,SF=0,OF=0例MOVCL,594邏輯移位指令格式:SHLDST,計(jì)數(shù)值SHRDST,計(jì)數(shù)值邏輯移位指令用于實(shí)現(xiàn)無符號(hào)數(shù)的運(yùn)算。SHL用來乘以2,SHR用來除以2CF0SHL移位示意圖CF0SHR移位示意圖邏輯移位指令CF0SHL移位示意圖CF0SHR移位示意圖95例:MOVCL,2SHLSI,CL執(zhí)行前:(SI)=1450H5200D執(zhí)行后:(SI)=5140H20800D例:96循環(huán)移位指令格式:ROLDST,計(jì)數(shù)值RORDST,計(jì)數(shù)值RCLDST,計(jì)數(shù)值RCRDST,計(jì)數(shù)值CFROL移位示意圖CFROR移位示意圖CFRCL移位示意圖CFRCR移位示意圖循環(huán)移位指令CFROL移位示意圖CFROR移位示意圖CFRC97例:(AX)=0012H,(BX)=0034H,要求把他們裝配在一起,形成(AX)=1234HMOVCL,8ROLAX,CLADDAX,BX例:(AX)=0012H,(BX)=0034H,要求把他們98分支結(jié)構(gòu)程序設(shè)計(jì)CMP比較指令格式:CMPOPR1,OPR2執(zhí)行的操作:(OPR1)-(OPR2)說明:該指令執(zhí)行的操作與SUB指令執(zhí)行的操作一樣,

但不保存結(jié)果。

根據(jù)該指令執(zhí)行的結(jié)果設(shè)置標(biāo)志位分支結(jié)構(gòu)程序設(shè)計(jì)CMP比較指令99轉(zhuǎn)移指令無條件轉(zhuǎn)移指令格式:JMP目的地址(標(biāo)號(hào))功能:無條件跳轉(zhuǎn)到目的地址處執(zhí)行指令轉(zhuǎn)移的情形段內(nèi)短轉(zhuǎn)移…………0000HB4H01HNEXT:MOVAH,01…………0018HEBHE6HJMPNEXT001AHB4H4CHEXIT:MOVAH,4CH轉(zhuǎn)移指令100段內(nèi)近轉(zhuǎn)移…………0018HE9H0FH01HJMPNEXT001BH8AHD0HMOVDL,AL…………012AHB4H4CHNEXT:MOVAH,4CH段內(nèi)近轉(zhuǎn)移101段間轉(zhuǎn)移C1SEGMENT………………0018HFFH0010H34C0HJMPNEXTPROG………………C1ENDSC2SEGMENT….0010HB4H4CHNEXTPROG:MOVAH,4CH…C2ENDS段間轉(zhuǎn)移102條件轉(zhuǎn)移指令格式:JX目的地址(短標(biāo)號(hào))功能:滿足條件則轉(zhuǎn)移到指定地址處執(zhí)行說明:X為1~3個(gè)字母目的地址與JX指令所在的地址相對距離不超過-127~+128個(gè)字節(jié)范圍發(fā)生跳轉(zhuǎn)時(shí),CPU需要較長的時(shí)鐘周期進(jìn)行處理,所以,程序設(shè)計(jì)中盡可能使處理機(jī)不發(fā)生跳轉(zhuǎn)條件轉(zhuǎn)移指令103條件轉(zhuǎn)移指令的種類根據(jù)單個(gè)標(biāo)志位的值進(jìn)行判斷的條件轉(zhuǎn)移指令JC(CF=1時(shí)轉(zhuǎn)移),JNC(CF=0時(shí)轉(zhuǎn)移)JE/JZ(ZF=1時(shí)轉(zhuǎn)移),JNE/JNZ(ZF=0時(shí)轉(zhuǎn)移)JS(SF=1時(shí)轉(zhuǎn)移),JNS(SF=0時(shí)轉(zhuǎn)移)JO(OF=1時(shí)轉(zhuǎn)移),JNO(OF=0時(shí)轉(zhuǎn)移)JP/JPE(PF=1時(shí)轉(zhuǎn)移),JNP/JPO(PF=0時(shí)轉(zhuǎn)移)條件轉(zhuǎn)移指令的種類104用于無符號(hào)數(shù)的條件轉(zhuǎn)移指令JA/JNBE,高于轉(zhuǎn)移/不低于且不等于轉(zhuǎn)移CF=0且ZF=0JAE/JNB,高于或等于轉(zhuǎn)移/不低于轉(zhuǎn)移CF=0或ZF=1JBE/JNA,低于或等于轉(zhuǎn)移/不高于轉(zhuǎn)移CF=1或ZF=1JB/JNAE,低于轉(zhuǎn)移/不高于且不等于轉(zhuǎn)移CF=1且ZF=0用于無符號(hào)數(shù)的條件轉(zhuǎn)移指令105用于有符號(hào)數(shù)的條件轉(zhuǎn)移指令JG/JNLE,大于/不小于且不等于轉(zhuǎn)移ZF=0,且SF⊕OF=0JGE/JNL,大于或等于/不小于轉(zhuǎn)移ZF=1,或SF⊕OF=0JLE/JNG,小于或等于/不大于轉(zhuǎn)移ZF=1,或SF⊕OF=1JL/JNGE,小于/不大于且不等于轉(zhuǎn)移ZF=0,且SF⊕OF=1用于有符號(hào)數(shù)的條件轉(zhuǎn)移指令106例:求三個(gè)無符號(hào)數(shù)(16位)中的最大值。MOVAX,XCMPAX,Y

JAE

XAEY

MOVAX,YXAEY:CMPAX,Z

JAE

XMAXMOVAX,ZXMAX:MOVMAX,AXMOVAH,4CHINT21HASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXCODESEGMENTCODEENDS

ENDSTARTDATASEGMENTXDW180

YDW850

ZDW320

MAXDW?DATAENDS開始結(jié)束X≥Y?X≥Z?輸出最大值YYXYXZNN例:求三個(gè)無符號(hào)數(shù)(16位)中的最大值。107例:試編制一個(gè)程序,從鍵盤輸入一行字符,要求鍵入的第一個(gè)字符

必須是空格符,如果不是,則退出程序,如果是,則開始接收鍵

入的字符,并順序存放在首地址為BUFFER的緩沖區(qū)中,空格符不

存入,直到接收到第二個(gè)空格符時(shí)退出程序。

DOS功能調(diào)用:01H,鍵入并回顯

格式:AH=01調(diào)用參數(shù):無返回參數(shù):AL=輸入字符開始結(jié)束初始

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論