微機原理第19組作業(yè)_第1頁
微機原理第19組作業(yè)_第2頁
微機原理第19組作業(yè)_第3頁
微機原理第19組作業(yè)_第4頁
微機原理第19組作業(yè)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、微型計算機原理及應(yīng)用作業(yè)作業(yè)組別:十九班級:11級機控一班姓名:商夏學(xué)號:110101010259作業(yè)指導(dǎo)教師:陳子明 李艷文、王志松、趙玉勤、張慶玲項目完成時間:2014-4-17目錄 題目要求1、 分析題目2、 應(yīng)用說明3、 程序框圖4、 詳細程序程序運行結(jié)果分析5、 程序調(diào)試情況程序運行結(jié)果分析6、 體會題目一:編寫程序?qū)υ跀?shù)據(jù)段BUF1地址起存放一串字符個數(shù)進行統(tǒng)計,串結(jié)束標(biāo)志為-1,并將統(tǒng)計的結(jié)果放到CX中。1、分析題目:利用字符型指針,該指針指向BUF1存儲區(qū),并定義一串字符;判斷首個數(shù)據(jù)是否為-1,省去無謂的循環(huán);進入循環(huán):每次取指針內(nèi)容判斷是否為-1;地址加一的同時令CX寄存器

2、也加一,存放字符個數(shù)。2、應(yīng)用說明:主存DS段地址為BUF1處存放字符串;用16位CX寄存器作為循環(huán)指令中的計數(shù)器;將取來的數(shù)據(jù)存入AL中;用位操作指令XOR進行邏輯運算;用條件轉(zhuǎn)移指令JZ 判斷循環(huán)何時終止;用無條件轉(zhuǎn)移指令JMP進行循環(huán),同時CX記錄字符個數(shù)。開始3、程序框圖: SI,CX賦初值 是結(jié)束否取首個數(shù)據(jù)存入AL等于0FFHINC CXINC SI4、詳細程序: .MODEL SMALL .STACK .DATA BUF1 DB 3,6,-2,9,-5,1,0,-1;定義一串字符 .CODE .STARTUP MOV SI,OFFSET BUF1;取BUF1首個字符地址存入SI

3、MOV CX,0;初始化CX,用CX存放字符個數(shù)L1: MOV AL,SI;將首個字符存入AL中 XOR AL,0FFH;與-1異或,檢查是否串結(jié)束 JZ L2;若串結(jié)束則跳至程序尾 INC CX;字符數(shù)加一 INC SI;地址加一,以取下一個字符 JMP L1;驗證并計數(shù)下一個字符L2: .EXIT END程序運行結(jié)果分析:SI依次取得數(shù)據(jù)并存入AL中,然后CX計數(shù)器加一;當(dāng)遇到-1時,程序結(jié)束,此時CX中的數(shù)即為數(shù)據(jù)段BUF1地址起存放的一串字符的個數(shù)。5、程序調(diào)試情況:注:以下程序為最初設(shè)計程序;下劃線部分為非正確語句。 .MODEL SMALL .STACK .DATA BUF1 DB

4、 3,6,-2,9,-5,1,0,-1;定義一串字符 .CODE .STARTUP MOV DX,OFFSET BUF1;取BUF1首個字符地址存入DX MOV CX,0;初始化CX,用CX存放字符個數(shù)L1: PUSH DX;將DX內(nèi)數(shù)據(jù)壓入堆棧 XOR DX,0FFH;與-1異或,檢查是否串結(jié)束 POP DX;將DX內(nèi)原數(shù)據(jù)彈出 JZ L2;若串結(jié)束則跳至程序尾 INC CX;字符數(shù)加一 INC DX;地址加一,以取下一個字符 JMP L1;驗證并計數(shù)下一個字符L2: .EXIT END程序運行結(jié)果分析:此程序由于用到PUSH、POP語句,因此存入的數(shù)是不會隨地址指針改變而改變的,起到的作用

