判斷是否能構(gòu)成三角形匯編語言程序設(shè)計_第1頁
判斷是否能構(gòu)成三角形匯編語言程序設(shè)計_第2頁
判斷是否能構(gòu)成三角形匯編語言程序設(shè)計_第3頁
判斷是否能構(gòu)成三角形匯編語言程序設(shè)計_第4頁
判斷是否能構(gòu)成三角形匯編語言程序設(shè)計_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、武漢理工大學(xué)微機(jī)原理與接口技術(shù)課程設(shè)計說明書目錄摘 要11 程序設(shè)計要求及目的21.1 程序設(shè)計要求21.2 程序設(shè)計目的22 設(shè)計思路與準(zhǔn)備32.1 程序設(shè)計思路3 2.2 DOS功能調(diào)用42.3 ASC碼轉(zhuǎn)換表73 程序設(shè)計與代碼說明83.1 流程圖設(shè)計83.2 程序輸入部分93.3 程序判斷部分103.4 程序輸出部分123.4.1 構(gòu)成三角形的邊長輸出123.4.2 錯誤輸出133.5 完整程序代碼134 程序調(diào)試與運(yùn)行174.1 調(diào)試過程175 程序創(chuàng)新與改進(jìn)205.1 改進(jìn)說明205.2 程序代碼215.3 程序運(yùn)行與調(diào)試226 心得及體會227 參考文獻(xiàn)24附件一:題目要求源程序

2、附件二:加入判斷等腰或等邊三角形的程序33摘 要匯編語言是面向機(jī)器的程序設(shè)計語言。在匯編語言中,用助記符代替機(jī)器指令的操作碼,用地址符號或標(biāo)號代替指令或操作數(shù)的地址,如此就增強(qiáng)了程序的可讀性和編寫難度,象這樣符號化的程序設(shè)計語言就是匯編語言,因此亦稱為符號語言。使用匯編語言編寫的程序,機(jī)器不能直接識別,還要由匯編程序或者叫匯編語言編譯器轉(zhuǎn)換成機(jī)器指令。匯編程序?qū)⒎柣牟僮鞔a組裝成處理器可以識別的機(jī)器指令,這個組裝的過程稱為組合或者匯編。因此,有時候人們也把匯編語言稱為組合語言。 匯編語言是微機(jī)原理及應(yīng)用的基礎(chǔ),微機(jī)主機(jī)及接口所要實現(xiàn)的功能都要通過匯編語言來實現(xiàn)。盡管匯編語言程序設(shè)計編程效率

3、偏低,但運(yùn)行效率高、速度快。因此掌握匯編語言是學(xué)好微機(jī)原理及接口技術(shù)的第一步。本次課設(shè)通過代碼編程,設(shè)計出輸入三邊并判斷它們是否能夠成三角形,若不能,則顯示錯誤字樣。否則直接顯示輸出該三角形的周長。充分應(yīng)用匯編技術(shù),微機(jī)原理和接口技術(shù)的知識。關(guān)鍵詞:匯編語言,控制,微機(jī)原理及接口技術(shù),三角形1 程序設(shè)計要求及目的1.1 程序設(shè)計要求1.1.1 選題: 第十四題 判斷是否能構(gòu)成三角形匯編語言程序設(shè)計 輸入a,b,c 三邊后,判斷是否能構(gòu)成三角形,如能構(gòu)成三角形,輸出三角形的周長,否則輸出“ERROR”。要求:提示輸入三角形三邊長度a b c;鍵盤輸入,中間空格隔開; Enter 鍵結(jié)束輸入,并換

4、行顯示判斷結(jié)果。 1.1.2 要求:(1)程序需上機(jī)調(diào)試通過才算完成該設(shè)計內(nèi)容; (2)同一選題可合作完成,但設(shè)計報告書需注明本人承擔(dān)的設(shè)計部分; (3)報告書中的源程序要求加注釋。 1.2 程序設(shè)計目的(1)進(jìn)一步建立微機(jī)系統(tǒng)的概念,加深對系統(tǒng)的理解和認(rèn)識,培養(yǎng)學(xué)生應(yīng)用微型計算機(jī)解決實際問題的能力; (2)進(jìn)一步學(xué)習(xí)和掌握匯編語言程序的編寫和應(yīng)用的方法,通過較大規(guī)模程序的編寫,提高編寫匯編語言程序的水平和學(xué)習(xí)程序調(diào)試方法。 (3)進(jìn)一步熟悉微機(jī)最小系統(tǒng)的構(gòu)成及常用接口芯片的使用,提高系統(tǒng)設(shè)計能力。 2 設(shè)計思路與準(zhǔn)備2.1 程序設(shè)計思路2.1.1 構(gòu)成三角形的條件由三角形定理克制,三邊構(gòu)成三

