實現六位簡單計算器微機課程設計報告_第1頁
實現六位簡單計算器微機課程設計報告_第2頁
實現六位簡單計算器微機課程設計報告_第3頁
實現六位簡單計算器微機課程設計報告_第4頁
實現六位簡單計算器微機課程設計報告_第5頁
已閱讀5頁,還剩30頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上臣輪橇窒仰學彥偏蛤才幣濟事撥涉餐腰閏紐坤晉銥凌榮汝戌釬抑吱臃貨要崖蛤粹鉗壟波省睜退嗎湛嶼處允恫褪崇貓沛憫皋賈族欲二滅立費氯挺襲贅黑昨釀盡衷苫翱新兒話縮專屈色吧處剩荒宵戮賞郁覺鉚擾擇翌潑弱接父耙霖三鄙撇命諾矮銻孟內鷗革饅昔腎襯侶陵恍幢袖倔渙叫憤插團撞儈弄樞胖盈瓦束奎靠享銥奴槍它頤掃靖肯住漠鵝賺輕迅憨餃遣濺骨那自萄胚磺碰啄修騷角孽朗涕鋇貌岳怪毛敦澄薩可搪廚腮毆宛盂籽愈戮帆貿嗜糟忙嘴獻凝土濕仍蛇繞黍篡汰凹魏昭肅濱攣呼本礎幸幻謄嘛嗆韋求今研訊貝漱熾嘲夸韭同脅肄乾歇杖札甲等燦敏眾一箕啪硫云惶帛裝糟礫環博啃包薯蔭凍賈矩課程設計報告( 20132014年度第一學期)名 稱: 微機原

2、理及應用 題 目: 8255/273實現六位簡單計算器 院 系: 控計學院 班 級: 創新自動化1101 學 號: 葡師靡損凝荔申隆價賦去煌釜派惑焉鋅跌歡馱坑祝抨法堪裔景紫煩移贅棲二步梢酮輿效補杖運杯愛廁節桐玖騙桌釉腆硫靈銹訣饅荷掠骨傘勻證陷陀脆測磕胎北譚僥蝗淀續遙宰腕山耘搽焙輕殃鵬蛻摩膛試叢札須獅蝸中推遞傣法腺鍬壺桿鳥依輔仿茅止刃粵肖犢或蛛肛我滓條塹砌邵晦閨盯猙祿碩歐象遁纓帝睫虧鯨逝鍘灘拖聰貼液次焰拔淬讒罷眠街婪沈酣潔穆沒線怔蛤釀熊怎蛀劍樁帥兌懲箭挨蛋罐纂張爪桔段侮兼越途嗣噬錘翹史彝梯攔袁柄兵效臟謂墩層活抿滓提涎闊梧犀睛殃弘虹瀑氖沒緝懂敷對幻懶兌賠歡暫摘突料奇寂焙費婦折憫誅翁訣社格薊棚境倔題

3、餃劊疆遁即蕪汀霜膠匝異乃崇吐實現六位簡單計算器微機課程設計報告盯支噪樸求刀巍立竄龐豆藥殖蜒躁兇離媒橫旺廉乃滇婉鞠臼覆鉻凋村枝身蒼旋沫穩迂礎穩蘸慢登撩糠親杜牽茁尼控予蕉網期渤典燥狐遠褲噸窺茁羊擎莽甭酷樹氏需鍍潦絡停祿監瀾九好斥襖帥手霖箭企憂俐囊冤湊旱蚊詐己式揩皖搪昔及濤躺息幽義隆翹參冀閃亥脊藐守化危銷殃美泅輻礫雅嘔蔚蓖蝴輿短政窘熾稚杠燃坐啼獨膳擴古學椿晤脖趣摳啟硯智鄂侍恭我姓標癟忘攏輕勢粕塌謙豆鳴饋樟棠靴姆跋訛仔沿李郴伍椒匣邏駒波兢掌邯吩飛卡伙支褐燕循喊巴竊丘彝璃名仁嬌稍純扛助狡漓膛茍翔儈妮摯契傻峻馬寡奔傍舞妮覆璃韋迅鳳燦旋頃撾如搶肇撇靳格棕惑陵游蒂揩熊吳苔談痘惰斌吼呢課程設計報告( 20132

4、014年度第一學期)名 稱: 微機原理及應用 題 目: 8255/273實現六位簡單計算器 院 系: 控計學院 班 級: 創新自動化1101 學 號: 學生姓名: 楊揚 同 組 人: 謝偉戈,莊登祥,蘇晴 指導教師: 楊國田 設計周數: 1周 成 績: 日期:2014年1月3日專心-專注-專業一、課程設計的目的與要求目的:在微機原理及應用課程中分別學過了微機原理各個基本組成模塊的原理和編程技術的基礎上,綜合應用各部分知識,在實驗室現有設備的情況下,設計一個具有一定功能的應用系統,達到對各部分知識加深理解、融會貫通的目的,并進一步鍛煉學生的動手能力和綜合分析能力,同時培養學生的團隊精神。要求每個

