匯編語(yǔ)言課程設(shè)計(jì)--簡(jiǎn)單計(jì)算器設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩20頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  《微機(jī)原理與應(yīng)用》</b></p><p><b>  課程設(shè)計(jì)</b></p><p>  實(shí)驗(yàn)題目:簡(jiǎn)單計(jì)算器設(shè)計(jì)</p><p><b>  2013年01月</b></p><p><b>  目錄</b></p

2、><p>  1設(shè)計(jì)目的·································

3、·······1</p><p>  2概要設(shè)計(jì)·························

4、;···············2</p><p>  2.1系統(tǒng)總體分析················

5、·······················2</p><p>  2.2程序流程圖及說(shuō)明········

6、;···························3</p><p>  3詳細(xì)設(shè)計(jì)····

7、3;···································5</p&

8、gt;<p>  3.1主模塊及子模塊說(shuō)明································

9、····5</p><p>  3.2各模塊詳細(xì)設(shè)計(jì)···························

10、··········10</p><p>  4程序調(diào)試·····················

11、3;··················13</p><p>  4.1調(diào)試過(guò)程及分析············

12、83;······················13</p><p>  4.2運(yùn)行界面分析········

13、83;···························13</p><p>  5心得體會(huì)····&

14、#183;···································17<

15、;/p><p>  5.1設(shè)計(jì)體會(huì)································&

16、#183;·······17</p><p>  5.2系統(tǒng)改進(jìn)·······················

17、83;················17</p><p>  參考文獻(xiàn)···············&#

18、183;··························18</p><p><b>  1設(shè)計(jì)目的</b></p>

19、<p>  匯編語(yǔ)言是計(jì)算機(jī)能夠提供給用戶(hù)使用的最快而又最有效的語(yǔ)言。同時(shí),匯編語(yǔ)言也是能夠利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的唯一語(yǔ)言。因而,對(duì)程序的空間和時(shí)間要求很高的場(chǎng)合,匯編語(yǔ)言的應(yīng)用是必不可少的。至于很多需要直接控制硬件的應(yīng)用場(chǎng)合,則更是非用匯編語(yǔ)言不可。由于匯編語(yǔ)言如此地接近計(jì)算機(jī)硬件,因此,它可以最大限度地發(fā)揮計(jì)算機(jī)硬件的性能。用匯編語(yǔ)言編寫(xiě)的程序速度通常要比高級(jí)語(yǔ)言快幾倍、幾十倍、甚至成百上千倍,解釋語(yǔ)言

20、其程序速度更無(wú)法與匯編語(yǔ)言程序同日而語(yǔ)。 </p><p>  本次課程設(shè)計(jì)的題目是用匯編語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,要求:編寫(xiě)一個(gè)程序,每運(yùn)行一次可執(zhí)行程序,可以實(shí)現(xiàn)加減乘除四則運(yùn)算。計(jì)算器是最簡(jiǎn)單的計(jì)算工具,簡(jiǎn)單計(jì)算器具有加、減、乘、除四項(xiàng)運(yùn)算功能。通過(guò)使用匯編語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,以此進(jìn)一步了解和掌握對(duì)數(shù)據(jù)存儲(chǔ),寄存器的使用,加減乘除相關(guān)指令以及模塊的調(diào)用等匯編語(yǔ)言知識(shí)的有效運(yùn)用。本次課程設(shè)計(jì)以實(shí)現(xiàn)一個(gè)基本

21、功能完善,界面友好,操作簡(jiǎn)便易行的計(jì)算器為最終目的。通過(guò)對(duì)具有加減乘除基本功能的計(jì)算器的設(shè)計(jì)實(shí)現(xiàn),學(xué)會(huì)使用匯編語(yǔ)言實(shí)現(xiàn)輸入輸出模塊的設(shè)計(jì),模塊合理調(diào)用的設(shè)計(jì),加減乘除運(yùn)算的判斷以及退出程序的判斷的設(shè)計(jì)。通過(guò)對(duì)各種指令的合理使用,熟悉并加深對(duì)各種指令的用法。學(xué)會(huì)使用匯編語(yǔ)言設(shè)計(jì)各個(gè)功能模塊。當(dāng)實(shí)現(xiàn)各個(gè)程序模塊后,學(xué)會(huì)通過(guò)程序的調(diào)用最終實(shí)現(xiàn)一個(gè)具有基本計(jì)算功能的簡(jiǎn)單計(jì)算器。</p><p><b>  2概