5、角形的充要條件:(1)任意兩邊之和大于第三邊,(2)任意兩邊之差小于第三邊,令給出三遍長度分別為a、b、c,轉(zhuǎn)換為字母表示如下:(1)a+b>c;a+c>b;b+c>a;(2)|a-b|<c;|a-c|<b;|b-c|<a;顯然由式(1)中的三個不等式可以推出式(2)中全部不等式,故三邊構(gòu)成三角形的充要條件可以簡化為條件(1),即:三邊中任意兩邊之和均大于第三邊。2.1.2 程序結(jié)構(gòu)框架(1)循環(huán)結(jié)構(gòu):循環(huán)結(jié)構(gòu)表示程序反復(fù)執(zhí)行某個或某些操作,直到滿足或不滿足設(shè)定的條件時才可終止循環(huán)。題中在三邊長度不滿足構(gòu)成三角形條件時,輸出“ERROR”字符后自動跳轉(zhuǎn)至程序

6、首段進(jìn)行下一輪三邊長度的輸入操作。(2)選擇結(jié)構(gòu) 選擇結(jié)構(gòu)表示程序的處理步驟出現(xiàn)了分支,它需要根據(jù)某一特定的條件選擇其中的一個分支執(zhí)行。選擇結(jié)構(gòu)有單選擇、雙選擇和多選擇三種形式。題中所述判斷兩邊之和與第三邊大小關(guān)系時要用到選擇結(jié)構(gòu)確定各大小關(guān)系程序的跳轉(zhuǎn),從而完成判斷是否能夠構(gòu)成三角形的目的。2.1.3 程序設(shè)計思路圖如圖1所示輸入部分判斷部分Y/N輸出部分YN圖1 程序設(shè)計思路圖2.2 DOS功能調(diào)用(1)鍵盤輸入并顯示(1號功能調(diào)用)格式: MOV AH, 01H   INT 21H功能:按下任何鍵,將其對應(yīng)字符的ASCII碼送入AL中,并在屏幕上顯示該字符。如果按下的

7、是CtrlBreak組合鍵,則終止程序執(zhí)行。1號功能調(diào)用無須入口參數(shù),出口參數(shù)在AL中。 (2)鍵盤輸入但不顯示輸入字符(8號功能調(diào)用) 格式: MOV A=H, 08H    INT 21H功能:同1號功能調(diào)用,但字符不在屏幕上顯示。  (3)屏幕顯示一個字符(2號功能調(diào)用) 格式: MOV DL, '字符'    MOV AH, 02H    INT 21H功能:將置入DL寄存器中的字符在屏幕上顯示輸出。 (4)打印輸出(5號功能調(diào)用) 格式: MOV DL, '字符

8、'    MOV AH, 05H    INT 21H功能:將置入DL寄存器中的字符送打印機(jī)接口,打印輸出。 (5)屏幕顯示字符串(9號功能調(diào)用) 格式: MOV DX, 字符串的偏移地址     MOV AH, 09H    INT 21H功能:在屏幕上顯示字符串。 在使用9號功能調(diào)用時,應(yīng)當(dāng)注意以下問題。 待顯示的字符串必須先放在內(nèi)存一數(shù)據(jù)區(qū)(DS段)中,且以$符號作為結(jié)束標(biāo)志。 應(yīng)當(dāng)將字符串首地址的段基址和偏移地址分別存入DS和DX寄存器中。 (6)字符串輸入功

9、能調(diào)用(0AH號功能調(diào)用) 格式: MOV DX, 已定義緩沖區(qū)的偏移地址     MOV AH, 0AH    INT 21H功能:從鍵盤接收字符,并存放到內(nèi)存緩沖區(qū)。 在使用0AH號功能調(diào)用時,應(yīng)當(dāng)注意以下問題。 執(zhí)行前先定義一個輸入緩沖區(qū),緩沖區(qū)內(nèi)第一個字節(jié)定義為允許最多輸入的字符個數(shù),字符個數(shù)應(yīng)包括回車符0DH在內(nèi),不能為“0”值。第二個字節(jié)保留,在執(zhí)行程序完畢后存入輸入的實際字符個數(shù)。從第三個字節(jié)開始存入從鍵盤上接收字符的ASCII碼。若實際輸入的字符個數(shù)少于定義的最大字符個數(shù),則緩沖區(qū)其他單元自動清0。若實際輸入

