匯編語(yǔ)言程序設(shè)計(jì)_第1頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)_第2頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)_第3頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)_第4頁(yè)
匯編語(yǔ)言程序設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩183頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

在學(xué)習(xí)高級(jí)語(yǔ)言程序設(shè)計(jì)時(shí),知道了程序的三大主要在匯編語(yǔ)言的源程序也同樣有此三大結(jié)構(gòu),所不同的是它易出現(xiàn)。DATAXDBYDBZDWDATAENDSCODESEGMENTSTART:MOVAX,DATAMOV MOVZ,AX MOVAH,4CHCODEENDSEND 如果標(biāo)號(hào)的轉(zhuǎn)移指令和定義的標(biāo)號(hào)同屬程序的一個(gè)段,這時(shí)實(shí)現(xiàn)轉(zhuǎn)移中的轉(zhuǎn)移指令JMP或CALL指令,那么實(shí)現(xiàn)轉(zhuǎn)移就不僅僅是修改IP的問(wèn)題,@:ADD EQUTHISNEARANDAX,0FFH EQUTHIS LABELNEARMOV LABEL 距離屬性被指明為FAR,用以提高標(biāo)號(hào)的靈活性。上面的偽指令和指令等 EQUTHISFARL7:XORAX,0F0FHMOVAX,SEG 格式:OFFSETMOVBX,OFFSET 格式:TYPE標(biāo)號(hào)名

