匯編語言實(shí)驗(yàn)講義(08319)教材_第1頁
匯編語言實(shí)驗(yàn)講義(08319)教材_第2頁
匯編語言實(shí)驗(yàn)講義(08319)教材_第3頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第一章 匯編語言程序上機(jī)實(shí)驗(yàn)快覽1.1 匯編語言程序上機(jī)應(yīng)具備的工具軟件匯編語言程序上機(jī)操作,必須經(jīng)過文件的“建立 匯編 連接執(zhí)行”四個(gè)階段。因 此,系統(tǒng)磁盤上還應(yīng)具備下列工具軟件:1. 全屏幕編輯程序。用以將程序鍵入內(nèi)存,經(jīng)編輯生成源文件( .ASM )存盤。常 用的編輯程序有 EDIT.EXE ,SK.EXE , Word97。2. 宏匯編程序,如 MS 的 MASM.EXE ,用以將源文件( .ASM )匯編生成二進(jìn)制代 碼的目標(biāo)文件( .OBJ)、列表文件( .LST )、及符號交叉引用表文件( .CRF)。3. 連接程序 LINK.EXE 。用以將目標(biāo)文件( .OBJ)與欲使用的庫文

2、件( .LIB )及其 它目標(biāo)模塊,連接裝配生成一個(gè)可執(zhí)行文件( .EXE )、及各段空間分配的列表文 件( .MAP )。4. 調(diào)試程序 DEBUG .COM 。用以對 .EXE 或.COM 文件進(jìn)行調(diào)試,排錯(cuò)。 值得指出的是,人工輸入的現(xiàn)成程序,或自編程序,難免不出現(xiàn)鍵入錯(cuò)誤,疏漏錯(cuò)誤, 語法錯(cuò)誤及邏輯錯(cuò)誤。雖然在靜態(tài)自查及匯編階段均可被查出,但程序內(nèi)在的邏輯功 能性錯(cuò)誤,還必須借助調(diào)試工具,在監(jiān)測環(huán)境下動(dòng)態(tài)運(yùn)行程序時(shí)才能表露出來。因此 程序調(diào)試這一環(huán)節(jié)必不可少。1.2 匯編語言程序上機(jī)過程現(xiàn)用如下流程圖簡明地表述匯編語言程序上機(jī)操作的四個(gè)階段。注意第 2章起的所有實(shí)驗(yàn)程序均須按此流程進(jìn)行

3、操作。圖中用的是 EDIT 編輯程序。附錄 2給出了匯編出錯(cuò)信息,供 排錯(cuò)時(shí)參考。屏幕顯示 DB 00001000b,00000011b,00000100b,00000111b,00000001bDB 00000110b,00001111b,00000000b,00000010b,00000101b界面命令提示符C: >E:E:> CD Masm1E: Masm1>masm ) 文 件 名 . asm (將源文件轉(zhuǎn)換成用二)進(jìn)制代碼表示 的目標(biāo)文件)屏幕顯示ne文件名 .OBJ: (在當(dāng)前盤上生成以 OBJ為擴(kuò)展名的目標(biāo)文 件,此文件一定要。若在其它盤上還應(yīng)指明盤符及路徑。

4、) Source listingKUL .LST : (生成以 LST為擴(kuò)展名的列表 文件, 此文件可有可無, 若需要?jiǎng)t輸入文件名和回車, 不需要?jiǎng)t輸 入回車)Cross reference NUL .CRF: (生成以 CRF 為擴(kuò)展名的 交叉符號表, 此文件可有可無, 若需要?jiǎng)t輸入文名和回車, 不需要 則輸入回車)屏幕顯示有錯(cuò)誤0 Warning Severs(警告性錯(cuò)誤)0 Errers Errore (語法性錯(cuò)誤)無錯(cuò)誤E:masm1 LINK 文件名 (將 OBJ 文件轉(zhuǎn)換成可執(zhí)行的 EXE 文件)屏幕顯示Run File文件名 .exe:(生成以 EXE為擴(kuò)展名的執(zhí)行文件) Lis

