版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、微機(jī)原理及接口技術(shù) 實(shí) 驗(yàn) 指 導(dǎo) 書 2010年9月信息學(xué)院實(shí)驗(yàn)中心微機(jī)實(shí)驗(yàn)室80X86微機(jī)原理及其程序設(shè)計(jì)(軟件部分) 實(shí)驗(yàn)一 軟件程序設(shè)計(jì) (1.熟悉PC機(jī)的使用和調(diào)試匯編程序的方法2.簡單程序設(shè)計(jì))一.實(shí)驗(yàn)?zāi)康? 1.掌握匯編程序由編輯、編譯、鏈接到調(diào)試的全過程。 2.通過匯編調(diào)試工具加深對機(jī)器指令執(zhí)行過程的了解。 3.利用匯編調(diào)試工具加深對機(jī)器指令和偽指令的了解二.實(shí)驗(yàn)要求: 1.了解 PC 機(jī)的系統(tǒng)類型和基本配置, 熟悉 PC 機(jī) DOS和 WINDOWS下的基本操作。 2.掌握使用 UltraEdit 等編輯器對匯編語言源程序 (存儲后擴(kuò)展名為.ASM)的編輯操作。 3.學(xué)會用宏
2、匯編程序 MASM (或TASM)對.ASM文件進(jìn)行編譯(編譯后擴(kuò)展名為.obj)。 4.使用鏈接程序LINK(或TLINK)對.OBJ 文件鏈接生成 .EXE 文件。 5.學(xué)會用匯編調(diào)試工具軟件TD(或DEBUG)對.EXE文件進(jìn)行調(diào)試進(jìn)一步深對機(jī)器指令的了解、執(zhí) 行程序、檢查運(yùn)行結(jié)果的方法。6.簡單程序是構(gòu)成復(fù)雜程序的基礎(chǔ)。簡單程序又稱順序程序,顧名思意,就是為完成一簡單的目的,采用一串指令序列,按順序逐條執(zhí)行。在簡單程序執(zhí)行過程中,每條指令只執(zhí)行一次,同時(shí)由于沒有轉(zhuǎn)移,一般不考慮對標(biāo)志的影響。 象所有匯編程序設(shè)計(jì)一樣,編程前,應(yīng)考慮如何分配 CPU 中的寄存器和內(nèi)存中單元等,要考慮到指令
3、本身的特點(diǎn)和要求分配寄存器,例如,如果希望使用乘法指令進(jìn)行乘法,根據(jù)指令的要求,必須要使用 AL 或 AX 作為被乘數(shù),在這種情況下,AL或AX 就必須考慮為存放被乘數(shù),當(dāng)然,乘積應(yīng)該是放在AX或DX:AX 中。 1.掌握匯編程序的基本結(jié)構(gòu)及設(shè)計(jì)方法,包括: A 匯編語言源程序結(jié)構(gòu) B 基于匯編級的解題算法 C 寄存器和存儲器的內(nèi)容分配 D 簡單匯編程序的設(shè)計(jì) E 返回系統(tǒng)的方法 2.掌握對自編程序的調(diào)試及出錯(cuò)修改的方法,包括: A 匯編程序的編輯、編譯、鏈接及調(diào)試 B 在調(diào)試程序過程中發(fā)現(xiàn)語法錯(cuò)誤的處理方法 C 在調(diào)試程序過程中如何發(fā)現(xiàn)邏輯錯(cuò)誤及處理方法 3.利用調(diào)試工具軟件對課堂中講授的機(jī)
4、器指令、偽指令、操作符、運(yùn)算符等內(nèi)容加深了解三.實(shí)驗(yàn)儀器: PC 機(jī)一臺四.實(shí)驗(yàn)內(nèi)容: 匯編程序的編程環(huán)境有以下二種方式: 1. Dos窗口下命令行方式 2. UltraEdit方式 其中第一種Dos方式,是指進(jìn)入Dos窗口模式編輯源文件,用命令行方式直接調(diào)用Tasm,Masm等編譯工具進(jìn)行程序的編譯、鏈接、調(diào)試,而后兩種工作方式都是在Windows下進(jìn)行源文件的編輯,而編譯和鏈接仍然是通過調(diào)用Tasm,Masm等編譯工具完成相應(yīng)工作。為了方便我們現(xiàn)在一般采用后一種編程環(huán)境。 下面我們分別介紹: UltraEdit方式 UltraEdit是Windows下非常優(yōu)秀的文本編輯軟件,有很好的可配置
5、性,支持語法高亮等。通過配置UltraEdit,可實(shí)現(xiàn)在UltraEdit環(huán)境下編輯匯編源程序、匯編、連接、調(diào)用TDebug調(diào)試非常方便。配置完成后,可實(shí)現(xiàn)快捷鍵調(diào)用各編譯、連接、調(diào)試功能。實(shí)驗(yàn)機(jī)器上已經(jīng)預(yù)配置好了。 使用說明: 1.打開UltraEdit,編輯并保存匯編源文件。 先新建一個(gè)文件,并保存為.asm為后綴的文件,此后,可以有語法高亮指示。輸入?yún)R編程序并保存。 2.編譯 UltraEdit菜單欄高級masm編譯(或Tasm編譯) 此菜單會調(diào)用masm.exe或tasm.exe,輸出結(jié)果放在當(dāng)前編輯屏幕的下方。 3.鏈接 UltraEdit菜單欄高級Link鏈接(或Tlink鏈接)
6、此菜單會調(diào)用Link.exe(ml.exe)或tlink.exe,輸出結(jié)果也放在當(dāng)前編輯屏幕的下方。 4.調(diào)試 UltraEdit菜單欄高級Td調(diào)試 此菜單會新開一個(gè)dos窗口,在其中運(yùn)行td.exe,可利用單步跟蹤和設(shè)置斷點(diǎn)等方式進(jìn)行調(diào)試,調(diào)試完畢,ALT+X退出Td環(huán)境,exit返回即可。 另:DOS窗口模式與全屏模式的切換鍵:Alt+Enter 調(diào)試最好在全屏模式下。 例1.輸入以下程序, 完成由編輯、編譯、鏈接到調(diào)試的全過程。 在調(diào)試過程中應(yīng)使用單步跟蹤、斷點(diǎn)等方法調(diào)試,注意觀察寄存器、標(biāo)志位和有關(guān)存儲器內(nèi)容的變化。 A. 將S1(BYTE),S2(WORD)和S3(DWORD)中內(nèi)容
7、送至D1,D2,D3 注意: 以下程序有誤,在調(diào)試過程中加以修改使之正確 DATA SEGMENT SS1 DB 1234H SS2 DW EA32H SS3 DD 12345678H DD1 DB 0 DD2 DW ? DD3 DW ? DATE ENDS CODE SEGMEMT ASUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,SS1 MOV DD1,AL LEA SI,SS2 LEA DI,DD MOV AX,SI MOV DI,AX MOV SI,OFFSET S3 MOV DI,OFFSET D3 MOV AX,SI
8、MOV D3,AX INC SI INC DI MOV AX,SI MOV DI,AX MOV AX,4C00H ;返回系統(tǒng) INT 21H CODEENDS ENDS STRAT B.完成兩個(gè)長整數(shù)相加的匯編程序 要求: 調(diào)試過程中應(yīng)更改必要的參數(shù)值,以驗(yàn)證程序的正確性,例如本題可修改加數(shù)和被加數(shù) 以判別最高位進(jìn)位處理是否正確。 并將該程序修改為減法操作重新調(diào)試。 DATA SEGMENT NUMBER EQU 6 BUFFER1 DB 12H,0E2H,33H,43H,12H BUFFER2 DB 22H,0A2H,55H,0F2H,3FH RESULT DB NUMBER DUP(?)
9、DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,NUMBER-1 MOV SI,OFFSET BUFFER1 ;被加數(shù)指針 MOV DI,OFFSET BUFFER2 ;加數(shù)指針 LEA BX,RESULT ;和指針 XOR AX,AX ;清CF標(biāo)志 NEXT: MOV AL,SI ADC AL,DI ;帶進(jìn)位相加 MOV BYTE PTR BX,AL ;保存部分和 INC SI ;變動指針 INC DI INC BX LOOP NEXT ;循環(huán)控制 ADC AH,0 ;最高位進(jìn)
10、位 MOV BYTE PTR BX,AH MOV AX,4C00H ;返回系統(tǒng) INT 21H CODE ENDS END START C.完成數(shù)據(jù)塊的移動,并利用TD觀察內(nèi)存中數(shù)據(jù)移動過程。 DS_DATA SEGMENT BUFFER1 DB 0,1,2,3,4,5,6,7,8,9 DS_DATA ENDS ES_DATA SEGMENT RESULT DB 10 DUP(?) ES_DATA ENDS MY_CODE SEGMENT ASSUME CS:MY_CODE,DS:DS_DATA,ES:ES_DATA START: MOV AX,DS_DATA MOV DS,AX MOV AX
11、,ES_DATA MOV ES,AX MOV SI,OFFSET BUFFER1 MOV DI,OFFSET RESULT MOV CX,10 REP MOVSB MOV AX,4C00H INT 21H MY_CODE ENDS END START例2.在匯編調(diào)試工具軟件的環(huán)境下, 完成下列指令的執(zhí)行, 注意選取有代表性的數(shù)據(jù), 并觀察指令執(zhí)行前后的數(shù)值變化: 例如: 觀察 MOV AX,BX 指令 在TD或DEBUG 下將 AX,BX 分別置不同的值,寫入 MOV AX,BX 指令然后執(zhí)行,再觀察 AX,BX 寄存器的內(nèi)容。 A. XCHG B. XLAT C. LDS 和 LES D.
12、MUL 和 IMUL E. CBW 和 CWD 分正數(shù)和負(fù)的情況 F. 移位和循環(huán)指令例3在屏幕上輸出字符串Hello the world! 代碼如下: DATA SEGMENT BUFFER DB Hello the world!,0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA DX,BUFFER MOV AH,9 INT 21H MOV AX,4C00H INT 21H CODE ENDS END START五.實(shí)驗(yàn)習(xí)題: 1.用多種尋址方式將數(shù)據(jù)段中定義的A1
13、(字),A2(字),A3(雙字)的數(shù)據(jù)分別送至附加段B1,B2,B3單元。2.將 A 中的大寫英文字母轉(zhuǎn)換成相應(yīng)的小寫字母。 例: A:45H(E)65H(e)3.將 A 中數(shù)據(jù)(=9)的平方存至B中。 例: A:6B:24H(36)4.將一個(gè)壓縮的 BCD 數(shù)轉(zhuǎn)換成相應(yīng)的 ASCII 碼。 例: 56H35H(5),36H(6) 5.有一種加密方法是首先在被加密的所有符號中建立其一一對應(yīng)的符號,例如: 0 - 2 , 1 - 7 , 2 - 1 , 3 - 6 , 4 - 9 5 - 0 , 6 - 8 , 7 - 3 , 8 - 4 , 9 - 5 然后將數(shù)據(jù)進(jìn)行變換后存儲, 即當(dāng)源數(shù)是6
14、時(shí),保存的數(shù)據(jù)是8,這樣就可以達(dá)到保密的效果。試編一程序完成十六進(jìn)制數(shù)的加密和解密程序。 6.完成分別將兩個(gè)壓縮 BCD 數(shù)據(jù)和非壓縮 BCD 數(shù)據(jù)相加的程序(加數(shù)和被加數(shù)及和小于9999)。7.完成兩個(gè) 32 位數(shù)的乘法程序。例: 01234567H*89ABCDEFH=9CA39DC94E4629H(選做)8.利用串操作指令完成兩串?dāng)?shù)據(jù)的比較, 結(jié)果用 RESULT 單元為 00H 和 0FFH 表示相同或不相同。 例: String1:ABC, String2:ABC 則 RESULT:00H String1:ABC, String2:ADC 則 RESULT:0FFH 9.利用串操作指
15、令統(tǒng)計(jì)以 $(ASCII碼為24H)為結(jié)束的字符串中字符的個(gè)數(shù)。 例:String:STUDY$ 則 RESULT:5 10.按本實(shí)驗(yàn)要求,自編一程序。實(shí)驗(yàn)二 軟件程序設(shè)計(jì) (1.匯編分支程序設(shè)計(jì)2.匯編循環(huán)程序設(shè)計(jì))一.實(shí)驗(yàn)?zāi)康? 掌握分支程序設(shè)計(jì)和調(diào)試方法以及掌握循環(huán)程序的設(shè)計(jì)和調(diào)試方法二.實(shí)驗(yàn)要求: 分支程序的基本設(shè)計(jì)方法包括: 1.掌握利用條件轉(zhuǎn)移指令方法 2.了解利用跳轉(zhuǎn)表方法 3.了解利用邏輯尺方法 4. 掌握循環(huán)程序的基本結(jié)構(gòu)及設(shè)計(jì)方法,包括: A 循環(huán)程序的循環(huán)初始化、循環(huán)體及循環(huán)控制條件 B 多種循環(huán)控制條件 C 循環(huán)體中的指針變化 了解多重循環(huán)程序的設(shè)計(jì)方法三.實(shí)驗(yàn)儀器:
16、PC 機(jī)一臺四.實(shí)驗(yàn)內(nèi)容: A.分支程序內(nèi)容分支結(jié)構(gòu)是程序設(shè)計(jì)的基本結(jié)構(gòu),它們在執(zhí)行過程中,或直接更改或通過對標(biāo)志的判別,實(shí)現(xiàn)更改程序按順序執(zhí)行的次序,這些更改是通過對 IP(段內(nèi))或CS:IP(段間)的修改完成的,而實(shí)現(xiàn)對這些寄存器的修改是通過無條件轉(zhuǎn)移和有條件轉(zhuǎn)移完成的。 1.無條件轉(zhuǎn)移 無條件轉(zhuǎn)移采用的是無條件轉(zhuǎn)移指令,即JMP類指令,在8086匯編中,JMP類指令根據(jù)需要轉(zhuǎn)移的目的不同,分成短 JMP(SHORT),段內(nèi)JMP(NEAR)和段間JMP(FAR),其基本格式如下: 短跳轉(zhuǎn):JMP TTT ; TTT 在該跳轉(zhuǎn)指令的 127 字節(jié)之內(nèi) 段內(nèi)跳轉(zhuǎn): JMP TTT ; TTT
17、 是段內(nèi) NEAR 型定義的標(biāo)號 JMP NEAR PTR TTT JMP CX ; 利用寄存器中內(nèi)容替換 IP JMP WORD PTR BX ; 利用內(nèi)存中某字單元內(nèi)容替換 IP 段間跳轉(zhuǎn): JMP FAR PTR TTT ; TTT 是 FAR 型標(biāo)號 JMP DWORD PTR BX ; 利用內(nèi)存中雙字單元內(nèi)容替換 IP和 CS 嚴(yán)格地說, SHORT 跳轉(zhuǎn)不是當(dāng)前 JMP 指令的 127 字節(jié)之內(nèi),計(jì)算機(jī)實(shí)際操作過程是將該指令讀入后的 IP ,即 JMP 當(dāng)前地址加 2 后的 IP與指令中八位的偏移量相加,然后替換 IP,所以,若以JMP 指令的位置為準(zhǔn)的話,則是 -126 至+12
18、9 之間。 SHORT 和 NEAR 型一般由匯編時(shí)自動區(qū)分,應(yīng)指出的是,條件轉(zhuǎn)移采用的都是 SHORT 型,因此,當(dāng)源和目的較遠(yuǎn)時(shí) ( 即超出 SHORT 范圍 ),應(yīng)在較近的位置設(shè)置一條JMP 指令,以實(shí)現(xiàn)不同位置的跳轉(zhuǎn)。 2.條件轉(zhuǎn)移 條件判別指令是條件轉(zhuǎn)移程序設(shè)計(jì)的基礎(chǔ),掌握指令如何對標(biāo)志的影響及如何利用條件轉(zhuǎn)移指令達(dá)到程序分支的目的。 如前所述,條件轉(zhuǎn)移的跳轉(zhuǎn)距離都是 SHORT 型。對跳轉(zhuǎn)的條件判別根據(jù)判別的條件分兩類,一種是單條件的判別,另一種是復(fù)合條件的判別,對單條件判別,主要對單一的標(biāo)志位進(jìn)行測試,如判CF標(biāo)志,判SF標(biāo)志等,而復(fù)合條件則是對多標(biāo)志位進(jìn)行判別,其標(biāo)志的影響一般
19、是由數(shù)值運(yùn)算后決定的,如帶符號數(shù)大于等于的條件判別等。盡管復(fù)合條件需多標(biāo)志判別,但在8086指令助記符中與單條件轉(zhuǎn)移指令沒有區(qū)別。 單條件判別指令如下: (1)JC 或 JNC 根據(jù)進(jìn)位標(biāo)志 CF 進(jìn)行轉(zhuǎn)移 (2)JE/JZ 或 JNE/JNZ 根據(jù)零標(biāo)志 ZF 進(jìn)行轉(zhuǎn)移 (3)JS 或 JNS 根據(jù)符號標(biāo)志 SF 進(jìn)行轉(zhuǎn)移 (4)JO 或 JNO 根據(jù)溢出標(biāo)志 OF 進(jìn)行轉(zhuǎn)移 (5)JP/JPE 或 JNP/JPO 根據(jù)奇偶標(biāo)志 PF 進(jìn)行轉(zhuǎn)移 根據(jù)操作數(shù)的不同,分無符號數(shù)和帶符號數(shù)的判別,對無符號數(shù)有 A(高于) B(低于),帶符號數(shù)有G(大于) L(小于)等判別。為了方便起見,其指令助記
20、符對同一種條件可能有多種表示方法,如:JGE與JNL 的條件判別條件是相同的,使用者根據(jù)習(xí)慣和需要選取其中的一種表示。 無符號數(shù)判別指令如下: 1.JA/JNBE 高于(不低于等于)轉(zhuǎn)移 2.JAE/JNB 高于等于(不低于)轉(zhuǎn)移 3.JB/JNAE 低于(不高于等于)轉(zhuǎn)移 4.JBE/JNA 低于等于(不高于)轉(zhuǎn)移 帶符號數(shù)判別指令如下: 1 JG/JNLE 大于(不小于等于)轉(zhuǎn)移 2 JGE/JNL 大于等于(不小于)轉(zhuǎn)移 3 JL/JNGE 小于(不大于等于)轉(zhuǎn)移 4 JLE/JNG 小于等于(不大于)轉(zhuǎn)移 3.分支程序設(shè)計(jì) 有條件轉(zhuǎn)移程序是分支程序主要部分,這樣的分支程序是根據(jù)當(dāng)前運(yùn)算
21、的結(jié)果去判斷選擇不同的程序段執(zhí)行,反之,如果要求是根據(jù)不同的情況,完成不同的任務(wù),則需要使用分支程序結(jié)構(gòu)來實(shí)現(xiàn)。如上述,程序的分支是根據(jù)標(biāo)志決定的,所以,如何影響標(biāo)志及如何利用標(biāo)志是分支程序的重點(diǎn),例如,判斷 AX 中內(nèi)容是否是負(fù)數(shù),我們可用多種方法實(shí)現(xiàn): 方法1 AND AX, AX ; 影響 SF 標(biāo)志 JS MINCE ; 為負(fù)數(shù)轉(zhuǎn)入負(fù)數(shù)處理 . 方法2 CMP AX, 0 ; 影響 SF 標(biāo)志 JS MINCE ; 為負(fù)數(shù)轉(zhuǎn)入負(fù)數(shù)處理 . 方法3 TEST AX,8000H ; 影響 ZF 標(biāo)志 JNZ MINCE ; 為負(fù)數(shù)轉(zhuǎn)入負(fù)數(shù)處理 . 方法4 ADD AX,AX ; 影響 CF
22、 標(biāo)志 JC MINCE ; 為負(fù)數(shù)轉(zhuǎn)入負(fù)數(shù)處理 . 方法5 SHL AX,1 ; 影響 CF 標(biāo)志 JC MINCE ; 為負(fù)數(shù)轉(zhuǎn)入負(fù)數(shù)處理 . 還可以舉出其它方法 由上例可以看出,同樣的目的可用不同的方法去影響不同的標(biāo)志,采用不同的跳轉(zhuǎn)指令來實(shí)現(xiàn),顯然,要編好分支程序,首先應(yīng)掌握指令對標(biāo)志如何影響,這也是匯編程序設(shè)計(jì)的特點(diǎn)之一。 本實(shí)驗(yàn)中有輸入和顯示。以下列出簡單的字符輸入和顯示的程序,注意,它們都是以 ASCII 碼方式體現(xiàn)的。 1.由鍵盤讀入字符的程序: MOV AH,01 ; 功能號 INT 21H ; 系統(tǒng)調(diào)用讀入字符 MOV INPUT_CHAR, AL ; AL為輸入的字符的A
23、SCII 碼值 2.由屏幕顯示字符的程序: MOV AH,02H ; 功能號 MOV DL,# ; DL : 顯示字符的 ASCII 碼 INT 21H ; 系統(tǒng)調(diào)用顯示字符例1.設(shè)計(jì)一數(shù)據(jù)塊間的搬移程序。設(shè)計(jì)思想:程序要求把內(nèi)存中一數(shù)據(jù)區(qū)(稱為源數(shù)據(jù)塊)傳送到另一存儲區(qū)(成為目的數(shù)據(jù)塊)。源數(shù)據(jù)塊和目的數(shù)據(jù)塊在存儲中可能有三種情況,如圖所示 圖 內(nèi)存中源數(shù)據(jù)塊和目的數(shù)據(jù)塊的三種可能情況 對于兩個(gè)數(shù)據(jù)塊分離的情況,如圖(a),數(shù)據(jù)的傳送從數(shù)據(jù)塊的首地址開始,或從數(shù)據(jù)塊的末地址開始均可。但是對于有重疊的情況,則要加以分析,否則重疊部分會因“搬移”而遭到破壞,可有如下結(jié)論: 當(dāng)源數(shù)據(jù)塊首地址目的塊
24、首地址時(shí),從數(shù)據(jù)塊末地址開始傳送數(shù)據(jù),如圖(b)所示。當(dāng)源數(shù)據(jù)塊首地址目的塊首地址時(shí),從數(shù)據(jù)塊首地址開始傳送數(shù)據(jù),如圖(c)所示。 實(shí)驗(yàn)程序流程圖如圖所示 實(shí)驗(yàn)程序清單: SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX, 0010H MOV SI, 3100H MOV DI, 3200H CMP SI, DI JA A2 ADD SI, CX ADD DI, CX DEC SI DEC DI A1: MOV AL, SI MOV DI, AL DEC SI DEC D
25、I DEC CX JNE A1 JMP A3 A2: MOV AL, SI MOV DI, AL INC SI INC DI DEC CX JNE A2 A3: JMP A3 CODE ENDS END START B.循環(huán)程序內(nèi)容 在設(shè)計(jì)循環(huán)程序時(shí),可用控制指令來控制循環(huán)是否繼續(xù),該指令可用來管理程序循環(huán)的重復(fù)過程。這些指令的特點(diǎn)是用CX寄存器作為循環(huán)控制計(jì)數(shù)器,與條件轉(zhuǎn)移指令一樣,都是短距離轉(zhuǎn)移指令,循環(huán)控制指令所給出的目標(biāo)地址與下一條指令的首地址的距離只能在-128127之間。例1.將AX中16進(jìn)制數(shù)轉(zhuǎn)換為10進(jìn)制數(shù)輸出 如 AX=47EH 輸出1150 其流程圖如下: 程序如下: CO
26、DE SEGMENT ASSUME CS:CODE START: MOV AX,47EH MOV CX,0 MOV BX,10 DISP1: MOV DX,0 DIV BX PUSH DX INC CX OR AX, AX JNE DISP1 DISP2: POP DX MOV AH,2 ADD DL,30H INT 21H LOOP DISP2 MOV AX,4C00H INT 21H CODE ENDS END START 五.實(shí)驗(yàn)習(xí)題: 1.將一個(gè)字節(jié)的十六進(jìn)制數(shù)轉(zhuǎn)換成對應(yīng)的 ASCII 碼。 例: 3EH33H(3),4EH(E) 2.編寫可接受 10 個(gè)鍵盤命令 ( A,B.J ),
27、完成分別轉(zhuǎn)向P1,P2,.P10 的程序。P1,P2,.P10 程序用 P1,P2,.P10 顯示表示。 3.將 10 個(gè)十六位帶符號數(shù)中正數(shù)相加。 例:3543H,5943H,-3578H,-3432H,4523H,3323H,-5634H,54EFH,-5423H,7230H 則 1CDEBH 4.編寫在一串?dāng)?shù)據(jù)中統(tǒng)計(jì)正數(shù),負(fù)數(shù)和零的個(gè)數(shù)并加以顯示。 例:34H,-3BH,-5AH,72H,0,-2DH,0,66H 則正數(shù):3,負(fù)數(shù):3,零:2 5.統(tǒng)計(jì)某十六位數(shù)中 1 的個(gè)數(shù)并加以顯示。 6.一種數(shù)值濾波的方法是將相鄰的兩數(shù)求平均值,試編程序?qū)崿F(xiàn)。 7.將字符串1 插入字符串2 的中間,
28、 其位置由鍵盤輸入。 8.在一已排序的數(shù)組中插入新的數(shù)據(jù),插入新數(shù)據(jù)后的數(shù)組仍滿足排序要求。 9.編寫一串在帶符號數(shù)中找出最大數(shù)和最小數(shù)的程序。 例:35H,32H,73H,10H,08H,0FH,2AH,3BH 則:最大數(shù)73H 最小數(shù)08H 10.統(tǒng)計(jì)一組數(shù)據(jù) ( BYTE ) 中 D3D2D1 位相同的個(gè)數(shù)并加以顯示。 11.編寫一程序完成無符號數(shù)的排序程序(由大到小)。 例:34H,67H,0E2H,0A7H,89H,73H,51H,43H,0E2H,0A7H,89H,73H,67H,51H,43H,34H 實(shí)驗(yàn)三 軟件程序設(shè)計(jì) (簡單DOS和BIOS調(diào)用匯編程序設(shè)計(jì))一.實(shí)驗(yàn)?zāi)康?
29、掌握簡單DOS系統(tǒng)功能和BIOS的調(diào)用方法二.實(shí)驗(yàn)要求: 1.掌握 DOS 系統(tǒng)功能調(diào)用方法 A.了解 DOS 系統(tǒng)調(diào)用所完成的功能 B.掌握如何根據(jù)題目要求利用系統(tǒng)調(diào)用完成所需的功能 C.掌握系統(tǒng)調(diào)用的方法, 包括入口參數(shù)設(shè)置,功能號設(shè)置,系統(tǒng)調(diào)用和出口參數(shù)獲得 2.掌握 BIOS 調(diào)用方法三.實(shí)驗(yàn)儀器: PC機(jī)一臺四.實(shí)驗(yàn)內(nèi)容: BIOS和DOS是兩組系統(tǒng)服務(wù)軟件集合,它們使用戶能夠訪問和使用PC機(jī)的硬件,也可以這么說,對一個(gè)匯編程序編程者來說,如果要使用PC機(jī)硬件的話,一般是采用BIOS和DOS調(diào)用來實(shí)現(xiàn)。在使用MS-DOS的PC機(jī)上使用硬件的基本方法有以下三種: 1.直接訪問硬件 使用
30、PC機(jī)硬件資源最直接的方法是通過編寫使用IN和OUT指令程序來實(shí)現(xiàn),編寫直接訪問硬件的程序需要編程者對所使用硬件的控制非常熟悉,包括口地址,控制命令,硬件結(jié)構(gòu)等,這些,對一般的編程者來說,要掌握是有一定難度的,同樣,即使是編程者掌握了必要的硬件知識,但由于直接訪問所要考慮的因素較多,也會使編寫的程序相當(dāng)繁雜,增加了調(diào)試程序的困難,另一方面,編程者按自己的要求設(shè)置硬件的工作方式,有可能會影響整個(gè)系統(tǒng)的運(yùn)行,另外,采用直接訪問硬件的編程方法編制的程序,其可移植性相當(dāng)差,在一個(gè)機(jī)器上運(yùn)行的程序,換到另外一個(gè)廠家生產(chǎn)的機(jī)器上有可能無法運(yùn)行,因此,如果不是為了獲得更高的執(zhí)行效率和獲得DOS和BIOS不支
31、持的功能,程序員應(yīng)避免采用該方法。 2.使用BIOS調(diào)用 BIOS稱為基本輸入輸出系統(tǒng),由DOS-BIOS和ROM-BIOS兩部分組成,它是計(jì)算機(jī)硬件和其它程序之間的第一道緩沖。BIOS直接和外設(shè)通訊,完成設(shè)備一級的控制,并附有其它的實(shí)用服務(wù)功能,它為編程者提供了一個(gè)簡單的軟件接口以避免和外設(shè)直接打交道,這樣,可以降低編程者對硬件要求的了解程度,簡化使用PC機(jī)硬件資源的程序,而BIOS是PC機(jī)的標(biāo)準(zhǔn)軟件接口,具有兼容性,提高了編制程序的可移植性。 采用 BIOS 功能調(diào)用主要是為了得到較高的運(yùn)行效率(與DOS功能調(diào)用相比),或者需要利用DOS 不具備的某些功能.。BIOS調(diào)用最常見的是在顯示器
32、的控制程序中,不同的顯示器會增加相應(yīng)的 BIOS功能。 3.使用DOS調(diào)用 DOS在更高層次上給出了與BIOS相同的功能,一般說來, DOS調(diào)用需要的入口,出口參數(shù)較BIOS 簡單,調(diào)用也容易,方便,不需要編程者對硬件有更多的了解,通過調(diào)用DOS ,還可以充分利用操作系統(tǒng)提供的所有功能,編制的程序可移植性也較高。與BIOS相比,DOS完成的功能沒有其豐富,即對于某些特殊的要求,DOS調(diào)用也許不能實(shí)現(xiàn),此外,DOS調(diào)用的執(zhí)行效率也比BIOS低。 應(yīng)該使用哪種方法 選擇哪種方式應(yīng)根據(jù)不同的需要來選擇,首先必須是以完成任務(wù)為目的,一般按DOS,BIOS到硬件直接控制的順序選擇,另外,好的編程者還要根
33、據(jù)程序應(yīng)用的場合,權(quán)衡程序的可移植性,編程的復(fù)雜性和目標(biāo)代碼長短等因素選擇相應(yīng)的方式。 此外,在選擇DOS調(diào)用時(shí),因注意操作系統(tǒng)的版本,一般的高版本的操作系統(tǒng)兼容低版本。 DOS功能調(diào)用的一般步驟為: 1.如有必要,裝入入口參數(shù)到規(guī)定的寄存器; 2.裝入功能號到 AH 中;如有必要,裝入子功能號到 AL 中; 3.調(diào)用 DOS 相應(yīng)功能的中斷 ( 這里一般指 INT 21H ); 4.如有必要,取出返回結(jié)果或出錯(cuò)信息. 例1:利用Dos系統(tǒng)功能調(diào)用將輸入的小寫字母轉(zhuǎn)換成大寫輸出 如:鍵盤輸入abcdef 在屏幕上換行輸出ABCDEF 程序清單: DATA SEGMENT BUF DB 10 D
34、B ? DB 10 DUP(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA DX,BUF MOV AH,10 INT 21H MOV AH,2 MOV DL,0DH INT 21H MOV DL,0AH INT 21H LEA BX,BUF MOV CX,0 MOV CL,BX+1 ADD BX,2 A1:MOV DL,BX SUB DL,20H MOV AH,2 INT 21H INC BX LOOP A1 MOV AX,4C00H INT 21H CODE ENDS END S
35、TART 例2:編寫實(shí)驗(yàn)程序,利用BIOS調(diào)用在顯示器上的輸出窗口顯示AZ共26 個(gè)大寫英文字母。 顯示I/O 功能調(diào)用使用說明如下: INT 10H 使用說明 入口:AH00H,AL01H 功能:清屏 入口:AH01H,AL數(shù)據(jù) 功能:寫AL中的數(shù)據(jù)到顯示屏上 入口:AH06H,DS:BX字串首地址,且字符串尾用00H 填充 功能:顯示一字串,直到遇到00H 為止 實(shí)驗(yàn)程序清單: SSTACK SEGMENT STACK DW 64 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV CX,001AH MOV BL,41H ;A
36、的ASCII碼值 MOV AH,01H A1: MOV AL,BL INT 10H ;功能調(diào)用 INC BL PUSH CX MOV CX,0FFFFH A2: LOOP A2 POP CX DEC CX JNZ A1 A3: JMP A3 CODE ENDS END START五.實(shí)驗(yàn)習(xí)題: 1.在鍵盤上輸入十個(gè)一位的十進(jìn)制數(shù), 相加后在屏幕上顯示。 參考系統(tǒng)調(diào)用: A.鍵盤輸入并回顯 INT 21H 功能 01H B.顯示輸出 INT 21H 功能 02H 2.在屏幕上顯示 What is your name? ,輸入自己姓名后顯示 My name is XXX 。 參考系統(tǒng)調(diào)用: A.顯
37、示字符串 INT 21H 功能 09H B.鍵盤輸入到緩沖區(qū) INT 21H 功能 0AH 3.在屏幕上顯示 ASCII 字母表。 4.將當(dāng)前鍵盤狀態(tài)在屏幕上顯示, 用 ON/OFF 表示。 參考系統(tǒng)調(diào)用: A.讀當(dāng)前鍵盤狀態(tài) INT 16H 功能 02H 入口參數(shù): 無 出口參數(shù): AL : 當(dāng)前狀態(tài) 7 6 5 4 3 2 1 0 . . . . . . . 1 RIGHT SHIFT 鍵按下 . . . . . . 1 . LIFT SHIFT 鍵按下 . . . . . 1 . . CTRL 鍵按下 . . . . 1 . . . ALT 鍵按下 . . . 1 . . . . SCR
38、OLL LOCK 鍵按下 . . 1 . . . . . NUM LOCK 鍵按下 . 1 . . . . . . CAPS LOCK 鍵按下 1 . . . . . . . INS 鍵觸發(fā) 5.在屏幕上顯示系統(tǒng)日期和時(shí)間,用英文表示星期幾。 參考系統(tǒng)調(diào)用: A.取系統(tǒng)日期 INT 21H 功能 2AH (置系統(tǒng)日期 2BH) 入口參數(shù) AH = 2AH 出口參數(shù) CX= 年 (1980 2099) DH=月(1 12) DL= 天(1 31) AL= 星期幾 ( 0:星期天,1:星期一.) B.取系統(tǒng)時(shí)間 INT 21H 功能 2CH ( 置系統(tǒng)時(shí)間 20H ) 入口參數(shù) AH= 2CH 出
39、口參數(shù) CH= 小時(shí) ( 0 23 ) CL= 分 ( 0 59 ) DH= 秒 ( 0 59 ) DL= 百分秒 ( 0 99 ) 6.在鍵盤上輸入等待時(shí)間(毫秒) 后,屏幕上顯示 BEGIN ., 等待要求的時(shí)間后, 再顯示 END 。 參考系統(tǒng)調(diào)用: A.標(biāo)準(zhǔn)時(shí)間等待( AT 以上機(jī)器 ) INT 15H 功能 86H 入口參數(shù) AH= 86H CX:DX = 等待的微秒數(shù) 7.顯示當(dāng)前 MS-DOS 版本 ( V5.0 )。 參考系統(tǒng)調(diào)用: A.取 MS-DOS 版本號,次版本號和版本標(biāo)志 INT 21H 功能 33H 子功能 06H 入口參數(shù) AH= 33H AL= 06H 出口參數(shù) BL= 版本號 BH= 次版本號 DH= 版本標(biāo)志 8.在屏幕上循環(huán)顯示 ASCII 符號表 ( 由 21H 開始到 0FFH
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度教育培訓(xùn)居間合同管轄權(quán)與教學(xué)質(zhì)量監(jiān)督2篇
- 大堂經(jīng)理職責(zé)內(nèi)容(2篇)
- 2025年職業(yè)技能鑒定管理制度(3篇)
- 二零二五年度建筑機(jī)械買賣與安裝合同3篇
- 2025年競選醫(yī)院演講稿范文(2篇)
- 大型活動安全事故應(yīng)急預(yù)案樣本(2篇)
- 網(wǎng)頁課程設(shè)計(jì)與制作
- 可燃?xì)怏w安全管理規(guī)定模版(3篇)
- 細(xì)胞器導(dǎo)入課程設(shè)計(jì)
- 2025年第二學(xué)期小學(xué)語文教研組工作計(jì)劃例文(2篇)
- 2025北京朝陽初二(上)期末數(shù)學(xué)真題試卷(含答案解析)
- 做賬實(shí)操-科學(xué)研究和技術(shù)服務(wù)業(yè)的賬務(wù)處理示例
- 2025年人教版歷史八上期末復(fù)習(xí)-全冊重難點(diǎn)知識
- 2024年國家安全員資格考試題庫及解析答案
- 儀控技術(shù)手冊-自控專業(yè)工程設(shè)計(jì)用典型條件表
- 衛(wèi)生部關(guān)于發(fā)布《綜合醫(yī)院組織編制原則試行草案》的通知((78)衛(wèi)醫(yī)字第1689號)
- 全貼合OCA工藝簡介
- 部編版八上語文古代詩歌鑒賞對比閱讀(含答案)
- 標(biāo)書密封條格式模板大全(共33頁)
- 鐵路交通事故分類表
- 維修確認(rèn)單(共4頁)
評論
0/150
提交評論