2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(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>  課程設(shè)計(jì)報(bào)告</b></p><p>  ( 2013—2014年度第一學(xué)期)</p><p>  名 稱(chēng): 微機(jī)原理及應(yīng)用 </p><p>  題 目: 8255/273實(shí)現(xiàn)六位簡(jiǎn)單計(jì)算器 </p><p>  院 系: 控計(jì)學(xué)院

2、 </p><p>  班 級(jí): 創(chuàng)新自動(dòng)化1101 </p><p>  學(xué) 號(hào): </p><p>  學(xué)生姓名: </p><p>  日期:2014年1月3日</p>&l

3、t;p>  一、課程設(shè)計(jì)的目的與要求</p><p>  目的:在微機(jī)原理及應(yīng)用課程中分別學(xué)過(guò)了微機(jī)原理各個(gè)基本組成模塊的原理和編程技術(shù)的基礎(chǔ)上,綜合應(yīng)用各部分知識(shí),在實(shí)驗(yàn)室現(xiàn)有設(shè)備的情況下,設(shè)計(jì)一個(gè)具有一定功能的應(yīng)用系統(tǒng),達(dá)到對(duì)各部分知識(shí)加深理解、融會(huì)貫通的目的,并進(jìn)一步鍛煉學(xué)生的動(dòng)手能力和綜合分析能力,同時(shí)培養(yǎng)學(xué)生的團(tuán)隊(duì)精神。要求每個(gè)同學(xué)獨(dú)立完成自己分擔(dān)的部分,整體方案可以組內(nèi)同學(xué)討論確定。 <

4、/p><p>  要求:能完成六位十進(jìn)制數(shù)的加、減、乘、除運(yùn)算以及平方運(yùn)算,操作過(guò)程與普通計(jì)算器相同,即先輸入一個(gè)操作數(shù),然后按下“+”“—”“×”“÷”鍵,再輸入下一個(gè)操作數(shù),按等號(hào)鍵開(kāi)始運(yùn)算并顯示結(jié)果,若結(jié)果超過(guò)六位,則顯示“E”。</p><p>  要求盡量與真實(shí)計(jì)算器相似。</p><p>  任務(wù):我負(fù)責(zé)的是軟件整體構(gòu)建,和對(duì)加法,減法,

5、乘法,除法,平方,清零以及帶小數(shù)運(yùn)算程序的編寫(xiě)和調(diào)試。</p><p><b>  二、設(shè)計(jì)正文</b></p><p>  將可編程外圍接口芯片8255A 與鍵盤(pán)和七段LED 連接,通過(guò)對(duì)8255A 編程及對(duì)鍵盤(pán)的操作實(shí)現(xiàn)計(jì)算功能。鍵盤(pán)碼包括數(shù)字0~9、運(yùn)算符號(hào)“+” “-” “*” “/”“=”和清零“CL”鍵。</p><p>  首先利

6、用程序不斷掃描件鍵盤(pán)是否有輸入,如果沒(méi)有就一直掃描,如果有就停止掃描,完成輸入。通過(guò)鍵盤(pán)依次輸入第一個(gè)運(yùn)算數(shù)字、運(yùn)算符號(hào)、第二個(gè)運(yùn)算數(shù)字、“=”,在七段LED 燈上顯示運(yùn)算結(jié)果,期間數(shù)字輸入有誤可按“C”鍵之后重新輸入。</p><p><b>  三、課程設(shè)計(jì)總結(jié)</b></p><p>  本次課程設(shè)計(jì)選擇了簡(jiǎn)易計(jì)算器設(shè)計(jì)的題目,不僅使我加深了對(duì)接口程序設(shè)計(jì)的認(rèn)識(shí)

7、,對(duì)可編程并行I/O接口芯片8255的工作原理也有了進(jìn)一步的了解,更重要的是培養(yǎng)了我們發(fā)現(xiàn)問(wèn)題,解決問(wèn)題的能力。</p><p>  根據(jù)微機(jī)原理課程所學(xué)相關(guān)知識(shí)及實(shí)驗(yàn)教程相關(guān)內(nèi)容,在基于proteus平臺(tái),使用匯編語(yǔ)言,以8086為核心的情況下,配合可編程并行接口器件8255A,LED數(shù)碼管等器件實(shí)現(xiàn)可進(jìn)行簡(jiǎn)單六位數(shù)加減乘除法及清零擴(kuò)展功能的十進(jìn)制計(jì)算器。在課程設(shè)計(jì)實(shí)踐中,我們不僅鍛煉了實(shí)際動(dòng)手能力,培養(yǎng)了團(tuán)隊(duì)

8、精神和嚴(yán)肅認(rèn)真的工作態(tài)度,更增強(qiáng)了自己在實(shí)際的工程設(shè)計(jì)中查閱資料,撰寫(xiě)設(shè)計(jì)報(bào)告表達(dá)設(shè)計(jì)思想和結(jié)果的能力。</p><p>  在編程過(guò)程中,需要很多細(xì)節(jié)的注意和推敲。本來(lái)很簡(jiǎn)單的想法,到了實(shí)際的編程過(guò)程中,就發(fā)現(xiàn)并不是那么簡(jiǎn)單。如減法的每次循環(huán)過(guò)程中的借位,時(shí)時(shí)刻刻都得注意,稍不留神就可能出錯(cuò)。編程不僅使我們對(duì)微機(jī)有了更深的理解,也教會(huì)了我們不要眼高手低,得腳踏實(shí)地,幫我們養(yǎng)成了嚴(yán)謹(jǐn)?shù)乃枷?。還有,本次課設(shè)中有各種