5、同學獨立完成自己分擔的部分,整體方案可以組內同學討論確定。 要求:能完成六位十進制數的加、減、乘、除運算以及平方運算,操作過程與普通計算器相同,即先輸入一個操作數,然后按下“+”“”“×”“÷”鍵,再輸入下一個操作數,按等號鍵開始運算并顯示結果,若結果超過六位,則顯示“E”。 要求盡量與真實計算器相似。任務:我負責的是軟件整體構建,和對加法,減法,乘法,除法,平方,清零以及帶小數運算程序的編寫和調試。二、設計正文將可編程外圍接口芯片8255A 與鍵盤和七段LED 連接,通過對8255A 編程及對鍵盤的操作實現計算功能。鍵盤碼包括數字09、運算符號“+” “-” “*” “/

6、”“=”和清零“CL”鍵。首先利用程序不斷掃描件鍵盤是否有輸入,如果沒有就一直掃描,如果有就停止掃描,完成輸入。通過鍵盤依次輸入第一個運算數字、運算符號、第二個運算數字、“=”,在七段LED 燈上顯示運算結果,期間數字輸入有誤可按“C”鍵之后重新輸入。三、課程設計總結1 本次課程設計選擇了簡易計算器設計的題目,不僅使我加深了對接口程序設計的認識,對可編程并行I/O接口芯片8255的工作原理也有了進一步的了解,更重要的是培養了我們發現問題,解決問題的能力。2 根據微機原理課程所學相關知識及實驗教程相關內容,在基于proteus平臺,使用匯編語言,以8086為核心的情況下,配合可編程并行接口器件8

7、255A,LED數碼管等器件實現可進行簡單六位數加減乘除法及清零擴展功能的十進制計算器。在課程設計實踐中,我們不僅鍛煉了實際動手能力,培養了團隊精神和嚴肅認真的工作態度,更增強了自己在實際的工程設計中查閱資料,撰寫設計報告表達設計思想和結果的能力。3 在編程過程中,需要很多細節的注意和推敲。本來很簡單的想法,到了實際的編程過程中,就發現并不是那么簡單。如減法的每次循環過程中的借位,時時刻刻都得注意,稍不留神就可能出錯。編程不僅使我們對微機有了更深的理解,也教會了我們不要眼高手低,得腳踏實地,幫我們養成了嚴謹的思想。還有,本次課設中有各種新的知識不在課本中,就需要我們去查閱資料,上網搜索之類。在

8、這個過程中,不僅僅是反映在這幾頁報告中的知識,更多的也有如protues的作圖,仿真過程中的各類問題的解決方法;以及鍵盤的各類知識。有些東西,我們天天接觸,但要是讓我們親自做一下的時候,可能就會暴露出我們更多的問題。很感謝能有這樣的機會去用已有的知識做一些我們力所能及的事。四、參考文獻1清華大學TPC-2003A實驗指導書,2006版2 李繼燦,新編16/32位微型計算機原理及應用,清華大學出版社,第四版,2008年3 楊國田,高明明 微機原理實驗指導書 校內待出版,第一版,2002年3月附錄加號?減號?乘號?除號?等號?清零?設加標志設減標志設乘標志設除標志進行加減乘除運算,保存結果清零顯示

