實驗二班級: 2012級資訊工程(7)班
姓名學號
序號評閱分數
微機實驗二
一、實驗目的
1、熟悉80x86基本指令集。
2、掌握組合語言源程式的編寫。
3、掌握結構化程式設計三大結構的程式設計。
4、掌握匯程式設計序的動態除錯。
二、開發環境
未來彙編、debug
三、實驗題目
1、程式設計將以『$』結束的字串中的小寫字母改為大寫字母。
①已知資料段的定義:
data segment
*** 2000h
str1 db 『aedc123!*sdedio71$』
count equ $-str1
*** 3000h
str2 db count dup(?)
data ends
②畫流程圖不是是
**:data segment
*** 2000h
str1 db 'aedc123!*sdedio71$'
count equ $-str1
*** 3000h
str2 db count dup(?)
data ends
stack segment para stack 'stack'
db 100 dup (?)
stack ends
code segment
assume cs:code,ds:data
start proc far
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
lea si,str1取str1首位址
lea di,str2取str2首位址
mov cx,count
aa:mov al,[si]
cmp al,61h判斷是否為小寫字母
jb next
cmp al,7ah
ja next
sub al,20h將小寫字母轉換為大寫
mov [di], al將非小寫字母放入str2中
next:
mov [di], al
inc si
inc di
loop aa
retstart endp
code ends
end start
結果:1.
2.③debug除錯:修改str1字串的值,執行看結果。
結果:1.
2.問題:
1.未注意到loop迴圈的結束條件是cx為0,故設計時應該用move cx, count這樣的語句,執行一次自減一,直到cx為0不執行迴圈。
2.loop 迴圈中出現問題,應該把inc si 和 inc di放在迴圈中比較語句後
3.比較後直接寫的next語句,忘記還要執行乙個 mov [di], al,從而導致輸出一直為0.
2、有乙個位元組型陣列,求最大值、最小值和平均值:1)作為無符號數,2)作為帶符號。
①已知資料段的定義:
data segment
*** 2000h
num db 12h,95h,0f1h,0c2h,82h,2h,10h,34h
count db $-num
*** 3000h
res1 db 3 dupstore unsigned
*** 4000h
res2 db 3 dupstore signed
data ends
②畫流程圖
**:data segment
*** 2000h
num db 12h,95h,0f1h,0c2h,82h,2h,10h,34h
count equ $-num
*** 3000h
res1 db 3 dupstore unsigned
*** 4000h
res2 db 3 dupstore signed
data ends
stack segment para stack 'stack'
db 100 dup (?)
stack ends
code segment
assume cs:code,ds:data
start proc far
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
lea si,num
lea di,res1
mov cx,count-1
mov al,[si]
;求無符號數最大值
a:inc si
cmp al,[si]
ja next1
mov al,[si]
next1:
loop a
mov [di],al
;求無符號數最小值
lea si,num
mov cx,count-1
mov al,[si]
inc di
b: inc si
cmp al,[si]
jb next2
mov al,[si]
next2:
loop b
mov [di],al
;求無符號數平均值
lea si,num
lea di,res1
mov cx,count
xor bx,bx
mean:
mov al,[si將數放在al
cwd擴為32位,跳過符號
add bx,ax
inc si
loop mean
mov ax,bx將求和結果放回al
mov cx,count
div cx
mov [di][2],al
;有符號數最大值
lea si,num
lea di,res2
mov cx,count-1
mov al,[si]
a2:inc si
cmp al,[si]
jg next3
mov al,[si]
next3:
loop a2
mov [di],al
;求有符號數最小值
lea si,num
mov cx,count-1
mov al,[si]
inc di
b2:inc si
cmp al,[si]
jl next4
mov al,[si]
next4:
loop b2
mov [di],al
;求有符號數的平均值
lea si,num
xor di,di
xor bx,bx
mov cx,8
mean2:
mov al,[si]
cbw先擴成16位
cwd再將符號位擴充至dx
add bx,ax
adc di,dx ;符號位無進製相加,只保留0或1
inc si
loop mean2
mov ax,bx
mov dx,di
mov cx,8
idiv cx有符號相除
lea di,res2
mov [di][2],al
ret start endp
code ends
end start
結果:1.無符號數
2.有符號數
出現的問題:
1.未注意到資料比較時比較的次數為count-1次。第一次用count次進行迴圈時,會使最小值為0.
2.在求平均值是未注意到要除以count次,不是count-1
3.在求有符號數的平均值時在最開始就對res2取址:lea di,res2,忽略了在後面一步需要用到adc di,dx,導致最後一步mov [di][2],al時出錯,應該把lea di,res2放在adc di,dx之後才不會對所存的數產生影響
4.每一次大段操作完記得inc si,使儲存向下乙個位址進行。
5.最開始時發現有符號數求平均與無符號數相等,修改為有符號數求和時要先擴為字,再擴為雙字,這樣符號位才不會遺失。
6.求和時di使用前未清零,導致錯誤相加,修改後先將di清零再相加。
3、數碼轉換:將字資料轉換為ascii碼表示的十進位制數。字資料的值域為0~65535,最多可轉換為五位十進位制數。例如:字資料為0ffffh,則轉換為:『65535』
①已知資料段的定義:
data segment
*** 2000h
num dw 65535
*** 2010h
data ends
②畫流程圖
迴圈5次
**:data segment
*** 2000h
num dw 65535
*** 3000h
num1 dw 10000,1000,100,10,1;定義乙個被除數陣列,偏移位址為3000h
*** 2010h
res db 5 dup(?)
微機原理實驗報告
一 實驗綜述 實驗目的 1 熟悉debug環境,在debug中輸入程式。2 掌握基本指令的用法。3 分析程式執行結果。4 會按要求編寫基本程式,完成基本功能。二 實驗過程 實驗步驟 資料記錄 實驗3.57 若ax 1001h,dx 20ffh,當執行add ax,dx指令以後,請列出和數及標誌暫存器...
微機原理實驗報告
實驗報告 課程名稱 實驗名稱 班級姓名學號 實驗組別同實驗者 實驗日期實驗地點 評定成績評閱教師 實驗報告要目 1 實驗目的要求 2 實驗儀器 裝置 3 實驗線路 原理框圖 4 實驗方法步驟 5 實驗的原始資料和分析 6 實驗討論 1 從螢幕輸入20個資料,有效資料從00 99 十進位制 2 按序進...
微機拆裝實驗報告
一 實驗目的 1 熟悉微機的基本配置及各部件的功能 掌握微機基本配置與組裝過程。2 通過理論聯絡實際,鞏固所學知識,提高實際動手能力,提高處理實際問題的能力。3 了解實際工作的具體流程和需要掌握的知識以及應用方法 4 發現自己知識缺乏的方面,及時進行補充,為將來順利進入社會工作做好準備。二 實驗準備...