10、的字符個數(shù)大于定義的字符個數(shù),其后輸入的字符丟棄不用,且響鈴示警,一直到輸入回車鍵為止。整個緩沖區(qū)的長度等于最大字符個數(shù)再加2。 應(yīng)當(dāng)將緩沖區(qū)首地址的段基址和偏移地址分別存入DS和DX寄存器中。  (7)返回DOS操作系統(tǒng)(4CH號功能調(diào)用) 格式: MOV AH, 4CH    INT 21H功能:終止當(dāng)前程序的運(yùn)行,并把控制權(quán)交給調(diào)用的程序,即返回DOS系統(tǒng),屏幕出現(xiàn)DOS提示符,如“C: >”,等待DOS命令。 (8)直接輸入、輸出單字符(6號功能調(diào)用) 格式: MOV DL, 輸入/輸出標(biāo)志     MOV A

11、H, 06H   INT 21H功能:執(zhí)行鍵盤輸入操作或屏幕顯示輸出操作,但不檢查CtrlBreak組合鍵是否按下。執(zhí)行這兩種操作的選擇由DL寄存器中的內(nèi)容決定。 當(dāng)(DL)0FFH時,執(zhí)行鍵盤輸入操作。若標(biāo)志ZF0,AL中放入字符的ASCII碼;若標(biāo)志ZF1,表示無鍵按下。這種調(diào)用用來檢測鍵盤是否有鍵按下,但不等待鍵盤輸入。 當(dāng)(DL)0FFH時,表示將DL中內(nèi)容送屏幕顯示輸出。 DOS功能調(diào)用表功能號功能入口參數(shù)出口參數(shù)01H帶回顯的鍵盤輸入AL=輸入字符06H直接控制臺I/ODL=FF(輸入)AL=輸入字符DL=字符(輸出)0AH字符串緩沖輸入DS:DX 緩

12、沖區(qū)首址02H字符顯示DL=輸出字符04H串行口輸出字符DL=輸出字符05H字符打印DL=輸出字符09H字符串顯示DS:DX 緩沖區(qū)首址2.3 ASC碼轉(zhuǎn)換表編程涉及的部分ASC碼轉(zhuǎn)換如下表所示:八進(jìn)制十六進(jìn)制十進(jìn)制字符解釋150D13CR回車鍵402032(space)空格6030480數(shù)字06131491數(shù)字16232502數(shù)字26333513數(shù)字36434524數(shù)字46535535數(shù)字56636546數(shù)字66737557數(shù)字77038568數(shù)字87139579數(shù)字93 程序設(shè)計與代碼說明3.1 流程圖設(shè)計結(jié)束開始輸入a、b、c將a、b、c轉(zhuǎn)化為ASC碼將數(shù)字轉(zhuǎn)換為十進(jìn)制a+b>c?

13、a+c>b?b+c>a?輸出周長計算周長=a+b+cERROR返回YYNNN圖2 主程序流程圖3.2 程序輸入部分3.2.1 程序說明 為保證界面的美觀,在輸入a,b,c之前希望界面顯示提示輸入的字符,在數(shù)據(jù)段可以定義,利用功能調(diào)用代碼MOV AH,9顯示提示輸入的字符串。程序輸入部分要求鍵盤輸入a,b,c的值,則需要調(diào)用DOS功能,鍵盤單字符輸入的代碼指令為MOV AH,1 。CBW代碼是將輸入在AL中的數(shù)擴(kuò)展到AH中從而得到AX的值。輸入空格的功能調(diào)用操作指令為MOV AH,2 ,分別在三次單字符鍵入后使用保證沒輸入完成一個字符后自動空格。利用回車完成輸入結(jié)束等待繼續(xù)程序可以用

14、 CMP AL,0DH 和JNE INPUT實現(xiàn),由于回車的ASC碼為0DH,故輸入回車時兩者相等程序繼續(xù),若輸入字符不為回車,則執(zhí)行JNE后的程序段,跳轉(zhuǎn)至輸入程序段首重新等待輸入。3.2.2 程序代碼 INPUT: LEA DX,BUFF1 MOV AH,9 ;顯示"請輸入a、b、c的值" 字樣 INT 21H MOV AH,1 ;輸入a值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV BX,AX ;將a的值存入BX中 MOV AL,20H MOV AH,2 ;在字母a的值鍵入后輸出空格 INT 21H MOV AH,1 ;輸入b的值 INT

