數(shù)據(jù)傳送及兩個(gè)多位十進(jìn)制數(shù)相加_第1頁
數(shù)據(jù)傳送及兩個(gè)多位十進(jìn)制數(shù)相加_第2頁
數(shù)據(jù)傳送及兩個(gè)多位十進(jìn)制數(shù)相加_第3頁
數(shù)據(jù)傳送及兩個(gè)多位十進(jìn)制數(shù)相加_第4頁
數(shù)據(jù)傳送及兩個(gè)多位十進(jìn)制數(shù)相加_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

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

DATA1DB31H,33H,31H,31H,33H;定義DATA1為被加數(shù)

DATA2DB33H,33H,33H,32H,33H;定義DATA2為加數(shù)

DATAENDS;

STACKSEGMENTSTACK;堆棧段

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

STACKENDS;堆棧段結(jié)束

CODESEGMENT;代碼段

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

CFLFMACRO;顯示回車換行功能用宏定義CFLF實(shí)現(xiàn),放在代碼段最前面

MOVDL,0DH;回車〔0DH為回車的ASCII碼〕MOVAH,02H;送DOS的中斷調(diào)用功能號(hào)INT21H;DOS的中斷調(diào)用MOVDL,0AH;用DOS功能調(diào)用實(shí)現(xiàn)換行,0AH為換行的ASCII碼

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

INT21H;DOS中斷調(diào)用

CFLFENDM;結(jié)束宏定義

START:MOVAX,DATA;設(shè)置數(shù)據(jù)段

MOVDS,AX;數(shù)據(jù)段初始化

MOVAX,STACK;設(shè)置堆棧段

MOVSS,AX;堆棧段初始化

MOVAL,SP_TOP;設(shè)置棧頂指針

MOVSI,OFFSETDATA1;顯示被加數(shù),并回車換行

MOVBX,05;

CALLDISPL;顯示被加數(shù),DISPL為顯示子程序CFLF;回車、換行宏調(diào)用

MOVSI,OFFSETDATA2;顯示加數(shù)

MOVBX,05;設(shè)置計(jì)數(shù)器賦值05

CALLDISPL;顯示加數(shù)

CFLF;回車換行

CALLADDA;調(diào)用加法運(yùn)算子程序

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

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

INT21H;DOS中斷調(diào)用

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

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

DISPLENDP;子程序結(jié)束

ADDAPROCNEAR;加法子程序

MOVSI,OFFSETDATA1;取被加數(shù)的偏移地址

MOVDI,OFFSETDATA2;取加數(shù)偏移地址

MOVAH,0;進(jìn)位清零

MOVCX,05;設(shè)置循環(huán)次數(shù)

AD1:

MOVAL,[SI];取被加數(shù)偏移量地址內(nèi)容

SUBAL,30H;

MOVBL,[DI];取加數(shù)偏移量地址內(nèi)容

SUBBL,30H;

ADDAL,BL;

ADDAL,AH;加上進(jìn)位

MOVAH,0;進(jìn)位清零

AAA;BCD十進(jìn)制轉(zhuǎn)換

MOV[SI],AL;存回DATA1的相應(yīng)單元

INCDI;

INCSI;

DECCX;

JNZAD1;CX未減到0繼續(xù)跳轉(zhuǎn),重新執(zhí)行次位相加

MOVBX,05;

MOVSI,OFFSETDATA1;

AD2:

ADD[SI+BX-1],30H;相加之后轉(zhuǎn)化為相應(yīng)的ASCII碼

DECBX;改變循環(huán)次數(shù)

JNEAD2;BX未減到0那么跳轉(zhuǎn)至AD2

RET;返回

ADDAENDP;加法子程序結(jié)束

CODEENDS;代碼段與程序結(jié)束ENDSTART;程序結(jié)束

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

2).子程序調(diào)用是在執(zhí)行時(shí)通過CALL指令完成的,而宏調(diào)用是在匯編時(shí)進(jìn)行宏展開,被相應(yīng)宏體所取代。

3).將屢次調(diào)用的一段代碼定義為宏指令,與使用子程序相比,其執(zhí)行速度要快〔因?yàn)檫^程需要調(diào)用和返回〕,但目標(biāo)代碼長。

4).宏指令的參數(shù)是在匯編時(shí)進(jìn)行形實(shí)替換的,而子程序的參數(shù)是在執(zhí)行時(shí)通過存放器或堆棧等方式傳遞的。實(shí)驗(yàn)總結(jié)這次實(shí)驗(yàn)?zāi)茼樌_始進(jìn)行最重要的還是依賴于預(yù)習(xí),首先在課下想好該使用什么算法,然后畫出程序流程圖才可以很好地進(jìn)行寫代碼,按步驟地依照流程圖,就不會(huì)出現(xiàn)寫程序?qū)懙揭话肟ㄗ×?。這次的實(shí)驗(yàn)對(duì)于偏移量的理解要求較強(qiáng),因?yàn)閷?duì)于被加數(shù)與加數(shù)各個(gè)數(shù)位相加而且要求兩者都顯示出來。而對(duì)子程序和宏調(diào)用也要預(yù)習(xí),了解它們的定義、格式和區(qū)別。還有對(duì)源代碼要清楚的區(qū)分開,比方指令A(yù)DC與ADD使用錯(cuò)誤,會(huì)導(dǎo)致了進(jìn)位的出錯(cuò)。思考題1.在鍵盤上輸入一個(gè)字符或數(shù)字,要求:對(duì)十六進(jìn)制數(shù)字〔由0-9,A~F或a~f組成〕,顯示該數(shù)字的十進(jìn)制值;當(dāng)輸入值為Q時(shí)結(jié)束程序,對(duì)其他輸入提示輸入不合法。畫出程序流程圖并請(qǐng)寫出完整程序代碼。答:源程序代碼: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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論