5、只是暫存數(shù)據(jù)于堆棧中,故使程序陷入循環(huán)不終止?fàn)顟B(tài)。鑒于此,將語句改為MOV指令語句。存放偏移地址用到了DX寄存器是錯誤的。DX是數(shù)據(jù)寄存器,存放雙子長數(shù)據(jù)的高16位。應(yīng)該改用SI變址寄存器,DS:SI,尋址數(shù)據(jù)段中的源操作數(shù)。6、體會:存數(shù)據(jù)可用MOV指令存入寄存器,也可用堆棧操作指令。但是我忽略了書中一句話“堆??捎脕砼R時存放數(shù)據(jù),以便隨時恢復(fù)它們”。因此才使循環(huán)不終止。此外,獲取偏移地址使用寄存器也存在錯誤。這些啟發(fā)我對于知識的學(xué)習(xí)需要探求其本質(zhì)及特點,不可只求表面。題目二:內(nèi)存中有一個數(shù)x,把此數(shù)的前四位變反,后四位維持不變,送回同一單元。1、分析題目:定義變量;用位操作指令變換。2、應(yīng)

6、用說明:用8位寄存器AL存放數(shù)據(jù);用位操作指令XOR實現(xiàn)取反。3、程序框圖: 4、詳細程序:.MODEL SMALL.STACK.DATAX DB 0CH;定義變量.CODE.STARTUPMOV AL,X;將內(nèi)存中數(shù)X存入ALXOR AL,0F0H;數(shù)X低四位不變,高四位變反MOV X,AL;數(shù)X送回AL.EXITEND程序運行結(jié)果分析:X的前四位變反,后四位不變,并送回了同一單元AL。5、 程序調(diào)試情況:注:以下程序為最初設(shè)計程序。.MODEL SMALL.STACK.CODE.STARTUPMOV AL,X;將內(nèi)存中數(shù)X存入ALXOR AL,0F0H;數(shù)X低四位不變,高四位變反MOV X

7、,AL;數(shù)X送回AL.EXITEND程序運行結(jié)果分析: 此程序運行提示為變量錯誤,運行結(jié)果出錯。原因在于:我初認為X是一個給定的數(shù),但實則它是一個變量,需要自行定義為字節(jié)型數(shù)據(jù)或字型數(shù)據(jù),放在數(shù)據(jù)段。6、 體會: 再簡單的題目也需要理解每一個細節(jié)。但凡是變量都需要在數(shù)據(jù)段預(yù)定義。題目三:編寫子程序。求內(nèi)存中一無符號字節(jié)型數(shù)據(jù)序列的最大值和最小值。該無符號字節(jié)型數(shù)據(jù)的起始地址位于SI中,數(shù)據(jù)個數(shù)位于CX中。要求求得的最大值存放于AH中,最小值存放于AL中。主程序調(diào)用子程序?qū)崿F(xiàn)上述功能。1、分析題目:定義變量;取起始地址于SI中;將數(shù)據(jù)個數(shù)存入CL中,并設(shè)置循環(huán)次數(shù);將最大值存放于AH中,最小值存

8、放于AL中;調(diào)用子程序;逐個數(shù)據(jù)比較大小,使得AH中存放更大的數(shù),AL中存放更小的數(shù);用到計數(shù)循環(huán),循環(huán)次數(shù)為數(shù)據(jù)個數(shù)減一;返回主程序;子程序結(jié)束。2、應(yīng)用說明:以變量名array來存放一個無符號字節(jié)型數(shù)組;該無符號字節(jié)型數(shù)據(jù)的起始地址位于SI中;數(shù)據(jù)個數(shù)位于CL中;AH存放最大值,AL存放最小值;用堆棧保護使用的寄存器AX(AH、AL);用CMP比較兩數(shù)大?。挥肑BE、JAE、JMP實現(xiàn)跳轉(zhuǎn);子程序名為DPSTRI,過程聲明有一對偽指令PROC、ENDP完成;主程序用CALL指令調(diào)用子程序,子程序用RET返回主程序。3、 程序框圖:否否結(jié)束開始子程序結(jié)束返回主程序?qū)⒆畲?、小值彈出是CL=0是