15、21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV CX,AX ;將b的值存入CX中 MOV AL,20H MOV AH,2 ;在字母b的值鍵入后輸出空格 INT 21H MOV AH,1 ;輸入c的值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV DX,AX ;防止AX中數(shù)據(jù)改變 MOV AH,1 ;輸入任意字符 INT 21H CMP AL,0DH JNE INPUT ;若此時輸入字符不為回車則返回重新輸入部分3.3 程序判斷部分3.3.1 程序說明要判斷是否能夠成三角形即判斷是否滿足先前三個等式的條件,故需計算三次。其中任意一次的結(jié)果不滿足等式則自動

16、跳轉(zhuǎn)至錯誤顯示環(huán)節(jié),若三者均滿足,則程序繼續(xù)運(yùn)行并計算三角形三邊周長。再輸入部分代碼以ASC碼存儲,運(yùn)算時需將其還原至數(shù)值形式,故先要將DX,BX,CX寄存器中的數(shù)值減30H得運(yùn)算數(shù)值。三邊邊長比較時,先利用ADD語句將任意兩邊分別相加然后與第三邊比較,若前兩邊不大于,即小于等于第三邊值,則跳轉(zhuǎn)至ERROR,不能構(gòu)成三角形。在滿足條件時,利用ADC進(jìn)行三邊邊長的求和。3.3.2 程序代碼JUDGE: SUB DX,30H ;將輸入后c的ASC碼轉(zhuǎn)換為數(shù)值型 SUB BX,30H ;將輸入后a的ASC碼轉(zhuǎn)換為數(shù)值型 SUB CX,30H ;將輸入后b的ASC碼轉(zhuǎn)換為數(shù)值型 MOV AX,BX ;

17、將BX的數(shù)值存入AX寄存器 ADD AX,CX ;計算BX+CX的長度 CMP AX,DX ;BX+CX的值與第三邊DX作比較 JNG ERROR ;若BX+CXDX,則跳轉(zhuǎn)至ERROR MOV AX,CX ;將BX的值送入DX ADD AX,DX ;計算DX+CX的長度 CMP AX,BX ; DX+CX的值與第三邊BX作比較 JNG ERROR ;若DX+CXBX,則跳轉(zhuǎn)至ERROR MOV AX,DX ;將AX的值送入DX ADD AX,BX ;計算DX+BX的長度 CMP AX,CX ; DX+BX的值與第三邊CX作比較 JNG ERROR ;若DX+BXc,則跳轉(zhuǎn)至ERROR MOV

18、 AX,BX ;若三邊均滿足條件,則計算周長 ADC AX,CX ;計算兩邊長度和 ADC AX,DX ;DX=a+b+c3.4 程序輸出部分3.4.1 構(gòu)成三角形的邊長輸出3.4.1.1 程序說明首先利用功能調(diào)用聲明可以構(gòu)成三角形,顯示“三角形的周長為:”字符以增強(qiáng)程序的閱讀性和完整性。由于三邊周長的數(shù)值儲存在AX寄存器中,而之后的功能調(diào)用需要對AH進(jìn)行賦值,為了防止AX中三邊邊長和的數(shù)值被改變,利用PUSH語句先將AX存入堆棧,進(jìn)行完功能調(diào)用操作后再利用POP語句將AX出棧而保持先前周長的數(shù)值便于之后的運(yùn)算。為了將AX中16位的數(shù)值轉(zhuǎn)換為十進(jìn)制,我們要利用DIV操作。顯示輸出時,需將AX中

19、的AH和AL單獨(dú)分開顯示,并將運(yùn)算數(shù)值逆運(yùn)算,轉(zhuǎn)換為ASC碼顯示,故需要將兩寄存器分別加上30H還原。3.4.1.2 程序代碼OUTPUT: PUSH AX LEA DX,BUFF2 MOV AH,9 ;輸出"他們可以構(gòu)成一個三角形"字符 INT 21H LEA DX,BUFF4 MOV AH,9 ;輸出"三角形的周長為:"字符 INT 21H POP AX MOV BL,10 DIV BL ;將數(shù)值轉(zhuǎn)換為十進(jìn)制 MOV BL,AH ;將AH的值轉(zhuǎn)移到CL寄存器 ADD AL,30H ;將AL的值轉(zhuǎn)換為ASC碼 MOV DL,AL MOV AH,2 ;輸