22、要設(shè)計(jì)</b></p><p>  2.1 系統(tǒng)總體分析 </p><p>  本次匯編語(yǔ)言課程設(shè)計(jì)的最終目的是要實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器,要求編寫(xiě)一個(gè)程序,每運(yùn)行一次可執(zhí)行程序,可以實(shí)現(xiàn)數(shù)的加減乘除四則運(yùn)算。比如,十進(jìn)制數(shù)的加減乘除四則運(yùn)算。我們?cè)?jīng)學(xué)習(xí)過(guò)兩個(gè)具體數(shù)字進(jìn)行加減法運(yùn)算,但是對(duì)于簡(jiǎn)單計(jì)算器用匯編語(yǔ)言實(shí)現(xiàn)難點(diǎn)在于這兩個(gè)要做運(yùn)算的數(shù)是未知的,是由自己調(diào)用中斷輸入到屏幕上并要

23、用程序存儲(chǔ)起來(lái)的數(shù),然后才能對(duì)這兩個(gè)數(shù)進(jìn)行運(yùn)算,而且做的是加法運(yùn)算、減法運(yùn)算乘法運(yùn)算還是除法運(yùn)算也未可知,為此我們還要判斷用戶(hù)所輸入的運(yùn)算是四則運(yùn)算中的哪一個(gè)運(yùn)算。此外,運(yùn)算過(guò)程中的進(jìn)位或是借位,選擇用什么樣的方式進(jìn)行輸出,如何實(shí)現(xiàn)清屏等也是要解決的問(wèn)題。 </p><p>  第一步,我要解決的是輸入時(shí)是用INT 21H的10號(hào)功能調(diào)用還是用INT 21H的1號(hào)功能調(diào)用來(lái)進(jìn)行輸入。若是用10號(hào)功能調(diào)用則我們進(jìn)行

24、多字符輸入,可以將輸入的字符都存儲(chǔ)到一個(gè)數(shù)據(jù)區(qū)里面,并調(diào)用9號(hào)功能調(diào)用輸出存進(jìn)去的字符,這種輸入和輸出的方案是可行的。我選擇的是利用1號(hào)功能調(diào)用來(lái)輸入,即把單個(gè)字符一個(gè)個(gè)的輸入并存儲(chǔ)到一個(gè)數(shù)據(jù)區(qū)里。我們要做的是兩個(gè)數(shù)的運(yùn)算,先認(rèn)定輸入的格式為1234+5678=或者1111*2222=,當(dāng)然如果輸入不是這樣的格式計(jì)算出來(lái)的結(jié)果就不一定是我們想要的結(jié)果了。在存儲(chǔ)的時(shí)候也是有選擇的存儲(chǔ),當(dāng)輸入的并非格式里所要求的字符時(shí)則報(bào)錯(cuò)。 </p

25、><p>  第二步,設(shè)計(jì)程序進(jìn)行判斷所輸入的算式是做加法運(yùn)算、減法運(yùn)算、乘法運(yùn)算還是除法運(yùn)算,即判斷輸入的運(yùn)算符是‘+’號(hào)、‘-’號(hào)、‘*’號(hào)、‘/’號(hào)中的哪一個(gè),因?yàn)檩斎氲母袷焦潭?,所以只需要把存進(jìn)數(shù)據(jù)區(qū)的第三個(gè)字符拿來(lái)與加減乘除四個(gè)運(yùn)算符號(hào)進(jìn)行比較,和哪一個(gè)運(yùn)算符號(hào)一樣就調(diào)用相對(duì)應(yīng)的運(yùn)算模塊進(jìn)行計(jì)算。 </p><p>  第三步,根據(jù)計(jì)算器程序所要實(shí)現(xiàn)的功能完成各個(gè)功能模塊。設(shè)計(jì)程序

26、主體部分,根據(jù)主體部分所需的功能模塊對(duì)各個(gè)子模塊一一進(jìn)行設(shè)計(jì)編寫(xiě)。子模塊中包含有:do_add加法運(yùn)算模塊,do_sub減法運(yùn)算模塊,do_mul乘法運(yùn)算模塊,do_div除法運(yùn)算模塊,input輸入模塊等。 </p><p>  最后還要對(duì)這個(gè)簡(jiǎn)易計(jì)算器進(jìn)行功能完善。為了使程序符合我們使用者的操作習(xí)慣,設(shè)計(jì)當(dāng)用戶(hù)根據(jù)提示信息輸入一個(gè)算式后,按下enter鍵或是‘=’符號(hào)鍵時(shí),程序依據(jù)輸入的算式進(jìn)行計(jì)算,并將結(jié)果

