




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、內(nèi)容u概述u順序程序設(shè)計u分支程序設(shè)計u循環(huán)程序設(shè)計u子程序設(shè)計概述u1.程序基本結(jié)構(gòu)u順序程序u分支程序u循環(huán)程序u子程序u2.程序設(shè)計步驟u分析問題,建立數(shù)學模型u確定算法u編制程序流程圖u合理分配存儲空間和寄存器u編寫程序u檢查調(diào)試程序概述u3.流程圖常用元素開始結(jié)束起止框NYCX=0判斷框DXDX2處理框流向線 概述u畫流程圖的優(yōu)點:u通用u易于理解u易于分解成若干個子任務(wù)u有助于從中分析錯誤的原因u有許多現(xiàn)成的繪圖軟件順序程序設(shè)計uP71轉(zhuǎn)移指令u無條件轉(zhuǎn)移指令u無條件轉(zhuǎn)移指令格式及操作u條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令(Jumpunconditionally)u格式:JMP目標u功能:無
2、條件轉(zhuǎn)移到目標地址執(zhí)行指令u分類:u段內(nèi)轉(zhuǎn)移:u轉(zhuǎn)移指令和目標(標號)在同1代碼段中,修改IP/EIPu段間轉(zhuǎn)移:u轉(zhuǎn)移指令和目標不在同1代碼段中,修改CS:IP/CS:EIPu尋址方式:u直接尋址:轉(zhuǎn)移指令相對于目標的位移量在指令中u間接尋址:轉(zhuǎn)移目標的有效地址在寄存器/存儲單元中u標志位:不影響無條件轉(zhuǎn)移指令格式及操作u無條件轉(zhuǎn)移指令的三種類型u段內(nèi)直接短轉(zhuǎn)移u段內(nèi)直接轉(zhuǎn)移u段內(nèi)間接轉(zhuǎn)移u段間直接轉(zhuǎn)移u段間間接轉(zhuǎn)移無條件轉(zhuǎn)移指令的三種類型u短轉(zhuǎn)移u位移量:8位u轉(zhuǎn)移范圍:-128B+127Bu說明:轉(zhuǎn)移范圍以IP當前值為基準u近轉(zhuǎn)移u實地址:位移量:16位u轉(zhuǎn)移范圍:-32768u虛地址:
3、位移量:32位u轉(zhuǎn)移范圍:2G(230)無條件轉(zhuǎn)移指令的三種類型u遠轉(zhuǎn)移u兩個代碼段之間的轉(zhuǎn)移u轉(zhuǎn)移范圍:實存儲器系統(tǒng)內(nèi)的任一單元u說明:u段內(nèi)轉(zhuǎn)移:短轉(zhuǎn)移,近轉(zhuǎn)移u段間轉(zhuǎn)移:遠轉(zhuǎn)移段內(nèi)直接短轉(zhuǎn)移u格式:JMPSHORT標號u操作:IPIP+8位位移量u說明:u指令中的標號是帶符號數(shù),提供了JMP指令的下一條指令的首字節(jié)地址與目標單元之間的距離。u轉(zhuǎn)移范圍:-128B+127B段內(nèi)直接短轉(zhuǎn)移u轉(zhuǎn)移方向 JMP SHORT L1 L1: 位移量是正數(shù) L1: JMP SHORT L1 位移量是負數(shù)段內(nèi)直接短轉(zhuǎn)移u例:若位移量=8,IP=0102Hu執(zhí)行: JMP SHORT L1 L1: uL1
4、指向的內(nèi)存單元有效地址=0102H+08H=010AH段內(nèi)直接轉(zhuǎn)移u格式:JMP標號u操作:IPIP+位移量/EIPEIP+位移量u位移量:16/32位u轉(zhuǎn)移范圍:32KB/2Gu說明:若轉(zhuǎn)移在-128+127B內(nèi),按短轉(zhuǎn)移處理u例:JMPLL段內(nèi)間接轉(zhuǎn)移u格式:JMP地址表達式u說明:目標單元有效地址在寄存器/內(nèi)存中u操作:IPr/m/EIPr/mu注意:地址表達式不能是立即數(shù)u判斷指令對錯u例:JMPEBXuJMPWORDPTRBXuJMP26uJMPBYTEPTRBXSI段間直接轉(zhuǎn)移u格式:JMP標號u操作:IP/EIP標號所在段內(nèi)地址偏移量uCS標號所在段的段基值u說明:JMP指令和標
5、號不在同一個代碼段中u例:CODE1 SEGMENT JMP L1 CODE1 ENDS CODE2 SEGMENT L1: CODE2 ENDS 段間間接轉(zhuǎn)移u格式:JMPDWORDPTR地址表達式u操作:IP/EIPEA(有效地址)CSEA+2u說明:u1.內(nèi)存操作數(shù)是4字節(jié)地址指針u2.虛地址方式:uEIP16位偏移量;EIPEIPAND0FFFFH;CS段基值u例: ADDR DD 0012H,2000H MOV BX,OFFSET ADDR JMP DWORD PTR BX 條件轉(zhuǎn)移指令u條件轉(zhuǎn)移指令的格式及功能u根據(jù)單個標志判斷轉(zhuǎn)移條件的指令u無符號數(shù)條件轉(zhuǎn)移指令u帶符號數(shù)條件轉(zhuǎn)移
6、指令u條件為CX=0的轉(zhuǎn)移指令條件轉(zhuǎn)移指令的格式及功能u格式:指令助記符標號u功能:根據(jù)上一條指令設(shè)置的標志判別測試條件u操作(實地址):IPIP+8位位移量u標志位:不影響u轉(zhuǎn)移范圍:-128+127B根據(jù)單個狀態(tài)標志判斷轉(zhuǎn)移條件的指令u標志位指令轉(zhuǎn)移條件含意uCFJCCF=1有進位/借位uJNCCF=0無進位/借位uZFJE/JZZF=1相等/等于0uJNE/JNZZF=0不相等/不等于0uSFJSSF=1是負數(shù)uJNSSF=0是正數(shù)uOFJOOF=1有溢出uJNOOF=0無溢出uPFJP/JPEPF=1有偶數(shù)個1uJNP/JPOPF=0有奇數(shù)個1無符號數(shù)條件轉(zhuǎn)移指令u指令轉(zhuǎn)移條件含意uJ
7、A/JNBECF=0ANDZF=0ABuJAE/JNBCF=0ORZF=1ABuJB/JNAECF=1ANDZF=0ABuJBE/JNACF=1ANDZF=1AB若在條件轉(zhuǎn)移指令前執(zhí)行CMP A,B帶符號數(shù)條件轉(zhuǎn)移指令u指令轉(zhuǎn)移條件含意uJG/JNLESF=OFANDZF=0ABuJGE/JNLSF=OFORZF=1ABuJL/JNGESFOFANDZF=0ABuJLE/JNGSFOFORZF=1AB若在條件轉(zhuǎn)移指令前執(zhí)行CMP A,B以計數(shù)值為依據(jù)的條件轉(zhuǎn)移指令u格式:JCXZ標號/JECXZ標號u測試條件:CX=0/ECX=0u操作:uCXCX-1/ECXECX-1u若CX=0/ECX=0
8、,轉(zhuǎn)移到目標單元u否則,順序執(zhí)行該指令后的下一條指令u例: MOV CX,C JCXZ NEXT LOP: LOOP LOP NEXT : 循環(huán)控制指令u格式:LOOP標號u測試條件:CX0/ECX0u操作:uCXCX-1/ECXECX-1;循環(huán)計數(shù)u若CX/ECX0,IP/EIPIP/EIP+8位位移量u若CX/ECX=0,順序執(zhí)行LOOP的下一條指令u轉(zhuǎn)移范圍:-128B+127Bu標志位:不影響MOV AX, 0MOV BX, 0MOV CX, 64HINC BXADD AX, BXLOOP SUMSUM:循環(huán)控制指令uLOOP指令應(yīng)用舉例u例:計算1+2+3+100循環(huán)控制指令u格式:
9、LOOPE/LOOPZ標號u測試條件:CX/ECX0andZF=1u操作:uCXCX-1/ECXECX-1;循環(huán)計數(shù)u若CX0/ECX0andZF=1uIP/EIPIP/EIP+8位位移量u否則,順序執(zhí)行LOOPE/LOOPZ的下一條指令u轉(zhuǎn)移范圍:-128B+127Bu標志位:不影響循環(huán)控制指令NUM DB -5,-5,3,-5,7,-1 C EQU $-NUM A DW -1 MOV CX, CMOV SI,OFFSET NUM-1uLOOPE/LOOPZ指令應(yīng)用舉例u例:將第一個不等于-5的數(shù)的偏移地址送變量AAGAIN:INC SI CMP BYTE PTR SI,-5 LOOPE A
10、GAIN MOV A,SI EXIT:HLT循環(huán)控制指令u格式:LOOPNE/LOOPNZ標號u測試條件:CX/ECX0andZF=0u操作:uCXCX-1/ECXECX-1;循環(huán)計數(shù)u若CX0/ECX0andZF=0uIP/EIPIP/EIP+8位位移量u否則,順序執(zhí)行該指令的下一條指令u轉(zhuǎn)移范圍:-128B+127Bu標志位:不影響循環(huán)控制指令STR DB 123$4$ C EQU $-STR A DW 0 MOV CX, C LEA SI,STR-1uLOOPNE/LOOPNZ指令應(yīng)用舉例u例1:將第一個$字符的偏移地址送AAGAIN:INC SI CMP BYTE PTR SI, $
11、LOOPNE AGAIN MOV A,SI STR DB 200 DUP($) LEA SI,STRLOP:MOV AH,1 INT 21H MOV SI,AL INC SI CMP AL,0DH LOOPNE LOP LEA DX,STR MOV AH,9 INT 21H 循環(huán)控制指令uLOOPNE/LOOPNZ指令應(yīng)用舉例u例2:鍵盤輸入字符,按回車停止,顯示該串分支程序設(shè)計u分支程序結(jié)構(gòu)u通過比較/測試實現(xiàn)程序分支u通過跳轉(zhuǎn)表實現(xiàn)程序分支分支程序結(jié)構(gòu)u簡單分支結(jié)構(gòu)u條件轉(zhuǎn)移指令形成2個分支u轉(zhuǎn)移條件分為如下3種:u以狀態(tài)標志(E,C,S,O,P)作為判斷程序去向的依據(jù)u以2個無符號數(shù)或有
12、符號數(shù)的比較結(jié)果作為判斷依據(jù)u把CX或ECX作為計數(shù)器,將其值是否為0為判斷依據(jù),若為0,則轉(zhuǎn)移簡單分支結(jié)構(gòu)流程圖1簡單分支結(jié)構(gòu)流程圖2分支程序結(jié)構(gòu)u多路分支結(jié)構(gòu)u用多條條件轉(zhuǎn)移指令擴展u用分支表實現(xiàn)u用地址表實現(xiàn)取分支表首地址取方式字有效字段按有效字段和分支表首地址計算相應(yīng)分支地址分支選擇分支0出錯處理分支8通過比較/測試實現(xiàn)程序分支u特點:通過比較測試置標志位,控制程序分支u例:比較內(nèi)存操作數(shù),用16進制顯示最大數(shù)ALSINYYNCX=0ALSISISI+1CXCX-1開始DS數(shù)據(jù)段首地址SI 內(nèi)存數(shù)據(jù)偏移地址CX循環(huán)次數(shù)AL第一個內(nèi)存數(shù)據(jù)SI第二個內(nèi)存數(shù)據(jù)地址結(jié)束顯示通過跳轉(zhuǎn)表實現(xiàn)程序分
13、支u目的:實現(xiàn)多分支程序設(shè)計u分類:u1.由程序段入口地址組成跳轉(zhuǎn)表u注意:數(shù)據(jù)類型DWu2.由無條件轉(zhuǎn)移指令組成跳轉(zhuǎn)表u注意:指令編碼應(yīng)等長循環(huán)程序設(shè)計u循環(huán)程序結(jié)構(gòu)u循環(huán)程序設(shè)計循環(huán)程序結(jié)構(gòu)初始化部分初始化部分循環(huán)體循環(huán)體修改部分修改部分條件條件初始化部分初始化部分循環(huán)體循環(huán)體修改部分修改部分條件條件后繼程序后繼程序初始化部分:計數(shù)器;地址指針;初值修改部分:為進入下一次循環(huán)修改參數(shù),如地址指針等控制部分:1.用計數(shù)控制循環(huán)2.用條件控制循環(huán)先工作后判斷先判斷后工作循環(huán)程序應(yīng)用舉例u1.用計數(shù)控制循環(huán)u例1:統(tǒng)計NUM中正數(shù)、0和負數(shù)的個數(shù)u2.用條件控制循環(huán)u例2:將STR1中所有非空白
14、字符送STR2u例1:統(tǒng)計NUM中正數(shù)、0和負數(shù)的個數(shù)TITLE NUMBER OF PLUS,ZERO,MINUSDATA SEGMENT NUM DB 0,-2,5,3,8,-1,0 C EQU $-NUM RES DB 3 DUP(0)DATA ENDSCODE SEGMENT ASSUME DS:DATA, CS:CODESTART: MOV AX,SEG NUM MOV DS,AX LEA SI,NUM MOV CX,C LOP: CMP BYTE PTRSI,0 JG PLUS JL MINU INC BYTE PTR RES+1 JMP NEXT PLUS: INC BYTE P
15、TR RES JMP NEXT MINU: INC BYTE PTR RES+2NEXT: INC SI LOOP LOP MOV AH,4CH INT 21HCODE ENDS END STARTu例2:將STR1中所有非空白字符送STR2DATA SEGMENT STR1 DB You are welcome! C EQU $-STR1 STR2 DB 30 DUP(?)DATA ENDSCODE SEGMENT ASSUME DS:DATA, CS:CODESTART: MOV AX,SEG STR1 MOV DS,AX LEA SI,STR1-1 LEA DI,STR2 MOV CX,
16、C LOP:INC SI CMP BYTE PTR SI, JZ NEXT MOV AL,SI MOV DI,AL INC DINEXT: LOOP LOP MOV AH,4CH INT 21HCODE ENDS END START匯編語言程序設(shè)計u匯編語言u偽指令u程序設(shè)計u順序程序設(shè)計u轉(zhuǎn)移和循環(huán)指令u分支程序設(shè)計u循環(huán)程序設(shè)計u調(diào)用和中段類指令及其應(yīng)用u子程序設(shè)計子程序設(shè)計u過程:將源程序中有獨立功能的程序段寫成過程u應(yīng)用:u1.源程序中重復出現(xiàn)的程序段u2.不同源程序中經(jīng)常用到的程序段u3.利用過程將一個復雜程序分割成多個子程序u優(yōu)點:程序結(jié)構(gòu)清晰,可讀性強。目錄u過程定義語句u過程調(diào)
17、用語句u過程返回語句u連接程序語句u調(diào)用程序與被調(diào)用過程間的數(shù)據(jù)傳送過程定義偽指令(P68) 過程名過程名 PROC NEAR/FAR RET 過程名過程名 ENDP 過程入口過程入口兩過兩過程名程名相同相同過程名符合標識符命名規(guī)則,在程序中應(yīng)是唯一的。過程名符合標識符命名規(guī)則,在程序中應(yīng)是唯一的。距離屬性:距離屬性:1.NEAR:可省略,由段內(nèi)可省略,由段內(nèi)CALL指令調(diào)用。指令調(diào)用。 2.FAR:由其它代碼段內(nèi)由其它代碼段內(nèi)CALL指令調(diào)用。指令調(diào)用。過程名具有段、偏移量和距離類型屬性。過程名具有段、偏移量和距離類型屬性。過程名是過程調(diào)用指令過程名是過程調(diào)用指令CALL的目標操作數(shù)。的目標
18、操作數(shù)。過程出口過程出口過程調(diào)用指令(P83)u格式:CALL過程名/標號u功能:將程序控制轉(zhuǎn)移到指定過程u標志:無影響u操作:u1.斷點入棧保存(CALL下一條指令的首字節(jié)地址)u段內(nèi)調(diào)用:保存IP/EIP值u段間調(diào)用:保存CS:IP/CS:EIP值u2.無條件轉(zhuǎn)移到目標地址u段內(nèi)調(diào)用:修改IP/EIP值u段間調(diào)用:修改CS:IP/CS:EIP值段內(nèi)直接調(diào)用u格式:格式:CALL CALL 過程名過程名u操作:操作:u CALL下一條下一條指令到過程入指令到過程入口的位移量口的位移量應(yīng)用舉例code segmentcode segment call a call a a proc a pro
19、c ret ret a endp a endp code endscode ends調(diào)用調(diào)用斷點偏移量斷點偏移量ssspsp-2段內(nèi)間接調(diào)用u格式:格式:CALL R/MCALL R/Mu說明:過程入口地址在通用寄存器或字存儲說明:過程入口地址在通用寄存器或字存儲單元中。單元中。u操作:操作: 應(yīng)用舉例例例1 1:CALL BX ;CALL BX ;過程入口在過程入口在BXBX中中斷點偏移量斷點偏移量ssspsp-2段間直接調(diào)用u格式:格式:CALL CALL 過程名過程名u操作:操作: sp-4sssp斷點斷點IP值值斷點斷點CS值值段間間接調(diào)用u格式:格式:CALL MCALL Mu ds
20、偏移量偏移量段基值段基值過程入口地址在一個由過程入口地址在一個由4字節(jié)內(nèi)存單元組成的地址指針中。字節(jié)內(nèi)存單元組成的地址指針中。只能用內(nèi)存操作數(shù)只能用內(nèi)存操作數(shù)應(yīng)用舉例斷點偏移量斷點偏移量sp-4ds偏移量偏移量段基值段基值sssp斷點段基值斷點段基值CALL與JMP指令異同 CALL CALL JMPJMP轉(zhuǎn)移轉(zhuǎn)移 無條件轉(zhuǎn)移到目標無條件轉(zhuǎn)移到目標 同前同前斷點處理斷點處理 保留斷點保留斷點 不保留斷點不保留斷點 (以便正確返回)(以便正確返回) (不(不考慮目標程序段運考慮目標程序段運 行行后程序的去向)后程序的去向)過程返回指令(P84)u格式:RET彈出值u功能:將CALL指令下一條指令
21、首字節(jié)地址(返回地址)彈出堆棧,將控制從過程返回調(diào)用程序。返回指令將彈出值加到返回指令將彈出值加到SP / ESP中中,目的是廢除調(diào)用過程目的是廢除調(diào)用過程前壓入堆棧的參數(shù)前壓入堆棧的參數(shù),以保持棧頂平衡。以保持棧頂平衡。彈出值是字節(jié)數(shù)彈出值是字節(jié)數(shù),在指令中總為偶數(shù)。在指令中總為偶數(shù)。u操作:操作:1. 1.段內(nèi)返回段內(nèi)返回應(yīng)用舉例uRET4u1.恢復返回地址u2.釋放2個參數(shù)所占堆??臻gu3.返回調(diào)用程序u子程序應(yīng)用舉例DATA SEGMENTDATA SEGMENT STR1 DB Would you like some tea?,0DH,0AH,24H STR1 DB Would yo
22、u like some tea?,0DH,0AH,24H STR2 DB Yes I do.,0DH,0AH,24H STR2 DB Yes I do.,0DH,0AH,24H STR3 DB Please help yourself!,0DH,0AH,24H STR3 DB Please help yourself!,0DH,0AH,24H STR4 DB Thank you!,0DH,0AH,24H STR4 DB Thank you!,0DH,0AH,24HDATA ENDSDATA ENDSSTACK1 SEGMENT PARA STACKSTACK1 SEGMENT PARA STA
23、CK DW 20 DUP(?) DW 20 DUP(?)STACK1 ENDSSTACK1 ENDSCODE SEGMENTCODE SEGMENT ASSUME DS:DATA, CS:CODE,SS:STACK1 ASSUME DS:DATA, CS:CODE,SS:STACK1START: MOV AX,DATASTART: MOV AX,DATA MOV DS,AX MOV DS,AX LEA DX,STR1 LEA DX,STR1 CALL ANSWER CALL ANSWER LEA DX,STR2 LEA DX,STR2 CALL ANSWER CALL ANSWER例例1 1:
24、屏幕顯示字符串(段內(nèi)調(diào)用):屏幕顯示字符串(段內(nèi)調(diào)用) LEA DX,STR3 LEA DX,STR3 CALL ANSWER CALL ANSWER LEA DX,STR4 LEA DX,STR4 CALL ANSWER CALL ANSWER MOV AH,4CH MOV AH,4CH INT 21H INT 21HANSWER PROC NEARANSWER PROC NEAR MOV AH,9 MOV AH,9 INT 21H INT 21H RET RETANSWER ENDPANSWER ENDP CODE ENDS CODE ENDS END START END START可省略
25、可省略連接程序語句u全局符號語句u外部符號語句uTITLE語句uEND語句全局符號語句(PUBLIC)u格式:PUBLIC符號1,符號2,u功能:該語句中說明的符號是全局符號,可在其它模塊中直接引用該指令可位于程序的任意一行。該指令可位于程序的任意一行。符號必須是在本程序中已定義的常符號必須是在本程序中已定義的常量量,變量變量,標號和過程名等。標號和過程名等。外部符號語句(EXTRN)u格式:格式:EXTRN EXTRN 符號符號1: 1:類型類型1 ,1 ,符號符號2: 2:類型類型2, 2, u功能功能: :將本程序所要使用的將本程序所要使用的, ,但在其它程但在其它程序中定義的符號的段和
26、類型屬性告訴匯序中定義的符號的段和類型屬性告訴匯編程序編程序 PUBLIC和和EXTRN必須配合使用。必須配合使用。各符號的類型必須與說明它為全局各符號的類型必須與說明它為全局符號那個程序所定義的類型一致。符號那個程序所定義的類型一致。標題語句(TITLE)u格式:格式: TITLE TITLE 文本文本u功能功能: :程序標題(程序標題(6060個字符),將個字符),將在列表文件各頁第二行顯示該文本在列表文件各頁第二行顯示該文本 結(jié)束匯編語句(END)u格式:END程序入口地址u功能:u1.終止程序匯編u2.將程序入口地址裝入CS:IP注意注意:為保證程序只有一個入口為保證程序只有一個入口:
27、 1.主程序中的主程序中的END語句使用標號語句使用標號; 2.子程序中的子程序中的END語句不使用標號。語句不使用標號。TITLE MAIN PROGRAMTITLE MAIN PROGRAMDATA SEGMENTDATA SEGMENT STR1 DB Please enter two numbers:,0DH,0AH,24H STR1 DB Please enter two numbers:,0DH,0AH,24H STR2 DB 0DH,0AH,24H STR2 DB 0DH,0AH,24H SUM DB ? SUM DB ? DATA ENDSDATA ENDSSTACK1 SEG
28、MENT PARA STACKSTACK1 SEGMENT PARA STACK DW 20 DUP(?) DW 20 DUP(?)STACK1 ENDSSTACK1 ENDSPUBLIC STR2PUBLIC STR2EXTRN DISP1:FAR,INPUT1:FAREXTRN DISP1:FAR,INPUT1:FARCODE1 SEGMENTCODE1 SEGMENTASSUME DS:DATA, CS:CODE,SS:STACK1ASSUME DS:DATA, CS:CODE,SS:STACK1START: MOV AX,DATASTART: MOV AX,DATA MOV DS,AX
29、 MOV DS,AX LEA DX,STR1 LEA DX,STR1 例例2 2:鍵盤輸入兩個數(shù),和送:鍵盤輸入兩個數(shù),和送SUMSUM(段間調(diào)用)(段間調(diào)用)CALL DISP1CALL DISP1CALL INPUT1CALL INPUT1MOV BL,ALMOV BL,ALCALL INPUT1CALL INPUT1ADD AL,BLADD AL,BLMOV SUM,ALMOV SUM,ALMOV AH,4CHMOV AH,4CHINT 21HINT 21HCODE1 ENDSCODE1 ENDS END START END START例例2 2:鍵盤輸入兩個數(shù),和送:鍵盤輸入兩個數(shù),和
30、送SUMSUM(段間調(diào)用)(段間調(diào)用)TITLE SUBPROGRAMTITLE SUBPROGRAMPUBLIC DISP1,INPUT1PUBLIC DISP1,INPUT1EXTRN STR2:BYTEEXTRN STR2:BYTECODE2 SEGMENT CODE2 SEGMENT ASSUME CS:CODEASSUME CS:CODEDISP1 PROC FARDISP1 PROC FAR MOV AH,9 MOV AH,9 INT 21H INT 21H RET RETDISP1 ENDPDISP1 ENDPINPUT1 PROC FARINPUT1 PROC FAR MOV
31、AH,1 MOV AH,1 INT 21H INT 21H AND AL,0FH AND AL,0FH MOV DX,STR2 MOV DX,STR2 MOV AH,9 MOV AH,9 INT 21H INT 21H RET RETINPUT1 ENDPINPUT1 ENDPCODE2 ENDSCODE2 ENDS END END調(diào)用程序與被調(diào)用過程間的數(shù)據(jù)傳送u傳送方式:u1.利用寄存器傳送數(shù)據(jù)u2.利用內(nèi)存?zhèn)魉蛿?shù)據(jù)u3.利用堆棧傳送數(shù)據(jù)u4.利用地址表傳送數(shù)據(jù)利用寄存器傳送數(shù)據(jù)u優(yōu)點:操作簡單,傳送速度快u缺點:受CPU寄存器數(shù)量限制u適用:用于入口/出口參數(shù)較少的情況DATA SEGM
32、ENTDATA SEGMENT BIN DB 35H BIN DB 35H ASC DB 10 DUP(?) ASC DB 10 DUP(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CS:CODE,DS:DATAASSUME CS:CODE,DS:DATA START PROC FAR START PROC FAR MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX MOV DH,BIN MOV DH,BIN XOR DL,DL XOR DL,DL LEA DI,ASC LEA DI,ASC MOV
33、CX,8 MOV CX,8 CALL BINASC CALL BINASC例例1 1:將:將1 1個二進制數(shù)各位轉(zhuǎn)換成個二進制數(shù)各位轉(zhuǎn)換成ASCIIASCII碼。碼。 MOV AH,4CH MOV AH,4CH INT 21H INT 21HSTART ENDP START ENDP BINASC PROCBINASC PROCLOP:ROL DX,1 LOP:ROL DX,1 MOV AL,DL MOV AL,DL AND AL,1 AND AL,1 OR AL,30H OR AL,30H MOV DI,AL MOV DI,AL INC DI INC DI LOOP LOP LOOP LOP
34、 RET RETBINASC ENDPBINASC ENDP CODE ENDS CODE ENDS END START END START利用內(nèi)存?zhèn)魉蛿?shù)據(jù)u優(yōu)點:不受參數(shù)數(shù)量的限制u缺點:速度較寄存器傳送方式慢u適用:用于入口/出口參數(shù)較多的情況DATA SEGMENTDATA SEGMENT BIN DB 35H BIN DB 35H ASC DB 10 DUP(?) ASC DB 10 DUP(?)DATA ENDSDATA ENDSSTACK1 SEGMENT PARA STACKSTACK1 SEGMENT PARA STACK DW 20H DUP(?) DW 20H DUP(?)
35、STACK1 ENDSSTACK1 ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 ASSUME CS:CODE,DS:DATA,SS:STACK1 MAIN PROC ENDP MAIN PROC ENDP MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX LEA DI,ASC LEA DI,ASC MOV CX,8 MOV CX,8 CALL BINASC CALL BINASC例例3 3:將:將1 1個二進制數(shù)各位轉(zhuǎn)換成個二進制數(shù)各位轉(zhuǎn)換成ASCIIASCII碼。碼。 MOV
36、 AH,4CH MOV AH,4CH INT 21H INT 21H MAIN ENDP MAIN ENDPBINASC PROCBINASC PROC LOP: ROL BYTE PTR BIN, 1 LOP: ROL BYTE PTR BIN, 1 MOV AL,BIN MOV AL,BIN AND AL,1 AND AL,1 OR AL,30H OR AL,30H MOV DI,AL MOV DI,AL INC DI INC DI LOOP LOP LOOP LOP RET RETBINASC ENDPBINASC ENDP CODE ENDS CODE ENDS END MAIN EN
37、D MAIN利用堆棧傳送數(shù)據(jù)u優(yōu)點:不受參數(shù)數(shù)量的限制u缺點:速度較寄存器傳送方式慢u適用:用于入口/出口參數(shù)較多的情況u注意:u1.須記住參數(shù)入棧的順序u2.過程返回指令使用彈出值DATA SEGMENTDATA SEGMENT BIN DB 35H BIN DB 35H ASC DB 10 DUP(?) ASC DB 10 DUP(?)DATA ENDSDATA ENDSSTACK1 SEGMENT PARA STACKSTACK1 SEGMENT PARA STACK DW 20H DUP(?) DW 20H DUP(?)STACK1 ENDSSTACK1 ENDSCODE SEGMEN
38、TCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 ASSUME CS:CODE,DS:DATA,SS:STACK1 MAIN PROC FAR MAIN PROC FAR MOV AX,DATA MOV AX,DATA MOV DS,AX MOV DS,AX MOV AH,BIN MOV AH,BIN PUSH AX PUSH AX LEA AX,ASC LEA AX,ASC PUSH AX PUSH AX MOV AX,8 MOV AX,8 PUSH AX PUSH AX CALL BINASC CALL BINASC MOV AH,4CH MOV
39、 AH,4CH INT 21H INT 21H MAIN ENDP MAIN ENDP例例2 2:將:將1 1個二進制數(shù)各位轉(zhuǎn)換成個二進制數(shù)各位轉(zhuǎn)換成ASCIIASCII碼。碼。BINASC PROCBINASC PROC PUSH DI PUSH DI PUSH CX PUSH CX PUSH BX PUSH BX PUSH DX PUSH DX MOV BP,SP MOV BP,SP MOV BX,BP+14 MOV BX,BP+14 MOV DI,BP+12 MOV DI,BP+12 MOV CX,BP+10 MOV CX,BP+10 LOP: ROL BX,1 LOP: ROL BX,
40、1 MOV DL,BL MOV DL,BL AND DL,1 AND DL,1 OR DL,30H OR DL,30H MOV DI,DL MOV DI,DL MOV AH,2 MOV AH,2 INT 21H INT 21H INC DI INC DI LOOP LOP LOOP LOP POP DX POP DX POP BX POP BX POP CX POP CX POP DI POP DI RET 6 RET 6BINASC ENDPBINASC ENDP CODE ENDS CODE ENDS END MAIN END MAIN35H偏移地址轉(zhuǎn)換位數(shù)執(zhí)行CALL前執(zhí)行CALL后35
41、H偏移地址轉(zhuǎn)換位數(shù)斷點35H偏移地址轉(zhuǎn)換位數(shù)斷點保存現(xiàn)場后DICXBXDX35H偏移地址轉(zhuǎn)換位數(shù)斷點恢復現(xiàn)場后執(zhí)行RET6后SPBP利用地址表傳送數(shù)據(jù)u優(yōu)點:不受參數(shù)數(shù)量的限制u缺點:速度較寄存器傳送方式慢u適用:用于入口/出口參數(shù)較多的情況DATA SEGMENTDATA SEGMENT BIN1 DB 35H BIN1 DB 35H BIN2 DW 0AB48H BIN2 DW 0AB48HCUNT DB 8,16CUNT DB 8,16 ASC DB 20H DUP(?) ASC DB 20H DUP(?)TABLE DW 3 DUPTABLE DW 3 DUP(0 0) ;參數(shù)地址表;
42、參數(shù)地址表DATA ENDSDATA ENDS MOV TABLE,OFFSET BIN1 MOV TABLE,OFFSET BIN1 MOV TABLE+2,OFFSET CUNT MOV TABLE+2,OFFSET CUNT MOV TABLE+4,OFFSET ASC MOV TABLE+4,OFFSET ASC LEA BX, TABLE ; LEA BX, TABLE ;地址表首地址地址表首地址 CALL BINASC8 CALL BINASC8 MOV TABLE,OFFSET BIN2 MOV TABLE,OFFSET BIN2 MOV TABLE+2,OFFSET CUNT+
43、1 MOV TABLE+2,OFFSET CUNT+1 MOV TABLE+4,OFFSET ASC+10H MOV TABLE+4,OFFSET ASC+10H LEA BX, TABLE LEA BX, TABLE CALL BINASC16 CALL BINASC16例例4 4:將:將2 2個二進制數(shù)各位轉(zhuǎn)換成個二進制數(shù)各位轉(zhuǎn)換成ASCIIASCII碼。碼。BINASC PROCBINASC PROCBINASC8: MOV DI,BXBINASC8: MOV DI,BX MOV DH,DI MOV DH,DI JMP TRAN JMP TRANBINASC16: MOV DI,BXBI
44、NASC16: MOV DI,BX MOV DX,DI MOV DX,DI TRAN: MOV DI,BX+2 TRAN: MOV DI,BX+2 MOV CL,DI MOV CL,DI XOR CH,CH XOR CH,CH MOV DI,BX+4 MOV DI,BX+4 LOP: ROL DX,1 LOP: ROL DX,1 MOV AL,DL MOV AL,DL AND AL,1 AND AL,1 OR AL,30H OR AL,30H MOV DI,AL MOV DI,AL INC DI INC DI LOOP LOP LOOP LOP RET RETBINASC ENDPBINASC
45、 ENDP 參數(shù)地址參數(shù)地址代碼轉(zhuǎn)換程序設(shè)計u16進制數(shù)的ASCII碼與2進制數(shù)間的轉(zhuǎn)換u2進制數(shù)與10進制數(shù)間的轉(zhuǎn)換16進制數(shù)的ASCII碼與2進制數(shù)間的轉(zhuǎn)換u09與其ASCII碼相差30HuAF與其ASCII碼相差37Huaf與其ASCII碼相差57H應(yīng)用舉例u例1:將4位16進制數(shù)的ASCII碼轉(zhuǎn)換為16位2進制數(shù)u步驟:u將每個16進制數(shù)的ASCII碼轉(zhuǎn)換為4位2進制數(shù)u將4個4位2進制數(shù)拼成16位2進制數(shù)DATA SEGMENTPROMPT DB INPUT HEXADECIMAL (4 DIGIT):$ HEX DB 5,0,5 DUP(0) ;接收接收16進制數(shù)的緩沖區(qū)進制數(shù)的緩
46、沖區(qū) BIN DW ? ;存放存放2進制數(shù)的單元進制數(shù)的單元 ERR DB 0AH,0DH,ERROR! NO-HEXADECIMAL!$DATA ENDS CODE SEGMENTASSUME CS:CODE,DS:DATAHEXBIN:MOV AX,DATA MOV DS,AX LEA DX,PROMPT MOV AH,9 INT 21H LEA DX,HEX;輸入輸入16進制數(shù)進制數(shù) MOV AH,0AH INT 21H LEA SI,HEX+2 ;SI指向第指向第1個個16進制數(shù)進制數(shù) MOV CH,4;共共4個個16進制數(shù)進制數(shù) MOV AX,0;存正轉(zhuǎn)換存正轉(zhuǎn)換2進制數(shù)進制數(shù)CON
47、V: MOV BL,SI;取取1個個16進制數(shù)進制數(shù) CMP BL,0;確定所在數(shù)據(jù)段確定所在數(shù)據(jù)段 JB ERROR CMP BL,9 JBE BIN1CALLHEX1;39H轉(zhuǎn)移JCERRORBIN1:ANDBL,0FHMOVCL,4SALAX,CLORAL,BL;拼接INCSIDECCHJNECONVMOVBIN,AXJMPEND0ERROR:MOVBIN,0LEADX,ERRMOVAH,9INT21HEND0:MOVAH,4CHINT21HHEX1 PROC CMP BL,F JA SMALL CMP BL,A JB ERROR1 JMP OUT1SMALL:CMP BL,a JB E
48、RROR1 CMP BL,f JA ERROR1 SUB BL,20HOUT1:SUB BL,37H CLC;是是16進制數(shù)將進制數(shù)將CF=0 RETERROR1:STC;不是不是16進制數(shù)將進制數(shù)將CF=1 RETHEX1 ENDPCODE ENDS END START 應(yīng)用舉例u例2:將16位2進制數(shù)轉(zhuǎn)換為4位16進制數(shù)的ASCII碼u說明:u00001001:在高位加30H(09的ASCII碼)u10101111:加37H/57H(轉(zhuǎn)換成AF/af的ASCII碼)DATASEGMENTBINDW1001110011010111BHEXDB4DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTARTPROCFARPUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVCH,4LEADI,HEXMOVBX,BINCONV:MOVCL,4ROLBX,CLMOVAL,BL;分離BH中高4位ANDAL,0FHCMPAL,09HJBEASCIADDAL,07H;A-FASCI:ADDAL,30H;0-9MOVDI,ALINCDISUBCH,1JNECONVRETSTARTENDPCODEENDSENDST
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于視覺的重癥患者臥床壓力分布動態(tài)監(jiān)測研究
- 倒貨協(xié)議合同范例
- 基于Bi-LSTM的農(nóng)機鋰電池健康狀態(tài)預測研究
- 代買產(chǎn)品合同范例
- 代理權(quán)轉(zhuǎn)讓合同范例
- 全款采購合同范例
- 分期付款欠款合同范例
- 上海家政服務(wù)合同范例
- 借貸居間合同范例
- 出租合同不能轉(zhuǎn)租合同范例
- 2025中高考百日誓師大會教師表態(tài)發(fā)言稿:百日競渡立壯志 師生同心鑄輝煌
- 2025年皖北衛(wèi)生職業(yè)學院單招職業(yè)適應(yīng)性測試題庫審定版
- 臺球館裝修合同模板及明細
- DeepSeek:從入門到精通3天教程
- 裝卸車程序及人員管理規(guī)章制度范文(2篇)
- 2025年上海鐵路局集團公司招聘筆試參考題庫含答案解析
- 2024年04月北京中信銀行總行社會招考(423)筆試歷年參考題庫附帶答案詳解
- 2025年中國航天科工招聘筆試參考題庫含答案解析
- 兒童教育總經(jīng)理聘任合同
- 4《公民的基本權(quán)利和義務(wù)》(第2課時)教學實錄-2024-2025學年道德與法治六年級上冊統(tǒng)編版
- 電池及電池系統(tǒng)維修保養(yǎng)師國家職業(yè)標準(2024年)
評論
0/150
提交評論