微機實驗報告二

2021-03-04 05:46:40 字數 4727 閱讀 5436

實驗二班級: 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 發現自己知識缺乏的方面,及時進行補充,為將來順利進入社會工作做好準備。二 實驗準備...