資源描述:
《微機原理課程設(shè)計》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、《微機原理與接口技術(shù)》課程設(shè)計院系:計算機學(xué)院通信工程專業(yè)班級:姓名:指導(dǎo)教師:日期:2012.02.25一、設(shè)計任務(wù)1、編寫一匯編語言程序,要求從鍵盤接收一個四位的十六進(jìn)制數(shù),并在終端上顯示與它等值的二進(jìn)制數(shù)和十進(jìn)制數(shù)。2、掌握接受鍵盤數(shù)據(jù)的方法,了解將鍵盤數(shù)據(jù)顯示時須轉(zhuǎn)換為ASCII碼的原理。二、設(shè)計方案(1)實現(xiàn)十六進(jìn)制數(shù)向二進(jìn)制數(shù)的轉(zhuǎn)換第一步:實現(xiàn)十六進(jìn)制數(shù)的輸入和對應(yīng)二進(jìn)制數(shù)的轉(zhuǎn)換。利用DOS系統(tǒng)功能中的1號輸入字符的功能,接收輸入的十六進(jìn)制數(shù),將其轉(zhuǎn)換成對應(yīng)的二進(jìn)制數(shù)(若是0-9之間的數(shù)直接屏蔽高4位,若
2、是A-F之間的數(shù)在屏蔽高4位后還要加9)。BX中存放的是二進(jìn)制數(shù)的結(jié)果,利用算數(shù)左移指令使BX左移4位,然后與下一次轉(zhuǎn)換后的數(shù)相加。如此循環(huán)4次,得到對應(yīng)的二進(jìn)制數(shù)。第二步:實現(xiàn)顯示轉(zhuǎn)化后的二進(jìn)制數(shù)。利用ROL和RCL指令,從最高位起循環(huán)取出每位二進(jìn)制數(shù),將其轉(zhuǎn)換成對應(yīng)的ASSCII碼,調(diào)用DOS系統(tǒng)功能調(diào)用中2號功能顯示。(2)實現(xiàn)十六進(jìn)制數(shù)向十進(jìn)制數(shù)的轉(zhuǎn)換。第一步:從十六進(jìn)制向二進(jìn)制轉(zhuǎn)換,由于十六進(jìn)制和二進(jìn)制的特殊關(guān)系,它們之間的轉(zhuǎn)換非常簡單。第二步:從二進(jìn)制轉(zhuǎn)換為十進(jìn)制,方法是將要轉(zhuǎn)換的二進(jìn)制預(yù)先放到AX寄存器
3、中,判斷AX中數(shù)的符號,若為負(fù)數(shù),則將負(fù)號送入輸出緩沖區(qū),并求AX的絕對值;若AX中的數(shù)為正數(shù),則不做其他處理,此時AX中即為無符號二進(jìn)制數(shù)。然后將無符號二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制,可采用將AX除以10,得到第一個商和第一個余數(shù),第一個余數(shù)就是所求十進(jìn)制的個位,將第一個余數(shù)除以10,得到第二個商和余數(shù),第二個余數(shù)就是十進(jìn)制的十位數(shù),重復(fù)以上過程,一直循環(huán)到商為零時,得到的余數(shù)就是所求十進(jìn)制的最高位數(shù),這就是數(shù)制轉(zhuǎn)換中常用的“除模留余倒排列”法則。開始三、流程圖段寄存器和堆棧初始化顯示“請輸入十六進(jìn)制數(shù)”調(diào)用GETNUM子程
4、序,接收鍵入數(shù)值,保存在BX中計數(shù)值16送CXBX中內(nèi)容循環(huán)左移1位BL送DL,屏蔽掉DL高7位DL加30H,變成二進(jìn)制數(shù)位對應(yīng)字符的ASCII碼顯示CX減1為零返回DOS主程序框圖保存寄存器DX清零讀鍵入字符的ASCII碼送AL中是回車鍵?(AL)<30H?N是數(shù)字0~9?N是字母A~F?NN是字母a~f?將本次鍵入的數(shù)字加進(jìn)DX中顯示“輸入出錯”信息回車換行恢復(fù)寄存器返回GETNUM子程序框圖四、程序運行結(jié)果截圖通過設(shè)計和編寫程序代碼,運行程序后,其結(jié)果先為顯示開始界面幾位菜單界面,而后隨意輸入一個小于4位的十六
5、進(jìn)制數(shù),打完字敲回車,馬上出現(xiàn)所對應(yīng)的十進(jìn)制數(shù)。當(dāng)連續(xù)輸入4位的十六進(jìn)制數(shù)直接輸出十進(jìn)制數(shù),同時,再打回車,可以再輸入十六進(jìn)制數(shù),并且可以循環(huán)運行。五、附錄(程序源代碼,要求有必要的注釋)(1)十六進(jìn)制轉(zhuǎn)換為二進(jìn)制CRLFMACROMOVAH,02HMOVDL,ODHINT21HMOVAH,02HMOVDL,0AHINT21HENDMDATASEGMENTMESSDB‘INPUTHEXNUMBER:$’ERRORDB‘INPUTERROR!’,0DH,0AH,‘$’DATAENDSSTACKSEGMENTSTADW3
6、2DUP(?)TOPDW?STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVSP,TOPMOVAH,09HMOVDX,OFFSETMESSINT21H;顯示提示輸入的信息CALLGETNUM;接收鍵入數(shù)值送DXMOVCX,0010H;16位MOVBX,DXTTT:ROLBX,1;循環(huán)左移1位MOVDL,BLANDDL,01H;屏蔽掉高7位ADDDL,30HMOVAH,02HINT21
7、H;顯示二進(jìn)制數(shù)位對應(yīng)的ASCII字符LOOPTTTMOVAX,4C00HINT21HGETNUMPROCNEAR;子程序,接收鍵入數(shù)值送DXPUSHCXXORDX,DXGGG:MOVAH,01HINT21HCMPAL,0DHJZPPPCMPAL,30HJZKKKSUBAL,30HCMPAL,0AHJBGETSCMPAL,11HJBKKKSUBAL,07HCMPAL,0FHJBEGETSCMPAL,2AHJBKKKCMPAL,2FHJAKKKSUBAL,20HGETS:MOVCL,04HSHLDX,CLXORAH,A
8、HADDDX,AXJMPGGGKKK:MOVAH,09HMOVDX,OFFSETERRORINT21HPPP:PUSHDXCRLFPOPDXPOPCXRETGETNUMENDPCODEENDSENDSTART(2)十六進(jìn)制轉(zhuǎn)換為十進(jìn)制DATASEGMENTCREQU0DH;回車LFEQU0AH;換行DAT1DB'Qingshurushiliuj