




已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
課程設(shè)計(jì) 設(shè)計(jì)名稱: 微型計(jì)算機(jī)技術(shù)及應(yīng)用簡易計(jì)算器 學(xué) 院: 信息工程學(xué)院 課 程: 微型計(jì)算機(jī)技術(shù)及應(yīng)用 姓 名: 李 智 學(xué) 號(hào): 201407010252 班 級: 2014級 計(jì)算機(jī)科學(xué)與技術(shù)二班 目錄摘要3一、前言41.1背景41.2項(xiàng)目介紹4二、課程設(shè)計(jì)的目的與任務(wù)52.1設(shè)計(jì)目的52.2設(shè)計(jì)任務(wù)5三、設(shè)計(jì)過程53.1基礎(chǔ)理論53.1.1DOSBox簡介53.1.2中斷8四、設(shè)計(jì)114.1總體方案114.2原理框圖124.3程序代碼13五、系統(tǒng)模塊詳細(xì)設(shè)計(jì)與調(diào)試245.1系統(tǒng)模塊詳細(xì)設(shè)計(jì)245.1.1設(shè)置屏幕顯示方式245.1.2顯示主菜單245.1.3從鍵盤接收一個(gè)數(shù)字245.1.4接收鍵入用于計(jì)算的數(shù)255.1.5顯示結(jié)果255.1.6子程序A2將數(shù)的ASCII碼轉(zhuǎn)為二進(jìn)制數(shù)255.1.7將計(jì)算結(jié)果的二進(jìn)制數(shù)轉(zhuǎn)換為對應(yīng)的十進(jìn)制數(shù)ASCII碼并輸出顯示(A3程序段)275.2程序編譯、運(yùn)行與調(diào)試27六、設(shè)計(jì)總結(jié)29七、參考文獻(xiàn)31摘要本次課程設(shè)計(jì)是通過使用DOSBox匯編語言編程軟件實(shí)現(xiàn)的利用匯編語言編寫的較為復(fù)雜的程序設(shè)計(jì)。該課程設(shè)計(jì)主要是設(shè)計(jì)一個(gè)較為簡單的計(jì)算器,界面顯示要求用戶從鍵盤上分別輸入兩個(gè)隨機(jī)數(shù),完成四則運(yùn)算,然后將運(yùn)算結(jié)果顯示到屏幕上。該設(shè)計(jì)智能實(shí)現(xiàn)簡單的正整數(shù)之間的四則運(yùn)算,無法對小數(shù)進(jìn)行精確地識(shí)別。而除法運(yùn)算可以精確到3位小數(shù),減法可以顯示出負(fù)數(shù)的結(jié)果。采用DOS調(diào)用(INT 21H)來完成鍵盤的輸入和屏幕的輸出。通過這次的課程設(shè)計(jì)能夠進(jìn)一步加深對專業(yè)知識(shí)和理論知識(shí)學(xué)習(xí)的認(rèn)識(shí)和理解。關(guān)鍵詞:DOSBox;微機(jī)原理;計(jì)算器;匯編語言一、 前言1.1背景計(jì)算器是現(xiàn)代人發(fā)明的可以進(jìn)行數(shù)字運(yùn)算的電子機(jī)器?,F(xiàn)代的電子計(jì)算器能進(jìn)行數(shù)學(xué)運(yùn)算的手持電子機(jī)器,擁有集成電路芯片,但結(jié)構(gòu)比電腦簡單得多,可以說是第一代的電子計(jì)算機(jī)(電腦),且功能也較弱。隨著微機(jī)和手機(jī)的普及,計(jì)算器逐漸退出了人們的視野,只能被局限于在課堂之上的計(jì)算工具。雖然計(jì)算器的使用范圍逐漸縮小,但計(jì)算器依舊在不斷發(fā)展。即使科技的發(fā)展帶動(dòng)著小型計(jì)算器成為一個(gè)移動(dòng)的計(jì)算實(shí)驗(yàn)室。但它的核心卻依然沒有逃脫最簡單的四則運(yùn)算:加、減、乘和除。1.2項(xiàng)目介紹本次課程設(shè)計(jì)就是根據(jù)微機(jī)原理與接口的相關(guān)知識(shí),利用BIOS和DOS的中斷來設(shè)計(jì)一個(gè)簡易計(jì)算器,能夠?qū)崿F(xiàn)加減乘除四則運(yùn)算,并在屏幕上顯示一個(gè)主菜單,提示用戶輸入相應(yīng)的數(shù)字鍵,分別執(zhí)行加、減、乘、除四種計(jì)算功能和結(jié)束程序的功能。同時(shí)利用BIOS中斷的10號(hào)功能調(diào)用來設(shè)置顯示方式,利用DOS中斷的01號(hào)和02號(hào)子功能來完成鍵盤接收,結(jié)果顯示。二、 課程設(shè)計(jì)的目的與任務(wù)2.1設(shè)計(jì)目的為了使學(xué)生加深對所學(xué)的微機(jī)原理知識(shí)的理解,培養(yǎng)學(xué)生的專業(yè)素質(zhì),提高其利用微機(jī)原理知識(shí)處理問題的能力,為今后專業(yè)課程的學(xué)習(xí)、畢業(yè)設(shè)計(jì)和工作打下良好的基礎(chǔ)。使學(xué)生能比較扎實(shí)地掌握微機(jī)原理的基礎(chǔ)知識(shí)和基本理論,掌握控制系統(tǒng)及有關(guān)設(shè)備的分析、開發(fā)等基本技能,受到必要工程訓(xùn)練、初步的科學(xué)研究方法訓(xùn)練和實(shí)踐鍛練,增強(qiáng)分析問題和解決問題的能力,了解微機(jī)原理和接口技術(shù)的新發(fā)展。2.2設(shè)計(jì)任務(wù)本課程設(shè)計(jì)是制作出一個(gè)簡易的計(jì)算器,并可以在DOCBOX上運(yùn)行,并且正確地完成加、減、乘、除等四則運(yùn)算。三、 設(shè)計(jì)過程3.1基礎(chǔ)理論3.1.1DOSBox簡介由于微軟公司對windos7的64位操作系統(tǒng)取締了為匯編程序開放的Edit、Masm、Link以及Debug等的功能。所以我選擇了一款比較簡單但同樣適用的Dos環(huán)境仿真器DOSBox。DOSBox是一種創(chuàng)造類DOS環(huán)境的開源x86仿真器,通常用于運(yùn)行近代計(jì)算機(jī)或者非IBMPC兼容機(jī)的MS-DOSIBMPC兼容程序。不僅如此,它還是一個(gè)完整的中央處理器仿真器,并不是一個(gè)兼容層如dosemu或者依賴386類處理器虛擬化能力的Windows與OS/2VDM。不需要x86中央處理器或者任何DOS版本以運(yùn)行,并且能運(yùn)行真實(shí)模式與保護(hù)模式的程序。雖然DOSBox是Dos的仿真器,但它只是具有搭載環(huán)境的能力,卻并沒有自帶匯編程序的運(yùn)行環(huán)境,。我們需要下載相對應(yīng)的運(yùn)行環(huán)境masm或tasm。當(dāng)在下載完成后,我們需要對DOSBox進(jìn)行相對應(yīng)的設(shè)置。當(dāng)配置好環(huán)境后,現(xiàn)在我們就可以使用它進(jìn)行Edit,Masm,Link,Debug了EDIT:Masm和Link:完成masm和link兩步以后,我們就得到了可以運(yùn)行的程序exe文件了:Debug:通過這幾個(gè)步驟,我們就可以得到我們需要的可以正確執(zhí)行地exe文件了。3.1.2中斷3.1.2.1 何謂中斷所謂中斷,是指CPU在執(zhí)行當(dāng)前程序時(shí),由于外部事件和內(nèi)部事件,使得CPU中斷正在執(zhí)行的程序,轉(zhuǎn)到為外部與內(nèi)部事件服務(wù)的程序中去執(zhí)行。當(dāng)服務(wù)程序執(zhí)行完畢,再返回帶剛才被中斷的程序的斷點(diǎn)處,繼續(xù)執(zhí)行。8086有一個(gè)強(qiáng)有力的中斷系統(tǒng),可以處理256種不同的中斷,每個(gè)中斷對應(yīng)一個(gè)類型號(hào),所以,256種中斷對應(yīng)的中斷類型號(hào)為0255.這256種中斷可以分成兩大類:一類叫硬件中斷;一類叫軟件中斷。硬件中斷是通過外部的硬件產(chǎn)生的,所以,也常常把硬件中斷。硬件中斷又分為兩類:一類叫非屏蔽中斷;另一類叫可屏蔽中斷。非屏蔽中斷是通過CPU的NMI引腳進(jìn)入,它不受中斷允許標(biāo)志IF的屏蔽,并且整個(gè)系統(tǒng)中只有一個(gè)非屏蔽中斷。可屏蔽中斷是通過CPU的INTR引腳進(jìn)入的,并且只有當(dāng)中斷允許標(biāo)志IF為1時(shí),可屏蔽中斷才能進(jìn)入,如果中斷允許標(biāo)志IF為0,則可屏蔽中斷受到禁止。軟件中斷是CPU根據(jù)某條指令或者軟件對標(biāo)志寄存器的設(shè)置而產(chǎn)生的,從軟件中斷的產(chǎn)生過程來說,完全和硬件電路無關(guān)。典型的軟件中斷是除數(shù)為0引起的中斷和中斷指令引起的中斷。3.1.2.2中斷向量和中斷向量表8086的中斷系統(tǒng)以位于內(nèi)存0段的03FFH區(qū)域的中斷向量表為基礎(chǔ),中斷向量表中最多可容納256個(gè)中斷向量。所謂中斷向量,實(shí)際上就是中斷處理子程序的入口地址,每個(gè)中斷類型對應(yīng)一個(gè)中斷向量。中斷向量并不是任意存放的。一個(gè)中斷向量占4個(gè)存儲(chǔ)單元,其中,前兩個(gè)單元存放中斷處理子程序入口地址的偏移量(IP),低位在前,高位在后,后兩個(gè)單元存放中斷處理子程序入口地址的段地址(CS),同樣也是低位在前,高位在后。256個(gè)中斷的前5個(gè)是專用中斷。類型0的中斷稱作除數(shù)為0中斷;類型1的中斷稱為單步中斷;非屏蔽中斷對應(yīng)類型2;類型3的中斷為斷點(diǎn)中斷;而類型4的中斷為溢出中斷。除了非屏蔽中斷外,其他幾個(gè)中斷都是軟件中斷。3.1.2.3中斷方式為了提高CPU的效率和使系統(tǒng)有實(shí)時(shí)性能,可采用中斷傳送方式。在中斷方式下,外設(shè)具有申請CPU服務(wù)的主動(dòng)權(quán),當(dāng)輸入設(shè)備將數(shù)據(jù)準(zhǔn)備好或輸出設(shè)備可接收數(shù)據(jù)時(shí),便可向CPU發(fā)中斷請求,使CPU暫時(shí)停下來目前的工作而和外設(shè)進(jìn)行一次數(shù)據(jù)傳輸。等輸入操作或輸出操作完成后,CPU繼續(xù)進(jìn)行原來的工作。(如左圖:)四、 設(shè)計(jì)4.1總體方案利用BIOS中斷的10號(hào)功能調(diào)用來設(shè)置顯示方式。利用DOS中斷的01號(hào)、02號(hào)子功能來完成鍵盤接受、結(jié)果顯示。設(shè)置屏幕顯示方式。 MOV AH,00H MOV AL,NUM INT 10H接著從鍵盤上接受鍵值,并判別后轉(zhuǎn)到相應(yīng)的子模塊進(jìn)行運(yùn)算,并顯示結(jié)果。 MOV AH,01H INT 21H ;AL=鍵入字符的ASCII碼從鍵盤上接收一串字符串命令: MOV AH,0AH MOV DX,OFFSET BUF ;BUF為數(shù)據(jù)段中定義的數(shù)據(jù)緩沖區(qū) INT 21H顯示單個(gè)字符命令: MOV AH,02H INT 21H顯示一串字符串的命令: MOV AH,09H MOV DX,OFFSET BUF ;BUF為被顯示字符串的首地址 INT 21H十進(jìn)制數(shù)顯示過程:將十進(jìn)制數(shù)送到BX中,BX除以1000,余數(shù)送BX中,商在AL中,范圍為09,顯示AL中的內(nèi)容。BX除以100,余數(shù)送BX中,商在AL中,顯示AL中的內(nèi)容,依次類推,直到分出個(gè)位數(shù)字。如最高位為0,則不應(yīng)顯示,而非最高位的0則顯示??衫迷O(shè)標(biāo)志位并結(jié)合商的方法來決定是否顯示0。4.2原理框圖主程序提示輸入第一個(gè)數(shù)提示輸入第二個(gè)數(shù)計(jì) 算判斷結(jié)果正負(fù),并儲(chǔ)存結(jié)果將結(jié)果轉(zhuǎn)為ASCII碼,并顯示結(jié)果提示返回DOS還是重新計(jì)算將第一個(gè)數(shù)的ASCII碼轉(zhuǎn)為二進(jìn)制并保存將第二個(gè)數(shù)的ASCII碼轉(zhuǎn)為二進(jìn)制并保存結(jié) 束子程序4.3程序代碼DATA SEGMENT N=15TOP DB 5 DUP(0AH) DB N DUP( ), Please input a number to choose the arithmetic operation, 0DH,0AH DB N DUP( ), , 0DH,0AH DB N DUP( ),1add, 0DH,0AH DB N DUP( ),2subtract, 0DH,0AH DB N DUP( ),3multiply , 0DH,0AH DB N DUP( ),4divide, 0DH,0AH DB N DUP( ),5return to DOS , 0DH,0AH DB N DUP( ), , 0DH,0AH DB N DUP( ),CHOICE (1.2.3.4.5):$MESG1 DB 0DH,0AH,PLEASE PRESS NUMBER 1.2.3.4.5 !$ MESG2 DB 0DH,0AH,PLEASE INPUT THE FIRST NUMBER :$MESG3 DB 0DH,0AH,PLEASE INPUT THE SECOND NUMBER :$MESG4 DB 0DH,0AH,PLAY ADD :$MESG5 DB 0DH,0AH,PLAY SUBTRACT :$MESG6 DB 0DH,0AH,PLAY MULTIPLY :$MESG7 DB 0DH,0AH,PLAY DIVIDE :$MESG8 DB 0DH,0AH,THE RESULT :$MESG9 DB 0DH,0AH,PRESS Q RETURN DOS,ANY PRESS RETURN START!$BUF1 DB 6 ;十進(jìn)制數(shù)的緩沖區(qū),可接收6個(gè)字符 DB ? ;保留,用于10號(hào)調(diào)用時(shí)DOS填入實(shí)際輸入字符數(shù)DB 6 DUP(?) ;一個(gè)符號(hào)位,四位數(shù)字ASCII碼,加上一個(gè)回車符BUF2 DW ? ;將第一個(gè)數(shù)轉(zhuǎn)換為二進(jìn)制后,放于這里BUF3 DB 6 DUP(?),$ ;將結(jié)果轉(zhuǎn)換為ASCII碼后,放在這DATA ENDSSTACK SEGMENT STACKSTACK STACK ENDSCODE SEGMENT ASSUME CS:CODE , DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,00H ;設(shè)置屏幕顯示方式 MOV AL,0 INT 10H MOV AH,09H ; 顯示菜單 MOV DX,OFFSET TOP INT 21HAA: MOV AH,01H ;從鍵盤接收一個(gè)數(shù)字 INT 21H CMP AL,1 ; 與1比較 JNE NEXT1 ; 不等于1就轉(zhuǎn)到NEXT1 JMP JIA ;等于1就轉(zhuǎn)到加法程序NEXT1: CMP AL,2 ; 與2比較 JNE NEXT2 ; 不等于2就轉(zhuǎn)到NEXT2 JMP JIAN ; 等于2就轉(zhuǎn)到減法程序NEXT2: CMP AL,3 ; 與3比較 JNE NEXT3 ; 不等于3就轉(zhuǎn)到NEXT3 JMP CHENG ; 等于3就轉(zhuǎn)到乘法程序NEXT3: CMP AL,4 ; 與4比較 JNE NEXT4 ; 不等于4就轉(zhuǎn)到NEXT4 JMP CHU ; 等于4就轉(zhuǎn)到除法程序NEXT4: CMP AL,5 ; 與5比較 JNE NEXT5 ; 不等于5就轉(zhuǎn)到NEXT5 MOV AH,4CH ; 返回DOS INT 21HNEXT5: MOV AH,09H ; 顯示MESG1 MOV DX,OFFSET MESG1 INT 21H JMP AA ; 跳到AAA1 PROC NEAR MOV AH,09H ; 提示輸入第一個(gè)數(shù) MOV DX,OFFSET MESG2 INT 21H MOV AH,0AH ; 接收第一個(gè)數(shù) MOV DX,OFFSET BUF1 INT 21H CALL A2 ; 調(diào)用A2進(jìn)行ASCII-二進(jìn)制的轉(zhuǎn)換 MOV BUF2,AX ; 把第一個(gè)數(shù)轉(zhuǎn)換的二進(jìn)制放在BUF2 MOV AH,09H ; 提示輸入第二個(gè)數(shù) MOV DX,OFFSET MESG3 INT 21H MOV AH,0AH ; 接收第二個(gè)數(shù) MOV DX,OFFSET BUF1 INT 21H CALL A2 ; 調(diào)用A2把第二個(gè)數(shù)進(jìn)行ASCII-二進(jìn)制轉(zhuǎn)換 RETA1 ENDPA2 PROC NEAR MOV CL,BUF1+1 ; 把BUF1+1中的實(shí)際鍵入的字符數(shù)放入CL MOV CH,0 ; CH清零 MOV BX,OFFSET BUF1+2 ; 把第一個(gè)數(shù)字的地址放在BX PUSH BX ; 保護(hù)BX PUSH CX ; 保護(hù)CXL1: MOV AL,BX AND AL,0FH ; 把ASCII碼轉(zhuǎn)換為十進(jìn)制 MOV BX,AL ; 存放十進(jìn)制 INC BX ; 下一個(gè)數(shù)字的地址 LOOP L1 POP CX ; 恢復(fù)CX POP BX ; 恢復(fù)BX MOV AX,0 ; 將累加和賦零 MOV SI,10L2: MUL SI ADD AL,BX ADC AH,0 INC BX LOOP L2 ; 累加乘10L3: RET A2 ENDPJIA: MOV AH,09H ; 加法程序 MOV DX,OFFSET MESG4 INT 21H CALL A1 ; 調(diào)用A1 ADD AX,BUF2 ; 把轉(zhuǎn)換后的放在BUF2中的第一個(gè)數(shù)和放在AX的第二個(gè)數(shù)相加 JMP A3 JIAN: MOV AH,09H ; 減法程序 MOV DX,OFFSET MESG5 INT 21H CALL A1 MOV BX,AX ; 把轉(zhuǎn)換后的放在AX的第二個(gè)數(shù)放到BX MOV AX,BUF2 ; 把轉(zhuǎn)換后放在BUF2中的第一個(gè)數(shù)放到AX SBB AX,BX ; 兩數(shù)相減 JMP A3CHENG: MOV AH,09H ; 乘法程序 MOV DX,OFFSET MESG6 INT 21H CALL A1 MOV BX,AX ; 把轉(zhuǎn)換后的放在AX的第二個(gè)數(shù)放到BX MOV AX,BUF2 ; 把轉(zhuǎn)換后的放在BUF2中第一個(gè)數(shù)放到AX MUL BX ; 兩數(shù)相乘 JMP A3CHU: MOV AH,09H ; 除法程序 MOV DX,OFFSET MESG7 INT 21H CALL A1 MOV DX,AX ; 把轉(zhuǎn)換后的放在AX的第二個(gè)數(shù)放到DX MOV AX,BUF2 ; 把轉(zhuǎn)換后的放在BUF2中第一個(gè)數(shù)放到AX DIV DL ; 兩數(shù)相除,商在AL里 MOV AH,0H ; 使AH清零 JMP A3A3: MOV BUF3,+ ; 把BUF3放+ CMP AX,0 ; 把結(jié)果于0比較 JGE L4 ; AX0轉(zhuǎn)到 L4 NEG AX ; AX0將AX取反 MOV BUF3,- ; 把BUF3放-L4: CWD MOV BX,10000 DIV BX ; 商為第一位數(shù)字放在AL,余數(shù)放在DX CALL BB MOV BUF3+1,AL ; 把第一個(gè)數(shù)放在BUF3+1單元中 MOV AX,DX ; 把放在DX中的余數(shù)放到AX CWD MOV BX,1000 DIV BX ; 商為第二位數(shù)字放在AL,余數(shù)放在DX CALL BB MOV BUF3+2,AL ; 把第二個(gè)數(shù)放在BUF3+2單元中 MOV AX,DX ; 把放在DX中的余數(shù)放到AX MOV BL,100 DIV BL ; 商為第三位數(shù)字放在AL,余數(shù)放在AH CALL BB MOV BUF3+3,AL ; 把第三個(gè)數(shù)放在BUF3+3單元中 MOV AL,AH ; 把放在AH 中的余數(shù)放到AL CBW MOV BL,10 DIV BL ; 商為第四位數(shù)字放在AL,余數(shù)放在A CALL BB MOV BUF3+4,AL ; 把第四個(gè)數(shù)放在BUF3+4單元中 ADD AH,30H ; 把個(gè)位轉(zhuǎn)為ASSCII碼 MOV BUF3+5,AH ; 把第五個(gè)數(shù)放在BUF3+5單元中 MOV AH,09H ; 提示結(jié)果 MOV DX,OFFSET MESG8 INT 21H MOV AH,09H MOV DX,OFFSET BUF3 ; 把放在BUF3緩沖區(qū)中的結(jié)果顯示出來 INT 21H MOV AH,09H ; 提示是返回DOS還是重新計(jì)算 MOV DX,OFFSET MESG9 INT 21H MOV AH,01H ; 接收鍵盤數(shù)字 INT 21H CMP AL,Q JE A4 JMP NEXT5 ; 其他數(shù)字重新計(jì)算BB PROC NEAR CMP AL,0H ; 與零比較 JE L5 JMP L6L5: MOV AL,20H ; 等于零,賦AL空格 JMP L7L6: ADD AL,30H ; 不等于零,把數(shù)轉(zhuǎn)為ASSCII碼L7: RETBB ENDPA4: MOV AH,4CH ; AL等于Q就返回DOS INT 21HCODE ENDS END START五、 系統(tǒng)模塊詳細(xì)設(shè)計(jì)與調(diào)試5.1系統(tǒng)模塊詳細(xì)設(shè)計(jì)5.1.1設(shè)置屏幕顯示方式 MOV AH,00H MOV AL,0 INT 10H通過調(diào)用BOIS的OOH號(hào)功能來設(shè)置屏幕顯示方式。此處AL=0,即設(shè)置屏幕顯示方式為40*25黑白文本。5.1.2顯示主菜單 MOV AH,09H MOV DX,OFFSET TOP INT 21H先在數(shù)據(jù)段中定義主菜單中要顯示的字符串,再通過調(diào)用DOS系統(tǒng)的09H號(hào)功能顯示字符串(串尾字符為,但不顯示)來完成。5.1.3從鍵盤接收一個(gè)數(shù)字MOV AH,01H INT 21H 通過調(diào)用DOS系統(tǒng)的01H號(hào)功能鍵入字符并回車來實(shí)現(xiàn),其出口參數(shù)為鍵入字符的ASCII碼,存在AL中。5.1.4接收鍵入用于計(jì)算的數(shù) MOV AH,0AH MOV DX,OFFSET BUF1 通過調(diào)用DOS系統(tǒng)的0AH號(hào)功能鍵入字符串至內(nèi)存緩沖區(qū)來實(shí)現(xiàn),其入口參數(shù)如下:DS:DX=存放鍵入字符串的緩沖區(qū)的首地址;(DS:DX)=用戶規(guī)定的緩沖區(qū);(DS:DX+1)=實(shí)際鍵入的字符數(shù);從(DS:DX+2)開始放鍵入的字符串。因此,在下面的程序中運(yùn)用所鍵入的數(shù)字時(shí)要注意字符串的首地址。5.1.5顯示結(jié)果 MOV AH,09H MOV DX,OFFSET BUF3 INT 21H將結(jié)果存入數(shù)據(jù)段中定義的緩沖區(qū)BUF3中,再通過調(diào)用DOS系統(tǒng)的09H號(hào)功能顯示字符串(串尾字符為,但不顯示)來完成。5.1.6子程序A2將數(shù)的ASCII碼轉(zhuǎn)為二進(jìn)制數(shù)A2 PROC NEAR MOV CL,BUF1+1 ; 把BUF1+1中的實(shí)際鍵入的字符數(shù)放入CL MOV CH,0 ; CH清零 MOV BX,OFFSET BUF1+2 ; 把第一個(gè)數(shù)字的地址放在BX PUSH BX ; 保護(hù)BX PUSH CX ; 保護(hù)CXL1: MOV AL,BX AND AL,0FH ; 把ASCII碼轉(zhuǎn)換為十進(jìn)制 MOV BX,AL ; 存放十進(jìn)制 INC BX ; 下一個(gè)數(shù)字的地址 LOOP L1 POP CX ; 恢復(fù)CX POP BX ; 恢復(fù)BX MOV AX,0 ; 將累加和賦零 MOV SI,10L2: MUL SI ADD AL,BX ADC AH,0 INC BX LOOP L2 ; 累加乘10L3: RET A2 ENDP入口:十進(jìn)制數(shù)的ASCII在BUF1內(nèi);出口:轉(zhuǎn)換后的二進(jìn)制數(shù)在AX內(nèi)。算法:先將其轉(zhuǎn)換為十進(jìn)制,再用累加和乘10加X的方法變?yōu)槎M(jìn)制,如將163轉(zhuǎn)換為二進(jìn)制數(shù),可先將累加和賦0,再計(jì)算(0*10+1)*10+6)*10+3)結(jié)果為二進(jìn)制數(shù)。5.1.7將計(jì)算結(jié)果的二進(jìn)制數(shù)轉(zhuǎn)換為對應(yīng)的十進(jìn)制數(shù)ASCII碼并輸出顯示(A3程序段) 入口:二進(jìn)制數(shù)在AX內(nèi);出口:轉(zhuǎn)換后的ASCII碼在BUF內(nèi)。算法:AX內(nèi)的數(shù)范圍在+32767到-32768之間,先檢查AX符號(hào)位,決定輸出+還是-,若為負(fù),先求補(bǔ)碼得到原碼后可與正數(shù)統(tǒng)一處理。方法:把將被轉(zhuǎn)換的二進(jìn)制數(shù)先除以10000,商為萬位數(shù),再將余數(shù)除以1000,商為千位數(shù),以此類推,求出百十位數(shù),剩下的為個(gè)位數(shù)。最后各個(gè)數(shù)加上30H,即為對應(yīng)字符。 5.2程序編譯、運(yùn)行與調(diào)試在DOS環(huán)境下,鍵入EDIT。啟動(dòng)全屏幕編輯軟件EDIT,輸入源程序。輸入完畢,按Alt+F選擇SAVE保存程序(規(guī)定擴(kuò)展名為*.ASM),按Alt+X退出EDIT狀態(tài)。退出EDIT環(huán)境后,輸入ASM或MASM 文件名(省略擴(kuò)展名,系統(tǒng)默認(rèn)為.ASM),對源程序進(jìn)行匯編。源程序經(jīng)匯編后產(chǎn)生三個(gè)輸出文件:第一個(gè)是OBJ文件,即二進(jìn)制目標(biāo)文件,這是匯編的主要目的;第二個(gè)是LST文件,即列表文件;第三個(gè)是CRF文件,對于一般的程序可以不建立后兩個(gè)文件。匯編時(shí),計(jì)算機(jī)會(huì)詢問匯編后生成的OBJ文件名、LST文件名和CRF文件名,問句的右側(cè)是示范回答,如果不想生成LST文件和CRF文件,則按回車鍵回答。匯編過程中,如果源程序中有語法錯(cuò)誤,則匯編過程結(jié)束后,匯編程序會(huì)指出源程序中的錯(cuò)誤,這時(shí),可以再用編輯程序來修改源程序中的錯(cuò)誤,最后,得到?jīng)]有語法錯(cuò)誤的OBJ文件。匯編程序產(chǎn)生的二進(jìn)制目標(biāo)文件不是可執(zhí)行文件,還必須用連接程序(LINK)把OBJ文件轉(zhuǎn)換成可執(zhí)行的EXE文件。LINK程序有兩個(gè)輸入文件OBJ和LIB,兩個(gè)輸出文件EXE和MAP。連接時(shí),輸入LINK 文件名,對匯編生成的*.OBJ文件進(jìn)行連接,計(jì)算時(shí)會(huì)詢問生成的EXE文件名、MAP文件名以及參與連接的庫文件名,如果不想生成MAP文件,沒有庫文件參與連接,則按回車鍵作答。最后,生成相應(yīng)的*.EXE文件。從LINK過程的提示信息中,可看到最后給出了一個(gè)“無堆棧段”的警告性錯(cuò)誤,這并不影響程序的執(zhí)行。至此,產(chǎn)生了一個(gè)EXE文件,在DOS環(huán)境下可以直接運(yùn)行該文件。在程序得到正確的結(jié)果之前,會(huì)產(chǎn)生一些錯(cuò)誤,只有經(jīng)過調(diào)試階段才能糾正程序中的錯(cuò)誤,從而的到正確的結(jié)果。在程序編譯過程中會(huì)提示語法錯(cuò)誤,可再用編輯程序來修改源程序中的錯(cuò)誤。當(dāng)沒
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 文化藝術(shù)機(jī)構(gòu)員工離職流程流程
- 學(xué)校教師崗位規(guī)章制度及職責(zé)
- 2025年四年級科學(xué)探究活動(dòng)教學(xué)計(jì)劃
- 2025年高校輔導(dǎo)員思想教育計(jì)劃
- 部編版四年級語文上冊課時(shí)安排計(jì)劃
- 機(jī)器人社團(tuán)年度發(fā)展計(jì)劃
- 四年級語文家校合作提升措施
- 金融系統(tǒng)設(shè)計(jì)質(zhì)量保證措施
- 農(nóng)業(yè)產(chǎn)品供貨方案及質(zhì)量保證措施
- 礦山注漿堵水安全技術(shù)措施
- 屋頂分布式光伏電站施工組織設(shè)計(jì)方案
- DB11T 1034.2-2024交通噪聲污染緩解工程技術(shù)規(guī)范 第2部分:聲屏障措施
- 四川省成都市金牛區(qū)2023-2024學(xué)年七年級下學(xué)期期末數(shù)學(xué)試題
- DL-T664-2016帶電設(shè)備紅外診斷應(yīng)用規(guī)范
- 中華民族共同體概論課件專家版6第六講 五胡入華與中華民族大交融(魏晉南北朝)
- 海南師范大學(xué)2022年計(jì)算機(jī)網(wǎng)絡(luò)期末試題及答案
- 廣西大學(xué)附屬中學(xué)2023-2024學(xué)年高一化學(xué)第二學(xué)期期末質(zhì)量檢測模擬試題含解析
- 新型激光焊接解決方案 解決電機(jī)定子焊接難題
- 停車場智能管理系統(tǒng)培訓(xùn)教材課件
- 醫(yī)學(xué)影像技術(shù)及其臨床應(yīng)用
- 藥店?duì)I業(yè)員知識(shí)技能培訓(xùn)
評論
0/150
提交評論