80X86匯編語(yǔ)言程序中指令的執(zhí)行順序由代碼段寄存器CS和指令指針寄結(jié)合(CS)*16+(IP),指向從中取出下一條指令的單元地址。在大多數(shù)工作狀態(tài)下,要執(zhí)行的下一條指令已從器中取出,并放在單元將利用新的IP和CS值從器中取得下一條指令,直接把該指令傳送(1)無(wú)條件轉(zhuǎn)移指令(2)條件轉(zhuǎn)移指令(3)循環(huán)控制指 格式:JMP目標(biāo)操作數(shù)在本轉(zhuǎn)移指令之前還是定義,此時(shí)可以在JMP指令中的目標(biāo)標(biāo)號(hào)前面之如果該JMP指令,而所定義的標(biāo)號(hào)在JMP指令,則匯編程序格式:JMP16JMP JMP JMP DWDWL2DW…MOVJMPNEAR_LABEL_ARRAY[DI];轉(zhuǎn)移到…MOVJMPNEAR_LABEL_ARRAY[DI];轉(zhuǎn)移到L3JMPJMPDWORDPTR[BX][SI]JMPALPHA[BP][DI]段間間接轉(zhuǎn)移指令一般只能通過(guò)器來(lái)實(shí)現(xiàn)轉(zhuǎn)移,用指令所規(guī)定的雙“JumpIF…”若條件滿足則轉(zhuǎn)(CForAbove/NotBelownorEqualAboveorEqual/NotBelowBelow/NotAbovenorEqual(CForBeloworEqual/NotAbove Equal/Zero((SFxorOF)orGreater/NotLessnorEqual(SFxorGreaterorEqual/NotLess(SFxorLess/NotGreaternorEqual“JumpIF…”若條件滿足則轉(zhuǎn)((SFxorOF)orLessorEqual/NotGreaterNotCarry進(jìn)位標(biāo)志為“0”NotEqual/NotZeroNotOverflowOverflowNotParity/ParityoddParity/ParityEvenNotSignSign符號(hào)位為1例如,JZ MOVSUB JL MOV JBE MOVAND JNZ MOVAL,80HMOVTESTBL,AL JNZL1 ︰CMP ,結(jié)果設(shè)置標(biāo)志 JGElab1 MOV

MOVSUB lab1 圖4.2計(jì)算AXADDAL,1;結(jié)果為0,置ZF為1JZL1 MOVMUL JS JNC CMPBH,CMPBH,MOVDL,JAEINTXCHGBH,MOVDL,CMPBH,INTJAEXCHGBH,CMPBL,JAEXCHGBL,MOVDL,BHINT21HMOVBH,MOVAH,1 INT21HMOVBL,MOVAH,1 INT21HMOVCL,

arrdw45,46,54,57… mid(mid(low+high)/ <

ax,dseg ds, es, :

AX,ES:[DI+2] SI,ES:[DI+2] SI,ES:[DI] SI,1 SI,DI AX,ES:[SI] LOW_IDX,1 BX,ES:[DI] HIGH_IDX,BX BX,DI

MOVCX,LOW_IDX DX,HIGH_IDX CX,DX CX,DX CX,1 ,CX SI,1 AX, HIGH_IDX,CX CX LOW_IDX,CX 滿足條件就執(zhí)行循環(huán)體,否則循環(huán)。續(xù)執(zhí)行循環(huán)操作,一旦滿足條件則循環(huán)。 LOOP指令的指令。mov.modelintmovloopmovmovLOOPE(LoopWhileEqual)/LOOPZ(LoopWhileZero) 處執(zhí)行;否則順序執(zhí)行LOOPE/LOOPZ指令的指令。COUNTEQU$-OFFSETARRAYDATAENDSCODEBEGIN:MOVAX,DATAMOVDS,AXMOVCX,MOVDI,0FFFFH NEXT:DIMOVBH,3DIVBHCMPAH,0 MOVDL, JMPDIS OKENTRY:MOVDX,DI ORDL,30H INT21HINT21H ENDBEGINLOOPNE(LoopWhileNotEqual)/LOOPNZ(LoopWhileNot格式:LOOPNE/ JCXZ(JumpifCX/ECXisZero) COUNTEQU$-OFFSETARRAYDATAENDSCODEBEGIN:MOVAX,DATAMOVDS,AXMOVCX,MOVDI,0FFFFH NEXT:DIMOVBH,3DIVBHCMPAH,0JE OKENTRY:MOVDX,DI ORDL,30H INT21HMOVDL,''INT21HJMP INT END for(inti=0;i< …while(i<…L1:CMPJMP }while(i<… JNEL1 MOV LOOP*BEGIN:MOVAH,1 INT21HCMPAL,33H JBBEGINJABEGIN MOV MOVCH,0 MOVAH,2MOVDL,0DH INT21HMOVINT MOVDL,’*’;輸出n個(gè)*MOVAH,2INT21HLOOPMOVDL,0DH INT21HINT21HPOPCX LOOPL1 MOVAH,4CH INT21HEND BEGIN:MOVAH,1 INT21HCMPAL,33H JBBEGINJABEGIN MOV MOV MOV MOVAH,2 MOVDL,0DHINT21HINT MOVINTLOOPINTINTMOVPUSHMOVDL,'*' INTMOVSUBCX,2 MOVDL,''INT21HLOOPL2 MOVDL,'*'INT21HMOVDL,0DH INT21HINT21HPOP LOOP MOVCX,BX MOVDL,'*'MOVAH,2INT21HLOOPL4INT21HMOVDL,0AHINT21HMOVAH,4CH INT21HEND

a11 A 15 15 ADW4050H,0003H,5678H,6400H,0009HDW0099H,0084H,9080H,4587H,0000HDW1045H,0000H,0001H,0008H,0007HDW1020H,4321H,5432H,6599H,1256HDW9000H,5608H,6578H,5000H,5432H STAPNDW20DUP(?) EQU$-OFFSETSTAPNSTACKENDS ASSUMEMOVDS,AXMOVSS,AXMOVAX,TOPMOVSP,AXMOVCX,4MOVLOOP1:PUSHMOVSI,2MOVDI,10POPA[BX+SI]POPA[BX+DI]ADDSI,2ADDDI,0AHLOOPLOOP2ADDBX,0CHPOPCX

INT21H END12344.3.5程序舉例(例4.3.8movch,rotate:4 ;’0’~’9’ASCII addal, ;’A’~’F’ASCIIprintit:movdl,movah,int

………

DATAREAADDRDWNUMBERNUMBERDWY(0F0FH)COUNTDW? PROGNAMMAINPROCASSUMECS:PROGNAM, AX,AX , DS,初始化NNYYY初始化NNYYYC AX, CXSHIFT: AX,1 EXIT: …9…9…9例…9

3 CX,ES:[DI] DI,2 BX,ES:[DIES:[DI-2BX,ES:[DIES:[DI-2],DI, T:POP WORDPTR例4.3.11編制程序?qū)⒄龜?shù)N一個(gè)已排序的字?jǐn)?shù)組的正確位置。……… N

CS:PROGNAM AX, AX, DS AX, ARRAY_HEAD-2,0FFFFH ,0 AX, BX,ARRAY_END[SI] ARRAR_END[SI+2],BX , INSERT:MOV ARRAY_END[SI+2],AX Z1=X1+Y1,Z2=X2+Y2,Z3=X3-Y3,Z4=X4-Y4,Z5=X5-Y5,Z6=X6+Y6,Z7=X7-Y7, Z8=X8-Y8,Z9=X9+Y9,Z10=X10+Y10.……X…Y………Z……

XYZ10 ,DS:DATA AX, AX,…77 DS …N

BX, CX, DX, AX,X[BX] DX, AX, AX,Y[BX],BX2 …… A ASSUMECS:PROGNAM,DS:DATAREA AX, AX,DATAREA DS, DI,BX,AX,AX AX,A[BX+2] A[BX],AX BX, CX, 例4.3.14在附加段中有一個(gè)字?jǐn)?shù)組,其首地址已存放在DI寄存…8…8… ASSUMECS:PROGNAM,DS:DATAREA AX,DATAREA DS, N YN Y N START_ADDR, CX,ES:[DI

DI, T,CX BX BX, ,2,ES:[DI CX, ,2,ES:[DI ES:[DI+2],AX ES:[DI+2],AX ES:[DI],AX BX,BX BX,0AMEPROC[NEAR/FAR… AME以INT21H的4CH號(hào)功能結(jié)束。過(guò)程的說(shuō)明信息一般包括過(guò)程名稱、功能、出口參數(shù)、單元、所用寄 子程序的所采用的算法;可選項(xiàng),如果算法簡(jiǎn)單,可以不寫(xiě) ;可選項(xiàng),為將來(lái)的提供信息 這時(shí),調(diào)用指令不僅要把該指令地址的偏移量壓進(jìn)棧,而且也要把段寄存器CS的值壓進(jìn)棧。在此,再把被調(diào)用子程序地址的偏移量和CALL CALL CALLWORD1 CALLDWORD1 CALLwordptr[BX] CALLdwordptr 能,指令系統(tǒng)提供了一條的子程序返回指令。其格式如下: RET ;子程序返回后,(SP)←(SP)格式:PUBLIC符號(hào)[,…格式:EXTRN名稱:類(lèi)型[,…]寄存器與器一樣對(duì)于所有的程序都是公用的。當(dāng)調(diào)用者調(diào)用一個(gè)過(guò)程時(shí),如果該TESTPUSHAXPUSHBXPUSHPOPBXPOPAXTEST…AL,…AL,…給子程序,而是把它們的地址(一般是首地址)告訴子程序。例4.4.1過(guò)程PROADD直接模塊的數(shù)據(jù)區(qū)。例4.4.2通過(guò)地址表傳送變量的方法傳遞參數(shù)。中斷就是使處理器暫時(shí)掛起當(dāng)前正在進(jìn)行的工作程序, 前

常見(jiàn)的中斷源大致分為CPU外部產(chǎn)生的中斷和CPU外部中斷源包括通過(guò)NMI引腳傳遞的非中斷和通過(guò)In8259A可編程中斷控制器傳遞的外部中斷等。CPU通過(guò)8259來(lái)管理外部中斷。外部設(shè)備的中斷通過(guò)8259A的INTR引腳給CPU傳送中斷信號(hào),8259A還可以使CPU中斷則包括除法出錯(cuò)中斷、單步中斷、INTO指令產(chǎn)生的溢出中斷和程序中安排的INTn中斷指令產(chǎn)生的中斷等。 可中可中斷通常來(lái)自外部設(shè)備,可以通過(guò)指令設(shè)置中斷控制器的參數(shù)來(lái)某 軟件中斷則是指由指令I(lǐng)NTn引起的非中斷 MOVDX,34HMOVBX,1 硬件中斷之一的單步中斷INT01H和斷點(diǎn)中斷INT03H,于器中地址0000H~3FFH處。中斷指令 下一條指令 AX,

7217210A700…………以DOS系統(tǒng)功能調(diào)用中斷INT20H為例,來(lái)說(shuō)明由軟件引起的非型中斷,在程序中遇到INT20H時(shí),該指令產(chǎn)生中斷類(lèi)型號(hào)為20H的中斷,該中斷在D0000:0080L4,就會(huì)得到如下結(jié)果:0000:00807210A7 結(jié)果中的“7210A700”就代表以0000:開(kāi)始的字節(jié)內(nèi)存單元的進(jìn)制畢能夠正確地返回中斷調(diào)用處。出中斷請(qǐng)求的(指令I(lǐng)NT是發(fā)出中斷信號(hào),而不要理解為調(diào)用中斷服BIOS駐留在系統(tǒng)板的只讀器ROM中,計(jì)算機(jī)加電后,可以隨時(shí)調(diào)在器系統(tǒng)中,從地址FE000H到FFFFFH的8KBROM中裝有ROMBIOS能處理幾乎所有的I/O(只有等極少數(shù)不能處理)。它直接用輸入/所以中斷處理程序必須具有自保護(hù)的能力,并能到所有當(dāng)前段基址部硬件中斷處理程序時(shí),程序中絕對(duì)不允許使用INT21H。35H就能指定中斷號(hào)的地址。其使用參數(shù)如下:參數(shù):AH=35H,AL=中斷號(hào)原中斷向量表中的地址就被破壞了,這時(shí),該地址既不指向原處那么,系統(tǒng)將轉(zhuǎn)向一個(gè)的位置。如果程序員能確信此時(shí)不會(huì)發(fā)生該類(lèi)型的中斷請(qǐng)求,當(dāng)然也就不必關(guān)中斷指令??诘刂坊謴?fù)成處理該中斷的地址。INTNOEQU40H OLDADDRDD? NEWPROGPROC;新中斷處理程 MOVAL INT MOVwordptrOLDADDR,MOVwordptrOLDADDR+2,MOVAXSEGNEWPROGMOVDS,AXMOVDX,OFFSETNEWPROGMOVAL,INTNOMOVAH,25HINT21H ordptrOLDADDRMOVDS,ptrOLDADDR+2MOVAL,INTNOMOVAH,25H;步INT驟 ,w輸入的字符在AL則自動(dòng)調(diào)用INT23H并結(jié)束程序。返回時(shí)AL=字符。AH=6:讀鍵盤(pán)字符,時(shí)DL=0FFH。如果準(zhǔn)備好,AL=字符,未準(zhǔn)備好,AL=0。MAXLENDB32 DB? DB32DUP(?) MOVAH,0AHINT鍵入字

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論