27、顯示在屏幕上。如果用戶(hù)輸入錯(cuò)誤,則返回,提示信息讓用戶(hù)重新輸入算式,當(dāng)用戶(hù)按下Q或q鍵時(shí)退出程序。在各個(gè)子功能模塊設(shè)計(jì)好的情況下,通過(guò)主題模塊的合理調(diào)用,最終實(shí)現(xiàn)一個(gè)具有簡(jiǎn)單運(yùn)算功能的計(jì)算器</p><p>  2.2 程序流程圖及說(shuō)明 </p><p>  此程序流程圖簡(jiǎn)要地表現(xiàn)出了所要實(shí)現(xiàn)的功能以及一些功能的大概算法,同時(shí)也是我編寫(xiě)的程序的一個(gè)總體的框架。 程序流程圖說(shuō)明:通過(guò)流程圖,

28、可以看出程序開(kāi)始運(yùn)行時(shí),首先輸出提示語(yǔ)句,當(dāng)用戶(hù)輸入后,程序根據(jù)所輸入的內(nèi)容進(jìn)行判斷,通過(guò)判斷的結(jié)果來(lái)決定調(diào)用哪個(gè)功能模塊,首先要判斷輸入的字符是否為Q或q,若是,則退出程序,不是則繼續(xù)輸入。還要判斷輸入的是否為0--9,‘+’,‘-’,‘*’,‘/’這些字符,若不是會(huì)報(bào)錯(cuò),是則將根據(jù)運(yùn)算符號(hào)調(diào)用相應(yīng)的功能模塊完成運(yùn)算。最后將運(yùn)算的結(jié)果顯示在屏幕上,并返回主題程序,使用戶(hù)可以重新輸入。 程序流程圖如圖2-1所示</p>&

29、lt;p><b>  3詳細(xì)設(shè)計(jì)</b></p><p>  3.1 主模塊及子模塊說(shuō)明</p><p>  主題模塊實(shí)現(xiàn)變量的定義,提示輸入信息的顯示,調(diào)用各個(gè)功能子模塊,判斷輸入的內(nèi)容是否符合要求,如果符合要求,則按照用戶(hù)所輸入的運(yùn)算符即‘+’‘-’‘*’‘/’來(lái)調(diào)用加減乘除等子模塊完成運(yùn)算。當(dāng)用戶(hù)鍵入‘enter’鍵或者‘=’鍵時(shí)將結(jié)果顯示在屏幕上。在此,

30、對(duì)變量的定義類(lèi)型進(jìn)行說(shuō)明,因?yàn)楸敬握n程設(shè)計(jì)所要求設(shè)計(jì)的計(jì)算器要能夠?qū)λ奈粩?shù)進(jìn)行加減乘除運(yùn)算,所以我使用DD偽指令將x、y、z三個(gè)變量定義為雙字變量。 </p><p>  子模塊說(shuō)明:主要的子模塊是input子模塊,功能是輸入;do_add子模塊,功能是完成加法運(yùn)算;do_sub子模塊,功能是完成減法運(yùn)算;do_mul子模塊,功能是完成乘法運(yùn)算;do_div子模塊,功能是完成除法運(yùn)算。其它模塊將在模塊詳細(xì)設(shè)計(jì)部分

31、中進(jìn)行說(shuō)明。 </p><p>  程序主題部分源代碼如下:</p><p>  CURS MACRO A,B</p><p>  MOV AH,2 ;置光標(biāo)位置</p><p>  MOV BH,0 ;頁(yè)號(hào)為0</p><p>  MOV DH

32、,A ;設(shè)置光標(biāo)的坐標(biāo)為(A.B)</p><p>  MOV DL,B</p><p>  INT 10H ;BIOS調(diào)用</p><p><b>  ENDM</b></p><p>  ;-------------------------------</p

33、><p>  DISPMSG MACRO MESSAGE</p><p>  LEA DX,MESSAGE ;傳遞MESSAGE的偏移地址</p><p>  MOV AH,9 ;顯示字符串</p><p>  INT 21H ;DOS調(diào)用</p><

