數據傳送及兩個多位十進制數相加_第1頁
數據傳送及兩個多位十進制數相加_第2頁
數據傳送及兩個多位十進制數相加_第3頁
數據傳送及兩個多位十進制數相加_第4頁
數據傳送及兩個多位十進制數相加_第5頁
已閱讀5頁,還剩2頁未讀, 繼續免費閱讀

下載本文檔

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

文檔簡介

深圳大學實驗報告課程名稱:微機原理及應用實驗實驗工程名稱:數據傳送及兩個多位十進制數相加學院:物理科學與技術學院專業:應用物理指導教師:李雄軍報告人:學號:班級:實驗時間:實驗報告提交時間:一、實驗目的〔1〕繼續熟練掌握在PC機上建立、匯編、鏈接、調試和運行8088匯編語言程序的過程;〔2〕學習數據傳送和算術運算指令的用法;〔3〕掌握子程序設計方法;〔4〕掌握宏匯編設計方法。實驗內容將兩個多位十進制數〔假設為16位二進制表示的無符號數〕相加。要求被加數均以ASCII碼形式各自順序存放在以DATAl和DATA2為首的5個內存單元中(低位在前),結果送回DATAl處。程序流程圖顯示加數和被加數顯示加數和被加數賦計數值給CX加數和被加數以ASCⅡ碼表示的數字串形式轉化為由十六進制表示的數字串形式去除最低位進執行ADC帶進位相加AAA調整結果送被加數區調整偏移量顯示加數和被加數顯示結果十六進制結果轉化為ASCⅡCX-1=0開始結束算法說明:以42136與12547相加為例,首先將兩個數中的每一位都以ASCII碼存入相應的內存單元,然后將每一位數都減去30H,并將被加數和加數相對應位相加〔要考慮低位向高位的進位〕,存入相應的被加數存儲單元中,最后將該單元中的每一位數轉換成相應的ASCII碼,調用DOS系統的顯示字符指令,顯示兩數相加的結果。源程序代碼DATASEGMENT;數據段

DATA1DB31H,33H,31H,31H,33H;定義DATA1為被加數

DATA2DB33H,33H,33H,32H,33H;定義DATA2為加數

DATAENDS;

STACKSEGMENTSTACK;堆棧段

STADB64DUP(0);SP_TOPDB0;定義SP_TOP單元數值為0

STACKENDS;堆棧段結束

CODESEGMENT;代碼段

ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK;指定段存放器

CFLFMACRO;顯示回車換行功能用宏定義CFLF實現,放在代碼段最前面

MOVDL,0DH;回車〔0DH為回車的ASCII碼〕MOVAH,02H;送DOS的中斷調用功能號INT21H;DOS的中斷調用MOVDL,0AH;用DOS功能調用實現換行,0AH為換行的ASCII碼

MOVAH,02H;顯示字符到屏幕上

INT21H;DOS中斷調用

CFLFENDM;結束宏定義

START:MOVAX,DATA;設置數據段

MOVDS,AX;數據段初始化

MOVAX,STACK;設置堆棧段

MOVSS,AX;堆棧段初始化

MOVAL,SP_TOP;設置棧頂指針

MOVSI,OFFSETDATA1;顯示被加數,并回車換行

MOVBX,05;

CALLDISPL;顯示被加數,DISPL為顯示子程序CFLF;回車、換行宏調用

MOVSI,OFFSETDATA2;顯示加數

MOVBX,05;設置計數器賦值05

CALLDISPL;顯示加數

CFLF;回車換行

CALLADDA;調用加法運算子程序

MOVSI,OFFSETDATA1;把DATA1的偏移量地址賦給SIMOVBX,05;CALLDISPL;顯示結果

CFLF;回車、換行MOVAX,4C00H;返回DOS

INT21H;DOS中斷調用

DISPLPROCNEAR;DISP為字符串顯示子程序

DSL:MOVAH,02;送顯示功能號MOVDL,[SI+BX-1];顯示字符串中一字符INT21H;DOSINT21功能調用DECBX;BX-1,修改偏移量JNZDSL;假設BX不等于0,跳轉到DSLRET;返回

DISPLENDP;子程序結束

ADDAPROCNEAR;加法子程序

