2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《匯編語言》課程設(shè)計說明書</p><p>  設(shè)計題目 四則運算計算器的設(shè)計 </p><p>  專 業(yè) </p><p>  班 級 </p><p>  學(xué) 號

2、 </p><p>  姓 名 </p><p>  指導(dǎo)教師 </p><p>  起止日期 </p><p>  成 績 </p&g

3、t;<p><b>  課程設(shè)計任務(wù)書</b></p><p>  一、設(shè)計題目: 四則運算計算器的設(shè)計 </p><p>  二、設(shè)計的主要內(nèi)容: 設(shè)計一個能實現(xiàn)加減乘除取余計算的程序。將鍵盤輸入的表達(dá)式預(yù)放入一緩沖區(qū)中,然后從該緩沖區(qū)的第一個字符開始讀取判斷,當(dāng)讀到一個有效的表達(dá)式時對表達(dá)式進(jìn)行相應(yīng)的運算后,輸出用十六進(jìn)制數(shù)表

4、示的運算結(jié)果。目標(biāo):要求該程序接受從鍵盤輸入的十六進(jìn)制數(shù),執(zhí)行相應(yīng)的計算后,計算結(jié)果以十六進(jìn)制數(shù)輸出。 </p><p>  指 導(dǎo) 教 師: </p><p>  教 研 室 主 任: </p&

5、gt;<p><b>  1選題背景及意義</b></p><p>  運用匯編語言,實現(xiàn)簡單計算器的一般功能.通過該程序設(shè)計,讓我們熟悉并掌握DOS系統(tǒng)功能調(diào)方法用及BIOS系統(tǒng)功能調(diào)用方法,同時在程序設(shè)計過程中熟悉并掌握各種指令的應(yīng)用,知道編程的具體流程,以及掌握DEBUG的一系列的功能執(zhí)行命令,及用它進(jìn)行調(diào)試,運行功能。 </p><p>  2

6、主要設(shè)計內(nèi)容及預(yù)期目標(biāo)</p><p>  設(shè)計一個能實現(xiàn)加減乘除取余計算的程序。將鍵盤輸入的表達(dá)式預(yù)放入一緩沖區(qū)中,然后從該緩沖區(qū)的第一個字符開始讀取判斷,當(dāng)讀到一個有效的表達(dá)式時對表達(dá)式進(jìn)行相應(yīng)的運算后,輸出用十六進(jìn)制數(shù)表示的運算結(jié)果。目標(biāo):要求該程序接受從鍵盤輸入的十六進(jìn)制數(shù),執(zhí)行相應(yīng)的計算后,計算結(jié)果以十六進(jìn)制數(shù)輸出。</p><p><b>  3 概要設(shè)計</b

7、></p><p>  本題目實現(xiàn)的模塊圖如圖3-1所示</p><p><b>  圖3-1 概要模塊</b></p><p><b>  界面設(shè)置</b></p><p>  主要實現(xiàn)確定界面樣式的功能,以菜單形式顯示。</p><p><b>  選擇算

8、法設(shè)置</b></p><p>  用于選擇加、減、乘、除法來進(jìn)行運算。</p><p><b>  十進(jìn)制轉(zhuǎn)換設(shè)置</b></p><p>  應(yīng)用十進(jìn)制的轉(zhuǎn)換算法來處理加、減、乘、除法四則運算。</p><p><b>  4 詳細(xì)設(shè)計</b></p><p>

9、;<b>  4.1 界面設(shè)置</b></p><p>  通過定義數(shù)據(jù)段,利用09H顯示出功能列表。通過定義數(shù)據(jù)段,以字符串的形式輸入每個提示信息,利用09H鍵盤輸入并回顯命令顯示每一個功能提示,是計算器的功能列表有序清晰的顯示在屏幕上。</p><p>  4.2 選擇算法設(shè)置</p><p>  首先選擇要進(jìn)行的四則運算,若選擇1,則進(jìn)行

10、加法;若選擇2,則進(jìn)行減法;若選擇3,則進(jìn)行乘法;若選擇4,則進(jìn)行除法。加法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,然后顯示BX 和[SI]中的內(nèi)容相加存在BX中。減法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,然后顯示BX 和[SI]中的內(nèi)容相減存在BX中,然后用NEG來求反,即為第一個數(shù)減去第二個數(shù)的差,顯示BX的內(nèi)容即為差。乘法:先輸入第一個小