5、t File NUL .MAP :(生成以 MAP 為擴(kuò)展名的列表分配文件。 不用,則輸入回車)Libaries .LIB :(當(dāng)用戶用到函數(shù)庫時(shí),則需輸入庫函數(shù)名,沒有 則鍵入回車即可)E:masm1 文件名 (運(yùn)行執(zhí)行程序)不正確運(yùn)行結(jié)果正確嗎?正確結(jié)束圖匯編語言程序上機(jī)過程流程圖1.3 調(diào)試程序( Debug )功能簡介Debug 是 DOS操作系統(tǒng)支持的一種系統(tǒng)軟件,是MS公司獻(xiàn)給用戶的一個(gè)通用軟件工具,主要用于 8088 8086匯編語言程序的調(diào)試。它不僅為用戶和系統(tǒng)管理員提供了一個(gè)可控制的程序調(diào)試與開發(fā)環(huán)境,以便動(dòng)態(tài)地監(jiān)視管理被調(diào)試程序的執(zhí)行,幫助人們查出程 序在邏輯功能上的深層次

6、錯(cuò)誤和不完善地方,驗(yàn)證程序的正確性。還為我們提供了 一個(gè)觀察研究窗口,為分析、解剖、開發(fā)程序提供了有力的實(shí)驗(yàn)手段。因此,熟練 地掌握 Debug 的使用很必要也很重要。介紹 18個(gè) Debug子命令的功能、使用格式,供選用時(shí)參考。子命令中用到的參數(shù)說明如下:1. 地址。有三種表示格式( 其值由14個(gè)HEX 字符組成 ) 。(1)段寄存器名 : 偏移值 如 CS:0100(2)段值 : 偏移值如 0B 39:0100(3)偏移值 如 01003. 盤號。指磁盤驅(qū)動(dòng)器代號。 4.約定 : A驅(qū)為 0,B驅(qū)為1,C驅(qū)為 2地址范圍。有兩種格式(1)始地址 末地址 ( 只寫偏移值 )(2)始地址 L

7、字節(jié)數(shù)文件標(biāo)識符。由驅(qū)動(dòng)器名文件名和擴(kuò)展名組成 . 如A: MYSORT.EXE。5. 字節(jié)或字節(jié)串。字節(jié)指字節(jié)數(shù)據(jù)即1-2 個(gè)HEX 字符。字節(jié)串指由單引號或雙引號括住的一串ASCII 字符 ( 如“ SORT) 或用空格間開的一組字節(jié)數(shù)據(jù)。命令格式A( 地址 )C( 源地址范圍 )( 目標(biāo)起始地址 ) D( 地址 ) 或 D( 地址范圍 ) E(地址 )( 字節(jié)串 )F( 地址 )( 字節(jié)串 )G=( 始地址 )( 斷點(diǎn)地址 ) H( 數(shù)值 1)( 數(shù)值 2)I( 端口號 )L( 地址 )( 盤號 )( 開始扇區(qū)號 )( 扇區(qū)數(shù) )M( 源地址范圍 )( 目標(biāo)起始地址 ) N( 文件標(biāo)識符

8、 )( 文件標(biāo)識符 ) O(端口號 )( 字節(jié) )QR( 寄存器名 )S( 地址范圍 )( 要查找的字節(jié)或字節(jié)串)T=( 地址 )( 指令條數(shù) )U( 地址 ) 或 U( 地址范圍 )W( 地址 )( 盤號 )( 開始扇區(qū)號 )( 扇區(qū)數(shù) )子命令及其功能Assemble 對指令語句進(jìn)行匯編Compare 比較內(nèi)存兩區(qū)的內(nèi)容Dump 顯示指定內(nèi)存區(qū)內(nèi)容Enter 顯示和修改指定存儲單元內(nèi)容Fill 向指定內(nèi)存區(qū)填入數(shù)值或字符代碼Go 運(yùn)行正在調(diào)試的程序或一段程序 Hexarithmetio 十六進(jìn)制數(shù)加與減運(yùn)算 Input 從指定 I O端口輸入顯示一個(gè)字節(jié) Load 從磁盤裝入一個(gè)文件或若干

9、扇區(qū)數(shù)據(jù)Move 在指定的存儲區(qū)之間傳送內(nèi)存塊Name 定義待讀入或?qū)懗龅奈募蛥⒘縊utput 向指定的輸出端口輸出一個(gè)字節(jié)Quit退出 Debug 返回 DOSRegister 顯示修改寄存器和標(biāo)志位當(dāng)前內(nèi)容Seareh 在指定內(nèi)存 區(qū)查找 字節(jié)或字節(jié)串Trace 從指定地址處開始執(zhí)行單條或多條指令Uasemble 對指令代碼反匯編Write 把指定內(nèi)存區(qū)內(nèi)容寫入盤文件或扇區(qū)第 2 章 匯編語言程序設(shè)計(jì)實(shí)驗(yàn)2.1 DEBUG 使用方法一、實(shí)驗(yàn)?zāi)康?. 熟悉 DEBUG 提供的調(diào)試環(huán)境。2. 學(xué)習(xí)使用 Debug 的常用命令,匯編、運(yùn)行小段程序。3. 學(xué)習(xí) 8088/8086 的尋址方式、