9、新的知識(shí)不在課本中,就需要我們?nèi)ゲ殚嗁Y料,上網(wǎng)搜索之類(lèi)。在這個(gè)過(guò)程中,不僅僅是反映在這幾頁(yè)報(bào)告中的知識(shí),更多的也有如protues的作圖,仿真過(guò)程中的各類(lèi)問(wèn)題的解決方法;以及鍵盤(pán)的各類(lèi)知識(shí)。有些東西,我們天天接觸,但要是讓我們親自做一下的時(shí)候,可能就會(huì)暴露出我們更多的問(wèn)題。很感謝能有這樣的機(jī)會(huì)去用已有的知識(shí)做一些我們力所能及的事。</p><p><b>  四、參考文獻(xiàn)</b></p

10、><p>  [1]《清華大學(xué)TPC-2003A實(shí)驗(yàn)指導(dǎo)書(shū)》,2006版</p><p>  [2] 李繼燦,《新編16/32位微型計(jì)算機(jī)原理及應(yīng)用》,清華大學(xué)出版社,第四版,2008年</p><p>  [3] 楊國(guó)田,高明明 《微機(jī)原理實(shí)驗(yàn)指導(dǎo)書(shū)》 校內(nèi)待出版,第一版,2002年3月</p><p><b>  附錄</b&

11、gt;</p><p><b>  軟件設(shè)計(jì)流程圖</b></p><p><b>  2.硬件設(shè)計(jì)概要:</b></p><p>  2.1. LED 顯示的功能及實(shí)現(xiàn)</p><p>  七段 LED 顯示器由七個(gè)發(fā)光段構(gòu)成,每段均是一個(gè)LED 二極管。這七個(gè)發(fā)光段分別稱(chēng)為a,b,c,d,e,f

12、,g,通過(guò)控制不同段的點(diǎn)亮和熄滅,以顯示所要得到的數(shù)字。七段LED 的輸出功能也是通過(guò)8255的并行輸出實(shí)現(xiàn)。</p><p>  LED 顯示數(shù)字編碼表</p><p>  0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH,0FFH,0FFH,0FFH,86H,0BFH</p><p>  2.2、825

13、5工作原理</p><p>  2.2.1.8255 引腳功能說(shuō)明:</p><p>  D0~D7:數(shù)據(jù)線(xiàn),三態(tài)雙向數(shù)8位緩沖器,8255 與CPU 數(shù)據(jù)傳送的通道,當(dāng)CPU 執(zhí)行輸入輸出指令時(shí),通過(guò)它實(shí)現(xiàn)8 位數(shù)據(jù)的讀/寫(xiě)操作,控制字和狀態(tài)信息也通過(guò)數(shù)據(jù)總線(xiàn)傳送。</p><p>  A0~A1:地址線(xiàn),用于選擇端口,即用其來(lái)選擇A口、B口、C口或寄存器控制口。

14、</p><p>  RD(低電平有效):讀信號(hào)線(xiàn),當(dāng)這個(gè)輸入引腳為低電平時(shí),允許8255 通過(guò)數(shù)據(jù)總線(xiàn)向CPU 發(fā)送數(shù)據(jù)或狀態(tài)信息,即CPU 從8255 讀取信息或數(shù)據(jù)。</p><p>  WR(低電平有效):寫(xiě)入信號(hào),當(dāng)這個(gè)輸入引腳為低電平時(shí),允許CPU 將數(shù)據(jù)或控制字寫(xiě)8255。</p><p>  CS(低電平有效):片選信號(hào)線(xiàn),當(dāng)這個(gè)輸入引腳為低電平時(shí),

15、表示芯片被選中,允許8255 與CPU 進(jìn)行通訊。</p><p>  RESET(高電平有效):復(fù)位輸入線(xiàn),當(dāng)該輸入端外于高電平時(shí),所有內(nèi)部寄存器(包括控制寄存器)均被清除,所有I/O 口均被置成輸入方式。</p><p>  PA0~PA7:端口A 輸入輸出線(xiàn),8位數(shù)據(jù)輸入鎖存器和8位數(shù)據(jù)輸出鎖存器/緩沖器。</p><p>  PB0~PB7:端口B 輸入輸出

16、線(xiàn),8位數(shù)據(jù)輸入緩沖器和8位數(shù)據(jù)輸出鎖存器/緩沖器</p><p>  PC0~PC7:端口C 輸入輸出線(xiàn),端口B 輸入輸出線(xiàn),8位數(shù)據(jù)輸入緩沖器和8位數(shù)據(jù)輸出鎖存器/緩沖器</p><p>  實(shí)際使用時(shí),可以把A口、B口、C口分成兩個(gè)控制組,即A組和B組。A組控制電路由端口A和端口C的高4位(PC4~PC7)組成,B組控制電路由端口B和端口才的低4位(PC0~PC3)組成。</p

17、><p>  2.2.2.8255 的讀寫(xiě)控制:</p><p>  8255 的讀/寫(xiě)控制邏輯電路接受CPU 發(fā)來(lái)的控制口號(hào)RD、WR、RESET 和地址信號(hào)A1~A0。然后根據(jù)命令端口,控制信號(hào)的要求,將端口的數(shù)據(jù)讀出選信CPU 或者將CPU送來(lái)的數(shù)據(jù)寫(xiě)入端口,各端口的工作狀態(tài)。通過(guò)用輸出指令對(duì)8255A 的控制字寄存器編程,寫(xiě)入設(shè)定工作方式的控制字,可以讓3個(gè)數(shù)據(jù)口以不同的方式工作,端口

18、A 可工作于3 種方式的任一種,端口B 只能工作于方式0 和方式1,端口C 除了用于輸入輸出端口外,還能配合A 口和B 口工作,為這兩個(gè)端口的輸入輸出操作提供聯(lián)系信號(hào)。</p><p>  2.2.3.數(shù)據(jù)總線(xiàn)緩沖器</p><p>  它是一個(gè)雙向三態(tài)的8位數(shù)據(jù)緩沖器,8255A正是通過(guò)它與系統(tǒng)數(shù)據(jù)總線(xiàn)相連,用于輸入/輸出數(shù)據(jù)以及傳送由CPU發(fā)給8255A的控制字</p>