9、DEC CXDEC CL是SI>AHSI<AHINC SI取下一個數(shù)SI取第一個數(shù)依次存入AH、AL將最大|、小值分別壓入AH、AL調(diào)用子程序SI、CL賦初值否AL SIAH SI 4、詳細程序: .MODEL SMALL .STACK .DATA ARRAY DB 6,30H,31H,32H,33H,34H,35H;假設(shè)一個無符號字節(jié)型數(shù)組 .CODE .STARTUP MOV SI,OFFSET ARRAY1;取字符串首地址于SI中 MOV CL,ARRAY;將數(shù)據(jù)個數(shù)存入CL DEC CL;數(shù)據(jù)個數(shù)減一為循環(huán)次數(shù) CALL DPSTRI;調(diào)用子程序 .EXITDPSTRI P

10、ROC;子程序開始 PUSH AX;保護寄存器用到的內(nèi)容,并將最大、小值分別壓入AH、Al MOV AH,SI;取出第一個元素給AH,AH用于暫存最大值 MOV AL,AH;取出第一個元素給AL,AL用于暫存最小值DPS1: INC SI;開始比較:地址增一,為與下一個數(shù)比較做準備 CMP SI,AH;比較第一個數(shù)與下一個數(shù)的大小 JBE DPS2;若第一個數(shù)大于下一個數(shù),跳至DPS2 MOV AH,SI;否則,AH取得更大的數(shù)據(jù)DPS2: CMP SI,AL;比較第一個數(shù)與下一個數(shù)的大小 JAE NEXT;若第一個數(shù)大于下一個數(shù),跳至NEXT MOV AL,SI;否則,AL取得更小的數(shù)據(jù)NE

11、XT: LOOP DPS1;計數(shù)循環(huán),循環(huán)五次 RET;返回主程序DPSTRI ENDP;子程序結(jié)束 END程序運行結(jié)果分析: 鑒于我定義的數(shù)組是按照從小到大順序排列的,故AL中顯示為“30”。隨變址寄存器SI依次加一,同時循環(huán)次數(shù)減一至零,AH中的數(shù)據(jù)一直更換,為更大的數(shù),最終顯示“35”。5、程序調(diào)試情況:注:以下程序為最初設(shè)計程序;下劃線部分為問題語句。.MODEL SMALL .STACK1 .DATA ARRAY DB 30H,31H,32H,33H,34H,35H;假設(shè)一個無符號字節(jié)型數(shù)組 .CODE .STARTUP MOV SI,OFFSET ARRAY;取字符串首地址于SI中

12、 MOV CX,SI;將數(shù)據(jù)個數(shù)存入CX2 DEC CX;數(shù)據(jù)個數(shù)減一為循環(huán)次數(shù) MOV AH,SI;取出第一個元素給AH,AH用于暫存最大值 MOV AL,AH;取出第一個元素給AL,AL用于暫存最小值 CALL DPSTRI;調(diào)用子程序 .EXIT3DPSTRI PROC;子程序開始 PUSH AH;保護寄存器用到的內(nèi)容,將最大值壓入AH PUSH AL;保護寄存器用到的內(nèi)容,將最小值壓入ALDPS1: INC SI;開始比較:地址增一,為與下一個數(shù)比較做準備 CMP SI,AH;比較第一個數(shù)與下一個數(shù)的大小 JBE DPS2;若第一個數(shù)大于下一個數(shù),跳至DPS2 MOV AH,SI;否則

13、,AH取得更大的數(shù)據(jù)4 JMP NEXT;SI中已為大值,故不必再與小值比較DPS2: CMP SI,AL;比較第一個數(shù)與下一個數(shù)的大小 JAE NEXT;若第一個數(shù)大于下一個數(shù),跳至NEXT MOV AL,SI;否則,AL取得更小的數(shù)據(jù)NEXT: LOOP DPS1;計數(shù)循環(huán),循環(huán)五次 POP AL;將最小值彈出到AL中3 POP AH;將最大值彈出到AH中 RET;返回主程序DPSTRI ENDP;子程序結(jié)束 END程序運行結(jié)果分析: 處,我的目的是是將字符個數(shù)存入CX,但是語句執(zhí)行的結(jié)果是把某地址處的單元內(nèi)容給了CX;此外,我定義的是字節(jié)型數(shù)據(jù),用CX存放是不合法的;處,兩條語句應(yīng)放在子程序內(nèi);

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論