20、出AL的值 INT 21H ADD BL,30H ;將AH的值轉(zhuǎn)換為ASC碼 MOV DL,BL MOV AH,2 ;輸出AH的值 INT 21H 3.4.2 錯誤輸出3.4.2.1 程序說明錯誤輸出語句相對簡單,在數(shù)據(jù)段對字符串進(jìn)行定以后直接利用 MOV AH,9調(diào)用功能顯示完整的錯誤字符串。為了使程序更具有實用性,錯誤提醒后自動跳轉(zhuǎn)回到程序輸入語句提示重新輸入。3.4.2.2 程序代碼ERROR: LEA DX,BUFF3 MOV AH,9 ;輸出"錯誤"字符 INT 21H JMP INPUT ;跳轉(zhuǎn)返回到輸入a、b、c的程序3.5 完整程序代碼DATA SEGMEN

21、TBUFF1 DB 13,10,'Please input the values of a,b,c:','$'BUFF2 DB 13,10,'They can construct a triangle!','$'BUFF3 DB 13,10,'ERROR','$'BUFF4 DB 13,10,'The perimeter of this triangle is:','$'DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODE STAR

22、T:MOV AX,DATA MOV DS,AX INPUT:LEA DX,BUFF1 MOV AH,9 ;顯示"請輸入a、b、c的值" 字樣 INT 21H MOV AH,1 ;輸入a值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV BX,AX ;將a的值存入BX中 MOV AL,20H MOV AH,2 ;在字母a的值鍵入后輸出空格 INT 21H MOV AH,1 ;輸入b的值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV CX,AX ;將b的值存入CX中 MOV AL,20H MOV AH,2 ;在字母b的值鍵入后輸

23、出空格 INT 21H MOV AH,1 ;輸入c的值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV DX,AX ;防止AX中數(shù)據(jù)改變 MOV AH,1 ;輸入任意字符 INT 21H CMP AL,0DH JNE INPUT ;若此時輸入字符不為回車則返回重新輸入部分JUDGE:SUB DX,30H ;將輸入后c的ASC碼轉(zhuǎn)換為數(shù)值型 SUB BX,30H ;將輸入后a的ASC碼轉(zhuǎn)換為數(shù)值型 SUB CX,30H ;將輸入后b的ASC碼轉(zhuǎn)換為數(shù)值型 MOV AX,BX ;將BX的數(shù)值存入AX寄存器 ADD AX,CX ;計算BX+CX的長度 CMP AX,DX ;B

24、X+CX的值與第三邊DX作比較 JNG ERROR ;若BX+CXDX,則跳轉(zhuǎn)至ERROR MOV AX,CX ;將BX的值送入DX ADD AX,DX ;計算DX+CX的長度 CMP AX,BX ; DX+CX的值與第三邊BX作比較 JNG ERROR ;若DX+CXBX,則跳轉(zhuǎn)至ERROR MOV AX,DX ;將AX的值送入DX ADD AX,BX ;計算DX+BX的長度 CMP AX,CX ; DX+BX的值與第三邊CX作比較 JNG ERROR ;若DX+BXc,則跳轉(zhuǎn)至ERROR MOV AX,BX ;若三邊均滿足條件,則計算周長 ADC AX,CX ;計算兩邊長度和 ADC AX

25、,DX ;DX=a+b+c PUSH AX ;將AX存入堆棧保護(hù) OUTPUT:LEA DX,BUFF2 MOV AH,9 ;輸出"他們可以構(gòu)成一個三角形"字符 INT 21H LEA DX,BUFF4 MOV AH,9 ;輸出"三角形的周長為:"字符 INT 21H POP AX MOV BL,10 DIV BL ;將數(shù)值轉(zhuǎn)換為十進(jìn)制 MOV BL,AH ;將AH的值轉(zhuǎn)移到CL寄存器 ADD AL,30H ;將AL的值轉(zhuǎn)換為ASC碼 MOV DL,AL MOV AH,2 ;輸出AL的值 INT 21H ADD BL,30H ;將AH的值轉(zhuǎn)換為ASC碼

26、MOV DL,BL MOV AH,2 ;輸出AH的值 INT 21H JMP OVER ;跳轉(zhuǎn)至結(jié)束程序 ERROR: LEA DX,BUFF3 MOV AH,9 ;輸出"錯誤"字符 INT 21H JMP INPUT ;跳轉(zhuǎn)返回到輸入a、b、c的程序 OVER: MOV AX,4C00H INT 21H ;程序結(jié)束CODE ENDS END START4 程序調(diào)試與運(yùn)行4.1 調(diào)試過程利用emu8086軟件新建空白頁,輸入源程序代碼后匯編檢測是否存在錯誤。若不存在錯誤,則程序自動運(yùn)行DOS系統(tǒng)的INT 21H下的09H字功能以“$”為結(jié)束符,自動結(jié)束字符串的顯示,所以運(yùn)行

