




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
匯編語言上機實驗(二)
4學(xué)時實驗二數(shù)制、碼制和子程序的編程與調(diào)試
一.實驗?zāi)康模?.熟練掌握編寫匯編語言原程序的基本方法和基本框架。2.熟練使用DEBUG調(diào)試程序。3.掌握十六進制數(shù)與ASCII碼之間,ASCII碼與BCD碼之間的轉(zhuǎn)換。4.掌握用DOS功能調(diào)用,實現(xiàn)字符的輸入和顯示。5.掌握子程序的編程與調(diào)試方法。二.實驗內(nèi)容:1、從鍵盤輸入兩個2位十進制正數(shù)轉(zhuǎn)換成二進制數(shù)后,對這兩個數(shù)進行相加相乘運算,結(jié)果以十六進制數(shù)形式顯示在屏幕上。2、從鍵盤輸入兩個2位十進制正數(shù)轉(zhuǎn)換成組合BCD碼后,對這兩個數(shù)進行相加相乘運算,結(jié)果以十進制形式顯示在屏幕上。3、從鍵盤輸入一個4位十進制正數(shù)并回顯后,將其對應(yīng)的十六進制數(shù)顯示在屏幕上。三、實驗要求及調(diào)試步驟程序說明。說明程序的功能、結(jié)構(gòu)。調(diào)試說明。包括上機調(diào)試的情況、上機調(diào)試步驟、調(diào)試所遇到的問題是如何解決的,并對調(diào)試過程中的問題進行分析,對執(zhí)行結(jié)果進行分析。寫出源程序清單和執(zhí)行結(jié)果?!九e例】從鍵盤輸入4位十六進制數(shù)(它對應(yīng)的二進制數(shù)是補碼表示的帶符號數(shù)),把它們轉(zhuǎn)換為帶符號非組合型BCD碼,并在屏幕上顯示出來。從鍵盤輸入1~4位十六進制數(shù),存放在以HEXBUF+2為首址的4個字節(jié)單元中。其中HEXBUF+1單元中為輸入的數(shù)據(jù)個數(shù)。字符串輸入功能調(diào)用(0AH號功能調(diào)用)
格式: MOVDX,已定義緩沖區(qū)的偏移地址
MOVAH,0AH
INT21H功能:從鍵盤接收字符,并存放到內(nèi)存緩沖區(qū)。①執(zhí)行前先定義一個輸入緩沖區(qū),緩沖區(qū)內(nèi)第一個字節(jié)定義為允許最多輸入的字符個數(shù),字符個數(shù)應(yīng)包括回車符0DH在內(nèi),不能為“0”值。第二個字節(jié)保留,在執(zhí)行程序完畢后存入輸入的實際字符個數(shù)。從第三個字節(jié)開始存入從鍵盤上接收字符的ASCII碼。若實際輸入的字符個數(shù)少于定義的最大字符個數(shù),則緩沖區(qū)其他單元自動清0。若實際輸入的字符個數(shù)大于定義的字符個數(shù),其后輸入的字符丟棄不用,且響鈴示警,一直到輸入回車鍵為止。整個緩沖區(qū)的長度等于最大字符個數(shù)再加2。
②應(yīng)當(dāng)將緩沖區(qū)首地址的段基址和偏移地址分別存入DS和DX寄存器中。……BUF
DB25;緩沖區(qū)長度
ACTHAR
DB?;保留單元,存放輸入的實際字符個數(shù)
CHAR
DB25DUP(?);定義25個字節(jié)存儲空間
DB‘$’
……
MOVAX,DATA
MOVDS,AX
……
MOVDX,OFFSETBUF
MOVAH,0AH
INT21H
……
本例可從鍵盤接收23個有效字符并存入以BUF
為首地址的緩沖區(qū)中。將ASCII碼表示的4位十六進制數(shù)轉(zhuǎn)換為16位二進制數(shù),并暫時存放在
BX中;
字符對應(yīng)的ASCII碼0~930H~39HA~Z41H~5AH換行0AH回車0DHESC鍵1BH空格20H確定十進制數(shù)的符號,并把符號(+或-)存放在BCDBUF單元中;使用指令TEST對最高位進行判定,如若最高位為1,則是負(fù)數(shù),反之。對BX中的二進制數(shù)采用前述算法轉(zhuǎn)換為十進制數(shù)(非組合型BCD碼),轉(zhuǎn)換結(jié)果存放在以BCDBUF+1為首址的5個字節(jié)單元中;把轉(zhuǎn)換結(jié)果的5個非組合型BCD碼形成相應(yīng)的ASCII碼。
組合BCD碼是用4個二進制位表示一個十進制位,如:
MOVAL,68H
MOVBL,28H
ADDAL,BL
;AL=68H+28H=90H DAA
;十進制調(diào)整:AL=96H
非組合BCD碼是用8個二進制位表示一個十進制位。如:
MOVAX,0608H MOVBL,09H
ADDAL,BL
;AL=08H+09=11H
AAA
;十進制調(diào)整:AX=0107H顯示結(jié)果屏幕顯示字符串(9號功能調(diào)用)格式: MOVDX,字符串的偏移地址
MOVAH,09H
INT21H在使用9號功能調(diào)用時,應(yīng)當(dāng)注意以下問題:
①待顯示的字符串必須先放在內(nèi)存一數(shù)據(jù)區(qū)(DS段)中,且以‘$’符號作為結(jié)束標(biāo)志。
②應(yīng)當(dāng)將字符串首地址的段基址和偏移地址分別存入DS和DX寄存器中。
…
… BUF
DB‘HOWDOYOUDO?’,0AH,0DH,‘$’
…
…
MOV
AX,DATA MOV
DS,AX
…
…
MOV
DX,OFFSETBUF
MOV
AH,09H
INT
21H
…
…
執(zhí)行程序,在屏幕上顯示“HOWDOYOUDO?”字符串。實驗要求一參考程序:TITLECONVERTHEXADECIMALTOBCDDATASEGMENTPROMPTDB"INPUTHEXADECIMAL(4DIGITS):$'HEXBUFDB5,0,5DUP(0)DISPDB0AH,0DHBCDBUFDB6DUP(0),'$'DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCOSEGSEGMENTASSUMECS:COSEG,DS:DATA,SS:STACK1HEXBCD:MOVAX,DATAMOVDS,AX;輸入1~4位十六進制數(shù)
LEADX,PROMPT;顯示提示信息
MOVAH,09HINT21HLEADX,HEXBUF;輸入數(shù)據(jù)
MOVAH,0AHINT21H;ASCII碼轉(zhuǎn)換為16位二進制數(shù)并存入BX中
LEASI,HEXBUF+2;取十六進制數(shù)ASCII碼首址
MOVBX,0;暫存二進制數(shù)的寄存器清零
MOVCH,HEXBUF+1;取輸入數(shù)據(jù)個數(shù)HEX1:MOVAL,[SI];取一個十六進制數(shù)字符
CMPAL,'9'JBENUMB;小于等于‘9’是數(shù)字符SUBAL,07H;是字母符
NUMB:ANDAL,0FHMOVCL,4SALBX,CLORBL,ALINCSIDECCHJNEHEX1;確定十進制數(shù)的符號
MOVBCDBUF,'+'TESTBX,8000HJNSPLUS;是正數(shù)
MOVBCDBUF,'-';是負(fù)數(shù)
NEGBX;求補后變?yōu)樵a;將二進制數(shù)轉(zhuǎn)換為非組合型BCD碼,從二進制數(shù)高位起,進行15次加和乘PLUS:MOVCH,0FH;“加乘”運算的次數(shù)LOP0:SHLBX,1;最高位二進制數(shù)送CFCALLADDIT;先加1位二進制數(shù)
CALLMULTI;再乘2DECCHJNELOP0SHLBX,1;加最低位二進制數(shù)
CALLADDIT
;把非組合型BCD碼轉(zhuǎn)換為ASCII碼形式
LEADI,BCDBUF+1MOVCX,5LOP1:ORBYTEPTR[DI],30HINCDILOOPLOP1;顯示結(jié)果
LEADX,DISPMOVAH,09HINT21HMOVAH,4CH;程序結(jié)束
INT21H;多字節(jié)BCD碼加1位二進制數(shù)子程序ADDITPROCLEADI,BCDBUF+5;從低位開始
MOVCL,5;取字節(jié)數(shù)ADD1:MOVAL,[DI];取BCD碼
ADCAL,0;加二進制數(shù)位(CF)AAA;十進制數(shù)運算校正
MOV[DI],AL;存BCD碼
DECDIDECCLJNEADD1RETADDITENDP;多字節(jié)BCD碼乘2子程序MULTIPROCLEADI,BCDBUF+5;從低位開始
MOVCL,5CLCMUL1:MOVAL,[DI];取BCD碼
ADCAL,AL;乘2AAA;十進制數(shù)運算校正
MOV[DI],AL;存BCD碼
DECDIDECCLJNEMUL1RETMULTIENDPCOSEGENDSENDHEXBCD程序詳解
假定我們要對4位二進制數(shù)(0110)進行轉(zhuǎn)換。首先BX=0110,設(shè)置的BCDBUF為三個字節(jié)空間,Ch=3
Lop0:bx=1100cl=2cf=0
執(zhí)行calladdit有:
al=0adcal,0;al=0aaa;al=0cl=1;重復(fù)有:
al=0adcal,0;al=0aaa;al=0cl=0執(zhí)行callmulti有:
cf=0cl=2al=0adcal,0;al=0aaa;al=0cl=1;重復(fù)有:
al=0adcal,0;al=0aaa;al=0cl=0第二輪循環(huán)ch=2bx=1000cf=1Lop0:cl=2Calladdit有:Al=0Adcal,0;al=1Aaa;al=1Cl=1cf=0重復(fù)有:Al=0Adcal,0;al=0Aaa;al=0Cl=0Cl=2cf=0Callmulti有:Al=1Adcal,al;al=2Aaa;al=2Cl=1cf=0重復(fù)有:Al=0Adcal,al;al=0Aaa;al=0Cl=0第三輪循環(huán)ch=1bx=0000cf=1
(該輪循環(huán)結(jié)束后CH=0,不再循環(huán))Lop0:cl=2Calladdit有:Al=2Adcal,0;al=3Aaa;al=3Cl=1cf=0重復(fù)有:Al=0Adcal,0;al=0Aaa;al=0
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)企業(yè)代理記賬與資金籌措合同范本
- 車輛抵押擔(dān)保與汽車保險理賠服務(wù)合同
- 垃圾處理場地租賃合同安全操作與環(huán)保要求
- 活動票務(wù)銷售與現(xiàn)場管理合同
- 建筑工程承包合同書(15篇)
- 墓區(qū)及穴墓位使用權(quán)轉(zhuǎn)讓合同書(16篇)
- 2025上海車展智能汽車洞察分析報告
- 金銀島閱讀心得600字(4篇)
- 商品房買賣合同模板(16篇)2
- 計算機嵌入式開發(fā)技巧試題及答案
- 農(nóng)村生活污水檢測服務(wù)方案
- 住院患者轉(zhuǎn)科交接登記本
- 幼兒園食譜播報
- 縣醫(yī)院麻醉計劃書
- 高級宏觀經(jīng)濟學(xué)講義(南開大學(xué)-劉曉峰教授-羅默的教材)【完整版】
- 肺脹中醫(yī)護理查房-課件
- 急診臨床思維-課件
- 立德修身誠信為本
- 小石獅【經(jīng)典繪本】
- 艾里遜8000系列變速箱培訓(xùn):《動力傳遞分析》
- 商務(wù)英語寫作實踐智慧樹知到答案章節(jié)測試2023年中北大學(xué)
評論
0/150
提交評論