版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1,第四章:宏匯編語(yǔ)言程序設(shè)計(jì),匯編語(yǔ)言程序格式 MASM中的表達(dá)式 偽指令語(yǔ)句 DOS系統(tǒng)功能調(diào)用 程序設(shè)計(jì)方法 程序舉例,電氣學(xué)院學(xué)習(xí)部資料庫(kù),2,4.1 匯編語(yǔ)言程序格式,匯編語(yǔ)言 機(jī)器語(yǔ)言的符號(hào)表示,面向機(jī)器的語(yǔ)言 匯編語(yǔ)言的特點(diǎn): 直接控制目標(biāo)代碼,可對(duì)輸入輸出設(shè)備進(jìn)行控制,實(shí)時(shí)性好; 編程效率高,節(jié)省內(nèi)存,運(yùn)行速度快。 源程序1.asm 1.obj 1.exe 8086常用的匯編程序:宏匯編程序MASM 一、指令性語(yǔ)句: 生成機(jī)器代碼,由CPU來(lái)執(zhí)行 格式: 標(biāo)號(hào):指令助記符 操作數(shù),操作數(shù);注釋 字母開(kāi)頭,最長(zhǎng)31個(gè)字符,匯編,鏈接,電氣學(xué)院學(xué)習(xí)部資料庫(kù),3,二、偽指令語(yǔ)句: 只
2、提供匯編信息 功能:變量定義、存儲(chǔ)區(qū)分配、段定義、段分配、指示程序開(kāi)始、結(jié)束 格式: 名字 偽指令助記符 操作數(shù),操作數(shù);注釋 變量名、段名、過(guò)程名、符號(hào)名,名字后不允許有“:” 三、數(shù)據(jù)項(xiàng) 匯編語(yǔ)言中的操作數(shù):常數(shù)、寄存器、存儲(chǔ)器、變量、標(biāo)號(hào)和表達(dá)式。,電氣學(xué)院學(xué)習(xí)部資料庫(kù),4,常數(shù)0011 0101B 026H 123D how are you?,空格(20H) 變量是內(nèi)存中的一個(gè)數(shù)據(jù)區(qū)。在程序中作為操作數(shù)使用。變量名又稱(chēng)符號(hào)地址,表示該數(shù)據(jù)項(xiàng)中第一項(xiàng)所在的地址。和常數(shù)區(qū)別:變量值可以改變。三個(gè)屬性:段地址,段內(nèi)偏移地址,字節(jié)類(lèi)型BYTE,WORD,DWORD 標(biāo)號(hào)可執(zhí)行指令語(yǔ)句的地址的符
3、號(hào)表示??勺鳛檗D(zhuǎn)移指令的目的操作數(shù)。 三個(gè)屬性:段地址,段內(nèi)偏移地址,距離類(lèi)型(NEAR, FAR),電氣學(xué)院學(xué)習(xí)部資料庫(kù),5,4.2 表達(dá)式,匯編的表達(dá)式為一個(gè)值 組成:運(yùn)算對(duì)象+運(yùn)算符,運(yùn)算對(duì)象與結(jié)果都是整數(shù) 運(yùn)算對(duì)象:常數(shù)、變量、標(biāo)號(hào) 分為數(shù)字表達(dá)式和地址表達(dá)式兩種 一、算術(shù)運(yùn)算符: +,-,*,/,MOD,SHL,SHR 所有算術(shù)運(yùn)算符都可以對(duì)數(shù)據(jù)進(jìn)行運(yùn)算 例 MOV AX ,5+3 ;(AX)=8 MOV AX ,(9MOD 2) ;(AX)=1 MOV AX , 9/2 ;(AX)=4 2. 對(duì)地址運(yùn)算,只能是+,-,電氣學(xué)院學(xué)習(xí)部資料庫(kù),6,例2: ARRAY DB 1,2,3,
4、4 TRY DB 20 MOV AX ,(TRY-ARRAY) ; 匯編后 MOV AX ,4 例3: FIRST DB 1,2,3 MOV AX ,OFFSET FIRST+2 二、邏輯運(yùn)算符: AND,OR,NOT,XOR 只能用于數(shù)字表達(dá)式中 例: PORT EQU 90H AND DL ,PORT AND OFEH 前AND-指令助記符,在程序執(zhí)行時(shí)運(yùn)算; 后AND-運(yùn)算符,在匯編時(shí)計(jì)算,電氣學(xué)院學(xué)習(xí)部資料庫(kù),7,三、關(guān)系運(yùn)算符: EQ、NE、GT、LT、GE、LE 結(jié)果為真:輸出OFFH、OFFFFH 全1 結(jié)果為假: 全 0 例: PORT EQU 2 MOV BX ,PORT L
5、T 5 ;MOV BX ,0FFFFH MOV CX ,(PORT LT 5) AND 100)OR(PORT GE 5)AND 200); 若PORT LT 5 PORT LT 5=FFFFH FFFFH AND 100=100 PORT GE 5=0000 0000H AND 200=0 100 OR 0=100 匯編后 MOV CX, 100,電氣學(xué)院學(xué)習(xí)部資料庫(kù),8,四、數(shù)值返回運(yùn)算符: OFFSET、SEG、TYPE、LENGTH、SIZE 1. OFFSET 返回變量或標(biāo)號(hào)的偏移地址值 2. SEG 返回變量或標(biāo)號(hào)的段基地址值 例: MOV SI ,OFFSET FIRST 例4-
6、8 MOV AX ,SEG FIRST MOV DS ,AX MOV DS ,SEG FIRST 3. TYPE 變量 :返回類(lèi)型屬性 DB 1 DW 2 DD 4 (字節(jié)數(shù)) TYPE 標(biāo)號(hào) :返回距離屬性 NEAR -1 FAR -2 例4-9,電氣學(xué)院學(xué)習(xí)部資料庫(kù),9,4. LENGTH 變量 變量中有DUP時(shí),返回變量所包含的單元數(shù) 例 n DUP( ): 返回n 其它 : 返回 1 5. SIZE=LENGTH*TYPE 例: FIRST DW 1,2,3,4 M DW 100 DUP (?) MOV AL ,TYPE FIRST ;MOV AL ,2 MOV AL ,LENGTH
7、FIRST ;MOV AL ,1 MOV AL ,SIZE FIRST ;MOV AL ,2 MOV AL ,TYPE M ;MOV AL ,2 MOV AL ,LENGTH M ;MOV AL ,100 MOV AL ,SIZE FIRST ;MOV AL ,200,電氣學(xué)院學(xué)習(xí)部資料庫(kù),10,五、修改屬性運(yùn)算符: 段操作符、PTR、THIS、HIGH、LOW、SHORT 1、段操作符: 例:MOV AX ,ES:BX ES-段超越前綴 2、PTR: 格式:類(lèi)型/距離 PTR 變量/標(biāo)號(hào) 變量:BYTE,WORD 標(biāo)號(hào):NEAR,FAR 例1: AREA1 DB 15H ,23H AREA2
8、 DW 1234H MOV AL ,AREA1 ;AL=15H MOV AX ,AREA1 ; 應(yīng)為:MOV AX ,WORD PTR AREA1 MOV BL ,BYTE PTR AREA2;BL=34H,電氣學(xué)院學(xué)習(xí)部資料庫(kù),11,例2: MOV BYTE PTR BX ,10H; BX 10H MOV WORD PTR BX ,10H ; BX 0010H 例3: JMP FAR PTR AGAIN ;實(shí)現(xiàn)段間轉(zhuǎn)移. AGAIN-標(biāo)號(hào) 3、THIS 格式:變量/標(biāo)號(hào) EQU THIS 類(lèi)型/距離 功能:將類(lèi)型/距離 屬性賦予變量/標(biāo)號(hào),且該變量/標(biāo)號(hào)的地址與下一個(gè)存儲(chǔ)單元相同。 例1:
9、FIRST EQU THIS BYTE TABLE DW 200 DUP(?) ;使變量FIRST與TABLE的偏移地址相同,但FIRST為字節(jié)類(lèi)型,TABLE為字類(lèi)型 例2: SPP EQU THIS FAR MOV AX ,100 ;即SPP :MOV AX ,100,電氣學(xué)院學(xué)習(xí)部資料庫(kù),12,4、SHORT SHORT 標(biāo)號(hào) 例:JMP SHORT L1 ;限制跳轉(zhuǎn)的距離在-128+127之間 5、HIGH和LOW 字節(jié)分離符 HIGH/LOW 變量或標(biāo)號(hào) HIGH 分離出高位字節(jié) LOW分離出低位字節(jié) 例: K1 EQU 1234H MOV AH ,HIGH K1 ; MOV AH
10、,34H MOV AL ,LOW K1 ; MOV AL ,12H MOV AH ,HIGH 1234H ;不能+立即數(shù),電氣學(xué)院學(xué)習(xí)部資料庫(kù),13,六、其他運(yùn)算符 1、( ) 改變優(yōu)先級(jí)次序 表4-3 2、 用 表達(dá)地址表達(dá)式 例: MOV CL ,BX MOV AX ,BX+2 用 表示多重變量的下標(biāo)值 例: M1 DB 10H,20H,30H,40H MOV AL ,M13 ;MOV AL ,40H,電氣學(xué)院學(xué)習(xí)部資料庫(kù),14,4-3 偽指令語(yǔ)句,一、數(shù)據(jù)定義語(yǔ)句 DB DW 格式:變量名 助記符 操作數(shù),操作數(shù),;注釋 變量名 助記符 n DUP(操作數(shù),操作數(shù));注釋 功能:將操作數(shù)
11、存入變量名指定的存儲(chǔ)單元中,或者只分配存儲(chǔ)空間不存入數(shù)據(jù) 例1:A1 DB 0DH A2 DW ? A3 DB 00H,01H,03H A5 DB 9 DUP(?) A6 DB 8 DUP(1,2,3);共3x8=24個(gè)單元 A7 DB How are you? A8 DW OK; A8 DW OVER ,電氣學(xué)院學(xué)習(xí)部資料庫(kù),15,2、等號(hào)語(yǔ)句= 功能:同EQU , 但允許重復(fù)定義 例: X1=100 X1 EQU 100 X1=X1+100;X1=200 X1 EQU 200 ; ,電氣學(xué)院學(xué)習(xí)部資料庫(kù),16,三、段定義語(yǔ)句 1、段定義語(yǔ)句 SEGMENTENDS 格式:段名 SEGMEN
12、T ;內(nèi)容 段名 ENDS (上下段名必須相同) 功能:將一個(gè)邏輯段定義成一個(gè)整體 段名:邏輯段的標(biāo)識(shí)符,不可省略,確定了邏輯段在存儲(chǔ)器中的地址。 段基地址 例: MOV AX ,DATA MOV DS ,AX 堆棧段定義: 段名 SEGMENT STACK(不可省略) 段名 ENDS 說(shuō)明:,電氣學(xué)院學(xué)習(xí)部資料庫(kù),17,定位類(lèi)型、組合類(lèi)型、分類(lèi)名一般情況下可省略 Data,stack,es段中,只能有偽指令 Code段中,可有指令和與指令相關(guān)的偽指令,電氣學(xué)院學(xué)習(xí)部資料庫(kù),18,2、段分配語(yǔ)句:ASSUME 格式:ASSUME CS:段名 ,DS:段名 ,SS:段名 ,ES:段名 功能;將存
13、儲(chǔ)器中的某幾個(gè)邏輯段分別定義成代碼段、數(shù)據(jù)段、堆棧段、附加段。(指定某程序運(yùn)行時(shí),哪幾個(gè)邏輯段有效。CS、DS段是必須的,SS、ES段看情況) 注意:assume指令只指定某個(gè)段分配給哪幾個(gè)段寄存器,并將代碼段的段基址自動(dòng)裝入cs中,而不能把其它段基址自動(dòng)裝入相應(yīng)的段寄存器中,所以,在代碼段的開(kāi)始,要有一段初始化程序完成這一工作,電氣學(xué)院學(xué)習(xí)部資料庫(kù),19,四、過(guò)程定義語(yǔ)句 段內(nèi)調(diào)用 段間 格式:過(guò)程名 PROC 屬性 (距離屬性(NEAR FAR) ;過(guò)程內(nèi)容 RET N 過(guò)程名 ENDP 說(shuō)明: RET N 中N為正偶數(shù),表示從過(guò)程返回后,堆棧指針再加上SP 過(guò)程內(nèi)部至少有一條RET指令,
14、也可以有多個(gè),表示此過(guò)程具有多個(gè)返回出口。 過(guò)程調(diào)用允許嵌套調(diào)用,遞歸調(diào)用。 嵌套調(diào)用:一個(gè)被調(diào)用的過(guò)程中又調(diào)用另一個(gè)過(guò)程。 遞歸調(diào)用: 一個(gè)被調(diào)用的過(guò)程又調(diào)用自己,電氣學(xué)院學(xué)習(xí)部資料庫(kù),20,五、程序開(kāi)始、結(jié)束語(yǔ)句 1、ORG : 設(shè)置位置指針,指定下面語(yǔ)句的起始偏移地址 例: DATA SEGMENT ORG 100H A1 DB 10H,20H,30H ;A1的偏移地址為0100H ORG 200H A2 DW 3031H,3233H DATA ENDS 2、END 格式:END 標(biāo)號(hào)名 是該程序中第一條可執(zhí)行語(yǔ)句的標(biāo)號(hào)名,可以缺省 若一個(gè)程序中,包含多個(gè)模塊,則為主程序模塊中的標(biāo)號(hào)名稱(chēng)
15、。,電氣學(xué)院學(xué)習(xí)部資料庫(kù),21,完整的匯編語(yǔ)言編寫(xiě)的格式 DATA SEGMENT DA1 DB this is a sample program DATA ENDS STACK SEGMENT STACK ST1 DB 100 DUP (?) TOP EQU LENGHTH ST1 STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK START: MOV AX, DATA;初始化 MOV DS,AX,電氣學(xué)院學(xué)習(xí)部資料庫(kù),22,MOV AX,STACK MOV SS,AX MOV SP,TOP;設(shè)棧底 MOV AX,4C00H;
16、返回DOS INT 21H CODE ENDS END START 例4-29,電氣學(xué)院學(xué)習(xí)部資料庫(kù),23,好的程序特點(diǎn): 程序結(jié)構(gòu)模塊化,易讀,易調(diào)試和維護(hù) 執(zhí)行速度快 占用內(nèi)存小 編程基本步驟: 分析問(wèn)題 繪制程序流程圖 分配存儲(chǔ)空間及工作單元 編程 調(diào)試 實(shí)際運(yùn)行,4.4程序設(shè)計(jì)方法,電氣學(xué)院學(xué)習(xí)部資料庫(kù),24,1、順序程序設(shè)計(jì) 例:設(shè)計(jì)一個(gè)順序程序?qū)崿F(xiàn)兩個(gè)雙字?jǐn)?shù)的加法,結(jié)果放在加數(shù)單元中 被加數(shù):變量first,四單元 加數(shù):變量second,四單元 和:變量second 寄存器間接尋址:SI,DI 累加器AX,電氣學(xué)院學(xué)習(xí)部資料庫(kù),25,FIRST DW 1234H,5678H SE
17、COND DW 2233H,4455H MOV SI , OFFSET FIRST ; MOV DI , OFFSET SECOND MOV AX ,SI ADD AX ,DI MOV DI ,AX MOV AX ,SI+2 ADC AX ,DI+2 MOV DI+2 ,AX,電氣學(xué)院學(xué)習(xí)部資料庫(kù),26,2、分支程序設(shè)計(jì) 多分支 例: x+1 x1 y = x+2 1x0 x+3 x0 假設(shè)x放在AX里 CMP AX ,1 JGE P1 CMP AX ,0 JGE P2 ADD AX ,3 JMP P3 P1:ADD AX ,1 JMP P3 P2:ADD AX ,2 P3:MOV 2000H
18、 ,AX,P2,電氣學(xué)院學(xué)習(xí)部資料庫(kù),27, 跳轉(zhuǎn)表實(shí)現(xiàn)多分支 根據(jù)表內(nèi)地址分支 表地址=跳轉(zhuǎn)表首地址+偏移地址,BASE,BASE+2,P1,P2,電氣學(xué)院學(xué)習(xí)部資料庫(kù),28,例4-67 有8個(gè)加工子程序,入口地址分別為P1,P2, ,P8,編程實(shí)現(xiàn)檢測(cè)鍵盤(pán)輸入命令,使系統(tǒng)分別轉(zhuǎn)向8個(gè) 加工子程序。用跳轉(zhuǎn)表實(shí)現(xiàn)。 BASE DW P1,P2,P3,P4 DEC AL DW P5,P6,P7,P8 MOV BX,OFFSET BASE KEY DB ? MOV AH,0 MOV AH,1;從鍵盤(pán)輸入字符 ADD AL,AL; X2 INT 21H ;至AL ADD BX,AX AND AL,0
19、FH;ASCIIBIN JMP WORD PTRBX 例:p3子程序地址在cs:7800H開(kāi)始,則BASE中第3個(gè)數(shù)據(jù)為7800H,地址DS:0004H,當(dāng)鍵盤(pán)輸入字符3 AL=33H AL=03H AL=2 BX=0 AH=0 AL=2X2=4 BX=0+4=4 BX=0004H=7800H.程序轉(zhuǎn)移至CS:7800H,電氣學(xué)院學(xué)習(xí)部資料庫(kù),29,2、循環(huán)程序設(shè)計(jì),循環(huán)初始狀態(tài),循環(huán)體,循環(huán)控制條件,Y,循環(huán)初始狀態(tài),循環(huán)控制條件,循環(huán)體,N,Y,修改參數(shù),修改參數(shù),出口,循環(huán)次數(shù)固定,N,循環(huán)次數(shù)不固定,電氣學(xué)院學(xué)習(xí)部資料庫(kù),30,例1:題目同上,利用循環(huán)程序設(shè)計(jì) MOV SI ,OFFS
20、ET FIRST MOV DI ,OFFSET SECOND CLC CLD MOV CX ,02H LI: LODSW ;DS :SI AX,SI+2 SI ADC AX ,DI STOSW ;AX ES :DI,DI+2 DI LOOP LI ;先執(zhí)行,后判斷,電氣學(xué)院學(xué)習(xí)部資料庫(kù),31,例2:AX寄存器中有16位二進(jìn)制數(shù),編程統(tǒng)計(jì)其中1的個(gè)數(shù),結(jié)果放到BL中 MOV BL ,0;計(jì)數(shù)值清0 L1:AND AX ,AX ;先判斷,后執(zhí)行 JZ STOP ;若AX=0,則不進(jìn)入循環(huán) MOV CX ,16 SHL AX ,1 JNC L2 INC BL L2:JMP L1 STOP:,電氣學(xué)院
21、學(xué)習(xí)部資料庫(kù),32,多重循環(huán) 3點(diǎn)注意 多重循環(huán)的初始控制條件 內(nèi)循環(huán)可嵌套在外循環(huán)中,內(nèi)可跳到外,外不得進(jìn)入內(nèi) 循環(huán)不要回到初始條件,造成死循環(huán),最大數(shù)像氣泡一樣升至數(shù)組尾 第二次內(nèi)循環(huán)只要N-2次 3 5 7 8 1 9 3 5 7 1 8 9 3 5 1 7 8 9 3 1 5 7 8 9 1 3 5 7 8 9,內(nèi)循環(huán)N-1次,外循環(huán)N-1次,例4-72 氣泡排序。使一個(gè)數(shù)組中的數(shù)據(jù)從小到大排列。 分析:內(nèi)循環(huán)N-1次 單元號(hào) 0 1 2 3 4 5 初始 5 3 8 7 9 1 一 3 5 8 7 9 1 二 3 5 8 7 9 1 三 3 5 7 8 9 1 四 3 5 7 8 9
22、 1 五 3 5 7 8 1 9,電氣學(xué)院學(xué)習(xí)部資料庫(kù),33,修改地址(BX+2),數(shù)i數(shù)i+1?,兩數(shù)位置交換,修改地址 BX+2BX,CX-1 內(nèi)循環(huán)CX=0?,初始化: 數(shù)組起始地址BX 外循環(huán)次數(shù)DX 內(nèi)循環(huán)次數(shù)CX,置檢測(cè)起點(diǎn)i=0(BX),Dx-1 外循環(huán)DX =0?,N,N,L2,L1,N,電氣學(xué)院學(xué)習(xí)部資料庫(kù),34,DATA SEGMENT BUF DW N,15,37,8600, A768H,3412H,1256H, DW 76H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS,
23、AX MOV BX,0; i=0 MOV CX, BUFBX; NCX DEC CX ; N-1, 內(nèi)循環(huán)次數(shù) L1: MOV DX,CX ;外循環(huán)次數(shù) L2: ADD BX, 2,電氣學(xué)院學(xué)習(xí)部資料庫(kù),35,MOV AX, BUFBX CMP AX, BUFBX+2 JBE CONTI XCHG AX, BUFBX+2 MOV BUFBX, AX CONTI:LOOP L2 MOV CX,DX MOV BX, 0;回到i=0,重新開(kāi)始比較 LOOP L1;CX-1:內(nèi)循環(huán)次數(shù)N-1,N-2;外循環(huán)次數(shù)-1 MOV AX, 4C00H INT 21H CODE ENDS END START,電
24、氣學(xué)院學(xué)習(xí)部資料庫(kù),36,四、子程序結(jié)構(gòu) 子程序說(shuō)明 名稱(chēng)、功能 存儲(chǔ)單元和寄存器 入口和出口 有否調(diào)用其它子程序 主程序調(diào)用子程序注意: 堆棧 保護(hù)現(xiàn)場(chǎng) 參數(shù)傳遞 寄存器 存儲(chǔ)器 堆棧,電氣學(xué)院學(xué)習(xí)部資料庫(kù),37,例4-30:編程實(shí)現(xiàn)兩個(gè)BCD碼字?jǐn)?shù)據(jù)相加(完整程序) DATA SEGMENT FIRST DB 22H, 33H,44H,55H ;加數(shù)1 SECOND DB 55H, 66H,77H,88H ;加數(shù)2 SUM DB 20 DUP(?) ;定義存放結(jié)果單元 DATA ENDS STACK SEGMENT STACK STA DB 20 DUP(?) ;設(shè)置堆棧長(zhǎng)度為20個(gè)字節(jié)
25、TOP EQU LENGTH STA STACK ENDS,電氣學(xué)院學(xué)習(xí)部資料庫(kù),38,CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: MOV AX ,STACK ;將堆棧段段地址SS MOV SS ,AX MOV AX ,TOP ;將堆棧指針指向棧底 MOV SP ,AX PUSH DS ;使得程序執(zhí)行完了,能返回DOS XOR AX ,AX PUSH AX MOV AX ,DATA MOV DS ,AX ;MOV DS ,DATA , 初始化 MOV ES ,AX ;將數(shù)據(jù)段段地址DS、ES
26、 MOV SI ,OFFSET FIRST MOV BX ,OFFSET SECOND MOV DI ,OFFSET SUM,電氣學(xué)院學(xué)習(xí)部資料庫(kù),39,MOV CX ,04 CLD CLC ADBCD:CALL AAM LOOP ADBCD RET ;返回DOS MAIN ENDP ;子程序入口:SI, BX 出口: DI 參數(shù)傳遞:存儲(chǔ)器 AAM PROC NEAR LODSB ;DS:SIAL SI+1SI ADC AL ,BX DAA STOSB ;ALES:DI DI+1DI INC BX,電氣學(xué)院學(xué)習(xí)部資料庫(kù),40,RET AAM ENDP CODE ENDS END START,
27、電氣學(xué)院學(xué)習(xí)部資料庫(kù),41,4.5 DOS系統(tǒng)功能調(diào)用,Disk Operation System 磁盤(pán)操作系統(tǒng) 一、DOS常用的軟中斷命令 DOS具有對(duì)I/O設(shè)備管理及磁盤(pán)與文件管理功能, 一部份固化在系統(tǒng)的ROM中 一部份在系統(tǒng)啟動(dòng)時(shí)調(diào)入內(nèi)存,通過(guò)軟件中斷來(lái)調(diào)用 中斷指令:INT n 表4-6 DOS 常用的軟中斷命令 入口、出口參數(shù),電氣學(xué)院學(xué)習(xí)部資料庫(kù),42,二、DOS系統(tǒng)功能調(diào)用 INT 21H 附錄F AH=功能號(hào) 每個(gè)子程序?qū)?yīng)一個(gè)功能號(hào)(相應(yīng)的入口號(hào)),格式如下 功能號(hào)AH 入口參數(shù)指定寄存器 INT 21H 根據(jù)出口參數(shù)分析功能調(diào)用執(zhí)行情況 1.DOS鍵盤(pán)功能調(diào)用 表4-7
28、鍵入單字符 AH=1,電氣學(xué)院學(xué)習(xí)部資料庫(kù),43,MOV AH ,1 INT 21H 出口:AL=字符 鍵入字符串 AH=0AH,電氣學(xué)院學(xué)習(xí)部資料庫(kù),44,2、DOS顯示功能調(diào)用 表4-6 單字符操作 例: MOV DL ,$ MOV AH ,2 INT 21H ;調(diào)用結(jié)果,屏幕上在光標(biāo)處顯示$ 字符串操作 AH=9的INT 21H ,注意串必須以$結(jié)束 例4-55:在屏幕上顯示HOW DO YOU DO?字符串,且回車(chē)、換行。 DATA SEGMENT MES DB HOW DO YOU DO?,0DH,0AH, $ ;0DH(回車(chē)),0AH(換行) DATA ENDS,電氣學(xué)院學(xué)習(xí)部資料
29、庫(kù),45,CODE SEGMENT ASSUME CS:CODE ,DS:DATA MAIN :PUSH DS XOR AX ,AX PUSH AX MOV AX ,DATA MOV DS ,AX MOV AH ,9 MOV DX ,OFFSET MES INT 21H RET CODE ENDS END START,電氣學(xué)院學(xué)習(xí)部資料庫(kù),46,3、返回操作系統(tǒng) 4CH功能調(diào)用:能夠結(jié)束當(dāng)前正在執(zhí)行的程序,返回DOS系統(tǒng) MOV AH ,4CH INT 21H,電氣學(xué)院學(xué)習(xí)部資料庫(kù),47,4.6 上機(jī)實(shí)驗(yàn) 參見(jiàn)課本及實(shí)驗(yàn)指導(dǎo)書(shū) 實(shí)驗(yàn)一:兩個(gè)多位十進(jìn)制數(shù)相減的實(shí)驗(yàn) 參見(jiàn)課本P187程序 實(shí)驗(yàn)二:
30、排序?qū)嶒?yàn) 要求:從首地址為1000H的內(nèi)存區(qū)域開(kāi)始存放10個(gè)無(wú)符號(hào)字?jǐn)?shù)據(jù)數(shù),設(shè)計(jì)程序?qū)⑦@些數(shù)從小到大排序,并將排序前后次序的顯示在屏幕上。 參見(jiàn)課本P181及實(shí)驗(yàn)指導(dǎo)書(shū)實(shí)驗(yàn)十三 MOV BX ,0 MOV CX ,N-1 L1: MOV DX ,CX L2: MOV AX ,BUFBX CMP AX ,BUFBX+2 JBE CONTI XCHG AX ,BUFBX+2 MOV BUFBX,AX CONTI: LOOP L2 MOV CX ,DX MOV BX ,0 調(diào)用顯示子程序,參見(jiàn)P177 LOOP L1,電氣學(xué)院學(xué)習(xí)部資料庫(kù),48,4.7程序舉例:,一、查表 例4-64 二、代碼轉(zhuǎn)換類(lèi)
31、 16位二進(jìn)制 ASC碼 二進(jìn)制組合BCD碼 非組合BCD 碼 ASC碼 顯示 三、算術(shù)運(yùn)算類(lèi) 加減乘除(二進(jìn)制,BCD碼),電氣學(xué)院學(xué)習(xí)部資料庫(kù),49,例4-64 內(nèi)存中TABLE開(kāi)始存放09的平方值,通過(guò)人機(jī) 對(duì)話(huà),當(dāng)任給定一個(gè)數(shù)X(09),查表得X的平方值, 放在AL中。 TABLE DB 0,1,4,9,16,25,36,49,64,81 BUF DB Please input one number(09):,0DH,0AH, $ MOV DX, OFFSET BUF MOV AH, 9 INT 21H ;顯示字符串 MOV AH, 1 INT 21H ;輸入字符 AND AL,0FH
32、;ASCIIBIN MOV BX, OFFSET TABLE;查表 XLAT HLAT,電氣學(xué)院學(xué)習(xí)部資料庫(kù),50,例4-69 將BX中的16進(jìn)制數(shù)轉(zhuǎn)換為ASCII碼,存放到BUF開(kāi)始的內(nèi)存單元中去,并在屏幕顯示數(shù)值 轉(zhuǎn)換表: 入口參數(shù): BX 出口參數(shù): BUF開(kāi)始的內(nèi)存 單元中,SI指示。,電氣學(xué)院學(xué)習(xí)部資料庫(kù),51,LEA SI, BUF MOV CH,4;處理4位HEX NEXT: MOV CL,4 ROL BX,CL;左移4位BIN MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL STORE ADD AL,7 STORE: MOV SI,A
33、L MOV AH,2 MOV DL,AL INT 21H ;顯示,INC SI DEC CH JNZ NEXT HLT,電氣學(xué)院學(xué)習(xí)部資料庫(kù),52,例4-78:將一個(gè)無(wú)符號(hào)16位二進(jìn)制數(shù)轉(zhuǎn)換為4位壓縮型BCD碼 算法一: 千位數(shù):無(wú)符號(hào)16位二進(jìn)制數(shù)/1000的商,得余數(shù)1 百位數(shù):余數(shù)1/100的商,得余數(shù)2 十位數(shù):余數(shù)2/10的商,得余數(shù)3 個(gè)位數(shù):余數(shù)3,電氣學(xué)院學(xué)習(xí)部資料庫(kù),53,7865 7000,1000,7,865 -余數(shù)1,865,100,800,65 -余數(shù)2,8,65 60,10,6,5 -余數(shù)3,程序中,7865D=1EB9H 1000D=3E8H 865D=361H
34、1EB9H/3E8H=7H.361H 361H/64H=8H41H 41H/0AH=6H5H,電氣學(xué)院學(xué)習(xí)部資料庫(kù),54,復(fù)習(xí)除法: 16位/8位商AL,余AH (AX)(源操作數(shù)) 32位/16位商AX,余DX (DX,AX)(源操作數(shù)) 若計(jì)算 16位/16位 ,8位/8位 ,需將被除數(shù)擴(kuò)展 程序: 入口參數(shù):AX=16位二進(jìn)制數(shù) 出口參數(shù):AX=4位壓縮型BCD碼(CF=0時(shí)) 占用資源:CX , DX,千位 百位,千位 百位 十位,千位 百位 十位 個(gè)位,千位,每次所得商,依次移入DX,DX,DX,DX,DX,電氣學(xué)院學(xué)習(xí)部資料庫(kù),55,B2TOBCD PROC FAR CMP AX
35、,9999 ;AX9999,則CF=1, JBE TRAN ;不轉(zhuǎn)換 STC JMP EXIT TRAN:PUSH CX ;保護(hù)現(xiàn)場(chǎng) PUSH DX XOR DX ,DX; 32位/16位,需DX MOV CX ,1000 ;求千位數(shù) DIV CX ;商在AX,余數(shù)1在DX XCHG AX ,DX ;余數(shù)1在AX,千位數(shù)(商)在DX最低4位,DX=0007H,電氣學(xué)院學(xué)習(xí)部資料庫(kù),56,MOV CL ,4 ;DX左移4位,低位添 SHL DX ,CL ;四個(gè)0,DX=0070H MOV CL ,100 ;求百位數(shù) DIV CL ;商在AL,余數(shù)2在AH ADD DL ,AL ;百位數(shù)入DX,D
36、X=0078H MOV CL ,4 ; DX左移4位,DX=0780H SHL DX ,CL XCHG AH ,AL ;余數(shù)2在AL AND AX ,00FFH ;AH=0 MOV CL ,10 ;求十位數(shù) DIV CL ;商在AL,余數(shù)3在AH,電氣學(xué)院學(xué)習(xí)部資料庫(kù),57,ADD DL ,AL;DL=86H MOV CL ,4 SHL DX ,CL;DX=7860H ADD DL ,AH;DX=7865H MOV AX ,DX;轉(zhuǎn)換后的數(shù)入AX POP DX POP CX EXIT: RET BINTOBCD ENDP 算法二:把要轉(zhuǎn)換的數(shù)分別減去相應(yīng)的最高次冪,直至不夠減,此時(shí)減的次數(shù)即是
37、相應(yīng)的位,電氣學(xué)院學(xué)習(xí)部資料庫(kù),58,例4-79 將十進(jìn)制數(shù)的ASCII碼轉(zhuǎn)換成有符號(hào)二進(jìn)制數(shù)。 算法:符號(hào)字符串標(biāo)識(shí)符MINU。若為負(fù), MINU=1; 數(shù)字字符(31H39H)一位十進(jìn)制數(shù)(09)a0,a1,a2 十進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù): 十六進(jìn)制數(shù)=a2x100+a1x10+a0 =(a2x10+a1) x10+a0,電氣學(xué)院學(xué)習(xí)部資料庫(kù),59,入口:DX字符串地址偏移量,CX字符個(gè)數(shù) 用存儲(chǔ)器傳遞參數(shù)。 出口:AX AX為16位,216=65536 字符串字符個(gè)數(shù)6, (5位十進(jìn)制數(shù)加1個(gè)符號(hào)位) 嵌套的子程序:CHE 用于乘10 入口:DX 出口:DX, CF 使用的寄存器:BX, SI,電氣學(xué)院學(xué)習(xí)部資料庫(kù),60,查符號(hào),X10 CHE,置標(biāo)志
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 南航飛行員美國(guó)培訓(xùn)制度
- 農(nóng)企業(yè)員工培訓(xùn)制度
- 學(xué)生培訓(xùn)時(shí)長(zhǎng)管理制度
- 培訓(xùn)學(xué)校對(duì)教師制度
- 農(nóng)技推廣站農(nóng)民培訓(xùn)制度
- 培訓(xùn)機(jī)構(gòu)班主任細(xì)則制度
- 員工職業(yè)生涯培訓(xùn)制度
- 醫(yī)療廢棄物管理培訓(xùn)制度
- 分黨校教育培訓(xùn)制度
- 論美國(guó)幼兒教師培訓(xùn)制度
- 關(guān)于提高護(hù)士輸液時(shí)PDA的掃描率的品管圈PPT
- GB/T 30564-2023無(wú)損檢測(cè)無(wú)損檢測(cè)人員培訓(xùn)機(jī)構(gòu)
- 中華人民共和國(guó)汽車(chē)行業(yè)標(biāo)準(zhǔn)汽車(chē)油漆涂層QC-T484-1999
- XGDT-06型脈動(dòng)真空滅菌柜4#性能確認(rèn)方案
- GB/T 96.2-2002大墊圈C級(jí)
- 第九章-第一節(jié)-美洲概述
- GB/T 13004-2016鋼質(zhì)無(wú)縫氣瓶定期檢驗(yàn)與評(píng)定
- GB/T 12060.5-2011聲系統(tǒng)設(shè)備第5部分:揚(yáng)聲器主要性能測(cè)試方法
- GB/T 11945-2019蒸壓灰砂實(shí)心磚和實(shí)心砌塊
- 下肢深靜脈血栓形成的診斷和治療課件
- 防水班日常安全教育登記表
評(píng)論
0/150
提交評(píng)論