27、后屏幕首先顯示“please input the value of a,b,c:”隨后輸入三個數(shù)字。此時AX,BX,CX,DX寄存器中為隨機(jī)值。圖3 程序輸入界面若不輸入回車,則程序不繼續(xù)運(yùn)行,而跳轉(zhuǎn)回到輸入部分繼續(xù)輸入。圖4 未輸入回車界面輸入回車后,程序?qū)斎霐?shù)值進(jìn)行檢驗判斷,若不能構(gòu)成三角形,則輸出“ERROR”字樣,隨后程序跳轉(zhuǎn)回到重新輸入部分,光標(biāo)閃爍,等待下一次輸入。圖5 不能構(gòu)成三角形界面若輸入的數(shù)值滿足構(gòu)成三角形的條件,則首先輸出“他們可以構(gòu)成三角形!”的字樣,隨后程序繼續(xù)運(yùn)行,計算a+b+c的值為構(gòu)成的三角形的周長,并在屏幕顯示出它們相應(yīng)的周長計算值。圖6 構(gòu)成三角形并計算周

28、長界面單步運(yùn)行時可以檢測AX,BX,CX,DX中數(shù)值的變化,此時a、b、c三邊值分別存于BX,CX,DX寄存器中,AX已運(yùn)算出BX+CX+DX的數(shù)值。圖7 單步運(yùn)行界面5 程序創(chuàng)新與改進(jìn)5.1 改進(jìn)說明等腰等邊三角形判斷本題中只需判斷輸入的a、b、c三邊是否滿足:任意兩邊之和大于第三邊的條件,即判斷是否能夠成三角形。為了深化題目使之具有更高的實用性,可以將程序在判斷構(gòu)成三角形的條件成立后,添加進(jìn)一步判斷是否為等腰三角形或是等邊三角形的條件。其中,判斷等腰三角形的條件為:三邊中有兩邊相等。這其中也包括了三邊均相等,即等邊三角形的情況。利用選擇結(jié)構(gòu)對三邊中任意兩邊進(jìn)行三次比較,其中一次或兩次結(jié)果相

29、等后跳轉(zhuǎn)輸出“此三角形為等腰三角形”的語句。當(dāng)三次判斷均相等時,則跳轉(zhuǎn)輸出“此三角形為等邊三角形”的語句。修改部分程序如下:5.2 程序代碼 CMP BX,CX ;比較BX,CX的大小 JNE NORMAL ;若不等則跳轉(zhuǎn)至NORMAL部分 CMP BX,DX ;比較BX,DX的大小 JE T2 ;仍相等則輸出等邊三角形 JMP T1 ;若不相等則輸出等腰三角形NORMAL:CMP BX,DX ;比較BX,DX的大小 JE T1 ;若相等則輸出等腰三角形,不相等繼續(xù) CMP CX,DX ;比較CX,DX的大小 JE T1 ;若相等輸出等腰三角形 JMP OUTPUT ;不相等則直接輸出能夠成三

30、角形T1: PUSH DX ;等腰三角形輸出 LEA DX,BUFF5 MOV AH,9 INT 21H POP DX JMP OUTPUT T2:PUSH DX ;對等邊三角形輸出 LEA DX,BUFF6 MOV AH,9 INT 21H POP DX JMP OUTPUT 5.3 程序運(yùn)行與調(diào)試輸入數(shù)字可構(gòu)成等腰三角形時顯示“l(fā)sosceles”字樣,如圖所示:圖8 等腰三角形顯示輸入數(shù)字可構(gòu)成等邊三角形時顯示“equateral”字樣,如圖所示: 圖9 等邊三角形顯示 帶入任意數(shù)值若干組,程序測試可行。 6 心得及體會在大一學(xué)期,我們就接觸了最早的C語言程序編程,利用輸入的編碼和指令可