11、于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,把BX的值給AX,然后讓AX乘以[SI],然后再分別將DX,AX中的內(nèi)容賦給BX,接著依次顯示DX,AX的內(nèi)容,即為積。除法:先輸入第一個小于4位十六進(jìn)制數(shù)存入SI中,在輸入第二個小于4位十六進(jìn)制數(shù)存入BX中,將[SI]賦給AX作被除數(shù),讓BX作除數(shù),得到的商存放在AX中,余數(shù)放在DX中,然后依次賦給BX,將其依次顯示即為商。</p><p>

12、  4.3 十進(jìn)制轉(zhuǎn)換設(shè)置</p><p>  要完成十進(jìn)制轉(zhuǎn)換成十六,一般采用除十六取余法來完成,其大致過程如下:將待轉(zhuǎn)換的數(shù)除以16得到第一個商和余數(shù),此第一個余數(shù)就是所求的十六進(jìn)制數(shù)的各位,再用第一個商除以16,得到第二個商和余數(shù),此第二個余數(shù)就是所求十六進(jìn)制數(shù)的十位,重復(fù)這一過程直至商為0,此時的余數(shù)就是所求十六進(jìn)制數(shù)的最高位。在內(nèi)存中分配一緩沖區(qū),用來存放以上分離出來的使十進(jìn)制數(shù)的每一位,然后再逐個轉(zhuǎn)換

13、成ASCII碼,轉(zhuǎn)換成ASCII碼的過程很簡單,就是給每個十六進(jìn)制位加上30H即可,最后送顯示器輸出。</p><p>  圖4-1 加法、減法的運算的截圖</p><p>  圖4-2 除法、乘法的運算及退出程序的截圖</p><p>  圖4-3 四則運算計算器操作流程</p><p><b>  5 使用說明</b>

14、;</p><p>  (1)按照提示選擇數(shù)字1,2,3,4.</p><p>  (2)1:加法 ADD。</p><p>  (3)2:減法 SUB。</p><p>  (4)3:乘法 MUL。</p><p>  (5)4:除法 DIV。</p><p>  (6)輸入一個小于四位的任意

15、進(jìn)制的數(shù),回車。</p><p>  (7)再輸入一個小于四位的任意進(jìn)制的數(shù),回車。</p><p><b>  (8)顯示結(jié)果。</b></p><p>  (9)退出按Q,選擇Y或N。</p><p><b>  6 設(shè)計總結(jié)</b></p><p>  匯編語言的課程設(shè)

16、計已經(jīng)結(jié)束,這門課程在檢驗我們學(xué)習(xí)成績的同時,也檢驗了我們的學(xué)習(xí)效果。我選擇的是設(shè)計一種任意數(shù)制間轉(zhuǎn)換的計算器,用到了基本上我所會的全部知識,但是在程序運行的過程中總是出現(xiàn)這樣那樣的問題,有的是我打程序打錯了代碼,有的是我理解錯了知識點,導(dǎo)致程序錯誤。但在老師的一一校驗下,問題都一一的被解決。通過了這次設(shè)計,更加深了我對匯編語言的使用技巧,和做事的認(rèn)真態(tài)度。匯編語言作為一種低級語言,編寫程序起來本來就很吃力,很少的幾種指令和代碼。就增大

17、了設(shè)計的難度。所以選擇正確的設(shè)計方法尤為重要。但在我認(rèn)真看了一寫參考書,和老師討論之后。思路變得越來越清晰,最終屬于我自己的課程設(shè)計程序研發(fā)成功。雖然很簡單,但是我很快樂,因為作為一名計算機(jī)學(xué)院的學(xué)生,能設(shè)計出自己的作品感到很光榮。</p><p><b>  7 程序清單</b></p><p>  IN16 MACRO ;完成從鍵盤接受二個數(shù)并轉(zhuǎn)

18、換為十六制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 </p><p>  LEA DX,PR ;DX指向PR換行</p><p>  CALL OUTPUT ;</p><p>  LEA DX,INPUT1 ;DX指向INPUT1,提示輸入第一個數(shù)</p><p>  CALL OUTPUT &

19、lt;/p><p>  CALL INPUT ;把輸入的數(shù)存放在BX中</p><p>  LEA SI,RESULT ;SI指向RESULT</p><p>  MOV [SI],BX ;把第一個十六制數(shù)存入RESULT的第一個位置</p><p>  LEA DX,PR ;DX

20、指向PR,換行</p><p>  CALL OUTPUT </p><p>  LEA DX,INPUT2 ;DX指向INPUT2,提示輸入第一個數(shù)</p><p>  CALL OUTPUT </p><p>  CALL INPUT ;把輸入的數(shù)存放在BX中</p><p>

