微機原理與匯編語言_實驗3_循環(huán)程序設(shè)計實驗講解_第1頁
微機原理與匯編語言_實驗3_循環(huán)程序設(shè)計實驗講解_第2頁
微機原理與匯編語言_實驗3_循環(huán)程序設(shè)計實驗講解_第3頁
免費預覽已結(jié)束,剩余12頁可下載查看

下載本文檔

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

文檔簡介

1、微機原理與匯編語言實驗報告姓名xxx學號xxxxxx專業(yè)班級計科 x 班課程名稱微機原理與匯編語言實驗日期2014.10.22實驗名稱循環(huán)程序設(shè)計實驗成績一、實驗目的1、掌握循環(huán)程序的設(shè)計方法。2、掌握比較指令、轉(zhuǎn)移指令和循環(huán)指令的使用方法。3、進一步掌握調(diào)試工具的使用方法。二、實驗內(nèi)容1、實驗原理(1) 鍵盤輸入的十進制數(shù)如 368 在計算機中是以 33H,36H, 38H 形式存放的,如何將它們轉(zhuǎn)換為 一個二進制數(shù) 101110000B ,以便對累加循環(huán)的循環(huán)次數(shù)進行控制是本程序首先要解決的問題(2) 累加結(jié)果為一個 16 位的二進制數(shù),為了顯示結(jié)果,必需把它們轉(zhuǎn)換為十進制數(shù)2 、實驗步驟

2、(1)流程圖(2)實驗源碼.model small.stack ; 定義堆棧段.data ; 定義數(shù)據(jù)段inf1 db "Please input a number(1-627):$"inf2 db 0ah, 0dh, "1+2+$"ibuf db 7, 0, 6 dup(0)obuf db 6 dup(0).codestart: mov ax, data mov ds, axmov dx, offset inf1; 將屏幕輸入的十進制數(shù) ( 存放于 ibuf) 數(shù)存儲于 ax 中mov ah, 09h int 21h mov dx, offset ib

3、uf mov ah, 0Ah int 21h mov cl, ibuf+1 mov ch, 0 mov si, offset ibuf+2 mov ax, 0 loop1: mov dx, 10 mul dx and byte ptr si, 0Fh add al, siadc ah, 0 inc si loop loop1mov cx, ax;mov ax, 0 mov bx, 1loop2: add ax, bx inc bx loop loop2mov di, offset obuf+6 ; 存于 obufmov byte ptr di, '$' mov bx, 10lo

4、op3: mov dx, 0 div bx add dl, 30h dec di mov di, dl or ax, ax jnz loop3 dec di mov di, '='mov dx, offset inf2 ; mov ah, 09h int 21h mov cl, ibuf+1 ; mov ch, 0 mov si, offset ibuf+2 loop4: mov dl, siadd dl, 30h inc si mov ah, 02h int 21h loop loop4 mov dx, di mov ah, 09h int 21h計算 1+2+3+.+n將

5、ax 中的二進制數(shù)轉(zhuǎn)換為十進制數(shù)并以ascii 的形式結(jié)果輸出顯示 nmov ax, 4c00hint 21hend start實驗習題 1 源碼:; multi-segment executable file template.model small ; 定義程序的存儲模式 (small 表示小型模式 ) .stack ; 定義堆棧段.data ; 定義數(shù)據(jù)段inf1 db 0ah, 0dh, "1+2+$除了六位數(shù)字外還要有一個 =號obuf1 db 6 dup(0) obuf2 db 7 dup(0) ;.codestart: mov ax, data mov ds, axmo

6、v dx, offset inf1mov ah, 09hint 21h輸出 1+2+mov ax, 0計算 1+2+3+.+nmov bx, 1 loop1: add ax, bxinc bxcmp ax, 60000 jbe loop1push axpush bx pop cxmov di, offset obuf1+5; 將 cx 二進制數(shù)轉(zhuǎn)換為十進制數(shù)并以 ascii 的形式存于 obuf1 mov byte ptr di, '$' mov ax, cx mov bx, 10loop2: mov dx, 0 div bx add dl, 30h dec di mov di

