計算機彙編實驗報告

2021-08-07 03:07:30 字數 4497 閱讀 7087

計算機組成原理與彙編

實驗報告

二進位製到十六進製制轉換程式

一、實驗目的

(1)掌握迴圈程式的設計方法

(2)掌握組合語言源程式的編輯、彙編、連線及除錯過程。

(3)進一步熟悉利用debug程式修改引數的方法,並檢查和驗證結果的正確性。

(4)學會針對不同的問題,選用不同的組織迴圈的方法。

二、實驗要求

掌握迴圈程式的過程和彙編實現原理,進一步熟練掌握debug操作指令以及組合語言源程式的編輯、彙編、連線及除錯過程。

三、實驗內容

掌握迴圈排序演算法的思想:

二進位製到十六進製制轉換程式

允許使用者從鍵盤輸入0~16個0或1,判斷輸如以回車(20h)為輸入結束,對每乙個輸入判斷為1,還是為0,如果為1,設定cf=1然後帶進製左移bx,如果為0,設定cf=0,也是帶進製左移bx,bx開始時為0,如果輸入10101的話,經過5次移位,bx=10101b了,輸入完了後將bx按十六進製制方式輸出,源程式如下:

codes segment

assume cs:codes

start:

mov bx,0

loop1:

clc ;此指令清除cf標誌位cf=0

mov ah,1h

int 21h

cmp al,0dh ;比較是不是回車鍵

je print ;如果是表示輸入完畢

cmp al,'0'

jz rotate

stc ;此指令設定cf為1

rotate:

rcl bx,1 ;注意這裡是帶進製左移,程式的思想所在

jmp loop1

print:

mov dl,0dh ;接下來的六行指令列印回車和換行,避免輸出的覆蓋原來的輸入

mov ah,2h

int 21h

mov dl,0ah

mov ah,2h

int 21h

mov cl,4 ;將bx的二進位制數按十六進製制顯示出來

mov ch,4

loop2:

rol bx,cl

mov dl,bl

and dl,0fh

add dl,30h

cmp dl,3ah

jb loop3

add dl,7h

loop3:

mov ah,2h

int 21h

dec ch

jnz loop2

exit:mov ah,4ch

int 21h

codes ends

end start

四、試驗執行結果:

2、起泡排序演算法的程式實現

起泡排序演算法的思路:從第乙個數開始依次對相鄰兩個數ki和ki+1進行比較,若ki≤ki+1,ki的位置不動,ki+1繼續和ki+2比較;若ki>ki+1,則兩者交換位置,ki+1(交換前的ki)繼續和ki+2比較。

在第一遍比較了n-1次後,最大的數已經放到了最後,所以在第二遍時,只需比較n-2次;同樣道理,第三遍只需比較n-3次等等。如果有n個數,最多要比較n-1遍。

data segment

dat db 20,-10,80,-5,-70,-9,12,-15,0,40

count db 10,10

data ends

;code segment

assume cs:code,ds:data,es:data

start:mov ax,data

mov ds,ax

mov es,ax

mov bl,1

lp1: cmp bl,0

je lp4

xor bl,bl

mov cl,count

dec cl

push cx

lea di,dat

lp2:mov al,[di]

cmp al,[di+1]

jle lp3

xchg [di+1],al

mov [di],al

mov bl,1

lp3:inc di

loop lp2

pop cx

mov count,cl

jmp lp1

lp4:mov cl,10

lea di,dat

sc:mov ax,0

mov bh,2

mov al,[di

cmp al,0

jge next

neg al

push ax

mov ah,02h

mov dl

int 21h

pop ax

next:xor ah,ah

div count+1

mov dh,ah

add al,30h

mov dl,al

mov ah,02h

int 21h

mov al,dh

xor ah,ah

; div count+1

add ax,3030h

mov dl,al

; mov bl,ah

outp: mov ah,2

int 21h

dec bh

jz xt

mov dl,bl

jmp outp

xt: dec cl

jz done

inc di

jmp sc

done: mov ah,4ch

int 21h

code ends

end start

實驗執行結果:

實驗三求fibonacci遞迴數

一實驗目的:

掌握子程式的設計方法,熟悉遞迴程式的設計

二實驗要求:

掌握遞迴程式的呼叫、返回及入口、出口的傳遞方法

三實驗內容

程式接受由使用者鍵入的數n,根據給定的n值,計算fibonacci數

fibonacci數的公式如下:

fib(1)=1;當n=1

fib(2)=1;當n=2

fib(n)=fib(n-1)+fib(n-2)

四、實驗方法

程式接收使用者輸入的1小於等於50的十進位制正整數,存入輸入緩衝區後再把它轉化為十六進製制數,存入記憶體單元n中。呼叫fib函式求fibonacci數,結果高位存在result2h,低位存在result2l,最後呼叫output函式將結果以十進位制的形式顯示出來。程式亮點在於將結果轉換為十進位制時採用了除10取餘的方法,對於高位通過在適當的位數加65536(add65536)的方式巧妙地將乘法轉化為加法。

五、源**:

datas segment

str1 db 'please input a number(1-50):n=','$'

str2 db 13,10,'fib(n)=','$'

wrongstr db 13,10,13,10,'a number between 1 and 50 please!',13,10,13,10,'$'

inputbuffer db 3,?,3 dup(?)

n dw輸入n值

result1h dw 0

result1l dw 0

result2h dw 0 ;結果的高16位

result2l dw 0 ;結果的低16位

c10 dw 10

outputbuffer db 11 dup('0')

datas ends

codes segment

assume cs:codes,ds:datas

start:

mov ax,datas

mov ds,ax

call input

call fib

call output

jmp quit

input proc

jmp t1

wrong:lea dx,wrongstr

mov ah,9

int 21h

t1:lea dx,str1

mov ah,9

int 21h

lea dx,inputbuffer

mov ah,10

int 21h

mov ax,0

mov cl,inputbuffer+1

mov ch,0

lea bx,inputbuffer+2

t2:mul c10

mov dl,[bx]

cmp dl,'0'

jb wrong

cmp dl,'9'

ja wrong

and dl,0fh

add al,dl

adc ah,0

inc bx

loop t2

cmp ax,0032h

ja wrong

cmp ax,1

jb wrong

mov n,ax

retinput endp

計算機實驗報告

微機原理 實驗報告 姓名 張仁德學號 10470129 班級 材料物理專業2010級01班 指導教師 張開洪 微機原理與接 術實驗報告 實驗專案名稱 熟悉debug的使用 實驗日期 2012.12實驗成績 實驗評定標準 一 實驗目的 1 熟悉debug的常用命令 2 掌握debug下執行簡單組合語言...

計算機導論實驗報告

實驗報告 實驗課程 計算機導論 學生姓名記憶體洩露 學號 6100409 專業班級 電氣資訊iii類09級 2009年 12月 21日 目錄一 實驗一02 04 二 實驗二05 07 三 實驗三08 10 四 實驗四11 14 五 實驗五15 16 南昌大學實驗報告 windows xp 的基本操作...

計算機導論實驗報告

四川大學計算機學院 軟體學院 實驗報告 學號姓名 專業 班級 第 11,12 周 四川大學計算機學院 軟體學院 實驗報告 學號姓名 專業 班級 第 13 周 四川大學計算機學院 軟體學院 實驗報告 學號姓名 專業 班級 第 15 周 1 電子文件命名方法 每個同學三個報告做成三個檔案。三個檔案做在乙...