21、  ENDM ;宏結(jié)束</p><p>  DATA SEGMENT ;數(shù)據(jù)段</p><p>  BUF DB ' ',0DH,0AH</p><p>  DB '*------- WELCOME TO CALCULATOR SYSTEM ---------*',0DH,0AH</p

22、><p>  DB '*---1:ADD--2:SUB--3:MUL--4:DIV--0:QUIT---------*',0DH,0AH</p><p>  DB '*------- MADE BY ZHOUZHIHAO -------------------*',0DH,0AH</p><p>  DB '*----------

23、 2009*6*26---------------*',ODH,OAH</p><p>  DB 0DH,0AH,'Please input the choose number:','$' </p><p>  INPUT1 DB 'Please input the first number xiao yu 4 wei:','

24、;$'</p><p>  INPUT2 DB 'Please input the second number xiao yu 4 wei:','$'</p><p>  RESULT DW ?,? ;存放鍵盤輸入的兩個十六制數(shù)</p><p>  WRO DB 'You input the number

25、is wrong,please input again:',0DH,0AH,'$'; </p><p>  PR DB 0DH,0AH,'$' ;將光標(biāo)移到下一行起始位置</p><p>  PR1 DB 'A + B=$'</p><p>  PR2 DB 'A - B=$'</p&

26、gt;<p>  PR3 DB 'A * B=$'</p><p>  PR4 DB 'A / B=$'</p><p>  PR5 DB '......$'</p><p>  PR6 DB 'Are you sure exit?(Y/N)$' </p><p>

27、  DATA ENDS ;數(shù)據(jù)段落定義結(jié)束</p><p>  CODE SEGMENT</p><p>  MAIN PROC FAR ;主函數(shù)</p><p>  ASSUME CS:CODE ,DS:DATA</p><p><b>  START:</b></p>&

28、lt;p>  MOV AX,DATA</p><p><b>  MOV DS,AX</b></p><p>  LEA DX,BUF ;DX指向BUF換行</p><p>  CALL OUTPUT ;調(diào)用顯示字符串函數(shù)換行</p><p>  SUB AX,AX

29、 ;AX清零</p><p>  CALL CHOOSE ;調(diào)用選擇函數(shù)</p><p>  JMP START ;跳轉(zhuǎn)到START</p><p>  RET </p><p><b>  MAIN ENDP</b></p><p&g

30、t;  INPUT PROC NEAR ;定義INPUT函數(shù),就是將從鍵盤輸入的數(shù)按原十六進(jìn)制數(shù)存放在BX中</p><p>  MOV BX,0 ;BX清零</p><p><b>  NEWCHAR:</b></p><p>  MOV AH,1 </p><p>  I

31、NT 21H ;接受鍵盤輸入一個字符</p><p>  CMP AL,0DH ;輸入的字符與回車比較</p><p>  JE EXIT ;是回車就結(jié)束 </p><p>  CMP AL,'A' ;與A比較</p><p>  JAE

32、 H0 ;大于等于就跳轉(zhuǎn)到H0 </p><p>  CMP AL,'0' ;與0比較</p><p>  JAE H1 ;大于等于就跳轉(zhuǎn)到H1 </p><p>  H0:SUB AL,37H ;由于41-A=37,完成把字母字符轉(zhuǎn)換成對應(yīng)的十六進(jìn)制數(shù)<

33、/p><p>  JMP ADDTO ;跳轉(zhuǎn)到ADDTO</p><p>  H1:SUB AL,30H ;把0到9的字符轉(zhuǎn)換成對應(yīng)的十六進(jìn)制數(shù)</p><p>  JMP ADDTO ;跳轉(zhuǎn)到ADDTO </p><p>  ADDTO: </p

34、><p>  MOV CL,4 ;相當(dāng)于讓BX乘以16</p><p>  SHL BX,CL ;將BX邏輯左移</p><p>  MOV AH,0 ;將AX清零</p><p>  ADD BX,AX ;AX+BX送到BX</p><p&g

35、t;  JMP NEWCHAR ;跳轉(zhuǎn)到NEWCHAR,把第二個輸入的字符存放到BX的第二位</p><p><b>  EXIT: RET</b></p><p>  INPUT ENDP</p><p>  OUTPUT PROC NEAR ;顯示字符串函數(shù)</p><p>  MOV AH,

36、09H</p><p><b>  INT 21H</b></p><p><b>  RET</b></p><p>  OUTPUT ENDP</p><p>  CHOOSE PROC NEAR ;選擇函數(shù)</p><p>  MOV AH,1