34、;p><b>  ENDM</b></p><p>  ;----------------------------------</p><p>  CLEAR MACRO COLOR ;清屏</p><p>  MOV AH,6 ;屏幕初始化

35、 </p><p>  MOV AL,0 ;頁(yè)號(hào)</p><p>  MOV CH,0 ;設(shè)置左上角的坐標(biāo)為(0,0)</p><p>  MOV CL,0</p><p>  MOV DL,100 ;設(shè)置右上角的坐標(biāo)為(100,100)</p&g

36、t;<p>  MOV DH,100</p><p>  MOV BH,COLOR ;卷入行屬性</p><p>  INT 10H ;BIOS調(diào)用</p><p><b>  ENDM</b></p><p>  .MODEL SMA

37、LL</p><p><b>  .STACK</b></p><p>  .DATA ;數(shù)據(jù)段定義</p><p>  MSG0 DB ' _____________________________________ ',0DH,0AH

38、 ;,0dh,0ah,0dh,0ah</p><p>  DB ' | |',0DH,0AH</p><p>  | |',0dh,0ah</p><

39、;p>  | |',0dh,0ah</p><p>  DB ' | -----counter------ |',0DH,0AH ;,0dh,0ah,0dh,0ah</p><p>  DB

40、 ' | |',0DH,0AH</p><p>  DB ' | |',0DH,0AH</p><p>  DB

41、 ' | |',0DH,0AH</p><p>  DB ' | data1:'DB '______________ |',0DH,0AH ;,0dh,0ah,0dh

42、,0ah,0dh</p><p>  DB ' | |',0DH,0AH</p><p>  DB ' | |'

43、,0DH,0AH</p><p>  DB ' | |',0DH</p><p>  DB ' | data2:' DB '______________

44、|',0DH,0AH ;,0dh,0ah,0dh,0ah,0dh</p><p>  DB ' | |',0DH,0AH</p><p>  DB ' |

45、 |',0DH,0AH</p><p>  DB ' | |',0DH</p><p>  DB ' | result:

46、9;DB '__________ |',0DH,0AH,0DH ;,0ah,0dh,0ah,0dh,0ah</p><p>  DB ' | |',0DH,0AH</p><p>  DB '

47、 | |',0DH,0AH</p><p>  DB ' | |',0DH,0AH</p><p>  DB '

48、 | |',0DH,0AH</p><p>  DB ' | |',0DH,0AH</p><p>  DB '

49、 |_____________________________________|','$'</p><p>  MSG1 DB 'choose +,-,*,/','$'</p><p>  MSG2 DB 'you choose wrong','$

50、',0AH,0DH</p><p>  MSG3 DB 'Press ESC to Exit!',0DH,0AH,'$'</p><p>  MSG4 DB 'Press any key to continue!',0DH,0AH,'$'</p><p>  MS

51、G5 DB '-','$'</p><p>  MSG6 DB '.','$'</p><p>  MSG7 DB 'error input!','$'</p><p>  MSG8 DB 'data

52、2 is wrong!','$'</p><p>  F_AL DB ?</p><p>  DATA1 DW ?</p><p>  DATA2 DW ?</p><p>  .CODE ;代碼段從這里開(kāi)始</p><p&

53、gt;  ;--------------------------------------------</p><p>  DEC_DIV PROC NEAR</p><p>  CWD ;將字轉(zhuǎn)換為雙字,AX內(nèi)容符號(hào)擴(kuò)展到DX</p><p>  DIV CX</p><p>  P

54、USH DX</p><p>  MOV DL,AL</p><p>  ADD DL,30H ;將不是數(shù)字的字符轉(zhuǎn)換為數(shù)字</p><p>  MOV AH,2 ;顯示輸出</p><p>  INT 21H ;DOS調(diào)用</p>

55、<p>  POP DX</p><p>  MOV AX,DX</p><p><b>  RET</b></p><p>  DEC_DIV ENDP</p><p>  ;------------------------------------------</p>

56、<p>  CHANGE PROC NEAR </p><p>  ;該子程序的功能:將AX中存儲(chǔ)的十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)</p><p>  CMP AX,1000</p><p>  JAE C1 ;AX≥1000則轉(zhuǎn)移</p><p>  CMP