31、以設(shè)計出許多有趣的小程序和簡單實用的解題方法。而在本學(xué)期所學(xué)的匯編語言使我更加深刻的了解認(rèn)識了編程的奧秘。對于C語言而言,匯編語言相對晦澀生疏,但其實兩者也有很多的共通之處,例如所有指令的代碼都是同義的英文名詞或者它的簡寫,結(jié)構(gòu)化程序設(shè)計中的循環(huán)結(jié)構(gòu)、分支結(jié)構(gòu)、順序結(jié)構(gòu)等兩者在實質(zhì)上其實是完全相同的。兩種編程語言的結(jié)合更讓我對編程產(chǎn)生了濃厚的興趣。 微機(jī)原理是一門專業(yè)基礎(chǔ)課程,它的主要內(nèi)容包括微型計算機(jī)體系結(jié)構(gòu)、8086微處理器和指令系統(tǒng)、匯編語言設(shè)計以及微型計算機(jī)各個組成部分介紹等內(nèi)容。要求考生對微機(jī)原理中的基本概念有較深入的了解,能夠系統(tǒng)地掌握微型計算機(jī)的結(jié)構(gòu)、8086微處理器和指令系統(tǒng)、

32、匯編語言程序設(shè)計方法、微機(jī)系統(tǒng)的接口電路設(shè)計及編程方法等,并具有綜合運(yùn)用所學(xué)知識分析問題和解決問題的能力。在微機(jī)原理與接口技術(shù)這門課程的實驗環(huán)節(jié)中,我們學(xué)會了用程序?qū)⒋a從接口傳入控制設(shè)備,從而達(dá)到利用軟件間接控制硬件的作用。利用8086cpu中的寄存器AX,BX,CX,DX來存儲相關(guān)的數(shù)據(jù)進(jìn)行運(yùn)算。通過這此課程設(shè)計,我也深深體會到了理論和實際結(jié)合的重要性,要把平時上課學(xué)習(xí)到的代碼指令和要求規(guī)則轉(zhuǎn)換到實際并不像想象中那么容易和順利。還有一些經(jīng)驗性的技巧與知識是通過實際動手和思考培養(yǎng)積累所得的。只有從理論知識的層面升華到解決實際問題,才算真正掌握了這門學(xué)科。在編程的過程中,我學(xué)會了靈活運(yùn)用所學(xué)知

33、識的重要性,對于同一個目標(biāo),可以選擇和利用的編碼指令有很多種,如何選擇占用內(nèi)存空間最小,運(yùn)行速度最快的方式是我們需要考慮和學(xué)習(xí)的優(yōu)化編程思想。同樣,在程序調(diào)試過程中,我也切身感受到了思維嚴(yán)謹(jǐn)和細(xì)心耐心的良好品質(zhì),一個很小的代碼錯誤可能會導(dǎo)致整個程序的無法運(yùn)行,可見編程的要求是很高的。此外,我還意識到在編程途中的格式和分段式相當(dāng)重要的,分段編程可以讓我們的思路更加清晰從而大大提高我們的效率,冗長復(fù)雜的一段式代碼看似簡單,實際卻增加了閱讀的難度,在編程途中也容易弄混出錯。利用匯編,我們可以解決很多生活中的實際問題,將這些問題轉(zhuǎn)換建立實際的數(shù)學(xué)模型然后利用編程計算求解。雖然這學(xué)期的課程結(jié)束了,但對于

34、我們匯編語言和接口技術(shù)的知識還有很多我們從未接觸,只是一門有用的學(xué)科,也是很有用的思維方法。在今后的學(xué)習(xí)生活中,我們還要不斷地自主學(xué)習(xí),將這門編程技術(shù)更加精通地投入日常生活的實際運(yùn)用中,更加充分地發(fā)揮它的意義和作用。7 參考文獻(xiàn)1彭虎等編著微機(jī)原理與接口技術(shù)(第二版)北京:電子工業(yè)出版社,2008 2沈美明,溫東禪IBM-PC匯編語句程序設(shè)計(第2版)北京:清華大學(xué)出版社,2001 3任向明,盧惠林匯編語言程序設(shè)計實用教程北京:清華大學(xué)出版社,2009 4馬力妮80x86匯編語言程序設(shè)計北京:機(jī)械工業(yè)出版社,2004 5曹加恒,蘇光奎,許先斌新一代匯編語言程序設(shè)計北京:高等教育出版社,2003

35、 附件一:題目要求源程序DATA SEGMENTBUFF1 DB 13,10,'Please input the values of a,b,c:','$'BUFF2 DB 13,10,'They can construct a triangle!','$'BUFF3 DB 13,10,'ERROR','$'BUFF4 DB 13,10,'The perimeter of this triangle is:','$'DATA ENDSCODE SEGMENT ASSU