37、 ;從鍵盤接受一個數(shù)</p><p><b>  INT 21H</b></p><p>  CMP AL,'1' ;與1比較</p><p>  JE YES1 ;等于1就跳轉(zhuǎn)到Y(jié)ES1,進(jìn)行加法</p><p>  CMP AL,'2'

38、 ;與1比較</p><p>  JE YES2 ;等于2就跳轉(zhuǎn)到Y(jié)ES2,進(jìn)行減法</p><p>  CMP AL,'3' ;與1比較 </p><p>  JE YES3 ;等于3就跳轉(zhuǎn)到Y(jié)ES2,進(jìn)行乘法</p><p>  CMP AL,&

39、#39;4' ;與1比較</p><p>  JE YES4 ;等于4就跳轉(zhuǎn)到Y(jié)ES2,進(jìn)行除法</p><p>  CMP AL,'0' ;與0比較</p><p>  JE EXIT1 ;等于4就跳轉(zhuǎn)到EXIT1,結(jié)束程序</p><p&

40、gt;  CALL WRONG ;如果不是0到4之間的數(shù)就提示出錯</p><p>  EXIT1: LEA DX,PR ;DX指向PR換行</p><p>  CALL OUTPUT </p><p>  LEA DX,PR6 ;DX指向PR6,確認(rèn)是否退出</p><p>  CALL OUT

41、PUT </p><p>  MOV AH,1 ;從鍵盤接受一個數(shù)</p><p><b>  INT 21H</b></p><p>  CMP AL,'Y' ;與Y比較</p><p>  JE EXIT0 ;不是Y就看是否為y<

42、/p><p>  CMP AL,'y' ;與y比較</p><p>  JNE START ;不是y就跳轉(zhuǎn)到START</p><p>  EXIT0:MOV AH,4CH ;結(jié)束本程序</p><p><b>  INT 21H</b></p>&l

43、t;p>  YES1:CALL JIA ;調(diào)用JIA函數(shù)</p><p>  JMP START ;調(diào)用完之后跳轉(zhuǎn)到START</p><p>  YES2:CALL JIAN ;調(diào)用JIAN函數(shù)</p><p>  JMP START ;調(diào)用完之后跳轉(zhuǎn)到START</p><p

44、>  YES3:CALL CHENG ;調(diào)用CHENG函數(shù)</p><p>  JMP START ;調(diào)用完之后跳轉(zhuǎn)到START</p><p>  YES4:CALL CHU ;調(diào)用CHU函數(shù)</p><p>  RET </p><p>  CHOOSE ENDP

45、 ;選擇函數(shù)結(jié)束</p><p>  WRONG PROC NEAR ;報錯函數(shù)</p><p>  LEA DX,PR ;DX指向PR換行</p><p>  LEA DX,WRO ;DX指向WRO,提示輸入有錯,請重新輸入</p><p>  JMP START ;

46、跳轉(zhuǎn)到START</p><p><b>  RET </b></p><p>  WRONG ENDP ;報錯函數(shù)結(jié)束</p><p>  JIA PROC NEAR ;加法函數(shù)</p><p>  IN16 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)

47、由SI指向,第二個數(shù)存放在BX中 </p><p>  ADD BX,[SI] ;把第一個數(shù)加第二個數(shù)存放到BX中</p><p>  LEA DX,PR ;DX指向PR,換行</p><p>  CALL OUTPUT </p><p>  LEA DX,PR1 ;DX指向PR1,顯

48、示‘A + B=’</p><p>  CALL OUTPUT </p><p>  CALL OUTBX ;調(diào)用顯示BX寄存器的內(nèi)容函數(shù)</p><p><b>  RET</b></p><p>  JIA ENDP ;加法結(jié)束</p><p>  

49、JIAN PROC NEAR ;減法函數(shù)</p><p>  IN16 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 </p><p>  SUB BX,[SI] ;第二個數(shù)減第一個數(shù),結(jié)果存放到BX中</p><p>  NEG BX ;對結(jié)果取反

50、后才是A-B的值,才是第一個數(shù)減去第二個數(shù)</p><p>  LEA DX,PR ;DX指向PR,換行</p><p>  CALL OUTPUT </p><p>  LEA DX,PR2 ;DX指向PR2,顯示‘A - B=’</p><p>  CALL OUTPUT </p>

51、<p>  CALL OUTBX ;調(diào)用顯示BX寄存器的內(nèi)容</p><p><b>  RET</b></p><p>  JIAN ENDP ;加法函數(shù)結(jié)束</p><p>  CHENG PROC NEAR ;乘法函數(shù)</p><p>  IN16

