微機(jī)原理實驗4循環(huán)結(jié)構(gòu)_第1頁
微機(jī)原理實驗4循環(huán)結(jié)構(gòu)_第2頁
微機(jī)原理實驗4循環(huán)結(jié)構(gòu)_第3頁
微機(jī)原理實驗4循環(huán)結(jié)構(gòu)_第4頁
微機(jī)原理實驗4循環(huán)結(jié)構(gòu)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 物理與機(jī)電工程系(20152016 學(xué)年第 一 學(xué)期)調(diào)試程序的使用上機(jī)實驗報告專 業(yè):電子信息工程 學(xué) 號:姓 名: 成功回 任課教師: 官方個 實驗地點: 實驗樓5537 項目編號: 實 驗 四 1、 實驗?zāi)康模?. 加深對循環(huán)結(jié)構(gòu)的理解。 2. 掌握循環(huán)程序的設(shè)計方法。 2、 實驗內(nèi)容:1. 編制程序計算S=1+2·3+3·4+4·5+N(N+1)+直到N(N+1)大于200為止,并將結(jié)果由屏幕上顯示出來。 2. 將字形變量x以二進(jìn)制數(shù)的形式在屏幕上顯示輸出。3. 將字形變量x以十六進(jìn)制數(shù)的形式在屏幕上顯示輸出。4. 將內(nèi)存單元緩

2、沖區(qū)中的符號數(shù)(20個)按從小到大的順序排列,并以十六進(jìn)制數(shù)的形式顯。 3、 實驗過程:1. 編制程序計算S=1+2·3+3·4+4·5+N(N+1)+直到N(N+1)大于200為止,并將結(jié)果由屏幕上顯示出來。 程序流程圖如下: 程序源代碼如下:DATAS SEGMENT s dw ?;此處輸入數(shù)據(jù)段代碼 DATAS ENDS STACKS SEGMENT dw 64 dup(?);此處輸入堆棧段代碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS M

3、OV DS,AX mov bx,0001h ; BX=1 mov dl,02h ;DL=2lop2: mov al,dl ;AL=2 inc dl;加1 ;DL=3 mul dl;無符號數(shù)乘法 AX=AL*DL=2*3 add bx,ax ;BX=AX+BX cmp ax,00C8h;與200比較 jbe lop2;不高于轉(zhuǎn)移 mov s,bx mov ch,4 mov cl,4 lop1: rol bx,cl mov dl,bl and dl,0Fh cmp dl,09h jbe next;低于等于轉(zhuǎn)移 <= add dl,7 next: add dl,30h mov ah,2 int

4、 21h dec ch jnz lop1;非零轉(zhuǎn)移 MOV AH,4CH INT 21H CODES ENDS END START 程序運行結(jié)果如下:程序反匯編過程如下:2. 將字形變量x以二進(jìn)制數(shù)的形式在屏幕上顯示輸出。 程序流程圖如下: 程序源代碼如下:DATAS SEGMENT x dw 1325h ;此處輸入數(shù)據(jù)段代碼 DATAS ENDS STACKS SEGMENT ;此處輸入堆棧段代碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX mov bx,

5、x mov cx,10h lop1: rol bx,1 ;不帶cf的循環(huán)左移 jc next;進(jìn)位轉(zhuǎn)移,即cf=1 mov dl,30h;將0送入dl jmp next2 next: mov dl,31h;將1送入dl next2:mov ah,2 int 21h loop lop1;循環(huán)執(zhí)行l(wèi)op1 MOV AH,4CH INT 21HCODES ENDS END START 存入數(shù)據(jù)及程序運行結(jié)果如下圖:程序反匯編過程如下:3. 將字形變量x以十六進(jìn)制數(shù)的形式在屏幕上顯示輸出。 程序流程圖如下: 程序源代碼如下:DATAS SEGMENT x dw 933;此處輸入數(shù)據(jù)段代碼 DATAS

6、ENDS STACKS SEGMENT ;此處輸入堆棧段代碼 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX mov bx,x mov ch,4 mov cl,4 lop1: rol bx,cl ;不帶cf的循環(huán)左移 mov dl,bl and dl,0Fh cmp dl,09h jbe next;低于等于轉(zhuǎn)移 add dl,7 next: add dl,30h mov ah,2 int 21h dec ch jnz lop1;非零轉(zhuǎn)移 MOV AH,4CH I

7、NT 21H CODES ENDS END START存入的轉(zhuǎn)換數(shù)據(jù)及程序運行結(jié)果如下:程序反匯編過程如下: 4. 將內(nèi)存單元緩沖區(qū)中的符號數(shù)(20個)按從小到大的順序排列,并以十六進(jìn)制數(shù)的形式顯。程序流程圖如下: 程序源代碼如下:;冒泡法對20個數(shù)升序排列DATAS SEGMENT X db 02h,01h,03h,04h,05h,06h,08h,09h,11h,88h,82h,84h,83h,96h,75h,90h,99h,28h,67h,97h ;此處輸入數(shù)據(jù)段代碼 LEN db $-x ;$表示當(dāng)前位置20DATAS ENDS CODES SEGMENT ASSUME CS:CODES