57、 AX,100</p><p>  JAE C2 ;AX≥100則轉(zhuǎn)移</p><p>  CMP AX,10</p><p>  JAE C3 ;AX≥10則轉(zhuǎn)移</p><p>  JMP C4 ;AX<10</p>&l

58、t;p>  C1: MOV CX,1000D</p><p>  CALL DEC_DIV</p><p>  C2: MOV CX,100D</p><p>  CALL DEC_DIV</p><p>  C3: MOV CX,10D</p><p&g

59、t;  CALL DEC_DIV</p><p>  C4: MOV CX,1D</p><p>  CALL DEC_DIV</p><p><b>  RET</b></p><p>  CHANGE ENDP</p><p>  ;------------

60、-------------------</p><p>  BEGIN PROC NEAR</p><p>  BACK: CLEAR 1EH</p><p>  CURS 2,20 ;設(shè)置光標(biāo)為(2.20)</p><p>  DISPMSG MSG0 ;顯示用戶(hù)界面</

61、p><p>  CURS 8,41 ;設(shè)置光標(biāo)為(8,41) ,第一行</p><p>  MOV BX,0</p><p>  MOV CX,2</p><p><b>  NEWCHAR1:</b></p><p>  MOV AH,1

62、 ;鍵盤(pán)輸入并回顯</p><p>  INT 21H ;DOS調(diào)用</p><p>  CMP AL,30H ;檢查輸入的字符是不是數(shù)字</p><p>  JAE J1 ;如果不是,則轉(zhuǎn)移至J1</p><p>  JMP D2

63、 ;是,轉(zhuǎn)移到D2執(zhí)行</p><p>  J1: CMP AL,39H ; 與9的ASCII侶氡</p><p>  JBE J2 ;如果輸入的字符是0-9,則轉(zhuǎn)移至J2</p><p>  JMP D2 ;如果不是數(shù)字,則轉(zhuǎn)移至D2</p><p>

64、  J2: SUB AL,30H</p><p>  CBW ;AL的內(nèi)容符號(hào)擴(kuò)展到AH</p><p>  XCHG AX,BX</p><p>  MOV DI,10</p><p>  MUL DI</p><p>  XC

65、HG AX,BX</p><p>  ADD BX,AX</p><p>  LOOP NEWCHAR1</p><p>  MOV DATA1,BX</p><p>  CURS 11,41 ;設(shè)置光標(biāo)位為(11,40),第二行</p><p>  M

66、OV BX,0</p><p>  MOV CX,2</p><p><b>  NEWCHAR2:</b></p><p>  MOV AH,1 ;鍵盤(pán)輸入并回顯</p><p>  INT 21H ;DOS調(diào)用</p><

67、;p>  CMP AL,30H ;與0的ASCII碼比較</p><p>  JAE J3 ;如果輸入數(shù)字大于等于0則跳轉(zhuǎn)至J3</p><p>  JMP D2</p><p>  J3: CMP AL,39H ;與9比較</p><p>  JBE

68、 J4 ;如果小于或等于9則跳轉(zhuǎn)</p><p>  JMP D2 ;如果輸入不是數(shù)字則跳轉(zhuǎn)</p><p>  J4: SUB AL,30H ;如果輸入不是0-9,則轉(zhuǎn)化成相應(yīng)的字符</p><p>  CBW ;將AL符號(hào)擴(kuò)展到AH<

69、;/p><p>  XCHG AX,BX</p><p>  MOV DI,10</p><p>  MUL DI</p><p>  XCHG AX,BX</p><p>  ADD BX,AX</p><p>  LOOP NEW

70、CHAR2</p><p>  MOV DATA2,BX</p><p>  MOV AX,DATA1</p><p>  MOV BX,DATA2</p><p>  PUSH AX</p><p>  PUSH BX</p><p> 

71、 CURS 15,33 ;設(shè)置光標(biāo)的位置為(15.33),第三行</p><p>  DISPMSG MSG1 ;顯示提示信息</p><p>  MOV AH,1 ;接受鍵盤(pán)輸入并回顯</p><p>  INT 21H ;DOS調(diào)用</p><p&g

72、t;  CMP AL,'+'</p><p>  JE ADDI ;如果運(yùn)算符為+,則計(jì)算兩數(shù)之和</p><p>  CMP AL,'-'</p><p>  JE SUBT ;如果運(yùn)算符為-,則計(jì)算兩數(shù)之差</p><p>  