19、<p>  2.2.4.定義工作方式控制字</p><p>  工作方式0:8255A中各端口的基本輸入/輸出方式。</p><p>  2.3 微處理器8086芯片</p><p>  當(dāng)引腳接高電平時(shí),CPU工作于最小方式(單處理器系統(tǒng)方式,適合于較小規(guī)模的應(yīng)用)。此時(shí),引腳功能如下: </p><p>  (1)AD15~AD

20、0:分時(shí)復(fù)用的存儲(chǔ)器或端口的地址和數(shù)據(jù)總線(xiàn)。傳送地址時(shí)為單向的三態(tài)輸出,而傳送數(shù)據(jù)時(shí)為雙向三態(tài)輸入/輸出。</p><p>  (2)IO/M存儲(chǔ)器/輸入、輸出控制信號(hào)(輸出、三態(tài)):它用于區(qū)分CPU當(dāng)前是訪(fǎng)問(wèn)存儲(chǔ)器還是訪(fǎng)問(wèn)輸入/輸出端口。高電表示訪(fǎng)問(wèn)存儲(chǔ)器,說(shuō)明當(dāng)前要進(jìn)行CPU與存儲(chǔ)器之間的數(shù)據(jù)傳送。低電平表示訪(fǎng)問(wèn)輸入/輸出設(shè)備。表示當(dāng)前要進(jìn)行CPU與I/O端口之間的數(shù)據(jù)傳送。在DMA?xí)r,它被置為浮空。 <

21、;/p><p> ?。?)WR/LOCK(輸出,低電平有效,三態(tài)): 信號(hào)有效,即為低電平時(shí),表示CPU正在執(zhí)行存儲(chǔ)器或I/O寫(xiě)操作,在寫(xiě)周期中,WR在T2、T2、Tw期間都有效。在DMA?xí)r,WR被置為浮空。</p><p> ?。?)INTA:可屏蔽中斷響應(yīng)信號(hào),輸出,低電平有效。 CPU通過(guò)信號(hào)對(duì)外設(shè)提出的可屏蔽中斷請(qǐng)求做出響應(yīng)。為低電平時(shí),表示CPU已經(jīng)響應(yīng)外設(shè)的中斷請(qǐng)求,即將執(zhí)行中斷服

22、務(wù)程序。 </p><p> ?。?)ALE:地址鎖存允許信號(hào),輸出,高電平有效。 CPU利用ALE信號(hào)可以把AD15 ~AD0地址/數(shù)據(jù)、A19/S6~A16/S3地址/狀態(tài)線(xiàn)上的地址信息鎖存在地址鎖存器中。 </p><p> ?。?)DT:數(shù)據(jù)發(fā)送/接收信號(hào),輸出,三態(tài)。 DT/信號(hào)用來(lái)控制數(shù)據(jù)傳送的方向。DT/為高電平時(shí),CPU發(fā)送數(shù)據(jù)到存儲(chǔ)器或I/O端口;DT/為低電平時(shí),CPU

23、接收來(lái)自存儲(chǔ)器或I/O端口的數(shù)據(jù)。 </p><p>  (6)DEN:數(shù)據(jù)允許控制信號(hào),輸出,三態(tài),低電平有效。信號(hào)用作總線(xiàn)收發(fā)器的選通控制信號(hào)。當(dāng)為低電平時(shí),表明CPU進(jìn)行數(shù)據(jù)的讀/寫(xiě)操作。 </p><p>  (7)HOLD:總線(xiàn)保持請(qǐng)求信號(hào),輸入,高電平有效。在DMA數(shù)據(jù)傳送方式中,由總線(xiàn)控制器8237A發(fā)出一個(gè)高電平有效的總線(xiàn)請(qǐng)求信號(hào),通過(guò)HOLD引腳輸入到CPU,請(qǐng)求CPU讓

24、出總線(xiàn)控制權(quán)。 </p><p> ?。?)HLDA:總線(xiàn)保持響應(yīng)信號(hào),輸出,高電平有效。HLDA是與HOLD配合使用的聯(lián)絡(luò)信號(hào)。在HLDA有效期間,HLDA引腳輸出一個(gè)高電平有效的響應(yīng)信號(hào),同時(shí)總線(xiàn)將處于浮空狀態(tài),CPU讓出對(duì)總線(xiàn)的控制權(quán),將其交付給申請(qǐng)使用總線(xiàn)的8237A控制器使用,總線(xiàn)使用完后,會(huì)使HOLD信號(hào)變?yōu)榈碗娖剑珻PU又重新獲得對(duì)總線(xiàn)的控制權(quán)。</p><p>  (9)R

25、D:讀控制信號(hào),三態(tài),輸出。當(dāng)RD=0時(shí),表示CPU?qǐng)?zhí)行存儲(chǔ)器或I/O端口的讀操作。是對(duì)內(nèi)存單元還是對(duì)I/O端口讀取數(shù)據(jù),取決于M/IO信號(hào)。在執(zhí)行DMA操作時(shí),RD被浮空。</p><p> ?。?0)READY:“準(zhǔn)備好”信號(hào)線(xiàn),輸入。該引腳接受被尋址的內(nèi)存或I/O端口發(fā)給CPU的響應(yīng)信號(hào),高電平時(shí)表示內(nèi)存或I/O端口已準(zhǔn)備就緒,CPU可以進(jìn)行數(shù)據(jù)傳輸。CPU在T3狀態(tài)開(kāi)始對(duì)READY信號(hào)采樣。若檢測(cè)到REA