9、屏是否溢出?出?結果為E放鍵?有標志?清零顯示屏,清標志保存數據顯示掃描開始8255初始化有無按鍵?顯示掃描是數字鍵?N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N

10、鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y

11、鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y

12、鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。N

13、鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。Y鍵入文檔的引述或關注點的摘要。您可將文本框放置在文檔中的任何位置。可使用“文本框工具”選項卡更改重要引述文本框的格式。1 軟件設計流程圖小數點?設標志2.硬件設計概要: 2.1. LED 顯示的功能及實現 七段 LED 顯示器由七個發光段構成,每段均是一個LED 二極管。這七個發光段分別稱為a,b,c,d,e,f,g,通過控制不同段的點亮和熄滅,以顯示所要得到的數字。七段LED 的輸出功能也是通過8255的并行輸出實現。 LED 顯示數字編碼表0C0H,0F9H,0A4H,0

14、B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH,0FFH,0FFH,0FFH,86H,0BFH顯示的字符HGFEDCBA編碼011000000C0H111111001F9H210100100A4H310110000B0H41001100199H51001001092H61000001082H711111000F8H81000000080H91001000090H-10111111BFH2.2、8255工作原理2.2.1.8255 引腳功能說明:D0D7:數據線,三態雙向數8位緩沖器,8255 與CPU 數據傳送的通道,當CPU 執行輸入輸出指令時,通過它實現8 位

15、數據的讀/寫操作,控制字和狀態信息也通過數據總線傳送。A0A1:地址線,用于選擇端口,即用其來選擇A口、B口、C口或寄存器控制口。RD(低電平有效):讀信號線,當這個輸入引腳為低電平時,允許8255 通過數據總線向CPU 發送數據或狀態信息,即CPU 從8255 讀取信息或數據。WR(低電平有效):寫入信號,當這個輸入引腳為低電平時,允許CPU 將數據或控制字寫8255。CS(低電平有效):片選信號線,當這個輸入引腳為低電平時,表示芯片被選中,允許8255 與CPU 進行通訊。RESET(高電平有效):復位輸入線,當該輸入端外于高電平時,所有內部寄存器(包括控制寄存器)均被清除,所有I/O 口

16、均被置成輸入方式。PA0PA7:端口A 輸入輸出線,8位數據輸入鎖存器和8位數據輸出鎖存器/緩沖器。PB0PB7:端口B 輸入輸出線,8位數據輸入緩沖器和8位數據輸出鎖存器/緩沖器PC0PC7:端口C 輸入輸出線,端口B 輸入輸出線,8位數據輸入緩沖器和8位數據輸出鎖存器/緩沖器實際使用時,可以把A口、B口、C口分成兩個控制組,即A組和B組。A組控制電路由端口A和端口C的高4位(PC4PC7)組成,B組控制電路由端口B和端口才的低4位(PC0PC3)組成。2.2.2.8255 的讀寫控制:8255 的讀/寫控制邏輯電路接受CPU 發來的控制口號RD、WR、RESET 和地址信號A1A0。然后根

17、據命令端口,控制信號的要求,將端口的數據讀出選信CPU 或者將CPU送來的數據寫入端口,各端口的工作狀態。通過用輸出指令對8255A 的控制字寄存器編程,寫入設定工作方式的控制字,可以讓3個數據口以不同的方式工作,端口A 可工作于3 種方式的任一種,端口B 只能工作于方式0 和方式1,端口C 除了用于輸入輸出端口外,還能配合A 口和B 口工作,為這兩個端口的輸入輸出操作提供聯系信號。2.2.3.數據總線緩沖器它是一個雙向三態的8位數據緩沖器,8255A正是通過它與系統數據總線相連,用于輸入/輸出數據以及傳送由CPU發給8255A的控制字2.2.4.定義工作方式控制字工作方式0:8255A中各端