73、CMP AL,'*'</p><p>  JE MULT ;如果運(yùn)算符為*,則計(jì)算兩數(shù)之積</p><p>  CMP AL,'/'</p><p>  JE DIVI ;如果運(yùn)算符為/,則計(jì)算兩數(shù)之商</p><p>  CURS

74、 16,25 ;設(shè)置光標(biāo)為(16,25)</p><p>  DISPMSG MSG2 ;在屏幕上輸出提示信息</p><p>  JMP D1</p><p>  ;----------------------------------------</p><p>  ;----------

75、------------------------------</p><p>  MAIN PROC NEAR</p><p>  MOV AX,@DATA</p><p>  MOV DS,AX</p><p>  MOV ES,AX</p><p>  MOV

76、 AH,0FH</p><p>  INT 10H</p><p>  MOV BYTE PTR[F_AL],AL</p><p>  MOV AH,0</p><p>  PUSH DS</p><p>  XOR AX,AX</p><

77、;p>  PUSH AX</p><p>  MOV DATA2,0 ;將緩沖區(qū)清空</p><p>  MOV DATA1,0</p><p><b>  AGAIN:</b></p><p>  CALL BEGIN</p><p> 

78、 CURS 16,23 ;設(shè)置光標(biāo)位置為(16.23)</p><p>  DISPMSG MSG3 ;在屏幕上輸出提示信息,提示退出的方法</p><p>  CURS 17,23 ;設(shè)置光標(biāo)位置為(17.23)</p><p>  DISPMSG MSG4 ;在屏幕上輸出提示信息,提

79、示繼續(xù)的方法</p><p>  MOV AH,7 ;鍵盤(pán)輸入,無(wú)回顯</p><p>  INT 21H ;DOS調(diào)用</p><p>  CMP AL,27 ;判斷輸入的是否為ESC</p><p>  JNE AGAIN ;如果不是就繼

80、續(xù)執(zhí)行以上運(yùn)算</p><p>  EXIT: MOV AH,0</p><p>  MOV AL,BYTE PTR[F_AL]</p><p>  INT 10H</p><p>  MOV AX,4C00H ;如果是就退出系統(tǒng)</p><p>  INT

81、 21H ;DOS調(diào)用</p><p>  MAIN ENDP</p><p>  END MAIN</p><p>  3.2 各模塊詳細(xì)設(shè)計(jì)</p><p>  ;ADD THE TWO DATAS </p><p>  ADDI: POP BX<

82、/p><p>  POP AX</p><p>  ADD AX,BX ;計(jì)算兩數(shù)字之和</p><p>  PUSH AX</p><p>  CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p>  POP AX</p

83、><p>  CALL CHANGE ;將結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)</p><p>  JMP D1</p><p>  ;---------------------------------------</p><p>  ;SUBTRACT THE TWO DATAS</p><p>  SUB

84、T: POP BX</p><p>  POP AX</p><p>  CMP AX,BX ;比較兩數(shù)大小</p><p>  JAE D0 ;如果AX>=BX則跳轉(zhuǎn)</p><p>  XCHG AX,BX</p><p&g

85、t;  PUSH AX</p><p>  PUSH BX</p><p>  CURS 14,40 ;設(shè)置光標(biāo)位置為(14,40)</p><p>  DISPMSG MSG5 ;在屏幕上顯示負(fù)號(hào)</p><p>  POP BX</p><p>

86、;  POP AX</p><p>  D0: SUB AX,BX ;計(jì)算兩數(shù)之差</p><p>  PUSH AX</p><p>  CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p>  POP AX</p><p&

87、gt;  CALL CHANGE ;將結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)</p><p>  JMP D1</p><p>  ;---------------------------------------</p><p>  ;MULTIPLY THE TWO DATAS </p><p>  MULT: POP

88、 BX</p><p>  POP AX</p><p>  MUL BX ;計(jì)算兩數(shù)之積</p><p>  PUSH AX</p><p>  CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p>  POP

89、AX</p><p>  CALL CHANGE ;將結(jié)果轉(zhuǎn)換為十進(jìn)制數(shù)</p><p>  JMP D1</p><p>  ;---------------------------------------</p><p>  ;DIVIDE THE TWO DATAS</p><p>