26、DY為低電平,表示內(nèi)存或 I/O端口尚未準(zhǔn)備就緒,則CPU在T3狀態(tài)之后自動(dòng)插入等待狀態(tài)Tw,直到READY信號(hào)變?yōu)楦唠娖?,?nèi)存或I/O端口已準(zhǔn)備就緒,CPU才可以進(jìn)行數(shù)據(jù)傳輸。</p><p>  2.4、74LS273鎖存器</p><p><b>  D0~D7:出入;</b></p><p><b>  Q0~Q7:輸出;&l

27、t;/b></p><p>  第一腳WR:主清除端,低電平觸發(fā),即當(dāng)為低電平時(shí),芯片被清除,輸出全為0(低電平);</p><p>  CP(CLK):觸發(fā)端,上升沿觸發(fā),即當(dāng)CP從低到高電平時(shí),D0~D7的數(shù)據(jù)通過(guò)芯片,為0時(shí)將數(shù)據(jù)鎖存,D0~D7的數(shù)據(jù)不變。 </p><p>  3.鍵盤(pán)輸入輸出模塊:</p><p>  鍵盤(pán)是

28、常用信息輸入元件,由一個(gè)個(gè)按鈕組成。</p><p>  下圖是一個(gè)4*4鍵盤(pán)結(jié)構(gòu)圖,將4*4鍵盤(pán)的八個(gè)管腳接8255的PC口,因?yàn)檫M(jìn)行鍵盤(pán)掃描一般要求有一部分的I/O口工作方式是輸入,另一部分I/O是輸出,具體到4*4鍵盤(pán)則要求四個(gè)I/O口輸入,另外四個(gè)輸出。行信息連C口低四位,列信息連A口低四位。</p><p>  當(dāng)進(jìn)行掃描時(shí),掃描信號(hào)由列引腳輸入鍵盤(pán)。以0111、1011、110

29、1 和1110 的順序每次掃描不同的列,然后讀取列引腳的信號(hào)就可以判斷是哪個(gè)鍵被按下。識(shí)別鍵盤(pán)上哪個(gè)鍵被壓下的過(guò)程的掃描步驟:</p><p>  1.檢測(cè)是否所有鍵都都松開(kāi)了,若沒(méi)有則反復(fù)檢測(cè)。</p><p>  2.但所有鍵都松開(kāi)了,再檢測(cè)是否有鍵壓下,若無(wú)鍵一下則反復(fù)檢測(cè)。</p><p>  3.如有鍵壓下,要消除鍵抖動(dòng),確認(rèn)有鍵壓下。</p>

30、<p>  4.對(duì)壓下的鍵進(jìn)行編碼,將該鍵的行列信號(hào)轉(zhuǎn)換成16 進(jìn)制碼,由此確定哪個(gè)鍵被壓下了。如出現(xiàn)多鍵重按的情況,只有在其它鍵均釋放后,僅剩一個(gè)鍵閉合時(shí),才把此鍵當(dāng)作本次壓下的鍵。</p><p>  5.該鍵釋放后,再回到2</p><p><b>  4.總原理圖</b></p><p>  3軟件設(shè)計(jì)特點(diǎn)(主要任務(wù)):&

31、lt;/p><p>  首先設(shè)計(jì)程序用到的代碼段,數(shù)據(jù)段,堆棧段。根據(jù)題目要求,我設(shè)計(jì)10位內(nèi)存存儲(chǔ)運(yùn)算結(jié)果,減小了計(jì)算溢出的可能性。為程序設(shè)計(jì)初始化主程序,保證程序運(yùn)行時(shí)避免出錯(cuò)。同時(shí)在每個(gè)子程序操作時(shí)將一些重要寄存器ax,dx等壓入堆棧,防止不必要的錯(cuò)誤。對(duì)于加減法我通過(guò)進(jìn)位或借位標(biāo)志進(jìn)行控制。對(duì)于乘法,我先將內(nèi)存的數(shù)據(jù)轉(zhuǎn)換成16進(jìn)制(乘0ah),并且記錄乘數(shù)的大小,用于被乘數(shù)的累加運(yùn)算。我之所以沒(méi)在乘法中使用1

32、6進(jìn)制的乘法指令是為了防止有一個(gè)數(shù)超過(guò)65536的情況發(fā)生,減小錯(cuò)誤的幾率,并且為我的程序增加了適用范圍以及容錯(cuò)性。對(duì)于除法,直接循環(huán)利用被除數(shù)減去除數(shù)即可,利用借位標(biāo)志退出機(jī)制。</p><p>  在完成加減乘除基本功能的程序后,我又增添了后續(xù)的小數(shù)功能,將小數(shù)與這4個(gè)子程序巧妙的聯(lián)合起來(lái),其中除了除法的功能弱一點(diǎn),其他都相對(duì)完善。同時(shí)我也添加了連續(xù)運(yùn)算的功能,雖然并不能分清優(yōu)先級(jí)別,但是對(duì)于簡(jiǎn)單計(jì)算機(jī)的性能

33、已有很大的改善。附圖如下:</p><p><b>  程序</b></p><p>  CLEAR MACRO </p><p>  push dx</p><p>  push cx</p><p>  push bx</p><p>  pus

34、h ax</p><p><b>  mov ah,6</b></p><p><b>  mov al,0</b></p><p>  mov bh,01h</p><p><b>  mov cx,0</b></p><p>  mov

35、dx,184fh</p><p><b>  int 10h</b></p><p><b>  pop dx</b></p><p><b>  pop cx</b></p><p><b>  pop bx</b></p>

36、<p><b>  pop ax</b></p><p><b>  ENDM </b></p><p>  data segment</p><p>  shuf dw 0;當(dāng)前數(shù)標(biāo)志符</p><p>  yunf dw 0;運(yùn)算符標(biāo)志符</p>