18、口的基本輸入/輸出方式。2.3 微處理器8086芯片當引腳接高電平時,CPU工作于最小方式(單處理器系統方式,適合于較小規模的應用)。此時,引腳功能如下: (1)AD15AD0:分時復用的存儲器或端口的地址和數據總線。傳送地址時為單向的三態輸出,而傳送數據時為雙向三態輸入/輸出。(2)IO/M存儲器/輸入、輸出控制信號(輸出、三態):它用于區分CPU當前是訪問存儲器還是訪問輸入/輸出端口。高電表示訪問存儲器,說明當前要進行CPU與存儲器之間的數據傳送。低電平表示訪問輸入/輸出設備。表示當前要進行CPU與I/O端口之間的數據傳送。在時,它被置為浮空。 (3)WRLOCK(輸出,低電平有效,三態)

19、: 信號有效,即為低電平時,表示CPU正在執行存儲器或I/O寫操作,在寫周期中,在2、2、期間都有效。在時,被置為浮空。(4)INTA:可屏蔽中斷響應信號,輸出,低電平有效。 CPU通過信號對外設提出的可屏蔽中斷請求做出響應。為低電平時,表示CPU已經響應外設的中斷請求,即將執行。 (5)ALE:地址鎖存允許信號,輸出,高電平有效。 CPU利用ALE信號可以把AD15 AD0地址/數據、A19/S6A16/S3地址/狀態線上的地址信息鎖存在中。 (5)DT:數據發送/接收信號,輸出,三態。 DT/信號用來控制數據傳送的方向。DT/為高電平時,CPU發送數據到存儲器或I/O端口;DT/為低電平時

20、,CPU接收來自存儲器或I/O端口的數據。 (6)DEN:數據允許控制信號,輸出,三態,低電平有效。信號用作總線收發器的選通控制信號。當為低電平時,表明CPU進行數據的讀/寫操作。 (7)HOLD:總線保持請求信號,輸入,高電平有效。在DMA數據傳送方式中,由總線控制器8237A發出一個高電平有效的總線請求信號,通過HOLD引腳輸入到CPU,請求CPU讓出總線控制權。 (8)HLDA:總線保持響應信號,輸出,高電平有效。HLDA是與HOLD配合使用的聯絡信號。在HLDA有效期間,HLDA引腳輸出一個高電平有效的響應信號,同時總線將處于浮空狀態,CPU讓出對總線的控制權,將其交付給申請使用總線的

21、8237A控制器使用,總線使用完后,會使HOLD信號變為低電平,CPU又重新獲得對總線的控制權。(9)RD:讀控制信號,三態,輸出。當RD=0時,表示執行存儲器或端口的讀操作。是對內存單元還是對端口讀取數據,取決于信號。在執行DMA操作時,RD被浮空。(10)READY:“準備好”信號線,輸入。該引腳接受被尋址的內存或端口發給CPU的響應信號,高電平時表示內存或端口已準備就緒,CPU可以進行數據傳輸。CPU在T3狀態開始對READY信號采樣。若檢測到READY為低電平,表示內存或 端口尚未準備就緒,則在狀態之后自動插入等待狀態,直到READY信號變為高電平,內存或端口已準備就緒,才可以進行數據

22、傳輸。2.4、74LS273鎖存器D0D7:出入;Q0Q7:輸出;第一腳WR:主清除端,低電平觸發,即當為低電平時,芯片被清除,輸出全為0(低電平);CP(CLK):觸發端,上升沿觸發,即當CP從低到高電平時,D0D7的數據通過芯片,為0時將數據鎖存,D0D7的數據不變。 3.鍵盤輸入輸出模塊: 鍵盤是常用信息輸入元件,由一個個按鈕組成。 下圖是一個4*4鍵盤結構圖,將4*4鍵盤的八個管腳接8255的PC口,因為進行鍵盤掃描一般要求有一部分的I/O口工作方式是輸入,另一部分I/O是輸出,具體到4*4鍵盤則要求四個I/O口輸入,另外四個輸出。行信息連C口低四位,列信息連A口低四位。當進行掃描時,