90、;  DIVI: POP BX</p><p>  POP AX</p><p>  CMP BX,0 ;判斷除數(shù)是否為0</p><p>  JE ERROR ;如果是0則跳轉(zhuǎn)</p><p><b>  CWD</b></p>

91、<p>  DIV BX ;計(jì)算兩數(shù)之商</p><p>  PUSH DX</p><p>  PUSH AX</p><p>  CURS 14,41 ;設(shè)置光標(biāo)位置為(14,41)</p><p>  POP AX</p>&l

92、t;p>  CALL CHANGE ;將十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)</p><p>  POP DX</p><p>  CMP DX,0</p><p>  JNE LOP ;如果DX不等于0則跳轉(zhuǎn)</p><p>  JMP D1</p>

93、<p>  LOP: MOV CX,6 ;設(shè)置精確度為小數(shù)點(diǎn)后6位</p><p>  PUSH DX</p><p>  DISPMSG MSG6 ;輸出小數(shù)點(diǎn)</p><p>  POP DX</p><p>  CON: PUSH BX</

94、p><p>  MOV AX,DX</p><p>  MOV BX,10</p><p>  MUL BX</p><p>  POP BX</p><p>  CWD ;將AX的內(nèi)容符號(hào)擴(kuò)展到雙字</p><p>

95、;  DIV BX ;計(jì)算小數(shù)點(diǎn)后每一位的數(shù)字</p><p>  PUSH DX</p><p>  PUSH CX</p><p>  CALL CHANGE ;將十六進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù)</p><p>  POP CX</p><p&

96、gt;  POP DX</p><p>  CMP DX,0 ;判斷是否已經(jīng)計(jì)算到小數(shù)點(diǎn)后第六位</p><p>  JE D1 ;如果是,則跳轉(zhuǎn)</p><p>  LOOP CON ;如果不是,就繼續(xù)計(jì)算</p><p>  ERROR: C

97、URS 15,33 ;設(shè)置光標(biāo)位置為(15,33)</p><p>  DISPMSG MSG8 ;提示出錯(cuò)</p><p><b>  D1: RET</b></p><p>  D2: PUSH AX</p><p>  PUSH BX</p>

98、;<p>  CURS 15,33 ;設(shè)置光標(biāo)位置為(15,33)</p><p>  DISPMSG MSG7 ;提示輸入出錯(cuò)</p><p>  POP BX</p><p>  POP AX</p><p><b>  RET</b>&l

99、t;/p><p>  BEGIN ENDP</p><p><b>  4程序調(diào)試</b></p><p>  4.1調(diào)試過(guò)程及分析</p><p>  4.2 運(yùn)行界面分析</p><p><b>  加法</b></p><p><b> 

100、 減法</b></p><p><b>  乘法</b></p><p><b>  除法</b></p><p><b>  5心得體會(huì)</b></p><p><b>  5.1 設(shè)計(jì)體會(huì) </b></p><p>

101、  經(jīng)過(guò)這次課程設(shè)計(jì),我學(xué)到了很多東西,其中包括知識(shí)方面的,還有其他方面的。首先讓我認(rèn)識(shí)到,做好一件事,做成功一件事是不容易的,但是你只要堅(jiān)持不懈的努力,不斷的發(fā)揮自己的智慧去思索去探究,你會(huì)欣慰的發(fā)現(xiàn)自己正向著成功一步步邁進(jìn)。 </p><p>  這次課程設(shè)計(jì)使我對(duì)匯編語(yǔ)言程序設(shè)計(jì)這門(mén)課程有了進(jìn)一步的理解和認(rèn)識(shí),使我學(xué)到了許多編程語(yǔ)言以及算法設(shè)計(jì)方面的知識(shí),同時(shí)也鍛煉了我的耐心和意志,增長(zhǎng)了我的實(shí)踐能力。 &

102、lt;/p><p>  這次課程設(shè)計(jì)我所選的題目是使用匯編語(yǔ)言設(shè)計(jì)一個(gè)具有加減乘除基本運(yùn)算功能的簡(jiǎn)單計(jì)算器,要求編寫(xiě)一個(gè)程序,每運(yùn)行一次可執(zhí)行程序,可以實(shí)現(xiàn)加減乘除四則運(yùn)算。通過(guò)使用匯編語(yǔ)言設(shè)計(jì)實(shí)現(xiàn)簡(jiǎn)單計(jì)算器,我進(jìn)一步了解和掌握了對(duì)數(shù)據(jù)存儲(chǔ),寄存器的使用,加減乘除相關(guān)指令以及模塊的調(diào)用等匯編語(yǔ)言知識(shí)的有效運(yùn)用。本次課程設(shè)計(jì)以實(shí)現(xiàn)一個(gè)基本功能完善,界面友好,操作簡(jiǎn)便易行的計(jì)算器為最終目的,我通過(guò)對(duì)具有加減乘除基本功能的