MOVSI,OFFSETDATA1;取被加數的偏移地址

MOVDI,OFFSETDATA2;取加數偏移地址

MOVAH,0;進位清零

MOVCX,05;設置循環次數

AD1:

MOVAL,[SI];取被加數偏移量地址內容

SUBAL,30H;

MOVBL,[DI];取加數偏移量地址內容

SUBBL,30H;

ADDAL,BL;

ADDAL,AH;加上進位

MOVAH,0;進位清零

AAA;BCD十進制轉換

MOV[SI],AL;存回DATA1的相應單元

INCDI;

INCSI;

DECCX;

JNZAD1;CX未減到0繼續跳轉,重新執行次位相加

MOVBX,05;

MOVSI,OFFSETDATA1;

AD2:

ADD[SI+BX-1],30H;相加之后轉化為相應的ASCII碼

DECBX;改變循環次數

JNEAD2;BX未減到0那么跳轉至AD2

RET;返回

ADDAENDP;加法子程序結束

CODEENDS;代碼段與程序結束ENDSTART;程序結束

實驗結果1.編譯、連接生成可執行文件,分別在debug和Emu8086下調試該可執行文件在debug下運行:在emu8086下運行:給出程序運行時的各段地址〔CS=?,DS=?SS=?ES=?〕及兩個子程序入口的IP.DISPL:IP=0054ADDA:IP=0037CS=F400,DS=0710,SS=0711,ES=07003.試改變加數和被加數,如何從內存中觀察結果的變化?總結子程序格式及其調用方法;結合本程序說明宏調用與子程序的區別。子程序是程序的一局部,可以被程序調用,當過程中的指令執行完后,返回程序調用點,調用過程的指令是CALL〔CALL過程名〕,從過程返回的指令為RET〔在子程序調用快要完成之時,加上RET.即在過程名ENDP指令之前加上RET指令〕。區別:1).在匯編后產生的.obj文件中,子程序定義依然存在,而宏定義卻不復存在。

2).子程序調用是在執行時通過CALL指令完成的,而宏調用是在匯編時進行宏展開,被相應宏體所取代。

3).將屢次調用的一段代碼定義為宏指令,與使用子程序相比,其執行速度要快〔因為過程需要調用和返回〕,但目標代碼長。

4).宏指令的參數是在匯編時進行形實替換的,而子程序的參數是在執行時通過存放器或堆棧等方式傳遞的。實驗總結這次實驗能順利開始進行最重要的還是依賴于預習,首先在課下想好該使用什么算法,然后畫出程序流程圖才可以很好地進行寫代碼,按步驟地依照流程圖,就不會出現寫程序寫到一半卡住了。這次的實驗對于偏移量的理解要求較強,因為對于被加數與加數各個數位相加而且要求兩者都顯示出來。而對子程序和宏調用也要預習,了解它們的定義、格式和區別。還有對源代碼要清楚的區分開,比方指令ADC與ADD使用錯誤,會導致了進位的出錯。思考題1.在鍵盤上輸入一個字符或數字,要求:對十六進制數字〔由0-9,A~F或a~f組成〕,顯示該數字的十進制值;當輸入值為Q時結束程序,對其他輸入提示輸入不合法。畫出程序流程圖并請寫出完整程序代碼。答:源程序代碼:DATASEGMENTSTRDB'PLEASEINPUTANUMBER(H):','$'WRONGDB'SORRY!THENUMBERISILLEGAL!','$'QUITDB'THEPROGRAMHASEXITED!','$'DATAENDSSTACKSEGMENTSTACK;堆棧段STADB64DUP(0)SP_TOPDB0STACKENDSCODESEGMENT;代碼段ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK;指定段存放器START:MOVAX,DATAMOVDS,AXMOVAX,STACKMOVSS,AXLP:LEADX,STRMOVAH,09HINT21HMOVAH,01HINT21HCALLJUDGECMPAL,51HJNZLP1MOVAH,4CHINT21HLP1:CALLCRLFJMPLPCRLFPROCNEARMOVDL,0DHMOVAH,02HINT21HMOVDL,0AHMOVAH,02HINT21HPOPAXRETCRLFENDP

溫馨提示

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

評論

0/150

提交評論