10、指令功能。觀察計(jì)算機(jī)執(zhí)行簡單程序的工作過程。二、實(shí)驗(yàn)內(nèi)容與操作指導(dǎo)Debug 子命令的功能與使用格式見上章的列表介紹。 下面通過 8 個(gè)程序小段實(shí)例,學(xué) 習(xí)其用法。(一) 由 DOS 進(jìn)入 DEBUG 調(diào)試環(huán)境1. 點(diǎn)擊 ”開始”程序附件 命令提示符 DEBUG將調(diào)試程序裝入內(nèi)存注意:當(dāng)機(jī)器控制權(quán)由 DOS 成功地轉(zhuǎn)移給調(diào)試程序后,將顯示“”號,它是debug 的狀態(tài)提示符,表示可以接受調(diào)試子命令了。2. R 顯示 CPU中各寄存器當(dāng)前初始內(nèi)容。請記錄于下列各項(xiàng), 后面實(shí)驗(yàn)將用到。AX= BX= CX= DX=BP= SI= DI=OFDFIFSFZFAFPFCFNVUPEIPLNZNAPON

11、CDS= ES= SS= SP=CS= IP=FLAG 寄存器中的 8 個(gè)標(biāo)志位狀態(tài)值(已填入,其含義見下頁的介紹)是:說明:1)此時(shí),調(diào)試工作區(qū)的 4 個(gè)段值相同,指向同一起點(diǎn)。表明共用一個(gè) 64KB 空間。2)SS: SP指向堆棧頂單元。 SP為 FFFE 或 FFEE,正好是本段的最高可用地址。 表明堆棧自動(dòng)使用最高地址,棧區(qū)由底往上(低址方向)生長。3)CS:IP 為約定的調(diào)試工作區(qū)地點(diǎn)( IP=0100),可由此裝入待調(diào)試程序代碼,或 匯編鍵入的程序小段。工作區(qū)由(低址)往下使用。4)Debug 用符號給出寄存器中 8 個(gè)標(biāo)志位的當(dāng)前狀態(tài)。其含義如下表所示。5)當(dāng)運(yùn)行程序至斷點(diǎn)處停下

12、時(shí),或單步多步跟蹤執(zhí)行指令時(shí), Debug 均顯示各寄 存器的當(dāng)時(shí)內(nèi)容,便于及時(shí)觀察結(jié)果。標(biāo)志位含義“1”的對應(yīng)符號“0”的對應(yīng)符號OF 溢出OV 有NV 無DF 方向DN 遞減UP 遞增IF 中斷EI 允許DI 禁止SF 符號NG 負(fù)PL 正ZF 全零ZR 零NZ 非零AF 輔助進(jìn)位AC 有NA 無PF 奇偶性PE 偶PO 奇CF 進(jìn)位CY 有NC 無二)匯編運(yùn)行小段程序1.1 求和運(yùn)算給程序 1.1 人工直接給寄存器賦初值(1) 給 AX 、BX 賦值RAXAX顯示 AX 當(dāng)前內(nèi)容:FDAA鍵入被加數(shù)RBXBX顯示 BX 當(dāng)前內(nèi)容:FBCE鍵入加數(shù)(2) 匯編小段程序。注意:每行指令后用回

13、車結(jié)束,機(jī)器即進(jìn)行匯編,出錯(cuò)將有提示。調(diào) 試狀態(tài)下操作數(shù)的輸入和顯示均為 HEX 十六進(jìn)制,故不必加后綴 H 。 ACS : 1000100ADDAX ,BX;求和0102MOVCX,AX;轉(zhuǎn)存和數(shù)0104INT20;結(jié)束程序(軟中斷調(diào)用)0106;結(jié)束匯編 R 查看各寄存器內(nèi)容。因程序尚未運(yùn)行,故無運(yùn)算結(jié)果。(3) 單步跟蹤執(zhí)行程序。注意觀看有關(guān)寄存器內(nèi)容及各標(biāo)志位值的變化。t從當(dāng)前地址( CS: 0100)處執(zhí)行加法指令。記錄有關(guān)結(jié)果。分析兩步結(jié)果,解釋內(nèi)容變化或不變化的原因。(4) 結(jié)束程序,返回 Debug”,20HG 執(zhí)行軟中斷指令 INT 20 ,機(jī)器將顯示 “程序正常終止” 的信