7、, dl or ax, ax jnz loop2mov dx, di ; 輸出 n mov ah, 09h int 21hpop ax mov di, offset obuf2+6; 將 ax 中的二進制數(shù)轉(zhuǎn)換為十進制數(shù)并以ascii 的形式存于 obuf2mov byte ptr di, '$' mov bx, 10loop3: mov dx, 0 div bx add dl, 30h dec di mov di, dlor ax, ax jnz loop3 dec di輸出結(jié)果mov di, '='mov dx, di mov ah, 09h int 21h

8、mov ax, 4c00h int 21hend start實驗習題 2 源碼:; multi-segment executable file template.model small ; 定義程序的存儲模式 (small 表示小型模式 ) .stack ; 定義堆棧段.data ; 定義數(shù)據(jù)段inf1 db 'Please input six num:', 0ah, 0dh, '$' inf2 db 'sum:$'obuf0 db 0ah, 0dh, '$'ibuf db 5, 0, 4 dup(0)obuf db 6 dup(

9、0).codestart: mov ax, data mov ds, axmov dx, offset inf1 ; 輸出提示信息 mov ah, 09hint 21hmov bx, 6 ; loop1: mov dx, offset ibufmov ah, 0Ah設(shè)置外層循環(huán)次數(shù)int 21hmov cl, ibuf+1 ;mov ch, 0mov si, offset ibuf+2mov ax, 0 loop2: mov dx, 10 ;mul dx設(shè)置內(nèi)層循環(huán)次數(shù)將屏幕輸入的十進制數(shù) ( 存放于 ibuf) 轉(zhuǎn)化為二進制數(shù)存儲于 ax 中and byte ptrsi, 0Fh add a

10、l, si adc ah, 0 inc si loop loop2 push ax ; mov dx, offset obuf0 ;將結(jié)果入棧保存 回車換行4mov ah, 09hint 21h dec bx cmp bx, 0 jnz loop1 mov cx, 6mov ax, 0 loop3: pop bxadd ax, bxloop loop3 mov di, offset obuf+5; 將 ax 中的二進制數(shù)轉(zhuǎn)換為十進制數(shù)并以ascii 的形式存于 obufmov byte ptr di, '$' mov bx, 10loop4: mov dx, 0div bx a

11、dd dl, 30h dec di mov di, dl or ax, ax jnz loop4mov dx, offset inf2; 輸出提示信息mov ah, 09hint 21h mov dx, di mov ah, 09h int 21hmov ax, 4c00h int 21hend start實驗習題 3 源碼:; multi-segment executable file template.(small 表示小型模式 ).model small ; 定義程序的存儲模式.stack; 定義堆棧段.data ; 定義數(shù)據(jù)段inf db "Please input a nu

12、m(0-65535):$" inf2 db 0ah, 0dh, "The num of 1:$" ibuf db 6, 0, 5 dup(0) obuf db 6 dup(0).codestart: mov ax, datamov ds, axmov es, axmov ah, 09h ; 輸出提示信息 Please input a num: mov dx, offset infint 21hmov ah, 0Ah; 接收一個無符號十進制整數(shù)(小于65536)mov dx, offset ibufint 21h mov ax, 0ax 中mov cl, ibuf+

13、1;將屏幕輸入的十進制數(shù) ( 存放于 ibuf) 轉(zhuǎn)化為二進制數(shù)存儲于mov ch, 0mov si, offset ibuf+2loop1: mov dx, 10mul dxand byte ptrsi, 0Fhadd al, siadc ah, 0inc siloop loop1mov bx, 0 loop2: shr ax, 1adc bx, 0 cmp ax, 0 jnz loop2mov ax, bxmov di, offset obuf+5;將ax 中的二進制數(shù)轉(zhuǎn)換為十進制數(shù)并以 ascii 的形式存于 obuf mov byte ptr di, '$' mov b

14、x, 10loop3: mov dx, 0div bx add dl, 30h dec di mov di, dl or ax, ax jnz loop3mov ah, 09hmov dx, offset inf2 int 21hmov ah, 09hmov dx, di int 21h輸出提示信息 The num of 1:將統(tǒng)計結(jié)果在屏幕上顯示出來mov ax, 4c00hint 21hend start實驗習題 4 源碼:; multi-segment executable file template.model small ; 定義程序的存儲模式 (small 表示小型模式 ).sta