36、ME DS:DATA,CS:CODE START:MOV AX,DATA MOV DS,AX INPUT:LEA DX,BUFF1 MOV AH,9 ;顯示"請輸入a、b、c的值" 字樣 INT 21H MOV AH,1 ;輸入a值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV BX,AX ;將a的值存入BX中 MOV AL,20H MOV AH,2 ;在字母a的值鍵入后輸出空格 INT 21H MOV AH,1 ;輸入b的值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV CX,AX ;將b的值存入CX中 MOV AL,2

37、0H MOV AH,2 ;在字母b的值鍵入后輸出空格 INT 21H MOV AH,1 ;輸入c的值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV DX,AX ;防止AX中數(shù)據(jù)改變 MOV AH,1 ;輸入任意字符 INT 21H CMP AL,0DH JNE INPUT ;若此時輸入字符不為回車則返回重新輸入部分JUDGE:SUB DX,30H ;將輸入后c的ASC碼轉(zhuǎn)換為數(shù)值型 SUB BX,30H ;將輸入后a的ASC碼轉(zhuǎn)換為數(shù)值型 SUB CX,30H ;將輸入后b的ASC碼轉(zhuǎn)換為數(shù)值型 MOV AX,BX ;將BX的數(shù)值存入AX寄存器(由于之后的功能調(diào)用需要

38、改變AX的值) ADD AX,CX ;計算BX+CX的長度 CMP AX,DX ;BX+CX的值與第三邊DX作比較 JNG ERROR ;若BX+CXDX,則跳轉(zhuǎn)至ERROR MOV AX,CX ;將BX的值送入DX(防止加法計算后BX所存儲的邊長改變) ADD AX,DX ;計算DX+CX的長度 CMP AX,BX ; DX+CX的值與第三邊BX作比較 JNG ERROR ;若DX+CXBX,則跳轉(zhuǎn)至ERROR MOV AX,DX ;將AX的值送入DX(防止加法計算后AX所存儲的邊長改變) ADD AX,BX ;計算DX+BX的長度 CMP AX,CX ; DX+BX的值與第三邊CX作比較

39、JNG ERROR ;若DX+BXc,則跳轉(zhuǎn)至ERROR MOV AX,BX ;若三邊均滿足條件,則計算周長 ADC AX,CX ;計算兩邊長度和 ADC AX,DX ;DX=a+b+c PUSH AX ;由于之后涉及AX的功能調(diào)用,此處將AX存入堆棧保護(hù) OUTPUT:LEA DX,BUFF2 MOV AH,9 ;輸出"他們可以構(gòu)成一個三角形"字符 INT 21H LEA DX,BUFF4 MOV AH,9 ;輸出"三角形的周長為:"字符 INT 21H POP AX MOV BL,10 DIV BL ;將數(shù)值轉(zhuǎn)換為十進(jìn)制 MOV BL,AH ;將AH

40、的值轉(zhuǎn)移到CL寄存器防止功能調(diào)用時被破壞 ADD AL,30H ;將AL的值轉(zhuǎn)換為ASC碼 MOV DL,AL MOV AH,2 ;輸出AL的值 INT 21H ADD BL,30H ;將AH的值轉(zhuǎn)換為ASC碼 MOV DL,BL MOV AH,2 ;輸出AH的值 INT 21H JMP OVER ;跳轉(zhuǎn)至結(jié)束程序 ERROR: LEA DX,BUFF3 MOV AH,9 ;輸出"錯誤"字符 INT 21H JMP INPUT ;跳轉(zhuǎn)返回到輸入a、b、c的程序 OVER: MOV AX,4C00H INT 21HCODE ENDS END START附件二:加入判斷等腰或等

41、邊三角形的程序DATA SEGMENTBUFF1 DB 13,10,'Please input the values of a,b,c:','$'BUFF2 DB 13,10,'They can construct a triangle!','$'BUFF3 DB 13,10,'ERROR','$'BUFF4 DB 13,10,'The perimeter of this triangle is:','$'BUFF5 DB 13,10,'It is a lso

42、sceles triangle','$'BUFF6 DB 13,10,'It is an equilateral triangle','$'DATA ENDSCODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX INPUT: LEA DX,BUFF1 MOV AH,9 ;顯示"請輸入a、b、c的值" 字樣 INT 21H MOV AH,1 ;輸入a值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得AX MOV BX,AX ;將a的值存入BX中 MOV AL,20H MOV AH,2 ;在字母a的值鍵入后輸出空格 INT 21H MOV AH,1 ;輸入b的值 INT 21H CBW ;將AL數(shù)中的符號位擴(kuò)展到AH中得A

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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

提交評論