37、<p>  fssf dw 0 ;小數(shù)點(diǎn)標(biāo)志符</p><p>  finf dw 0;完成符標(biāo)識(shí)符</p><p>  fsf0 dw 0 ;小數(shù)1個(gè)數(shù)標(biāo)志符</p><p>  fsf1 dw 0 ;小數(shù)2個(gè)數(shù)標(biāo)志符</p><p><b>  fsf dw 0</b></p>

38、<p>  numb0f db 0;NUMB0清空標(biāo)志</p><p>  numb1f db 0;NUMB1清空標(biāo)志</p><p>  numb0 db 10 dup(0);第一個(gè)運(yùn)算數(shù)</p><p>  numb1 db 10 dup(0);第二個(gè)運(yùn)算數(shù)</p><p>  numb2 db 10 dup(0)

39、;第三個(gè)運(yùn)算數(shù)</p><p>  numb3 db 10dup(0) ;小數(shù) </p><p>  fkey db "error重新輸入...$"</p><p><b>  data ends</b></p><p>  stack segment stack</p><p

40、>  db 100 dup(0)</p><p>  stack ends</p><p>  code segment</p><p>  assume ds:data,,ss:stack,cs:code</p><p>  start:mov ax, data</p><p>  mov ds, ax<

41、/p><p>  ;----------------------------------------------------------------------------------------</p><p><b>  ;各變量初始清0</b></p><p>  mov si,0;清空兩個(gè)運(yùn)算數(shù)</p><p>

42、<b>  mov cx,10</b></p><p>  mov numb0,0</p><p>  mov numb1,0</p><p>  ini:mov numb0[si],0</p><p>  mov numb1[si],0</p><p>  mov numb2[si],0<

43、/p><p><b>  inc si</b></p><p><b>  loop ini</b></p><p>  mov shuf,0;當(dāng)前數(shù)置0,表示指向第一個(gè)數(shù)</p><p>  mov yunf,0;運(yùn)算符置0,表示沒(méi)有運(yùn)算符</p><p>  mov

44、finf,0;完成符置0,表示沒(méi)有完成</p><p>  mov fssf,0 ;置小數(shù)點(diǎn)符0,表示沒(méi)有小數(shù)點(diǎn)</p><p>  mov fsf0,0 ;置小數(shù)個(gè)數(shù)符0,表示沒(méi)有小數(shù)部分</p><p>  mov fsf1,0</p><p><b>  mov fsf,0</b><

45、/p><p>  mov numb0f,1;第一個(gè)數(shù)清空標(biāo)志置1,表示第一個(gè)數(shù)被清空</p><p>  mov numb1f,1;第二個(gè)數(shù)清空標(biāo)志置1,表示第二個(gè)數(shù)被清空</p><p>  ;------------------------------------------------------------------------------------

46、-----</p><p>  ;--------------------------------------------------------------------------------------- </p><p><b>  ru: </b></p><p><b>  mov ah,1 </b></p

47、><p><b>  int 21h</b></p><p><b>  push ax</b></p><p>  cmp al,'.' ;跳轉(zhuǎn)小數(shù)部分</p><p><b>  jz fskey</b></p><p>  cmp al

48、,'+'</p><p>  jz addkey;跳轉(zhuǎn)至加法鍵部分</p><p>  cmp al,'-'</p><p>  jz subkey;跳轉(zhuǎn)至減法鍵部分</p><p>  cmp al,'*'</p><p>  jz mulkey;跳轉(zhuǎn)至乘法鍵部分

49、</p><p>  cmp al,'/'</p><p>  jz divkey;跳轉(zhuǎn)至除法鍵部分</p><p>  cmp al,'c'</p><p>  jz clrkey;跳轉(zhuǎn)至清除鍵部分 </p><p>  cmp al,'9'</p>

50、<p>  jbe numkey;跳轉(zhuǎn)至數(shù)字鍵部分</p><p>  jmp equkey</p><p>  ;-------------------------------------------------------------------------------------</p><p><b>  ;數(shù)字鍵部分</b>

51、;</p><p><b>  numkey:</b></p><p>  sub al,30h</p><p>  save_numb1:cmp yunf,0</p><p>  jz save_numb0;若沒(méi)有運(yùn)算符號(hào)則將輸入數(shù)存入NUMB0</p><p>  mov shuf,1;當(dāng)

52、前符值1,指向第二個(gè)數(shù)</p><p><b>  mov si,9</b></p><p>  cmp numb1[si],0;若最高位為空,則標(biāo)志當(dāng)先數(shù)沒(méi)有存滿(mǎn)六位,繼續(xù)存入</p><p>  jnz ru ;否則直接返回輸入</p><p>  cmp numb1f,1;若數(shù)當(dāng)前被清

53、空過(guò),則直接將輸入數(shù)存入最低位</p><p><b>  jz place1</b></p><p>  ;參與運(yùn)算的小數(shù)的總數(shù)</p><p>  mov cx,10;逐位前移</p><p><b>  mov si,0</b></p><p>  cmp fss

54、f,1</p><p><b>  jz xsd1</b></p><p><b>  adjust1:</b></p><p>  xchg al,numb1[si]</p><p><b>  inc si</b></p><p>  loop ad

55、just1</p><p>  mov numb1f,0;將NUMB1F置0,表示第二個(gè)數(shù)沒(méi)有清零</p><p><b>  jmp ru </b></p><p>  place1:mov numb1[0],al</p><p>  mov numb1f,0</p><p><b&g

56、t;  jmp ru</b></p><p>  save_numb0:mov shuf,0</p><p>  cmp finf,0;若完成符為1,表示完成過(guò)一次運(yùn)算,則清空NUMBO</p><p>  jz save_next </p><p>  mov si,1;清空NUMB0</p

57、><p><b>  mov cx,9</b></p><p>  mov numb0,0</p><p>  save_ini:mov numb0[si],0</p><p><b>  inc si</b></p><p>  loop save_ini</p>

