下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、微機原理及接口技術(shù)實驗指導書第一章 80X86 微機原理及其程序設(shè)計實驗一 熟悉 PC 機的使用和調(diào)試匯編程序的方法一 . 實驗目的 :1. 掌握匯編程序由編輯、編譯、鏈接到調(diào)試的全過程。2. 通過匯編調(diào)試工具加深對機器指令執(zhí)行過程的了解。二 . 實驗要求 :1. 了解 PC 機的系統(tǒng)類型和基本配置 , 熟悉 PC 機 DOS 和 WINDOWS 下的基本操 作2. 掌握使用 UltraEdit 等編輯器對匯編語言源程序 (存儲后擴展名為 .ASM ) 的編輯操 作。3. 學會用宏匯編程序 MASM (或TASM )對.ASM文件進行編譯(編譯后擴展名 為.obj)。4. 使用鏈接程序 LIN
2、K (或 TLINK ) 對 .OBJ 文件鏈接生成 .EXE 文件。5. 學會用匯編調(diào)試工具軟件 TD (或DEBUG)對.EXE文件進行調(diào)試進一步深對機器指 令的了解、執(zhí)行程序、檢查運行結(jié)果的方法。三. 實驗儀器 :PC 機一臺四. 實驗步驟 :匯編程序的編程環(huán)境有以下三種方式:1. Dos 窗口下命令行方式2. UltraEdit 方式3. 硬件實驗箱自帶的集成編程環(huán)境 Wmd86 方式其中第一種 Dos 方式,是指進入 Dos 窗口模式編輯源文件,用命令行方式直接調(diào)用Tasm,Masm 等編譯工具進行程序的編譯、鏈接、調(diào)試,而后兩種工作方式都是在Windows下進行源文件的編輯,而編譯
3、和鏈接仍然是通過調(diào)用 Tasm,Masm 等編譯工具完成相應 工 作。為了方便我們現(xiàn)在一般采用后兩種編程環(huán)境F面我們分別介紹:1. UltraEdit 方式UltraEdit是Windows下非常優(yōu)秀的文本編輯軟件,有很好的可配置性,支持語法高亮 等。通過配置UltraEdit,可實現(xiàn)在UltraEdit環(huán)境下編輯匯編源程序、匯編、連接、調(diào)用TDebug調(diào)試,非常方便。配置完成后,可實現(xiàn)快捷鍵調(diào)用各編譯、連接、調(diào)試功能。實驗機器上已經(jīng)預配置好了。配置方法說明(帶演示動畫)。使用說明:1.打開UltraEdit,編輯并保存匯編源文件。先新建一個文件,并保存為.asm為后綴的文件,此后,可以有語法
4、高亮指示。輸入?yún)R編程序,并保存。2.編譯UltraEdit 菜單欄高級masm編譯(或Tasm編譯) 此菜單會調(diào)用masm.exe (ml.exe )或tasm.exe,輸出結(jié)果放在當前編輯屏幕的下方3.連接UltraEdit 菜單欄高級Link連接(或Tlink 連接)此菜單會調(diào)用Link.exe(ml.exe)或tlink.exe,輸出結(jié)果也放在當前編輯屏幕的下方。-iDlxldata segiddd dto 3J data end; code segi assume c; start: wov axj mov a: mov di, 1' mainloop mov cx7 d: m
5、ov hxy o: nextloopList Fl LibrariIhx】0019(bx+01,al bxlj.al bxcs:3012 g =0014 cs:001?ds:010 ds =6018d=0Pro gran has no si/mbo 1 tablaFile Edit View Run BrEakpointw Data Options Uindnw HeIs:900F 3H4701cmsw:0002 A7E2 es:3600k6734X a p p s 5ssp d sdbsd e s ci姣0F5F p VF0 3F co c 魔n Q eA7 4F il d9 0 9F577
6、0403&87 8 8DD21 cl 508 51F 00B2 613 500E 528C10FB 1090 00n ccs:0Q1? cs:301A cs:001CE 總88耀絢郵U-E : :::和粋:滅:ds:0800ds : 00081=10AE6ax00OF di0705FF ©QQ By ; ;RROR4.調(diào)試UltraEdit 菜單欄一咼級一Td調(diào)試此菜單會新開一個dos窗口,在其中運行td.exe,調(diào)試完畢,ALT+X退出Td環(huán)境,exit返回即可Llf=fX|工文件(日 編輯(日 搜索 項目也甘視團格式(I)列塊心宏(哩高級(4窗口(妙幫助(H)-Jtfl
7、x¥ D厲曰日S EtH I彗善 w 全lasm二1sort asmSuitraEdil DOS Command Win Jo v/Def mit ions r ile nul * def:LINK : warning L4O21: no stack segment11I滋溢霍送送蠢遂滋須豹送送遂滲?如需幫助文件 > 請按行L縱列】,石DC6修改:200仇-26 16:33:時fflA另:dos窗口模式與全屏模式的切換鍵:Alt+Enter調(diào)試最好在全屏模式下2. Wmd86 方式1. 運行Wmd86軟件,進入Wmd86集成開發(fā)環(huán)境。2. 根據(jù)程序設(shè)計使用語言的不同,通過在“設(shè)
8、置”下拉列表來選擇需要使用的語言,如圖 所示。語言選擇后,下次再啟動軟件,語言環(huán)境保持這次的修改不變。在這里,我們選 擇匯編語言。Vsd86文件(E)查看也)工具江)端口電) I D Q | t% 聯(lián)直 g1寄存器名1值(1&進制)Uh i寄存器f變量J堆棧區(qū)x設(shè)置隹).虛擬儀器臺昨)i=i語言卜IH匯編語言ij匚語言新逹(N)Q打開(Q)Ctrl+NCtrl+O3. 語言選擇后,點擊新建或按Ctrl+N組合鍵來新建一個文檔,如圖所示。默認文件名為 Wmd861ET>d86文件(E)查看(址)工具(T)諦口(E)設(shè)置(3)虛擬儀器 幫助(旦)1 E:Intet386ShiyanW
9、md8512 E:Intel386ShiyanSubprog 13 E:Intel386ShiyanTABLE4 匚*Tnf©nflAc;hintri-IART4. 編寫實驗程序,并保存,此時系統(tǒng)會提示輸入新的文件名,輸完后點擊保存。5點擊,編譯文件,若程序編譯無誤,貝卩輸出如圖所示的輸出信息,然后再 進行鏈接,鏈接無誤輸出如圖所示的輸出信息。(C) CopyRight 2004X(C CopyRight 2004Compile Your ObjectsLink Your ObjectF1Compiling.Et 岡UHLinking.Wmd861.obj - 0 error(s),
10、 0 warning(s)Wmd861 .exe - 0 error(s, 0 warnlngfs)1譯&調(diào)試工餐?'編譯調(diào)試X結(jié)果6. 連接PC與實驗系統(tǒng)的通訊電纜,打開實驗系統(tǒng)電源。7. 編譯、鏈接都正確并且上下位機通訊成功后,就可以下載程序,聯(lián)機調(diào)試了??梢酝?過端口列表中的“端口測試”來檢查通訊是否正常。點擊下載程序。為編譯、鏈接、下載 組合按鈕,通過該按鈕可以將編譯、鏈接、下載一次完成。下載成功后,在輸出區(qū)的結(jié) 果窗中會顯示“加載成功!”,表示程序已正確下載。起始運行語句下會有一條綠色的背 景。如圖所示??趪秶?圏 觀題創(chuàng)國 沖刊呼電 伽口就AX+BX*CXDM+*
11、SIDISFBP*CS0204DS*ESSSIF000CFZFSFOFPFAFD貝a<>_i F卸克匚蟄堆寄存器名值leffiw *SSTTCKSSTACKCODESEGMENT STACKDW 32 DUE (?)ENDSSEGMEhJTASSUME CS :0ODE SS : SSTACK;定義堆棧段*START:PUSH DSXOR AX, AX MOV DS, AXMOV SI, 3000H;建立數(shù)攥起始地址MOV CX, 16:循環(huán)次數(shù)AA1:MOV SI» ALINC SI;地址自加1IMC ALLOOP AA1;數(shù)據(jù)自加1AA2:JMP AA2CODEEND
12、SJJEND START羽 Wmdsei王存黑/書呈.片我反*書EE麗養(yǎng)麗! 編軍二凋詞)結(jié)果五. 實驗內(nèi)容:1. 輸入以下程序,完成由編輯、編譯、鏈接到調(diào)試的全過程。在調(diào)試過程中應使用單步、斷點等方法調(diào)試,注意觀察寄存器、標志位和有關(guān)存儲器內(nèi) 容的變化。A 將 S1 (BYTE) ,S2 (WORD)和 S3 (DWORD)送至 D1,D2,D3 .注意:以下程序有誤,在調(diào)試過程中加以修改使之正確DATA SEGMENT551 DB 1234H552 DW EA32H553 DD 12345678HDD1 DB 0DD2 DW ?DD3 DW ?DATE ENDSCODE SEGMEMT A
13、SUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AXMOV AL,SS1MOV DD1,ALLEA SI,SS2LEA DI,DDMOV AX,SIMOV DI,AXMOV SI,OFFSET S3MOV DI,OFFSET D3MOV AX,SIMOV D3,AXINC SIINC DIMOV AX,SIMOV DI,AXMOV AX,4C00H ;返回系統(tǒng)INT 21HCODE ENDSENDS STRATB 完成兩個長整數(shù)相加的匯編程序要求: 調(diào)試過程中應更改必要的參數(shù)值 ,以驗證程序的正確性 , 例如本題可修改加數(shù) 和被加數(shù)以判別最高位進位
14、處理是否正確。將該程序修改為減法、壓縮的BCD數(shù)的加、減(BCD數(shù)運算時注意操作數(shù)應符合要求) 重新調(diào)試。DATA SEGMENTNUMBEREQU 6BUFFER1DB 12H,0E2H,33H,43H,12HBUFFER2DB 22H,0A2H,55H,0F2H,3FHRESULTDB NUMBER DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV CX,NUMBER-1MOV SI,OFFSET BUFFER1被加數(shù)指針 MOV DI,OFFSET BUFFERS;數(shù)指針 LE
15、A BX,RESULT ;和指針 XOR AX,AX 清 CF標志 NEXT: MOV AL,SI ADC AL,DI ; 帶進位相加 MOV BYTE PTR BX,AL ;保存部分和 INC SI ; 變動指針 INC DI INC BXLOOP NEXT 循; 環(huán)控制 ADC AH,0 ;最高位進位 MOV BYTE PTR BX,AH MOV AX,4C00H 返; 回系統(tǒng) INT 21H CODE ENDS END STARTC 完成數(shù)據(jù)塊的移動 .DS_DATASEGMENTBUFFER1DB 0,1,2,3,4,5,6,7,8,9DS_DATAENDSES_DATASEGMENT
16、RESULTDB 10 DUP(?)ES_DATAENDSMY_CODE SEGMENTASSUME CS:MY_CODE,DS:DS_DATA,ES:ES_DATA MY_ PROC START: PUSH DSMOV AX,0 PUSH AX MOV AX,DS_DATA MOV DS,AX MOV AX,ES_DATA MOV ES,AXMOV SI,OFFSET BUFFER1MOV DI,OFFSET RESULTMOV CX,10REP MOVSBRETMY_ ENDPMY_CODE ENDSEND START2 在匯編調(diào)試工具軟件的環(huán)境下 , 完成下列指令的執(zhí)行 , 注意選取有代
17、表性 的數(shù)據(jù) , 并觀察指令執(zhí)行前后的數(shù)值變化 :例如: 觀察 MOV AX,BX 指令在TD或DEBUGF將AX,BX分別置不同的值,寫入MOV AX,BX指令然后執(zhí)行, 再觀察 AX,BX 寄存器的內(nèi)容。A. XCHGB. XLATC. LDS 和 LESD. MUL 和 IMULE. CBW和CWD分正數(shù)和負的情況F. 移位和循環(huán)指令G. 串操作指令 ( 注意 CS 和 ES 的使用 )實驗二簡單程序設(shè)計實驗目的 :1. 掌握簡單程序的設(shè)計和調(diào)試方法2. 利用匯編調(diào)試工具加深對機器指令和偽指令的了解實驗要求 :簡單程序是構(gòu)成復雜程序的基礎(chǔ)。簡單程序又稱順序程序,顧名思意,就是為完 成一簡
18、單的目的,采用一串指令序列,按順序逐條執(zhí)行。在簡單程序執(zhí)行過程中, 每條指令只執(zhí)行一次,同時由于沒有轉(zhuǎn)移,一般不考慮對標志的影響。象所有匯編程序設(shè)計一樣 ,編程前,應考慮如何分配 CPU 中的寄存器和內(nèi)存中單 元等,要考慮到指令本身的特點和要求分配寄存器,例如,如果希望使用乘法指令 進行乘法,根據(jù)指令的要求,必須要使用 AL 或 AX 作為被乘數(shù),在這種情況下, AL 或 AX 就必須考慮為存放被乘數(shù),當然,乘積應該是放在 AX 或 DX:AX 中。1. 掌握匯編程序的基本結(jié)構(gòu)及設(shè)計方法 , 包括:A 匯編語言源程序結(jié)構(gòu)B 基于匯編級的解題算法C 寄存器和存儲器的內(nèi)容分配D 簡單匯編程序的設(shè)計
19、E 返回系統(tǒng)的方法2. 掌握對自編程序的調(diào)試及出錯修改的方法 , 包括:A 匯編程序的編輯、編譯、鏈接及調(diào)試B 在調(diào)試程序過程中發(fā)現(xiàn)語法錯誤的處理方法C 在調(diào)試程序過程中如何發(fā)現(xiàn)邏輯錯誤及處理方法3. 利用調(diào)試工具軟件對課堂中講授的機器指令、偽指令、操作符、運算符 等內(nèi)容加深了解三. 實驗儀器 :PC 機一臺四. 實驗內(nèi)容 :例 1將 AX 中 16 進制數(shù)轉(zhuǎn)換為 10 進制數(shù)輸出如 AX=47EH 輸出 1150其流程圖如下:轉(zhuǎn)為ASCII碣后輸出程序結(jié)束程序: code segme nt assume cs:code start: mov ax,47EH mov cx,0mov bx,10
20、disp1: mov dx,0div bxpush dxinc cxor ax, axjne disp1disp2: pop dxmov ah,2add dl,30hint 21hloop disp2mov ax,4c00hint 21hcode endsend start練習:2.1用多種尋址方式將數(shù)據(jù)段中定義的 A1(字),A2(字),A3(雙字)的數(shù)據(jù) 分別送至附加段 B1,B2,B3 單元。2.2 將 A 中的大寫英文字母轉(zhuǎn)換成相應的小寫字母例:A:45H('E') 65H('e')2.3 將 A 中數(shù)據(jù)(<=9)的平方存至 B 中 ( 利用 XL
21、AT 指令 ) 。例:A:6 B:24H(36)2.4 將一個壓縮的 BCD 數(shù)轉(zhuǎn)換成相應的 ASCII 碼。例: 56H 35H('5'),36H('6')2.5 有一種加密方法是首先在被加密的所有符號中建立其一一對應的符 號,例如:0 - 2 , 1 - 7 , 2 - 1 , 3 - 6 , 4 - 95 - 0 , 6 - 8 , 7 - 3 , 8 - 4 , 9 - 5然后將數(shù)據(jù)進行變換后存儲 , 即當源數(shù)是 6 時, 保存的數(shù)據(jù)是 8, 這樣就 可以達到保密的效果。試編一程序完成十六進制數(shù)的加密和解密程序。2.6 完成分別將兩個壓縮 BCD 數(shù)據(jù)和
22、非壓縮 BCD 數(shù)據(jù)相加的程序 ( 加 數(shù)和被加數(shù)及和小于 9999 ) 。2.7 完成兩個 32 位數(shù)的乘法程序。例: 01234567H*89ABCDEFH=9CA39DC94E4629H2.8利用串操作指令完成兩串數(shù)據(jù)的比較,結(jié)果用RESULT單元為00H 和 0FFH 表示相同或不相同。例: String1:ABC, String2:ABC 則 RESULT:00HString1:ABC, String2:ADC 則 RESULT:0FFH2.9 利用串操作指令統(tǒng)計以 "$" ( ASCII 碼為 24H ) 為結(jié)束的字符串中 字符的個數(shù)。例: String : S
23、T UDY$ 則 RESULT:52.10 按本實驗要求 , 自編一程序。實驗三 分支程序設(shè)計實驗目的 :掌握分支程序設(shè)計和調(diào)試方法二. 實驗要求 :分支程序的基本設(shè)計方法包括 :1 掌握利用條件轉(zhuǎn)移指令方法2 了解利用跳轉(zhuǎn)表方法3 了解利用邏輯尺方法三. 實驗儀器 :PC 機一臺四. 實驗內(nèi)容 :分支結(jié)構(gòu)是程序設(shè)計的基本結(jié)構(gòu),它們在執(zhí)行過程中,或直接更改或通過對 標志的判別,實現(xiàn)更改程序按順序執(zhí)行的次序,這些更改是通過對 IP (段 內(nèi))或 CS:IP (段間)的修改完成的,而實現(xiàn)對這些寄存器的修改是通過 無條件轉(zhuǎn)移和有條件轉(zhuǎn)移完成的。1 無條件轉(zhuǎn)移無條件轉(zhuǎn)移采用的是無條件轉(zhuǎn)移指令,即 JM
24、P 類指令,在 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 是段內(nèi) NEAR 型定義的標號JMP NEAR PTR TTTJMP CX ; 利用寄存器中內(nèi)容替換 IPJMP WORD PTR BX ; 利用內(nèi)存中某字單元內(nèi)容替換 IP 段間跳轉(zhuǎn) : JMP FAR PTR TTT ; TTT 是 FAR 型標號JMP DWORD
25、PTR BX ;利用內(nèi)存中雙字單元內(nèi)容替換 IP 和 CS嚴格地說 , SHORT 跳轉(zhuǎn)不是當前 JMP 指令的 ±127 字節(jié)之內(nèi),計 算機實際操作過程是將該指令讀入后的 IP ,即 JMP 當前地址加 2 后的 IP 與指令中八位的偏移量相加, 然后替換 IP ,所以,若以 JMP 指令的位置 為準的話,則是-126至+ 129之間。SHORT和NEAR型一般由匯編時自動 區(qū)分,應指出的是,條件轉(zhuǎn)移采用的都是 SHORT型,因此,當源和目的較 遠時(即超出SHORT范圍),應在較近的位置設(shè)置一條 JMP指令,以實 現(xiàn)不同位置的跳轉(zhuǎn)。2 條件轉(zhuǎn)移條件判別指令是條件轉(zhuǎn)移程序設(shè)計的基礎(chǔ)
26、,掌握指令如何對標志的 影響及如何利用條件轉(zhuǎn)移指令達到程序分支的目的。如前所述,條件轉(zhuǎn)移的跳轉(zhuǎn)距離都是 SHORT型。對跳轉(zhuǎn)的條件判別 根據(jù)判別的條件分兩類,一種是單條件的判別,另一種是復合條件的判別, 對單條件判別,主要對單一的標志位進行測試,如判 CF 標志,判 SF 標志 等,而復合條件則是對多標志位進行判別,其標志的影響一般是由數(shù)值運算 后決定的,如帶符號數(shù)大于等于的條件判別等。 盡管復合條件需多標志判別, 但在 8086指令助記符中與單條件轉(zhuǎn)移指令沒有區(qū)別。單條件判別指令如下 :1 JC 或 JNC 根據(jù)進位標志 CF 進行轉(zhuǎn)移2 JE/JZ 或 JNE/JNZ 根據(jù)零標志 ZF 進
27、行轉(zhuǎn)移3 JS 或 JNS 根據(jù)符號標志 SF 進行轉(zhuǎn)移4 JO 或 JNO 根據(jù)溢出標志 OF 進行轉(zhuǎn)移5 JP/JPE 或 JNP/JPO 根據(jù)奇偶標志 PF 進行轉(zhuǎn)移根據(jù)操作數(shù)的不同,分無符號數(shù)和帶符號數(shù)的判別,對無符號數(shù)有 A( 高于 ) B( 低于) ,帶符號數(shù)有 G( 大于 ) L( 小于 ) 等判別。為了方 便起見,其指令助記符對同一種條件可能有多種表示方法,如, JGE 與 JNL 的條件判別條件是相同的,使用者根據(jù)習慣和需要選取其中的一種表示。無符號數(shù)判別指令如下 :1 JA/JNBE 高于(不低于等于 )轉(zhuǎn)移2 JAE/JNB 高于等于 (不低于) 轉(zhuǎn)移3 JB/JNAE
28、低于(不高于等于 )轉(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è)計有條件轉(zhuǎn)移程序是分支程序主要部分, 這樣的分支程序是根據(jù)當前運算 的結(jié)果去判斷選擇不同的程序段執(zhí)行,反之,如果要求是根據(jù)不同的情況,完成不同的任務,則需要使用分支程序結(jié)構(gòu)來實現(xiàn)。如上述,程序的分支是 根據(jù)標志決定的,所以,如何影響標志及如何利用標志是分支程序的重點, 例如,判斷 AX 中內(nèi)容
29、是否是負數(shù),我們可用多種方法實現(xiàn):方法一 AND AX, AX ; 影響 SF 標志JS MINCE ; 為負數(shù)轉(zhuǎn)入負數(shù)處理方法二 CMP AX, 0 ; 影響 SF 標志JS MINCE ; 為負數(shù)轉(zhuǎn)入負數(shù)處理 方法三 TEST AX,8000H ; 影響 ZF 標志JNZ MINCE ; 為負數(shù)轉(zhuǎn)入負數(shù)處理 方法四 ADD AX,AX ; 影響 CF 標志JC MINCE ; 為負數(shù)轉(zhuǎn)入負數(shù)處理方法五 SHL AX,1 ; 影響 CF 標志JC MINCE ; 為負數(shù)轉(zhuǎn)入負數(shù)處理還可以舉出其它方法由上例可以看出,同樣的目的可用不同的方法去影響不同的標志, 采用不同的跳轉(zhuǎn)指令來實現(xiàn),顯然,要
30、編好分支程序,首先應掌握指令對標 志如何影響,這也是匯編程序設(shè)計的特點之一。本實驗中有輸入和顯示。以下列出簡單的字符輸入和顯示的程序,注意,它們 都是以ASCII碼方式體現(xiàn)的。1. 由鍵盤讀入字符的程序:MOV AH,01 ;功能號INT 21H ;系統(tǒng)調(diào)用讀入字符MOV INPUT_CHAR, AL ; AL為輸入的字符的 ASCII碼值2. 由屏幕顯示字符的程序:MOV AH,02H ;功能號MOV DL,# ; DL :顯示字符的ASCII碼INT 21H ;系統(tǒng)調(diào)用顯示字符四. 實驗內(nèi)容:例:設(shè)計一數(shù)據(jù)塊間的搬移程序。設(shè)計思想:程序要求把內(nèi)存中一數(shù)據(jù)區(qū)(稱為源數(shù)據(jù)塊)傳送到另一存儲區(qū)(
31、成為目的數(shù)據(jù)塊)。源數(shù)據(jù)塊和目的數(shù)據(jù)塊在存儲中可能有三種情況,如圖所示0HOHOH館數(shù)據(jù)塊目的數(shù)播塊FFFFFH(a)(b)FFFFFH口的數(shù)揺塊FFFFFH源數(shù)據(jù)塊 llrj對于兩個數(shù)據(jù)塊分離的情況,如圖1-4-1( a),數(shù)據(jù)的傳送從數(shù)據(jù)塊的首地址開始,或從數(shù)據(jù)塊的末地址開始均可。但是對于有重疊的情況,則要加以分析,否則重疊部分會因“搬移”而遭到破壞,可有如下結(jié)論:當源數(shù)據(jù)塊首地址v目的塊首地址時,從數(shù)據(jù)塊末地址開始傳送數(shù)據(jù),如圖1-4-1 (b)所示。當源數(shù)據(jù)塊首地址目的塊首地址時,從數(shù)據(jù)塊首地址開始傳送數(shù)據(jù),如圖1-4-1 (c)所示。實驗程序流程圖如圖所示開始源教搦塊首地址£
32、;1 源教據(jù)塊首地址-SI 搬樣字節(jié)數(shù)-exSI >!?Dl-何SISI+CX-1DIDI+CX-1DI-(SI)SISI 卜 1DIDI 卜 1CX-CX-1CX>07CX-CX-1C X -0 .實驗程序清單SSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV CX, 0010HMOV SI, 3100HMOV DI, 3200HCMP SI, DIJA A2ADD SI, CXADD DI, CXDEC SIDEC DIA1: MOV AL, SIMOV DI, ALDE
33、C SIDEC DIDEC CXJNE A1JMP A3A2: MOV AL, SIMOV DI, ALINC SIINC DIDEC CXJNE A2A3: JMP A3CODE ENDSEND START練習: 3.1 將一個字節(jié)的十六進制數(shù)轉(zhuǎn)換成對應的ASCII 碼。例:3EH F33H(3),4EH('E')3.2編寫可接受10個鍵盤命令(),完成分別轉(zhuǎn)向P1,P2,.P10的程 序。P1,P2,.P10 程序用 P1,P2,.P10 顯示表示。3.3 將 10 個十六位帶符號數(shù)中正數(shù)相加。例:3543H,5943H,-3578H,-3432H,4523H,3323H,
34、-5634H,54EFH,-5423H,7 230H則 1CDEBH3.4 利用邏輯尺方法完成 16 個無符號數(shù) ( WORD ) 中第 1,3,6,8,10,11,14 個數(shù)的相加。例: 0FE4H ,4320H ,9564H ,4575H ,0E47AH ,8643H ,5686H ,4542H3B4CH ,3223H,7856H ,5435H ,5432H,0A586H ,5456H,6673H則 2C0CCH3.5 編寫在一串數(shù)據(jù)中統(tǒng)計正數(shù),負數(shù)和零的個數(shù)并加以顯示。例: 34H,-3BH ,-5AH ,72H,0,-2DH,0,66H則正數(shù): 3,負數(shù): 3,零: 23.6 統(tǒng)計某十
35、六位數(shù)中 "1" 的個數(shù)并加以顯示。例: 則 83.7 一種數(shù)值濾波的方法是將相鄰的兩數(shù)求平均值,試編程序?qū)崿F(xiàn)。3.8 將字符串 1 插入字符串 2 的中間, 其位置由鍵盤輸入。3.9 在一已排序的數(shù)組中插入新的數(shù)據(jù),插入新數(shù)據(jù)后的數(shù)組仍滿足排序 要求。3.10 編寫一串在帶符號數(shù)中找出最大數(shù)和最小數(shù)的程序。例: 35H,32H,73H,10H ,08H,0FH,2AH,3BH 則:最大數(shù) 73H 最小數(shù) 08H3.11 在一組數(shù)據(jù)中根據(jù)最高兩位 ( D7D6 ) 分別將對應的數(shù)據(jù)位相加, 結(jié)果加以顯示。例 D7D6 D5D4D3D2D1D0信息位 數(shù)據(jù)位3.12 統(tǒng)計一組
36、數(shù)據(jù) ( BYTE ) 中 D3D2D1 位相同的個數(shù)并加以顯示。3.13 編寫一程序完成無符號數(shù)的排序程序 (由大到小 )例:34H , 67H, 0E2H ,0A7H , 89H ,73H ,51H , 43H0E2H ,0A7H,89H,73H,67H,51H,43H,34H3.14 自編題實驗四 循環(huán)程序設(shè)計一. 實驗目的 :掌握循環(huán)程序的設(shè)計和調(diào)試方法二. 實驗要求 :掌握循環(huán)程序的基本結(jié)構(gòu)及設(shè)計方法 , 包括 :A 循環(huán)程序的循環(huán)初始化、循環(huán)體及循環(huán)控制條件B 多種循環(huán)控制條件C 循環(huán)體中的指針變化了解多重循環(huán)程序的設(shè)計方法三. 實驗儀器 :PC 機一臺四. 實驗內(nèi)容 :例: 計算
37、 9 之內(nèi)的階乘流程圖:程序清單:練習: 4.1 編寫在一串數(shù)據(jù)中統(tǒng)計正數(shù) , 負數(shù)和零的個數(shù)并加以顯示。例 : 34H,-3BH,-5AH,72H,0,-2DH,0,66H則正數(shù) :3, 負數(shù):3, 零:24.2 統(tǒng)計某十六位數(shù)中 "1" 的個數(shù)并加以顯示。例 : 則 84.3 一種數(shù)值濾波的方法是將相鄰的兩數(shù)求平均值 , 試編程序?qū)崿F(xiàn)。4.4 將字符串 1 插入字符串 2 的中間 , 其位置由鍵盤輸入。4.5 在一已排序的數(shù)組中插入新的數(shù)據(jù) , 插入新數(shù)據(jù)后的數(shù)組仍滿足排序要 求。4.6 編寫一串在帶符號數(shù)中找出最大數(shù)和最小數(shù)的程序。例: 35H,32H,73H,10H
38、,08H,0FH,2AH,3BH 則:最大數(shù) 73H 最小數(shù) 08H4.7 在一組數(shù)據(jù)中根據(jù)最高兩位 ( D7D6 ) 分別將對應的數(shù)據(jù)位相加 , 結(jié)果 加以顯示。例 D7D6 D5D4D3D2D1D0信息位 數(shù) 據(jù) 位4.8 統(tǒng)計一組數(shù)據(jù) ( BYTE ) 中 D3D2D1 位相同的個數(shù)并加以顯示。4.9 編寫一程序完成無符號數(shù)的排序程序 (由大到小 )。例 : 34H,67H,0E2H,0A7H,89H,73H,51H,43H0E2H,0A7H,89H,73H,67H,51H,43H,34H4.10 自編題實驗五 簡單 DOS 和 BIOS 調(diào)用匯編程序設(shè)計一. 實驗目的 :掌握簡單 DO
39、S 系統(tǒng)功能和 BIOS 的調(diào)用方法二. 實驗要求 :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)用方法三. 實驗儀器 :PC 機一臺四. 實驗內(nèi)容 :BIOS 和 DOS 是兩組系統(tǒng)服務軟件集合, 它們使用戶能夠訪問和使用 PC 機的硬件,也可以這么說, 對一個匯編程序編程者來說, 如果要使用 PC 機 硬件的話,一般是采用 BIOS 和 DOS 調(diào)用來實現(xiàn)。在使用 MS-DOS 的 PC 機上使用硬
40、件的基本方法有以下三種:直接訪問硬件使用 PC 機硬件資源最直接的方法是通過編寫使用 IN 和 OUT 指令程序來實現(xiàn), 編寫直接訪問硬件的程序需要編程者對所使用硬件的控制 非常熟悉,包括口地址,控制命令,硬件結(jié)構(gòu)等,這些,對一般的編程者來 說,要掌握是有一定難度的,同樣,即使是編程者掌握了必要的硬件知識, 但由于直接訪問所要考慮的因素較多,也會使編寫的程序相當繁雜,增加了 調(diào)試程序的困難,另一方面,編程者按自己的要求設(shè)置硬件的工作方式,有 可能會影響整個系統(tǒng)的運行,另外,采用直接訪問硬件的編程方法編制的程 序,其可移植性相當差,在一個機器上運行的程序,換到另外一個廠家生產(chǎn) 的機器上有可能無法
41、運行,因此,如果不是為了獲得更高的執(zhí)行效率和獲得 DOS 和 BIOS 不支持的功能,程序員應避免采用該方法。使用 BIOS 調(diào)用BIOS 稱為基本輸入輸出系統(tǒng),由 DOS-BIOS 和 ROM-BIOS 兩 部分組成,它是計算機硬件和其它程序之間的第一道緩沖。 BIOS 直接和外 設(shè)通訊,完成設(shè)備一級的控制,并附有其它的實用服務功能,它為編程者提 供了一個簡單的軟件接口以避免和外設(shè)直接打交道,這樣,可以降低編程者 對硬件要求的了解程度, 簡化使用 PC 機硬件資源的程序,而 BIOS 是 PC 機的標準軟件接口,具有兼容性,提高了編制程序的可移植性。采用 BIOS 功能調(diào)用主要是為了得到較高
42、的運行效率(與 DOS 功 能調(diào)用相比),或者需要利用 DOS不具備的某些功能.。BIOS調(diào)用最常 見的是在顯示器的控制程序中,不同的顯示器會增加相應的 BIOS 功能。使用 DOS 調(diào)用DOS 在更高層次上給出了與 BIOS 相同的功能, 一般說來, DOS 調(diào)用需要的入口,出口參數(shù)較 BIOS 簡單,調(diào)用也容易,方便,不需要編 程者對硬件有更多的了解, 通過調(diào)用 DOS ,還可以充分利用操作系統(tǒng)提供 的所有功能,編制的程序可移植性也較高。與 BIOS 相比, DOS 完成的功 能沒有其豐富,即對于某些特殊的要求, DOS 調(diào)用也許不能實現(xiàn),此外, DOS 調(diào)用的執(zhí)行效率也比 BIOS 低。
43、應該使用哪種方法選擇哪種方式應根據(jù)不同的需要來選擇,首先必須是以完成任務為 目的,一般按 DOS , BIOS 到硬件直接控制的順序選擇,另外,好的編程 者還要根據(jù)程序應用的場合,權(quán)衡程序的可移植性,編程的復雜性和目標代 碼長短等因素選擇相應的方式。此外 ,在選擇 DOS 調(diào)用時,因注意操作系統(tǒng)的版本,一般的高版本 的操作系統(tǒng)兼容低版本。DOS 功能調(diào)用的一般步驟為 :1. 如有必要 ,裝入入口參數(shù)到規(guī)定的寄存器 ;2. 裝入功能號到 AH 中 ;如有必要 ,裝入子功能號到 AL 中;3. 調(diào)用 DOS 相應功能的中斷 ( 這里一般指 INT 21H );4. 如有必要 ,取出返回結(jié)果或出錯信
44、息例 1 :利用 Dos 系統(tǒng)功能調(diào)用將輸入的小寫字母轉(zhuǎn)換成大寫輸出如:鍵盤輸入 abcdef 在屏幕上換行輸出 ABCDEF程序清單:例2:編寫實驗程序,利用BIOS調(diào)用在顯示器上的輸出窗口顯示 AZ共26個大寫英文字母。顯示 I/O 功能調(diào)用使用說明如下:INT 10 使用說明入口:AH = OOH , AL = 01H功能:清屏入口:AH = 01H , AL =數(shù)據(jù)功能:寫AL中的數(shù)據(jù)到顯示屏上入口:AH = 06H , DS:BX =字串首地址,且字符串尾用 00H 填充功能:顯示一字串,直到遇到 OOH 為止實驗程序清單 :SSTACK SEGMENT STACKDW 64 DUP
45、(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODESTART: MOV CX,001AHMOV BL,41H ; A' 的ASCII 碼值MOV AH,01HA1: MOV AL,BLINT 10H ;功能調(diào)用INC BLPUSH CXMOV CX,0FFFFHA2: LOOP A2POP CXDEC CXJNZ A1A3: JMP A3CODE ENDSEND START練習:相加后在屏幕上顯示。輸入自己姓名后顯示5.1 在鍵盤上輸入十個一位的十進制數(shù) , 參考系統(tǒng)調(diào)用 :A 鍵盤輸入并回顯 INT 21H 功能 01H B 顯示輸出 INT 21
46、H 功能 02H5.2 在屏幕上顯示 "What is your name ?" My name is XXX "。參考系統(tǒng)調(diào)用 :A 顯示字符串 INT 21H 功能 09HB 鍵盤輸入到緩沖區(qū) INT 21H 功能 0AH5.3 在屏幕上顯示 ASCII 字母表。5.4 將當前鍵盤狀態(tài)在屏幕上顯示 , 用 ON/OFF 表示。 參考系統(tǒng)調(diào)用 :A 讀當前鍵盤狀態(tài) INT 16H 功能 02H入口參數(shù) : 無出口參數(shù) : AL : 當前狀態(tài)7 6 5 4 3 2 1 01 RIGHT SHIFT 鍵按下 1 . LIFT SHIFT鍵按下1 . . CTRL鍵按
47、下. . . . 1 . . . ALT鍵按下. . . 1 . . . . SCROLL LOCK鍵按下. . 1 NUM LOCK鍵按下. 1 CAPS LOCK 鍵按下1 INS 鍵觸發(fā)5.5 在屏幕上顯示系統(tǒng)日期和時間 , 用英文表示星期幾。 參考系統(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)時間 INT 21H 功能 2CH ( 置系統(tǒng)時間 20H )入口參數(shù)
48、AH= 2CH出口參數(shù) CH= 小時 ( 0 23 )CL= 分 ( 0 59 )DH= 秒 ( 0 59 )DL= 百分秒 ( 0 99 )等待要5.6 在鍵盤上輸入等待時間 ( 毫秒) 后,屏幕上顯示 " BEGIN .", 求的時間后 , 再顯示 " END " 。參考系統(tǒng)調(diào)用 :A 標準時間等待 ( AT 以上機器 ) INT 15H 功能 86H入口參數(shù) AH= 86HCX:DX = 等待的微秒數(shù)5.7顯示當前MS-DOS版本(V5.0 )。參考系統(tǒng)調(diào)用 :A取MS-DOS版本號,次版本號和版本標志INT 21H 功能 33H 子功能 06H入
49、口參數(shù) AH= 33HAL= 06H出口參數(shù) BL= 版本號BH= 次版本號DH= 版本標志5.8 在屏幕上循環(huán)顯示 ASCII 符號表 ( 由 21H 開始到 0FFH ), 直到鍵入 回車鍵結(jié)束。5.9 自編題。實驗六 子程序和宏匯編的程序設(shè)計 實驗目的 :1. 掌握子程序設(shè)計和調(diào)試方法2. 掌握多模塊匯編程序設(shè)計方法3. 掌握宏匯編的程序設(shè)計方法實驗要求 :1. 掌握子程序設(shè)計方法 , 包括:A 子程序間參數(shù)簡單傳遞方法B 利用堆棧傳遞方法C 子程序的遞歸2. 掌握多模塊匯編程序的設(shè)計、調(diào)試,包括A PUBLIC 和 EXTRN 偽指令的使用方法B 多模塊的鏈接3. 掌握宏匯編的程序設(shè)計
50、方法三. 實驗儀器 :PC 機一臺四. 實驗內(nèi)容 :例:求無符號字節(jié)序列中的最大值和最小值設(shè)有一字節(jié)序列,其存儲首地址為3000H,字節(jié)數(shù)為08H。利用子程序的方法編程求出該序列中的最大值和最小值。程序流程圖如圖 1-7所示數(shù)據(jù)區(qū)怦地址TI"列個數(shù)cx實驗程序清單SSTACK SEGMENT STACKDW 64 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODESTART: MOV AX, 0000HMOV DS, AXMOV SI, 3000H ; 數(shù)據(jù)區(qū)首址MOV CX, 0008HCALL BRANCH ; 調(diào)用子程序HERE: JMP H
51、EREBRANCH PROC NEAR ; 子程序,返回參數(shù)在 AX 中JCXZ A4PUSH SIPUSH CXPUSH BXMOV BH, SIMOV BL, BHCLDA1: LODSBCMP AL, BHJBE A2MOV BH, ALJMP A3A2: CMP AL, BLJAE A3MOV BL, ALA3: LOOP A1MOV AX, BXPOP BXPOP CXPOP SIA4: RETBRANCH ENDPCODE ENDSEND START練習:6.1 將一串 ASCII 碼中小寫英文字母轉(zhuǎn)換成大寫 , 該串以 "$" 結(jié)束 ,要求判別和轉(zhuǎn)換用 子程序
52、實現(xiàn)。6.2 將一串十六進制數(shù)轉(zhuǎn)換成對應的 ASCII 碼 , 其中轉(zhuǎn)換過程用子程序?qū)崿F(xiàn)。6.3 將 DISPLAY 單元 ( WORD ) 中的數(shù)據(jù)用二進制的方式顯示 , 其中子程序完成將 AX 中數(shù)據(jù)顯示的功能。6.4 主程序讀入一串字符后 , 利用堆棧方式將該字符串的段址 ,偏移及串長傳給子程序 , 在子程序中加以顯示 , 返回主程序后顯示 'OK' 。6.5 利用堆棧方法實現(xiàn) N! 的計算。6.6 A 模塊中有兩組無符號數(shù) , B 模塊是加法程序 , 在 A 模塊中兩次調(diào)用 B 模塊實現(xiàn) 加法。其參數(shù)用 PUBLIC 和 EXTRN 方式進行傳遞。6.7 利用數(shù)據(jù)段以 COMMAND 方式完成第 6 題的要求。3 位, A2 右移數(shù)據(jù)由鍵盤輸入6.8 編寫一可實現(xiàn)左右移多位的宏定義 ,并利用該宏定義實現(xiàn) A1 左移5 位的程序。同時 , 利用顯示子程序?qū)⒁莆磺昂蟮臄?shù)據(jù)加以顯示。6.9 編寫用查表法求 1 15 平方的程序 , 其中平方表用宏定義實現(xiàn)。( 00 推出 ) 結(jié)果在屏幕上顯示。6.10 自編題。第二章 80X86 微機接口技術(shù)實驗實驗一 8255實驗二 8253S1R1實驗三8259中斷控制實驗實驗目的1. 掌握8259中斷控制器
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年心靈指導服務合同
- 2026年職業(yè)公益活動企劃合同
- 2026年危險廢物污染易發(fā)區(qū)保護保險合同中
- 等級保護測評合同
- 2025年農(nóng)業(yè)科技創(chuàng)新與合作項目可行性研究報告
- 2025年風能發(fā)電與儲能結(jié)合項目可行性研究報告
- 2025年智能音樂教育APP開發(fā)項目可行性研究報告
- 生豬搬運合同范本
- 海外代理協(xié)議合同
- 紅酒展會合同范本
- 課程設(shè)計傳動裝置輸入軸組合結(jié)構(gòu)設(shè)計說明書
- 《資本論》第一卷第六篇“工資”
- 中國近現(xiàn)代史綱要知到章節(jié)答案智慧樹2023年湖南城市學院
- 鋼管表面積計算表
- 木工培訓考試及答案
- (中職)Photoshop基礎(chǔ)實用教程全冊教案2022-2023學年
- 項目經(jīng)理答辯題庫題
- 抗菌藥物使用分級授權(quán)表
- GB/T 7441-2008汽輪機及被驅(qū)動機械發(fā)出的空間噪聲的測量
- 衰弱量表(FARIL)及預防措施
- 浙江省金華市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
評論
0/150
提交評論