14、息。并顯示 表明仍處在 debug 的調(diào)控控制狀態(tài)下。注意這里未用 t 命令,因?yàn)槲覀儾幌脒M(jìn)入到 中斷處理程序中去。程序 1.2 讓機(jī)器通過指令給寄存器送立即數(shù)(1) 匯編小段程序ACS : 1060106MOVAX ,1234;被加數(shù)0109MOVBX ,2345;加數(shù)010CMOVCX,0;清 0010FADDAX ,BX;求和0111MOVCX,AX;轉(zhuǎn)存結(jié)果:0113 INT 20 ;結(jié)束程序:0115 ;結(jié)束匯編(2) 運(yùn)行程序。注意:必須先修改指令指針I(yè)P,使其指向本程序的首條指令。然后才能執(zhí)行程序。當(dāng)然也可在 t 或 G 命令中指出程序起點(diǎn)地址。RIPIP 0100顯示當(dāng)前值:

15、0106指向本程序入口 R顯示各寄存器當(dāng)前內(nèi)容及首條指令 T3跟蹤執(zhí)行三條賦值傳送指令,看有關(guān)寄存器及標(biāo)志值 T2跟蹤執(zhí)行相加及送和數(shù)指令,看有關(guān)寄存器及標(biāo)志值 G執(zhí)行 20H 號中斷,結(jié)束程序程序 1.3 采用直接尋址方式從內(nèi)存區(qū)讀寫數(shù)據(jù)( 1 )匯編程序ACS : 116:0116MOVAX , 0125:0119MOVBX , 0127:011DADDBX , AX:011FMOV0129 ,BX:0123INT20:0125DW2222:0127DW8888:0129DW0;和單元:012B注意:由于當(dāng)前 DS=CS ,故直接尋址從內(nèi)存取存的數(shù)據(jù),可與指令代碼接在一起。 A命令能匯編處

16、理 DB及DW 兩條偽指令定義的變量數(shù)據(jù), 但不得用變量符號。(2) 設(shè)置斷點(diǎn)(觀察點(diǎn))分段運(yùn)行程序 G=CS : 116 11D;從指定入口運(yùn)行程序,至斷點(diǎn) 11D 停。可見了;兩個(gè)數(shù)已取至 AX,BX ,但還沒有求和。 G123;從上一斷點(diǎn)運(yùn)行至新斷點(diǎn)停。 已完成求和并存入指定結(jié)果單元。 G;結(jié)束程序。(3) 用兩種方式觀看內(nèi)存內(nèi)容 DCS: 116 12B顯示本程序小段目標(biāo)代碼和數(shù)據(jù)單元內(nèi)容 UCS: 116 123反匯編指定范圍的內(nèi)存區(qū)內(nèi)容。機(jī)器碼程序0AF5 :0116 A12501MOV AX , 01250AF5 :0119 8B1E2701MOV BX , 01270AF5 :

17、011D 01C3ADD BX , AX0AF5 :011F 891E2901MOV 0129 ,BX0AF5 :0123 CD20INT 202.求 n*10 的運(yùn)算程序 1.4 用移位指令實(shí)現(xiàn)乘法運(yùn)算還可更改 n 值,重新運(yùn)行程序。(1)匯編小段程序 ACS: 0130:0130MOVAL , 08;設(shè) n=08h:0132SHLAL , 1;得 AL=10h:0134MOVBL ,AL:0136MOVCL,2:0138SHLAL , CL;得 AL=40h:013AADDAL , BL;得 AL=50h:013CINT20:013E(2) 運(yùn)行程序。可用單步跟蹤,多步跟蹤,設(shè)斷點(diǎn)或連續(xù)運(yùn)