58、<p>  mov numb0f,1</p><p>  mov finf,0</p><p>  save_next:mov si,9 ;</p><p>  cmp numb0[si],0</p><p><b>  jnz ru</b></p><p>  cmp numb

59、0f,1</p><p><b>  jz place0</b></p><p>  mov cx,10 </p><p><b>  mov si,0 </b></p><p>  cmp fssf,1</p><p><b>  jz xsd0</b>

60、;</p><p><b>  adjust0:</b></p><p>  xchg al,numb0[si]</p><p><b>  inc si</b></p><p>  loop adjust0</p><p>  mov numb0f,0</p>

61、<p><b>  jmp ru</b></p><p>  place0:mov numb0f,0</p><p>  mov numb0[0],al</p><p><b>  jmp ru</b></p><p><b>  xsd1:</b></p&g

62、t;<p>  add fsf1,1</p><p>  jmp adjust1</p><p><b>  xsd0:</b></p><p>  add fsf0,1</p><p>  jmp adjust0</p><p><b>  ;小數(shù)點(diǎn)部分</b>

63、;</p><p><b>  fskey:</b></p><p>  mov fssf,1</p><p><b>  jmp ru</b></p><p><b>  ;等號(hào)鍵部分</b></p><p><b>  equkey:<

64、;/b></p><p><b>  call calp</b></p><p>  mov finf,1 ;按下等號(hào)則調(diào)用CALP運(yùn)算子程序,</p><p>  mov yunf,0 ;運(yùn)算后清空運(yùn)算符</p><p><b>  ;置完成符</b></p><p&

65、gt;<b>  jmp ru</b></p><p>  ;--------------------------------------------------------------------------------------</p><p><b>  ;運(yùn)算符號(hào)鍵部分</b></p><p>  addkey:

66、 pop ax</p><p>  mov fssf,0</p><p>  cmp yunf,0;若之前沒(méi)有過(guò)運(yùn)算符,則置運(yùn)算符</p><p>  jz placef </p><p>  call calp;若之前有過(guò)運(yùn)算符,則調(diào)用CALP進(jìn)行運(yùn)算</p><p>  jmp placef;運(yùn)算結(jié)束

67、后置當(dāng)前運(yùn)算符</p><p>  subkey:pop ax</p><p>  mov fssf,0</p><p>  cmp yunf,0</p><p><b>  jz placef</b></p><p><b>  call calp</b></p>

68、;<p>  jmp placef</p><p>  mulkey: pop ax</p><p>  mov fssf,0</p><p>  cmp yunf,0</p><p><b>  jz placef</b></p><p><b>  call calp&

69、lt;/b></p><p>  jmp placef</p><p>  divkey: pop ax </p><p>  mov fssf,0</p><p>  cmp yunf,0</p><p><b>  jz placef</b></p><p>&l

70、t;b>  call calp</b></p><p>  jmp placef</p><p><b>  placef:</b></p><p>  cmp al,'+'</p><p><b>  jz addf</b></p><p>

71、;  cmp al,'-'</p><p><b>  jz subf</b></p><p>  cmp al,'*'</p><p><b>  jz mulf</b></p><p>  cmp al,'/'</p><p&g

72、t;<b>  jz divf</b></p><p>  cmp al,'c'</p><p><b>  jz clrkey</b></p><p>  addf:mov yunf,1</p><p>  jmp ru;置運(yùn)算符完畢后返回輸入</p><

73、p>  subf:mov yunf,2 </p><p><b>  jmp ru</b></p><p>  mulf:mov yunf,3</p><p><b>  jmp ru</b></p><p>  divf:mov yunf ,4</p><p><

74、;b>  jmp ru</b></p><p>  clrkey:clear</p><p><b>  mov bh,0</b></p><p><b>  mov dh,0</b></p><p><b>  mov dl,0</b></p>

75、<p><b>  mov ah,2</b></p><p><b>  int 10h </b></p><p>  jmp start;按下clear鍵后跳轉(zhuǎn)至開(kāi)頭,全部清零</p><p>  ;----------------------------------------------------

76、-----------------------------------</p><p>  ;運(yùn)算子程序CALP </p><p><b>  calp proc</b></p><p>  cmp yunf,0;若運(yùn)算符為0,則直接轉(zhuǎn)輸入</p><p>

77、;  jz yunf_over;否則跳轉(zhuǎn)至結(jié)束處ret</p><p>  cmp yunf,1;根據(jù)運(yùn)算符調(diào)用運(yùn)算子程序</p><p><b>  jz addcal</b></p><p>  cmp yunf,2</p><p><b>  jz subcal</b></p>

78、<p>  cmp yunf,3</p><p><b>  jz mulcal</b></p><p>  cmp yunf,4</p><p><b>  jz divcal</b></p><p>  addcal:call addp</p><p>  

79、jmp yunf_over;調(diào)用相應(yīng)計(jì)算子程序</p><p>  subcal:call subp</p><p>  jmp yunf_over</p><p>  mulcal:call mulp</p><p>  jmp yunf_over</p><p>  divcal:call divp</p&

80、gt;<p>  yunf_over:ret</p><p><b>  calp endp</b></p><p>  ;-----------------------------------------------------------------------------------------</p><p>  ;加法子

81、程序 (帶小數(shù))</p><p><b>  addp proc</b></p><p><b>  push ax</b></p><p><b>  push dx</b></p><p><b>  clc</b></p><

82、p>  mov dx ,fsf0</p><p>  mov bx,fsf1;清除進(jìn)位標(biāo)志</p><p><b>  cmp dx,bx</b></p><p>  jnz tiaozh</p><p><b>  cmp dx,0</b></p><p>&l

83、t;b>  jz huizh1</b></p><p>  mov fsf,dx</p><p>  huizh1: mov cx,10</p><p><b>  mov si,0</b></p><p>  addnext_bit:mov al,numb0[si]</p><p&