8、,DS:DATASSTART: MOV AX,DATAS MOV DS,AX mov cl,LEN dec cl;外循環(huán)只需19次 ;外循環(huán)開始lop12:mov ch,cl ;CH作為內(nèi)循環(huán)計數(shù)器 lea si,X ;si只想當(dāng)前要比較的數(shù) ;內(nèi)循環(huán)開始lop11:mov al,si ;AL=09H inc si ;SI只想下一個數(shù) cmp al,si ;9-8 jbe next ;<= xchg al,si; AL=08 mov si-1,al ;SI-1=08next:dec ch ;內(nèi)循環(huán)結(jié)束嗎?CH=0? jne lop11 ;內(nèi)循環(huán)到此結(jié)束 dec cl ;外循環(huán)結(jié)束嗎 jn

9、e lop12 ;外循環(huán)到此結(jié)束 ;在屏幕上顯示20個數(shù) lea si,X xor ch,ch mov cl,LEN ;CH記錄循環(huán)顯示20 個數(shù) mov bh,cl ;轉(zhuǎn)出 再循環(huán)顯示20個數(shù) lopout: mov bl,si ;循環(huán)單字符輸出 mov ch,2 mov cl,4lopprint1: rol bl,cl ;BL=01H=0000 0001 mov dl,bl ;0000 0001 and dl,0fh ;0001 1 cmp dl,09h jbe next1 add dl,07hnext1: add dl,30h mov ah,2 int 21h dec ch jnz lo

10、pprint1 mov dl,20h ;輸出空格 mov ah,2 int 21h ;接著輸出第二個數(shù) add si,1 dec bh jnz lopout MOV AH,4CH INT 21H CODES ENDS END START 存入的排序數(shù)組及其運行結(jié)果排序如下:程序反匯編過程如下:4、 實驗結(jié)論1> 學(xué)習(xí)并使用了DEBUG程序,進(jìn)一步掌握和熟悉匯編語言程序上機(jī)過程、DEBUG的常用指令。 2> 根據(jù)要求編寫了程序,用循環(huán)結(jié)構(gòu)設(shè)計程序?qū)崿F(xiàn)符號函數(shù),運行MASM FOR WINDOWS軟件,打開寫好的程序,源程序即用p指令逐條執(zhí)行的寄存器變化及指令逐條含義,主要運用有功能鍵

11、的調(diào)用,如1、2、9號功能鍵,及其出入口參數(shù),回車換行的運用。 3> 根據(jù)要求編寫了將字形變量轉(zhuǎn)換為二進(jìn)制、十六進(jìn)制并顯示的程序。將字形變量存入源程序中,通過利用JIE、JMP、JGE等轉(zhuǎn)移指令,大小寫字母的ASIIC碼及相關(guān)輸入顯示功能號的調(diào)用等通過單層或多層循環(huán)來實現(xiàn)。在DEBUG下查看執(zhí)行結(jié)果,用p指令逐條執(zhí)行源程序的寄存器變化及指令逐條含義。 4> 根據(jù)要求畫出流程圖編寫了循環(huán)結(jié)構(gòu)下的數(shù)的累加,利用JIE、JMP、JGE等轉(zhuǎn)移指令,大小寫字母即數(shù)字的ASIIC碼、1、2、9等相關(guān)輸入顯示功能號的調(diào)用等實現(xiàn)數(shù)的循環(huán)累加并且判斷結(jié)構(gòu)是否大于200,然后逐字在屏幕上以十六進(jìn)制顯示

12、相應(yīng)結(jié)果。在DEBUG下查看執(zhí)行結(jié)果,用p指令逐條執(zhí)行源程序的寄存器變化及指令逐條含義。 5> 利用轉(zhuǎn)移指令JBE JNZ和移位指令ROL以邏輯與指令A(yù)ND將一串?dāng)?shù)組按照從大到小的順序用冒泡法實現(xiàn)了排序,然后逐字在屏幕上以十六進(jìn)制顯示相應(yīng)結(jié)果。并運用MASM FOR WINDOWS軟件逐步調(diào)試運行了改程序。 6> 通過以上四個程序的設(shè)計、調(diào)試、運行,了解、熟悉并掌握了循環(huán)程序的基本結(jié)構(gòu)和設(shè)計以及多層循環(huán)結(jié)構(gòu)程序的上機(jī)運行和調(diào)試方法。5、 實驗中存在問題及解決方法1> 程序調(diào)試中,對一些轉(zhuǎn)換指令及其執(zhí)行過程中的對標(biāo)志位的影響不是很熟悉,導(dǎo)致有些程序片段看起來有些吃力,尤其在調(diào)試過程中;在查看分析寄存器的存儲狀態(tài)時有些不太清楚。2> 格式問題,對匯編

溫馨提示

  • 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

提交評論