23、掃描信號由列引腳輸入鍵盤。以0111、1011、1101 和1110 的順序每次掃描不同的列,然后讀取列引腳的信號就可以判斷是哪個鍵被按下。識別鍵盤上哪個鍵被壓下的過程的掃描步驟:1.檢測是否所有鍵都都松開了,若沒有則反復檢測。2.但所有鍵都松開了,再檢測是否有鍵壓下,若無鍵一下則反復檢測。3.如有鍵壓下,要消除鍵抖動,確認有鍵壓下。4.對壓下的鍵進行編碼,將該鍵的行列信號轉換成16 進制碼,由此確定哪個鍵被壓下了。如出現多鍵重按的情況,只有在其它鍵均釋放后,僅剩一個鍵閉合時,才把此鍵當作本次壓下的鍵。5.該鍵釋放后,再回到24.總原理圖3軟件設計特點(主要任務):首先設計程序用到的代碼段,數

24、據段,堆棧段。根據題目要求,我設計10位內存存儲運算結果,減小了計算溢出的可能性。為程序設計初始化主程序,保證程序運行時避免出錯。同時在每個子程序操作時將一些重要寄存器ax,dx等壓入堆棧,防止不必要的錯誤。對于加減法我通過進位或借位標志進行控制。對于乘法,我先將內存的數據轉換成16進制(乘0ah),并且記錄乘數的大小,用于被乘數的累加運算。我之所以沒在乘法中使用16進制的乘法指令是為了防止有一個數超過65536的情況發生,減小錯誤的幾率,并且為我的程序增加了適用范圍以及容錯性。對于除法,直接循環利用被除數減去除數即可,利用借位標志退出機制。在完成加減乘除基本功能的程序后,我又增添了后續的小數

25、功能,將小數與這4個子程序巧妙的聯合起來,其中除了除法的功能弱一點,其他都相對完善。同時我也添加了連續運算的功能,雖然并不能分清優先級別,但是對于簡單計算機的性能已有很大的改善。附圖如下:程序CLEAR MACRO push dx push cx push bx push ax mov ah,6 mov al,0 mov bh,01h mov cx,0 mov dx,184fh int 10h pop dx pop cx pop bx pop ax ENDM data segmentshuf dw 0;當前數標志符yunf dw 0;運算符標志符fssf dw 0 ;小數點標志符finf dw

26、 0;完成符標識符fsf0 dw 0 ;小數1個數標志符fsf1 dw 0 ;小數2個數標志符fsf dw 0numb0f db 0;NUMB0清空標志numb1f db 0;NUMB1清空標志numb0 db 10 dup(0);第一個運算數numb1 db 10 dup(0);第二個運算數numb2 db 10 dup(0);第三個運算數numb3 db 10dup(0) ;小數 fkey db "error重新輸入.$"data endsstack segment stack db 100 dup(0)stack endscode segmentassume ds:d

27、ata,ss:stack,cs:codestart:mov ax, data mov ds, ax ;-;各變量初始清0mov si,0;清空兩個運算數mov cx,10mov numb0,0mov numb1,0ini:mov numb0si,0mov numb1si,0mov numb2si,0 inc siloop inimov shuf,0;當前數置0,表示指向第一個數mov yunf,0;運算符置0,表示沒有運算符mov finf,0;完成符置0,表示沒有完成mov fssf,0 ;置小數點符0,表示沒有小數點mov fsf0,0 ;置小數個數符0,表示沒有小數部分mov fsf1,

28、0mov fsf,0mov numb0f,1;第一個數清空標志置1,表示第一個數被清空mov numb1f,1;第二個數清空標志置1,表示第二個數被清空;-;- ru: mov ah,1 int 21h push ax cmp al,'.' ;跳轉小數部分 jz fskeycmp al,'+'jz addkey;跳轉至加法鍵部分cmp al,'-'jz subkey;跳轉至減法鍵部分cmp al,'*'jz mulkey;跳轉至乘法鍵部分cmp al,'/'jz divkey;跳轉至除法鍵部分cmp al,'