84、gt;  adc al,numb1[si]</p><p><b>  aaa</b></p><p>  mov numb0[si],al</p><p><b>  inc si</b></p><p>  loop addnext_bit</p><p><b&g

85、t;  jc start</b></p><p>  mov numb1f,1 </p><p><b>  jmp xs</b></p><p><b>  addp endp</b></p><p>  ;---------------------------------------

86、--------------------------------------------------</p><p>  ;減法子程序 (帶小數(shù))</p><p><b>  subp proc</b></p><p><b>  push ax</b></p><p><b>  pus

87、h dx</b></p><p>  clc ;清除進(jìn)位標(biāo)志</p><p>  mov dx ,fsf0</p><p>  mov bx,fsf1</p><p><b>  cmp dx,bx</b></p><p>  jnz tiaozh</

88、p><p><b>  cmp dx,0</b></p><p><b>  jz huizh2</b></p><p>  mov fsf,dx</p><p>  huizh2: mov cx,10</p><p>  mov si,0;清除借位標(biāo)志</p>

89、<p>  subnext_bit:mov al,numb0[si]</p><p>  sbb al,numb1[si]</p><p><b>  aas</b></p><p>  mov numb0[si],al</p><p><b>  inc si</b></p&g

90、t;<p>  loop subnext_bit</p><p><b>  jc start </b></p><p>  mov numb1f,1 </p><p><b>  jmp xs</b></p><p>  subp endp </p&

91、gt;<p>  ;乘法子程序 (帶小數(shù))</p><p>  mulp proc </p><p>  ;把bcd碼轉(zhuǎn)化成16進(jìn)制數(shù),供循環(huán)使用 </p><p><b>  push ax</b></p><p><b>  push dx</b></p>&

92、lt;p>  mov di,0 ;存次數(shù)的低位</p><p>  mov bp,0 ;存次數(shù)的高位</p><p><b>  mov ax,0</b></p><p><b>  mov cx,10</b></p><p><b>

93、  mov si,0 </b></p><p>  mov dx,fsf0</p><p>  add dx,fsf1</p><p>  mov fsf,dx</p><p>  xunjian0: ;排除有一個(gè)數(shù)為0的情況</p><p>  cmp numb0[si],0&l

94、t;/p><p><b>  jz jj0</b></p><p><b>  jnz xia</b></p><p>  jj0: inc si</p><p>  loop xunjian0</p><p><b>  cmp si,10</b><

95、;/p><p><b>  jz xs0</b></p><p><b>  xia: </b></p><p><b>  mov cx,10</b></p><p><b>  mov si,0</b></p><p><b&

96、gt;  xunjian1:</b></p><p>  cmp numb1[si],0</p><p><b>  jz jj1</b></p><p><b>  jnz jx</b></p><p>  jj1:inc si</p><p>  loop x

97、unjian1</p><p><b>  cmp si,10</b></p><p><b>  jz xs1</b></p><p><b>  jx: </b></p><p>  mov al,numb1</p><p>  add di,ax

98、</p><p><b>  mov ax,0</b></p><p>  mov al,numb1[1]</p><p><b>  mov bx,10</b></p><p><b>  mul bx</b></p><p><b>  a

99、dd di,ax</b></p><p><b>  mov ax,0</b></p><p>  mov al,numb1[2]</p><p>  mov bx,100</p><p><b>  mul bx</b></p><p><b>  a

100、dd di,ax</b></p><p><b>  mov ax,0</b></p><p>  mov al,numb1[3]</p><p>  mov bx,1000</p><p><b>  mul bx</b></p><p>  add di,ax

101、 </p><p><b>  mov ax,0</b></p><p>  mov al,numb1[4]</p><p>  mov bx,10000</p><p><b>  mul bx</b></p><p><b>  add di,ax</b&

102、gt;</p><p>  adc bp,dx </p><p>  mov bx,100 </p><p><b>  mov ax,0</b></p><p>  mov al,numb1[5]</p><p><b>  mul bx</b></p>&l

103、t;p>  mov bx,1000</p><p><b>  mul bx</b></p><p><b>  add di,ax</b></p><p>  adc bp,dx ;現(xiàn)在次數(shù)存在bp和di中 </p><p>  ;numb1個(gè)numb0相加</p&

104、gt;<p><b>  ;先把零頭加了</b></p><p>  mov cx,di ;低位零頭存在di中</p><p>  cmp cx,1 </p><p>  jz display ;若為1倍,則不加直接跳出</p><p>  sub

105、 cx,1 ;加倍數(shù)減一次</p><p>  push cx </p><p>  ;將numb0的內(nèi)容復(fù)制到numb2中 </p><p><b>  mov cx,10</b></p><p><b>  mov si,0</b></p>

106、;<p>  beifen:mov al,numb0[si]</p><p>  mov numb2[si],al </p><p>  inc si </p><p>  loop beifen</p><p><b>  pop cx</b></p>

107、<p><b>  ;復(fù)制結(jié)束</b></p><p>  ;下面進(jìn)行連加,另增加一段numb2的內(nèi)存是為了解決由于adc與aaa必須連用,且aaa只能對(duì)al進(jìn)行操作的問(wèn)題 </p><p><b>  extra:</b></p><p><b>  pu

108、sh cx </b></p><p><b>  mov si,0</b></p><p><b>  mov cx,10</b></p><p><b>  clc</b></p><p>  in_adc1:mov al,numb2[si]</p>

109、<p>  adc al,numb0[si]</p><p><b>  aaa</b></p><p>  mov numb2[si],al</p><p><b>  inc si</b></p><p>  loop in_adc1</p><p>  jc

110、 yichu ;溢出則跳出</p><p><b>  pop cx</b></p><p>  loop extra </p><p><b>  ;高位部分</b></p><p>  main:cmp bp,0</p><p>  jz

