微機原理實驗報告

2021-04-21 21:54:10 字數 3925 閱讀 8973

實驗報告

課程名稱

實驗名稱

班級姓名學號

實驗組別同實驗者

實驗日期實驗地點

評定成績評閱教師

實驗報告要目

1 實驗目的要求

2 實驗儀器、裝置

3 實驗線路、原理框圖

4 實驗方法步驟

5 實驗的原始資料和分析

6 實驗討論

(1) 從螢幕輸入20個資料,有效資料從00-99(十進位制)

(2) 按序進行排列奇數排在前(次序從小到大)

偶數排在後(次序從大到小)

(3) 排序結果在螢幕進行輸出奇數一行偶數一行(十進位制方式顯示)

(最好有錯誤輸入安全控制可以剔除非法輸入字元)

masm for windows 整合實驗環境

按照題目要求,程式能實現的功能主要包括。從鍵盤輸入任意長度數字(假設1-10位),計算機記錄20個有效的資料(1位數和2位數,正數),20個資料在螢幕上分兩行輸出(奇數第一行,偶數第二行),每一行的資料自動按規則排列(奇數從小到大,偶數從打到小)。

程式功能的分析完成後,就可以開始尋找滿足功能的方法了。

(1) 從鍵盤輸入任意長度數字

完成這項功能可以條用dos中斷型別號21h的0ah功能,輸入字串到緩衝區。

注意事項:資料段首址ds:dx,其中第乙個位元組為最大輸入數,+1為真正輸入字元長度,+2位址開始才是輸入內容。

(2) 記錄20個有效資料

有效資料的判別依據是資料位數是1位或者兩位。完成資料的篩選,主要看dx+1位址的內容,只記錄內容為1和2兩種情況就能滿足要求。

注意事項:為後續資料的大小比較,在記錄1位數的時候,需要人為在1位數的前面新增0的ascii碼,即為1位數補上十位,使之成為2位數。

(3) 20個資料在螢幕上分兩行輸出

完成這個功能需要使用dos中斷型別21h的09h功能,顯示字串。這一功能呼叫將所儲存的資料在一行內作為整體輸出,所以為滿足要求,在儲存資料時,需要開闢兩段資料單元,分別存放奇數和偶數。在輸出字串時,只需先輸出其中一段資料單元,讓後呼叫換行回車子程式,實現換行,再輸出第二段資料單元,即能滿足題目要求。

注意事項:int 21h ;ah 09h功能在輸出字串時是輸出到$的ascii碼為止的,所以要讓計算機知道要輸出的內容,必須在儲存好的資料最後認為新增$的ascii碼,這就必須分別設定乙個計數單元,分別記錄已經儲存了多少個有效的奇數或者偶數,而$的儲存位置,就是在奇數和偶數各自儲存單元的首位址+2*計數單元內容。

(4) 每一行的資料自動按順序排列

這裡排列的原理使用的是冒泡法。即有n個資料,用第乙個數與第二個數比較,如果不符合要求則交換位置,若符合要求則不變,接著用第二個數和第三個比較,以此類推,在完成n-1次排列後,最小或者最大的那個數就在正確的位置了。按這個原則,下一次只需比較n-2次,就定位好了第二個資料。

所以,在編寫迴圈結構的時候,將有效數儲存單元的內容賦值給外迴圈(ch),再將外迴圈的值賦給內迴圈(cl),就能完成資料的排列。

注意事項:奇數和偶數的排列規則相反,所以奇數和偶數的排列程式其實是完全相同的,且不在於跳轉換位子程式的條件乙個為ja(大於),乙個為jb(小於)。

(1) 在分類奇數和偶數的時候,需要注意的問題是,在資料段內儲存的內容是每個有效數的ascii碼,因為int 21h;ah 0ah功能儲存的是鍵盤的ascii碼值。而資料分奇偶時(這裡用除2判斷餘數的方法),用的除法要使用資料的bcd碼,所以每個資料在分類前先要將其轉換成bcd碼。ascii碼和bcd碼在數字的情況下,且別在高四位,所以完成轉換只需要將ascii碼的高四位與上0000b。