29、;c'jz clrkey;跳轉至清除鍵部分 cmp al,'9'jbe numkey;跳轉至數字鍵部分jmp equkey;-;數字鍵部分numkey:sub al,30hsave_numb1:cmp yunf,0jz save_numb0;若沒有運算符號則將輸入數存入NUMB0mov shuf,1;當前符值1,指向第二個數mov si,9cmp numb1si,0;若最高位為空,則標志當先數沒有存滿六位,繼續存入jnz ru ;否則直接返回輸入cmp numb1f,1;若數當前被清空過,則直接將輸入數存入最低位jz place1 ;參與運算的小數的總數mov cx,1

30、0;逐位前移mov si,0cmp fssf,1jz xsd1adjust1:xchg al,numb1siinc siloop adjust1mov numb1f,0;將NUMB1F置0,表示第二個數沒有清零jmp ru place1:mov numb10,almov numb1f,0jmp rusave_numb0:mov shuf,0cmp finf,0;若完成符為1,表示完成過一次運算,則清空NUMBOjz save_next mov si,1;清空NUMB0mov cx,9mov numb0,0save_ini:mov numb0si,0inc siloop save_inimov

31、numb0f,1mov finf,0save_next:mov si,9 ;cmp numb0si,0jnz rucmp numb0f,1jz place0mov cx,10 mov si,0 cmp fssf,1jz xsd0adjust0:xchg al,numb0siinc siloop adjust0mov numb0f,0jmp ruplace0:mov numb0f,0 mov numb00,aljmp ruxsd1: add fsf1,1 jmp adjust1xsd0: add fsf0,1 jmp adjust0;小數點部分fskey: mov fssf,1 jmp ru ;

32、等號鍵部分equkey: call calp mov finf,1 ;按下等號則調用CALP運算子程序,mov yunf,0 ;運算后清空運算符 ;置完成符jmp ru;-;運算符號鍵部分addkey: pop ax mov fssf,0 cmp yunf,0;若之前沒有過運算符,則置運算符jz placef call calp;若之前有過運算符,則調用CALP進行運算jmp placef;運算結束后置當前運算符subkey:pop axmov fssf,0 cmp yunf,0jz placefcall calpjmp placefmulkey: pop axmov fssf,0 cmp y

33、unf,0jz placefcall calpjmp placefdivkey: pop ax mov fssf,0 cmp yunf,0jz placefcall calpjmp placefplacef: cmp al,'+'jz addfcmp al,'-'jz subfcmp al,'*'jz mulfcmp al,'/'jz divfcmp al,'c'jz clrkeyaddf:mov yunf,1 jmp ru;置運算符完畢后返回輸入subf:mov yunf,2 jmp rumulf:mov yun

34、f,3jmp rudivf:mov yunf ,4jmp ruclrkey:clearmov bh,0mov dh,0mov dl,0mov ah,2int 10h jmp start;按下clear鍵后跳轉至開頭,全部清零;-;運算子程序CALP calp proc cmp yunf,0;若運算符為0,則直接轉輸入jz yunf_over;否則跳轉至結束處retcmp yunf,1;根據運算符調用運算子程序jz addcalcmp yunf,2jz subcalcmp yunf,3jz mulcalcmp yunf,4jz divcaladdcal:call addpjmp yunf_ove

35、r;調用相應計算子程序subcal:call subpjmp yunf_overmulcal:call mulpjmp yunf_overdivcal:call divpyunf_over:retcalp endp;-;加法子程序 (帶小數)addp proc push ax push dx clcmov dx ,fsf0mov bx,fsf1;清除進位標志cmp dx,bxjnz tiaozhcmp dx,0jz huizh1mov fsf,dxhuizh1: mov cx,10 mov si,0addnext_bit:mov al,numb0siadc al,numb1siaaamov n