18、行等方式來監(jiān)控程序的執(zhí)行。程序1.5 用乘法指令運(yùn)算且顯示結(jié)果ACS: 140:0140MOVAL ,06;設(shè) n=06h:1042MOVCL ,0A:0144MULCL;06h*0Ah:0146MOVDL ,AL:0148MOVAH ,02;用 2 號功能調(diào)用顯示結(jié)果:014AINT21:014CINT20:014E運(yùn)行程序。 請注意觀看結(jié)果數(shù)據(jù)如何求出及表示的。3. 向指定內(nèi)存區(qū)置數(shù)(程序1.6)(1)匯編小段程序。ACS:150:0150MOVAX , 1000;置數(shù)據(jù)段值:0153MOVDS,AX:0155MOVAL , 42B'=42h:0157MOVSI,0;置偏移地址初值

19、:015AMOVSI , AL;填寫字符 B:015CINCSI;指向下一單元:015DCMPSI,10;已填完嗎?:0160JNZ015A;否,繼續(xù)循環(huán):0162INT20;是,結(jié)束程序(2)運(yùn)行程序。注意:這是循環(huán)程序。由此較指令和條件轉(zhuǎn)移指令控制循環(huán)。到底 循環(huán)了多少次呢?請先用 D 命令觀看待置數(shù)內(nèi)存區(qū)的原內(nèi)容( D1000: 0 2F)。然 后單步或多步執(zhí)行程序,看程序循環(huán)填數(shù)的控制過程。最后再用 D 命令看數(shù)據(jù)區(qū)內(nèi)容,檢查填數(shù)效果( DDS: 0 2F 為什么此處可用 ds指定段值呢?) ( 3)用 F 命令向內(nèi)存區(qū)填數(shù)FDS: 10 2FC'用C 字符填寫 1000: 1

20、02F 內(nèi)存區(qū)FDS: 30 L20*'用*字符填寫 1000: 304F 內(nèi)存區(qū) FDS: 50 L100123456789ABCDEF ' 填寫字節(jié)串DDS: 0觀看數(shù)據(jù)區(qū)的內(nèi)容(顯示 128 個(gè)字節(jié)單元)4. 接收、顯示從鍵盤輸入的字符(遇空格符則退出)( 1) 匯編小段程序(程序 1.7) ACS: 1700170 MOVAH ,1;1 號功能調(diào)用,等待鍵盤輸入0172INT210174CMPAL , 20;是空格符嗎?0176JZ0180;是,退出循環(huán)0178MOVDL ,AL017AMOVAH , 2;2 號功能調(diào)用,顯示一個(gè)字符017CINT21017EJMP01

21、70;繼續(xù)循環(huán)0180INT20;結(jié)束程序01822) 運(yùn)行程序。這也是條件控制的循環(huán)程序。利用了兩個(gè)功能調(diào)用??蛇B續(xù)運(yùn)行 程序,觀看循環(huán)控制過程,觀看程序效果。請問:為什么屏幕顯示的是雙字 符呢?按回車鍵,有什么現(xiàn)象出現(xiàn)?按其它鍵呢?5在屏幕上顯示字符串信息(1) 匯編小段程序(程序 1.8 )ACS : 190:0190PUSHCS;使 DS=CS:0191POPDS:0192MOVDX ,19B;字符串入口地址:0195MOVAH ,9;9 號功能調(diào)用,顯示字符串:0197INT21:0199INT20:019BDBWelcome to use the DEBUG!$':01B6

22、(2) 連續(xù)運(yùn)行程序,觀看顯示效果。你可以從 19B 處重新匯編,改變字符串內(nèi)容,再運(yùn) 行程序。(三)文件存取操作1. 文件存盤 大家或許注意到:上列 8 個(gè)程序小段在內(nèi)容空間上沒有彼此覆蓋。目前,仍保存在CS: 1001B5 的調(diào)試工作區(qū)內(nèi)。我們可以把這段代碼作為一個(gè)文件(取名 MYABC )寫入磁盤保存起來。其操作步驟是:(1) 文件長度送入 BX : CX 。這里要存盤的內(nèi)存信息長度是 1B5-100+1=B6 請用 R 命 令將 0寫入 BX,將 B6寫入 CX。( 2) 定義文件名后寫入磁盤NA : MY ABC定義文件標(biāo)識符 W 將約定的工作區(qū)起點(diǎn)( CS:100)至算出的終點(diǎn)(

23、B6 為長度) 的信息寫入指定盤文件中。2. 裝入磁盤文件讓我們先將調(diào)試工作區(qū)的起始 256 個(gè)單元清 0。并檢查清 0 效果,再將剛才在盤上生成 的實(shí)驗(yàn)程序文件,裝入工作區(qū),看它是否真的又回調(diào)到內(nèi)存。所用的命令串如下: FCS: 100 1FF 0 DCS: 100 1FF NA:MYABC L DCS: 100 1FF;清 0;檢查是否為 0 ;定義待裝入的文件標(biāo)識符 ;從工作區(qū)起點(diǎn)裝入文件 ;檢查裝入內(nèi)容。你還可按前面實(shí)驗(yàn)程序匯編的起始地址,用反匯編命令查看這幾個(gè)程序小段。(四)退出 Debug 返回 DOS Q返回 DOS 后,可用 DIR 命令查看文件 MYABC 的目錄注冊情況。2