111、outside</p><p>  ;mov si,0 ;由于是10000h個(gè)數(shù)相加,即加0ffff次</p><p><b>  ;mov cx,6</b></p><p><b>  ;clc </b></p><p>  ;in_adc2:mov al,numb

112、0[si]</p><p>  ;adc al,al</p><p><b>  ;aaa</b></p><p>  ;mov numb0[si],al</p><p><b>  ;inc si</b></p><p>  ;loop in_adc2</p>

113、<p>  ;jc begin ;溢出則跳出 </p><p>  mov cx,0ffffh ;剩下的0ffffh遍</p><p>  extra1:push cx</p><p><b>  mov si,0</b></p><p><b>

114、;  mov cx,10</b></p><p><b>  clc </b></p><p>  in_adc3:mov al,numb2[si]</p><p>  adc al,numb0[si]</p><p><b>  aaa</b></p><p>

115、  mov numb2[si],al</p><p><b>  inc si</b></p><p>  loop in_adc3</p><p>  ;jc begin ;溢出則跳出</p><p><b>  pop cx</b></p><

116、p>  loop extra1</p><p><b>  dec bp </b></p><p><b>  jmp main</b></p><p><b>  outside:</b></p><p><b>  mov cx,10</b>&l

117、t;/p><p><b>  mov si,0</b></p><p><b>  fuzhi:</b></p><p>  mov dl,numb2[si]</p><p>  mov numb0[si],dl</p><p><b>  inc si</b&g

118、t;</p><p>  loop fuzhi</p><p>  mov numb1f,1 </p><p><b>  jmp xs</b></p><p><b>  mulp endp</b></p><p>  ;--------------------------

119、---------------------------------------------------------------</p><p>  ;除法子程序 (帶小數(shù))</p><p>  divp proc </p><p><b>  push ax</b></p><p><b>  push

120、 dx</b></p><p>  mov si,0FFH;判斷除數(shù)是否為0</p><p><b>  mov cx,10</b></p><p>  mov dx,fsf0</p><p>  cmp dx,fsf1</p><p>  jnz tiaozh_0</p&g

121、t;<p>  check_0:inc si</p><p><b>  cmp si,10</b></p><p>  jz start;若6位皆為0則溢出清零</p><p>  cmp numb1[si],0</p><p>  jz check_0</p><p>  

122、mov si,0;清除除法結(jié)果</p><p><b>  mov cx,10</b></p><p>  clrres:mov numb2[si],0</p><p><b>  inc si</b></p><p>  loop clrres</p><p>  d

123、ivsub:mov si,0</p><p><b>  mov cx,10</b></p><p>  clc;清除借位標(biāo)志</p><p><b>  subnext:</b></p><p>  mov al,numb0[si]</p><p>  sbb al,

124、numb1[si] </p><p><b>  aas</b></p><p>  mov numb0[si],al</p><p><b>  inc si</b></p><p>  loop subnext</p><p&

125、gt;  jc div_over</p><p>  ;每減一次則結(jié)果加1</p><p><b>  clc</b></p><p><b>  mov si,0</b></p><p><b>  mov cx,9</b></p><p>

126、  mov al,numb2[si]</p><p><b>  adc al,1</b></p><p><b>  aaa</b></p><p>  mov numb2[si],al</p><p>  divres:inc si</p><p>  mov al,nu

127、mb2[si]</p><p><b>  adc al,0</b></p><p><b>  aaa</b></p><p>  mov numb2[si],al</p><p>  loop divres</p><p>  jmp divsub</p>

128、<p><b>  div_over:</b></p><p><b>  mov cx,10</b></p><p><b>  mov si,0</b></p><p><b>  fuzhi1:</b></p><p>  mov dl,n

129、umb2[si]</p><p>  mov numb0[si],dl </p><p><b>  inc si</b></p><p>  loop fuzhi1 </p><p>  mov numb1f,1 </p><p><b>  jmp xs</b></

130、p><p><b>  divp endp</b></p><p>  xs: ;顯示判斷連續(xù)運(yùn)算</p><p><b>  pop dx</b></p><p><b>  pop ax</b></p><p&g

131、t;  cmp al,'='</p><p>  je display</p><p>  mov dx,fsf</p><p>  mov fsf0,dx ;為小數(shù)點(diǎn)個(gè)數(shù)寄存器清零</p><p>  mov fsf1,0</p><p>  mov fssf,0</p&

132、gt;<p><b>  mov cx,10</b></p><p><b>  mov si,0</b></p><p>  inii:mov numb1[si],0</p><p><b>  inc si</b></p><p><b>  loo

133、p inii</b></p><p>  cmp al,'+'</p><p><b>  jz addf</b></p><p>  cmp al,'-'</p><p><b>  jz subf</b></p><p>  c

134、mp al,'*'</p><p><b>  jz mulf</b></p><p>  cmp al,'/'</p><p><b>  jz divf</b></p><p>  cmp al,'c'</p><p>&l

135、t;b>  jz clrkey</b></p><p>  display: push ax</p><p><b>  push dx </b></p><p><b>  mov si,9</b></p><p><b>  retrans:</b>

136、</p><p>  cmp numb0[si],0</p><p>  jz rechange0</p><p><b>  jmp next</b></p><p>  next: mov ax,0b800h</p><p><b>  mov es,ax</b>&

137、lt;/p><p><b>  mov si,9</b></p><p><b>  mov di,28</b></p><p><b>  mov cx,10</b></p><p><b>  mov dh,2</b></p><p&g

138、t;<b>  dec fsf </b></p><p>  mov bx,fsf</p><p>  a: cmp si,fsf ;顯示小數(shù)點(diǎn)</p><p><b>  jz xsxs</b></p><p>  mov dl,numb0[si]</p><

溫馨提示

  • 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)論