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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

18、行等方式來監(jiān)控程序的執(zhí)行。程序1.5 用乘法指令運算且顯示結果ACS: 140:0140MOVAL ,06;設 n=06h:1042MOVCL ,0A:0144MULCL;06h*0Ah:0146MOVDL ,AL:0148MOVAH ,02;用 2 號功能調用顯示結果:014AINT21:014CINT20:014E運行程序。 請注意觀看結果數(shù)據(jù)如何求出及表示的。3. 向指定內存區(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;是,結束程序(2)運行程序。注意:這是循環(huán)程序。由此較指令和條件轉移指令控制循環(huán)。到底 循環(huán)了多少次呢?請先用 D 命令觀看待置數(shù)內存區(qū)的原內容( D1000: 0 2F)。然 后單步或多步執(zhí)行程序,看程序循環(huán)填數(shù)的控制過程。最后再用 D 命令看數(shù)據(jù)區(qū)內容,檢查填數(shù)效果( DDS: 0 2F 為什么此處可用 ds指定段值呢?) ( 3)用 F 命令向內存區(qū)填數(shù)FDS: 10 2FC'用C 字符填寫 1000: 1

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

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

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

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

24、.2 分支程序的設計與調試. 實驗目 的1. 學 習分支程序 的工作 原理,設 計技巧 與 調試方法。2. 學 習 DOS中 斷 調 用 的 基 本 用 法 。 . 實 驗 內容X X 0設計一段程序 , 實現(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)讀懂程序,并輸入程序到內存2)向數(shù)據(jù)段中的 X 單元送 7F80H 單步運行程序后,檢查 Y 單元的結果3)向數(shù)據(jù)段中的 X 單元送 0AF80H 單步運行程序后,檢查 Y 單元的結果。采用簡單分支編程方法,實現(xiàn)將 FIRST 字單元的內容以十六進制數(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;先截取四位二進制數(shù)CMPDL, 10; 4 位二進制數(shù)是否等于 00001001JCNEXT;是,轉 NEXTADDDL, 7;4 位二進制數(shù)等于 10101111 時,該數(shù)先加 7NEXT :ADDDL, 30H;兩分支的匯合點,該數(shù)再加 30HMOVAH, 2;顯示INT21HDECAHJNZLASTMOVAH, 4CHINT21HCODEENDSENDBEG提示:在進行十六進制數(shù)顯示時,必須首先截取四位二進制數(shù),然后判斷其數(shù)值范圍, 在將該數(shù)轉換成相應的 ACS 碼送屏幕顯示

27、。當 4位二進制數(shù)等于 00001001 時,該數(shù)加 上 30H 就等于相應十六進制數(shù)的 ACS碼;當 4 位二進制數(shù)等于 10101111時,該數(shù)加上 37H 就等于相應十六進制數(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三、實 驗步 驟1. 編 輯2. 匯 編3. 連 接4. 運 行

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

33、移地, 轉 P9 程 序段。 有兩種思 路: 令配合 直接轉移 址表配 合間接轉指令實 現(xiàn)。 移指令 實現(xiàn)。152.3 循環(huán)程序的設計與調試、實驗目 的1. 學 習循環(huán)程序 的工作 原理,設 計技巧 與 調試方法。2. 學 習DOS中 斷調用的基本 用法。、實驗內容2.3.1 采用循環(huán)程序的設計方法,計算1+2+3+ +199+200 ,并要求把計算結果送至 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ù)段有下 列十個無符號 數(shù):DSTR DB 23H,45H,0A1H,82H,0C2H,65H,8DH,5EH,0B7H,91H 設計一段程序將它們從大到小排列。參考 程序1:ATAL EQU $-DSTRDATA ENDSSTACK SEGMENT STACK DW 100 DUP(?)STACK ENDS;十個無符號數(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;十個無符號數(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三.實驗步驟1. 編 輯2. 匯 編3. 連 接4. 運 行 程 序5. 如若出錯,則用 DEBUG 調試。再重復步驟 1、 2、 3、 4直至正確。四.思考題采用循環(huán) 程序的設計方法,計算1!+2!+3!+4!+5!,并要求把計算結果送 至 SUM 單 元 。182.4 主、子程序的設計與調試一、實驗目的1. 學習多重循環(huán)子程序設計技術2. 學習用 Debug 調試分析主子程序的技巧二、實驗內容兩個非組合 BCD 碼的乘法運算參考程序:DATA SEGMENTX DD 6B564532HY

38、DD 327FE643HZ DW 4 DUP(?)DATA ENDSSTACK SEGMENT STACKDW 100 DUP(?)STACK ENDS;Z(64 位二進制 )=X(32 位二進制 )*Y(32 位二進制 )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 碼積,經 BCD 調整后而 得到 BCD 碼部分積。這里的關鍵是如何正確相加五個部分積為最終乘積(6 位 BCD 碼)。2.4.2 兩個多位非壓縮 BCD 碼求和運算參考程序:;P200;十進制到十六進制轉換STACK

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論