24、.2 分支程序的設(shè)計(jì)與調(diào)試. 實(shí)驗(yàn)?zāi)?的1. 學(xué) 習(xí)分支程序 的工作 原理,設(shè) 計(jì)技巧 與 調(diào)試方法。2. 學(xué) 習(xí) DOS中 斷 調(diào) 用 的 基 本 用 法 。 . 實(shí) 驗(yàn) 內(nèi)容X X 0設(shè)計(jì)一段程序 , 實(shí)現(xiàn) Y= X ,-YX= X< 0參考程序:DATA SEGMENTX DW ?Y DW ?DATA ENDSCODE SEGMENTASSUMECS: CODE,DS : DATAMAIN: MOVAX,DATAMOVDS,AXMOVAX,XTESTAX,8000HJNSST111NEGAXST111: MOVY,AXMOVAH,4CHINT21HCODEENDSENDMAIN操作

25、步驟: 1)讀懂程序,并輸入程序到內(nèi)存2)向數(shù)據(jù)段中的 X 單元送 7F80H 單步運(yùn)行程序后,檢查 Y 單元的結(jié)果3)向數(shù)據(jù)段中的 X 單元送 0AF80H 單步運(yùn)行程序后,檢查 Y 單元的結(jié)果。采用簡單分支編程方法,實(shí)現(xiàn)將 FIRST 字單元的內(nèi)容以十六進(jìn)制數(shù)格式顯在屏幕上。 參考程序 1:DATA SEGMENT USE16FIRST DW 5A6BHDATA ENDSSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDSCODESEGMENT10ASSUMECS: CODE, DS:DA TA ,SS: STACKBEG:MOVAX, DA TAMOVDS

26、, AXMOVCX, 0404HLAST :ROLFIRST, CLMOVDX, FIRSTANDDL, 0FH;先截取四位二進(jìn)制數(shù)CMPDL, 10; 4 位二進(jìn)制數(shù)是否等于 00001001JCNEXT;是,轉(zhuǎn) NEXTADDDL, 7;4 位二進(jìn)制數(shù)等于 10101111 時(shí),該數(shù)先加 7NEXT :ADDDL, 30H;兩分支的匯合點(diǎn),該數(shù)再加 30HMOVAH, 2;顯示INT21HDECAHJNZLASTMOVAH, 4CHINT21HCODEENDSENDBEG提示:在進(jìn)行十六進(jìn)制數(shù)顯示時(shí),必須首先截取四位二進(jìn)制數(shù),然后判斷其數(shù)值范圍, 在將該數(shù)轉(zhuǎn)換成相應(yīng)的 ACS 碼送屏幕顯示

27、。當(dāng) 4位二進(jìn)制數(shù)等于 00001001 時(shí),該數(shù)加 上 30H 就等于相應(yīng)十六進(jìn)制數(shù)的 ACS碼;當(dāng) 4 位二進(jìn)制數(shù)等于 10101111時(shí),該數(shù)加上 37H 就等于相應(yīng)十六進(jìn)制數(shù)的 ACS 碼。參考程序 2:DATAFIRSTDATASEGMENTDWENDS5A6BHCODESEGMENTASSUME CS : CODE,DS :DATABEG :MOVAX,DATAMOVDS,AXMOVCX,0404HLAST :ROLFIRST,CLMOVAX,FIRSTANDAL,0FHADDAL,90HDAAADCAL,40HDAAMOVDL,AL11MOVAH,2NT21HDECCHJNZLA

28、STMOVAH,4CHINT21HCODEENDSENDBEG參考程序 3:DATASEGMENTFIRSTDW 5A6BHASCIIDB '0123456789ABCDEF'DATAENDSCODESEGMENTASSUME CS : CODE,DS : DATABEG :MOVAX,DATAMOVDS,AXMOVCX,0404HLAST :ROLFIRST,CLMOVAX,FIRSTANDAL,0FHMOVBX,OFFSET ASCIIXLATMOVDL,ALMOVAH,2INT21HDECCHJNZLASTMOVAH,4CHINT21HCODEENDSENDBEG參考程序