103、計(jì)算器的設(shè)計(jì)實(shí)現(xiàn),學(xué)會(huì)了使用匯編語(yǔ)言實(shí)現(xiàn)輸入輸出模塊的設(shè)計(jì),模塊合理調(diào)用的設(shè)計(jì),加減乘除運(yùn)算的判斷以及退出程序的判斷的設(shè)計(jì)。在匯編語(yǔ)言程序設(shè)計(jì)中,我通過(guò)對(duì)各種指令的合理使用,熟悉并加深了對(duì)各種指令的用法,同時(shí)也學(xué)會(huì)使用匯編語(yǔ)言設(shè)計(jì)各個(gè)功能模塊。當(dāng)我實(shí)現(xiàn)各個(gè)程序模塊后,學(xué)會(huì)了通過(guò)程序的調(diào)用最終實(shí)現(xiàn)一個(gè)具有基本計(jì)算功能的簡(jiǎn)單計(jì)算器。在本次課程設(shè)中,我遇到了很多問(wèn)題。例如,在計(jì)完成具有輸入功能的模塊input模塊時(shí)我就遇到了困難。</p

104、><p>  通過(guò)一番努力后我發(fā)現(xiàn)利用int 21H中的01號(hào)功能調(diào)用可以較好的實(shí)現(xiàn)輸入功能,原因是Int 21H的01號(hào)功能調(diào)用可以直接接收鍵入的字符,當(dāng)有鍵按下時(shí),首先檢查是否是ctrl+break,若是,則執(zhí)行退出命令;否則將鍵值送入AL寄存器并回顯。 通過(guò)這次匯編語(yǔ)言程序課程設(shè)計(jì),我學(xué)到了許多東西,同時(shí)也發(fā)現(xiàn)了一些不足之處,在以后的學(xué)習(xí)中我會(huì)逐步彌補(bǔ)這些不足??偠灾?,此次課程設(shè)計(jì)使我受益匪淺。</p&

105、gt;<p><b>  5.2 系統(tǒng)改進(jìn) </b></p><p>  本次課程設(shè)計(jì)我雖然完成了題目的要求,但是其中也還存在一些不足之處,這些不足的地方有待與改進(jìn)與完善。系統(tǒng)需要改進(jìn)的地方有以下三點(diǎn):一,最主要的就是程序的健壯性不是很完善;二,對(duì)大數(shù)的加減乘除運(yùn)算功能不足;三,程序代碼算法的優(yōu)化不足。</p><p>  本次課程設(shè)計(jì)我認(rèn)為最需要改進(jìn)的

106、就是程序的健壯性。通過(guò)這次課程設(shè)計(jì),我發(fā)現(xiàn)一個(gè)好的匯編程序不僅要正確可行,還要有健壯性,當(dāng)用戶(hù)輸入數(shù)據(jù)非法,使運(yùn)行環(huán)境改變時(shí),程序能恰當(dāng)?shù)刈鞒龇磻?yīng)或進(jìn)行處理,不會(huì)產(chǎn)生莫名其妙的輸出結(jié)果。一個(gè)正確可行的算法如果缺乏健壯性,那么這個(gè)程序也不能算真正的成功。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 微型計(jì)算機(jī)原理與接口技術(shù) 呂林濤主編 北京

107、科學(xué)出版社,2005</p><p>  [2] 錢(qián)曉捷 新版匯編語(yǔ)言程序設(shè)計(jì) 北京電子工業(yè)出版社,2008</p><p>  [3] 劉麗莉 匯編語(yǔ)言程序設(shè)計(jì) 北京大學(xué)出版社,2010</p><p>  [4] 王爽 匯編語(yǔ)言 清華大學(xué)出版社,2008</p><p>  [5] 《零基礎(chǔ)入門(mén)學(xué)習(xí)匯編語(yǔ)言》 主講:小甲魚(yú)</p&g

溫馨提示

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

評(píng)論

0/150

提交評(píng)論