52、 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)由SI指向,第二個數(shù)存放在BX中 </p><p>  MOV DX,0 ;把DX清零</p><p>  MOV AX,BX ;把第二個數(shù)賦給AX </p><p>  MUL WORD PTR[SI] ;AX乘[SI]并把結(jié)果存放到DX,AX中

53、,是字的操作</p><p>  MOV BX,AX ;將AX賦給BX</p><p>  PUSH BX ;將BX壓棧,顯示下面DX的內(nèi)容時要將DX的值賦給BX</p><p>  PUSH DX ;將DX壓棧,因為下面要換行輸出,會改變DX的值</p><p>  LEA

54、 DX,PR ;DX指向PR,換行輸出</p><p>  CALL OUTPUT </p><p>  LEA DX,PR3 ;DX指向PR3,顯示‘A * B=’</p><p>  CALL OUTPUT </p><p>  POP DX ;將DX出棧,要將做乘法

55、后DX的內(nèi)容顯示出來</p><p>  MOV BX,DX ;把DX給BX</p><p>  CALL OUTBX ;顯示DX的內(nèi)容</p><p>  POP BX ;將BX出棧</p><p>  CALL OUTBX ;顯示AX的內(nèi)容</p>

56、;<p><b>  RET</b></p><p>  CHENG ENDP ;乘法函數(shù)結(jié)束</p><p>  CHU PROC NEAR ;除法函數(shù)</p><p>  IN16 ;調(diào)用宏,接受鍵盤輸入的兩個十六進(jìn)制數(shù),第一個數(shù)SI指向,第二個數(shù)存放在BX中<

57、/p><p>  MOV AX,[SI] ;將第一個數(shù)賦給AX</p><p>  MOV DX,0 ;將DX清零</p><p>  DIV BX ;AX除BX,結(jié)果存放到DX,AX,DX存放余數(shù),AX存放商</p><p>  PUSH DX ;壓棧DX&

58、lt;/p><p>  PUSH AX ;壓棧AX</p><p>  LEA DX,PR ;DX指向PR,換行</p><p>  CALL OUTPUT </p><p>  LEA DX,PR4 ;DX指向PR4,顯示‘A / B=’</p><p>

59、  CALL OUTPUT </p><p>  POP AX ;出棧AX</p><p>  MOV BX,AX ;將AX賦給BX,將商給BX</p><p>  CALL OUTBX ;顯示AX寄存器的內(nèi)容,即顯示商</p><p>  LEA DX,PR5

60、 ;DX指向PR5,顯示省略號</p><p>  CALL OUTPUT </p><p>  POP DX ;出棧DX</p><p>  MOV BX,DX ;將DX賦給BX,即將余數(shù)賦給BX,</p><p>  CALL OUTBX ;顯示DX寄存器的內(nèi)容,顯示

61、余數(shù)</p><p>  RET </p><p>  CHU ENDP ;除法函數(shù)結(jié)束</p><p>  OUTBX PROC NEAR ;顯示BX寄存器的內(nèi)容函數(shù)</p><p>  MOV CH,4 ;CH等于4</p><p>  ROTA

62、TE:MOV CL,4 ;CL等于4</p><p>  ROL BX,CL ;將BX循環(huán)左移4位</p><p>  MOV AL,BL ;將BL賦給AL</p><p>  AND AL,0FH ;將AL的高位置0</p><p>  ADD AL,30H

63、 ;AL+30H可將AL變?yōu)閷?yīng)的ASCII的值</p><p>  CMP AL,3AH ;判斷是否是0-9之間</p><p>  JL PRINTIT ;是則跳轉(zhuǎn)到PRINTIT</p><p>  ADD AL,7H ;是A-F再加上7H</p><p>  PRINTIT:MO

64、V DL,AL ;將AL賦給DL</p><p>  MOV AH,2 </p><p>  INT 21H ;顯示AL</p><p>  DEC CH ;CH-1再賦給CH</p><p>  JNZ ROTATE ;CH!=0則跳轉(zhuǎn)到ROTATE<

65、/p><p>  RET ;CH=0則結(jié)束</p><p>  OUTBX ENDP ;顯示寄存器BX內(nèi)容函數(shù)結(jié)束</p><p><b>  CODE ENDS</b></p><p><b>  END MAIN</b></p><

66、;p><b>  黑龍江科技學(xué)院</b></p><p><b>  課程設(shè)計任務(wù)書</b></p><p>  一、設(shè)計題目: </p><p>  二、設(shè)計的主要內(nèi)容::

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論