29、 4 :DATA SEGMENTFIRST DW 5A6BHDATA ENDSSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDS12CODE SEGMENTASSUME CS : CODE,DS : DATA,SS : STACKBEG :MOVAX,DATAMOVDS,AXMOVCH,05HMOVDI,10000MOVBX,FIRSTLAST: MOVAL,00HLPA :CMPBX,DIJCEXITSUBBX,DIINCALJMPLPAEXIT: ANDAL,0FHADDAL,90HDAAADCAL,40HDAAMOVDL,ALMOVAH,2INT21HM

30、OVDX,0MOVAX,DIMOVSI,10DIVSIMOVDI,AXDECCHJNZLASTMOVAH,4CHINT 21HCODE ENDSEND BEG參考程序 5 :DATA SEGMENTFIRST DW 5A6BHX DW 1,10,100,1000,10000DATA ENDSSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS : CODE,DS : DATA,SS : STACKBEG : MOV AX,DATA13MOVMOVMOV LAST :MOVSUBMOVADDMOVADDMOVCMPJNZ

31、MOVJMP LPA : MOV LOPP : CMPJCDS,AXCH,05H BX,FIRSTAL,CHAL,1AH,0 AX,AX SI,OFFSET X SI,AX DI,SIDI,1 LPA AL,BLEXIT AL,00H BX,DI ; EXITSUB BX,DIINC ALJMP LOPPEXIT: ; AND AL,0FHADD AL,90HDAAADC AL,40HDAAMOV DL,ALMOV AH,2INT 21HDEC CHJNZ LASTMOV AH,4CHINT 21HCODE ENDSEND BEG三、實(shí) 驗(yàn)步 驟1. 編 輯2. 匯 編3. 連 接4. 運(yùn) 行

32、 程 序5. 如若出錯(cuò),則用 DEBUG 調(diào)試。再重復(fù)步驟 1、 2、3、 4直至正確。四、思考題思考題 1 :編寫 程序從 鍵 盤上輸入14串 英文 字符 ,其中 若有小 寫字母 則 轉(zhuǎn)換成大字母,最 后顯示 字符 串 。 提示:用1號功能調(diào)用鍵盤輸入一個(gè)字符,用9號功能調(diào)用輸出顯示 字符串。 思考題 2:數(shù)據(jù) 段BEN單元有一個(gè) 單字節(jié) 有符號 數(shù)X,判斷 -8 X<8?, 若是則顯示 YES, 否則,顯 示 NO 。思考題 3 :設(shè)計(jì) 一個(gè)多 分支段內(nèi) 轉(zhuǎn)移程 序,要求:鍵 入 0,轉(zhuǎn)P0程 序段;鍵入 1,轉(zhuǎn)P1程序段;鍵入 9,提示: 實(shí)現(xiàn)多分支程序1 )用 比較指2 )用 轉(zhuǎn)

33、移地, 轉(zhuǎn) P9 程 序段。 有兩種思 路: 令配合 直接轉(zhuǎn)移 址表配 合間接轉(zhuǎn)指令實(shí) 現(xiàn)。 移指令 實(shí)現(xiàn)。152.3 循環(huán)程序的設(shè)計(jì)與調(diào)試、實(shí)驗(yàn)?zāi)?的1. 學(xué) 習(xí)循環(huán)程序 的工作 原理,設(shè) 計(jì)技巧 與 調(diào)試方法。2. 學(xué) 習(xí)DOS中 斷調(diào)用的基本 用法。、實(shí)驗(yàn)內(nèi)容2.3.1 采用循環(huán)程序的設(shè)計(jì)方法,計(jì)算1+2+3+ +199+200 ,并要求把計(jì)算結(jié)果送至 SUM 單元。參考程序:DATA SEGMENTSUMDW0DATAENDSSTACK SEGMENT STACK DW 100 DUP(?) STACK ENDSASSUMECS: CODE, DS : DATABEG:MOVAX, D