15、ck; 定義堆棧段.data; 定義數(shù)據(jù)段N equ 5ibuf db 4, 0, 3 dup(0)inf1 db 'Please input N num(0-255):', 0ah, 0dh, '$'inf2 db 'Sort:', 0ah, 0dh, '$'buf db N dup(0)obuf2 db 4 dup(0)obuf db 0ah, 0dh, '$'.codestart: mov ax, datamov ds, axmov dx, offset inf1 ; 輸出提示信息mov ah, 09hint

16、 21hmov di, offset bufmov bx, N;loop1: mov dx, offset ibufmov ah, 0Ahint 21h mov cl, ibuf+1 mov ch, 0mov si, offset ibuf+2設(shè)置外層循環(huán)次數(shù)設(shè)置內(nèi)層循環(huán)次數(shù)mov ax, 0loop2: mov dx, 10 ; 將屏幕輸入的十進制數(shù) ( 存放于 ibuf) 轉(zhuǎn)化為二進制數(shù)存儲于 mul dxand byte ptrsi, 0Fhadd al, siinc siloop loop2mov di, alinc dimov dx, offset obuf ; 回車換行mov ah

17、, 09hint 21hdec bxcmp bx, 0jnz loop1ax 中mov bx, N-1比較大小mov cx, bx mov dx, bx mov di, offset buf loop3: mov si, di mov al, di inc si loop4: cmp si, al jbe loop5 mov al, si mov ah, di mov si, ah mov di, al loop5: inc si loop loop4 dec dx mov cx, dx inc di dec bx cmp bx, 0 jne loop3mov dx, offset inf2

18、; 輸出提示信息 mov ah, 09h int 21h; 結(jié)果輸出 mov cx, N mov si, offset bufloop6: mov di, offset obuf2+3;將 buf 中的二進制數(shù)轉(zhuǎn)換為十進制數(shù)并以 ascii 的形式存于 obuf2, 并輸出 mov byte ptr di, '$' mov bx, 10 mov al, si mov ah, 0loop7: mov dx, 0 div bx add dl, 30h dec di mov di, dl or ax, ax jnz loop7 mov dx, di mov ah, 09h int 2

19、1h mov dx, offset obuf mov ah, 09h int 21h inc si loop loop6mov ax, 4c00hint 21h( 2)實驗習題 1程序流程圖:93)實驗習題 210e-匚uuoJasole-nE4>亠I +OE=Lly AIJdu二*C-EEE4P srKOsumajgQ-nbullJnn0HHWrrnr-lr-lrlr>.£卜E>IIblEIINlU|T|O1 Q»1knPU-00寸 61:IE呈1+En匸X -M-Hnd 匚flCXJAfggicxir-ooi_nr-o-> IgwJagL-lEE

20、-nEE f三、實驗總結(jié)1 )通過本次實驗我掌握循環(huán)程序的設(shè)計方法,掌握比較指令、轉(zhuǎn)移指令和循環(huán)指令的使用方法,進 一步掌握了調(diào)試工具的使用方法。2)在實驗過程中我也遇到過許多困難,我覺的最大的困難時匯編難于調(diào)試,特別是代碼寫的很多的 時候,某處的錯誤很難能夠查的出來。我的辦法是每寫一段程序就調(diào)試一下是否是正確的,比如說本 次的實驗大致可分為五個功能片段,第一個是輸出信息,第二個是接受屏幕上的數(shù)字串,第三個是將 數(shù)字串轉(zhuǎn)化為二進制數(shù),第四是累加求和,第五是將二進制數(shù)轉(zhuǎn)化為十進制數(shù)形式的數(shù)字串。可以用 分開來調(diào)試的方法,通過一條功能后在進行下一條功能的書寫與調(diào)試工作。另外書寫注釋也是非常重 要的,只有這樣才能利于后來的閱讀。3)本次實驗中經(jīng)常會遇到寄存器不夠用的情況,因為cx

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論