(2) 在顯示結果時,如果直接將結果輸出,就會出現以下結果:

201816080602

191715070301

資料間沒有空格,很能直接讀出結果是否正確,所以在輸出資料時,要在相鄰的兩個有效資料間新增空格。實現方法是在儲存資料的時候認為在資料後新增空格的ascii碼,這樣在輸出的時候有效資料就被空格隔開了。

data segment

count dw 0

dw 0

dw 0

array1 db 'now start!$'

array5 db 'compute has already note:$'

array3 db 'the answer is:$'

array4 db 'done!$'

income db 40

db ?

db 40 dup (?)

shuru db 40 dup (?)

jishu db 100 dup (?)

oushu db 100 dup (?)

data ends

code segment

assume cs:code,ds:data

main proc far

start: mov ax,data

mov ds,ax

mov dx,offset array1

mov ah,9

int 21h

call crlf

mov cl,20

mov di,offset jishu

mov si,offset oushu

input: cmp cl,0

jz pailio

mov dx,offset income

mov ah,0ah

int 21h

mov bx,dx

mov ch,[bx+1]

add dx,2

mov bp,dx

cmp ch,1

jz storedan

cmp ch,2

jz storeer

jmp input

storedan: mov al,[bp]

and al,00001111b

xor ah,ah

mov bl,02h

aaddiv bl

mov bh,30h

mov bl,[bp]

cmp ah,0

jz storeou

jnz storeji

storeer: mov ah,[bp]

mov al,[bp+1]

and ah,00001111b

and al,00001111b

mov bl,02h

aaddiv bl

mov bh,[bp]

mov bl,[bp+1]

cmp ah,0

jz storeou

jnz storeji

storeji: mov [di],bh

mov [di+1],bl

mov [di+2],20h

add di,3

dec cl

inc byte ptr[count]

inc byte ptr[count+4]

mov dx,offset array5

mov ah,9

int 21h

mov dx,offset income

mov bp,dx

mov dl,[bp+2]

mov ah,2

int 21h

mov dl,[bp+3]

mov ah,2

int 21h

call crlf

jmp input

storeou: mov [si],bh

mov [si+1],bl

mov [si+2],20h

add si,3

dec cl

inc byte ptr[count]

inc byte ptr[count+2]

mov dx,offset array5

mov ah,9

int 21h

mov dx,offset income

mov bp,dx

mov dl,[bp+2]

mov ah,2

微機原理實驗報告

一 實驗綜述 實驗目的 1 熟悉debug環境,在debug中輸入程式。2 掌握基本指令的用法。3 分析程式執行結果。4 會按要求編寫基本程式,完成基本功能。二 實驗過程 實驗步驟 資料記錄 實驗3.57 若ax 1001h,dx 20ffh,當執行add ax,dx指令以後,請列出和數及標誌暫存器...

微機原理綜合實驗報告

濱江學院 實驗報告 學生姓名 學號專業資訊工程 班級2016級 二 一八年十二月三十日 微機原理綜合實驗 實驗一利用debug除錯程式除錯程式段 1 實驗目的 1 熟悉debug有關命令的使用方法。2 利用debug掌握有關指令的功能。3 利用debug執行簡單的程式段。2 實驗內容 1 進入和退出...

西電微機原理實驗報告

班級 031214 學號 03121370 姓名 孔玲玲 地點 e ii 312 時間 第二批 1 掌握組合語言的程式設計方法 2 掌握dos功能呼叫的使用方法 3 掌握組合語言程式的除錯執行過程 二 實驗裝置 pc機一台。三 實驗內容 1 將指定資料區的字串資料以ascii碼形式顯示在螢幕上,並通...