34、ATAMOVDS, AXMOVCX, 200CIR :ADDSUM, CXLOOPCIRMOVAH, 4CHINT21HCODE SEGMENTCODE ENDSEND BEGSUM=200+199+198+1162.3.2 在數(shù) 據(jù)段有下 列十個(gè)無符號 數(shù):DSTR DB 23H,45H,0A1H,82H,0C2H,65H,8DH,5EH,0B7H,91H 設(shè)計(jì)一段程序?qū)⑺鼈儚拇蟮叫∨帕?。參?程序1:ATAL EQU $-DSTRDATA ENDSSTACK SEGMENT STACK DW 100 DUP(?)STACK ENDS;十個(gè)無符號數(shù)從大到小排序CODE SEGMENTASSU

35、ME CS : CODE,DS : DATA,SS : STACKSTART : MOV AX,DATAMOV DS,AXMOV BX,DATAL-1ST1 : MOV CX,BXMOV SI,OFFSET DSTRST2 : MOV AL,SICMP AL,SI+1JNC ST3XCHG AL,SI+1MOV SI,ALST3 : INC SILOOP ST2DEC BXJNZ ST1MOV AH,4CHINT 21HCODE ENDSEND START參考程序 2:DATA SEGMENTDSTR DB 23H,45H,0AH,82H,0C2H,65H,8DH,5EH,0B7H,91H,3

36、3H,88H,78H,66H,44H,22H,77H DATAL EQU $-DSTRDATA ENDSSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDS;十個(gè)無符號數(shù)從大到小排序CODE SEGMENTASSUME CS : CODE,DS : DATA,SS : STACKSTART : MOV AX,DATAMOV DS,AXMOV BX,DATAL-1ST1: MOV CX,BXMOV SI,OFFSET DSTRST2: MOV AL,SICMP AL,SI+1JC ST3XCHG AL,SI+117MOV SI,ALST3: INC SILOOP

37、ST2DEC BXJNZ ST1MOV AH,4CHINT 21HCODE ENDSEND START三.實(shí)驗(yàn)步驟1. 編 輯2. 匯 編3. 連 接4. 運(yùn) 行 程 序5. 如若出錯(cuò),則用 DEBUG 調(diào)試。再重復(fù)步驟 1、 2、 3、 4直至正確。四.思考題采用循環(huán) 程序的設(shè)計(jì)方法,計(jì)算1!+2!+3!+4!+5!,并要求把計(jì)算結(jié)果送 至 SUM 單 元 。182.4 主、子程序的設(shè)計(jì)與調(diào)試一、實(shí)驗(yàn)?zāi)康?. 學(xué)習(xí)多重循環(huán)子程序設(shè)計(jì)技術(shù)2. 學(xué)習(xí)用 Debug 調(diào)試分析主子程序的技巧二、實(shí)驗(yàn)內(nèi)容兩個(gè)非組合 BCD 碼的乘法運(yùn)算參考程序:DATA SEGMENTX DD 6B564532HY

38、DD 327FE643HZ DW 4 DUP(?)DATA ENDSSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDS;Z(64 位二進(jìn)制 )=X(32 位二進(jìn)制 )*Y(32 位二進(jìn)制 )CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV Z+4,0 ;RESULT=0MOV Z+6,0MOV AX,WORD PTR XMOV BX,WORD PTR YMUL BX ;XL*YLMOV Z,AXMOV Z+2,DXMOV AX,WORD PTR X+2MUL BX

39、 ;XH*YLADD Z+2,AXADC Z+4,DXADC Z+6,0MOV AX,WORD PTR XMOV BX,WORD PTR Y+2MUL BX ;XL*YHADD Z+2,AXADC Z+4,DX19ADC Z+6,0MOV AX,WORD PTR X+2MUL BX ;XH*YHADD Z+4,AXADC Z+6,DXMOV AH,4CHINT 21HCODE ENDSEND START算法提示: 被乘數(shù)為 5 位 BCD 碼(由低到高位裝入數(shù)據(jù)段) ,乘數(shù)為 1 位 BCD 碼。對于非 組合 BCD 數(shù)可直接利用字節(jié)操作的乘法指令, 求出 1位*1 位 BCD 碼積,經(jīng) BCD 調(diào)整后而 得到 BCD 碼部分積。這里的關(guān)鍵是如何正確相加五個(gè)部分積為最終乘積(6 位 BCD 碼)。2.4.2 兩個(gè)多位非壓縮 BCD 碼求和運(yùn)算參考程序:;P200;十進(jìn)制到十六進(jìn)制轉(zhuǎn)換STACK

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論