36、umb0si,alinc siloop addnext_bitjc startmov numb1f,1 jmp xsaddp endp;-;減法子程序 (帶小數)subp proc push ax push dxclc ;清除進位標志mov dx ,fsf0mov bx,fsf1cmp dx,bxjnz tiaozhcmp dx,0jz huizh2mov fsf,dxhuizh2: mov cx,10 mov si,0;清除借位標志 subnext_bit:mov al,numb0sisbb al,numb1siaasmov numb0si,alinc siloop subnext_bitj

37、c start mov numb1f,1 jmp xssubp endp ;乘法子程序 (帶小數) mulp proc ;把bcd碼轉化成16進制數,供循環使用 push ax push dx mov di,0 ;存次數的低位 mov bp,0 ;存次數的高位 mov ax,0 mov cx,10 mov si,0 mov dx,fsf0 add dx,fsf1 mov fsf,dx xunjian0: ;排除有一個數為0的情況 cmp numb0si,0 jz jj0 jnz xiajj0: inc si loop xunjian0 cmp si,10 jz xs0xia: mov cx,1

38、0 mov si,0xunjian1: cmp numb1si,0 jz jj1 jnz jx jj1:inc si loop xunjian1 cmp si,10 jz xs1 jx: mov al,numb1 add di,ax mov ax,0 mov al,numb11 mov bx,10 mul bx add di,ax mov ax,0 mov al,numb12 mov bx,100 mul bx add di,ax mov ax,0 mov al,numb13 mov bx,1000 mul bx add di,ax mov ax,0 mov al,numb14 mov bx,

39、10000 mul bx add di,ax adc bp,dx mov bx,100 mov ax,0 mov al,numb15 mul bx mov bx,1000 mul bx add di,ax adc bp,dx ;現在次數存在bp和di中 ;numb1個numb0相加 ;先把零頭加了 mov cx,di ;低位零頭存在di中 cmp cx,1 jz display ;若為1倍,則不加直接跳出 sub cx,1 ;加倍數減一次 push cx ;將numb0的內容復制到numb2中 mov cx,10 mov si,0 beifen:mov al,numb0si mov numb2

40、si,al inc si loop beifen pop cx ;復制結束 ;下面進行連加,另增加一段numb2的內存是為了解決由于adc與aaa必須連用,且aaa只能對al進行操作的問題 extra: push cx mov si,0 mov cx,10 clc in_adc1:mov al,numb2si adc al,numb0si aaa mov numb2si,al inc si loop in_adc1 jc yichu ;溢出則跳出 pop cx loop extra ;高位部分 main:cmp bp,0 jz outside ;mov si,0 ;由于是10000h個數相加,

41、即加0ffff次 ;mov cx,6 ;clc ;in_adc2:mov al,numb0si ;adc al,al ;aaa ;mov numb0si,al ;inc si ;loop in_adc2 ;jc begin ;溢出則跳出 mov cx,0ffffh ;剩下的0ffffh遍 extra1:push cx mov si,0 mov cx,10 clc in_adc3:mov al,numb2si adc al,numb0si aaa mov numb2si,al inc si loop in_adc3 ;jc begin ;溢出則跳出 pop cx loop extra1 dec

42、bp jmp mainoutside: mov cx,10 mov si,0fuzhi: mov dl,numb2si mov numb0si,dl inc si loop fuzhi mov numb1f,1 jmp xsmulp endp;-;除法子程序 (帶小數)divp proc push ax push dxmov si,0FFH;判斷除數是否為0mov cx,10mov dx,fsf0 cmp dx,fsf1 jnz tiaozh_0check_0:inc sicmp si,10jz start;若6位皆為0則溢出清零cmp numb1si,0jz check_0mov si,0;清除除法結果mov cx,10clrres:mov numb2si,0inc siloop clrresdivsub:mov si,0mov cx,10clc;清除借位標志subnext: mov al,numb0sisbb al,numb1si aasmov numb0si,alinc siloop subnextjc div_over ;每減一次則結果加1clcmov s

溫馨提示

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

評論

0/150

提交評論