實驗報告
課程名稱
實驗名稱
班級姓名學號
實驗組別同實驗者
實驗日期實驗地點
評定成績評閱教師
實驗報告要目
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碼形式顯示在螢幕上,並通...