南昌大學(xué)微型計算機原理與接口技術(shù)實驗報告(全)_第1頁
南昌大學(xué)微型計算機原理與接口技術(shù)實驗報告(全)_第2頁
南昌大學(xué)微型計算機原理與接口技術(shù)實驗報告(全)_第3頁
南昌大學(xué)微型計算機原理與接口技術(shù)實驗報告(全)_第4頁
南昌大學(xué)微型計算機原理與接口技術(shù)實驗報告(全)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、實驗一:匯編語言程序設(shè)計開發(fā)環(huán)境實驗?zāi)康?、熟悉匯編語言設(shè)計開發(fā)環(huán)境2、鞏固對程序基本結(jié)構(gòu)的認識3、學(xué)會使用debug命令查看結(jié)果實驗步驟:1、打開電腦在系統(tǒng)選擇界面,選擇dos操作系統(tǒng)2、通過鍵盤輸入tc,進入tc操作界面。在tc操作見面,新建文件,將實驗程 序?qū)懭胛募校缓蟊4鏋?asm文件。退出tc操作界面3在dos操作界面,寫入masm,和剛才的asm文件名。產(chǎn)生目標(biāo)文件。4、調(diào)用link文件,鏈接目標(biāo)文件,產(chǎn)生可執(zhí)行文件5、再鍵入debug 12.exe(12為對應(yīng)文件的文件名)來運行程序。我們的目的是要察看我們程序的運行結(jié)果,因此我們希望的動程序運行后應(yīng)停在返回dos以前,為此我

2、們可先用反匯編命令u來確定我們所要的斷點地址。編寫匯編程序,實現(xiàn)z=x+;程序如下:data segment x db 18h y db 19h z db ?data endscode segmentmain proc farassume cs:code,ds:datastart: push dssub ax,axpush axmov ax,datamov ds,axmov al,xadd al,y daa mov z,alretmain endpcode endsend start先退出dos系統(tǒng)。先輸入masm 12.asm后,看有沒有錯誤,如果有錯誤就返回去修改程序,反復(fù)調(diào)試,直到?jīng)]有錯

3、誤為止。再輸入link 12.obj再輸入debug 12.exe再按u。設(shè)置好斷點以后再輸入g加斷點地址。實驗結(jié)果-u1489:0000 1e pushds 1489:0001 2bc0 subax,ax 1489:0003 50 pushax 1489:0004 b88814 movax,1488 1489:0007 8ed8 movds,ax 1489:0009 a00000 moval,0000 1489:000c 02060100 addal,0001 1489:0010 27 daa 1489:0011 a20200 mov0002,al 1489:0014 cb retf 148

4、9:0015 d1e3 shlbx,1 1489:0017 d1e3 shlbx,1 1489:0019 8b360406 movsi,0604 1489:001d eba2 jmpffc1 1489:001f 90 nop -u1489:0020 c746fc0000 movword ptr bp-04,0000 1489:0025 eb1f jmp0046 1489:0027 90 nop 1489:0028 8a4608 moval,bp+08 1489:002b 2ae4 subah,ah 1489:002d 50 pushax 1489:002e 8b5efc movbx,bp-04

5、 1489:0031 d1e3 shlbx,1 1489:0033 d1e3 shlbx,1 1489:0035 8b7604 movsi,bp+04 1489:0038 ff7002 pushbx+si+02 1489:003b ff30 pushbx+si 1489:003d e854fe callfe94 -g0014ax=1437 bx=0000 cx=0025 dx=0000 sp=fffc bp=0000 si=0000 di=0000 ds=1488 es=1478 ss=1488 cs=1489 ip=0014 nv up ei pl nz ac po nc 1489:0014

6、 cb retf -d1488:00001488:0000 18 19 37 00 00 00 00 00-00 00 00 00 00 00 00 00 .7.1488:0010 1e 2b c0 50 b8 88 14 8e-d8 a0 00 00 02 06 01 00 .+.p.1488:0020 27 a2 02 00 cb d1 e3 d1-e3 8b 36 04 06 eb a2 90 .6.1488:0030 c7 46 fc 00 00 eb 1f 90-8a 46 08 2a e4 50 8b 5e .f.f.*.p.1488:0040 fc d1 e3 d1 e3 8b

7、76 04-ff 70 02 ff 30 e8 54 fe .v.p.0.t.1488:0050 83 c4 06 ff 46 fc 8b 46-06 39 46 fc 72 da 5e 8b .f.f.9f.r.1488:0060 e5 5d c3 90 55 8b ec 56-c4 5e 04 26 80 7f 04 03 .u.v.&.1488:0070 75 07 26 80 7f 0a 00 74-37 a1 58 27 39 06 36 22 u.&.t7.x9.6-q實驗心得:這是我第一次在pc機上運用dos系統(tǒng)來編程,有很多不懂,感覺很陌生。在進入tc,和文件的保存,以及程序的

8、編譯都感覺很陌生。但是有了這一次的接觸,以后會更輕松。這次主要是熟悉了匯編的環(huán)境,對于程序來說,只要熟悉了匯編語言的基本環(huán)境,本次程序比較簡單。運行的結(jié)果很順利。實驗二、字符串的傳送一、 實驗?zāi)康模?. 掌握變量的基本使用方法。2. 掌據(jù)字符串的輸入傳送方法的使用。3. 掌握數(shù)據(jù)段的定義方式二、實驗內(nèi)容編程實現(xiàn)將x中的40個字符存儲在y中,并調(diào)試程序。三、實驗程序如下:data segmentx db 40 dup(b)data endsextra segmenty db 40 dup (?)extra endscode segmentmain proc farassume cs:code,d

9、s:data,es:extrastart: push ds sub ax,ax push ax mov ax,data mov ds,ax mov ax,extra mov es,ax lea si,x lea di,y cld mov cx,40 rep movsb retmain endpcode endsend start四、實驗結(jié)果先退出dos系統(tǒng)。先輸入masm 12.asm后,看有沒有錯誤,如果有錯誤就返回去修改程序,反復(fù)調(diào)試,直到?jīng)]有錯誤為止。再輸入link 12.obj再輸入debug 12.exe再按u。設(shè)置好斷點以后再輸入g加斷點地址。查看數(shù)據(jù)段是輸入d1488:0000顯

10、示結(jié)果:-u148c:0000 1e pushds 148c:0001 2bc0 subax,ax 148c:0003 50 pushax 148c:0004 b88814 movax,1488 148c:0007 8ed8 movds,ax 148c:0009 b88a14 movax,148a 148c:000c 8ec0 moves,ax 148c:000e 8d360000 leasi,0000 148c:0012 8d3e0000 leadi,0000 148c:0016 b91300 movcx,0013 148c:0019 fc cld 148c:001a f3 repz 148

11、c:001b a4 movsb 148c:001c cb retf 148c:001d da5e8b ficompdword ptr bp-75 -u148c:0020 e55d inax,5d 148c:0022 c3 ret 148c:0023 90 nop 148c:0024 55 pushbp 148c:0025 8bec movbp,sp 148c:0027 56 pushsi 148c:0028 c45e04 lesbx,bp+04 148c:002b 26 es: 148c:002c 807f0403 cmpbyte ptr bx+04,03 148c:0030 7507 jnz

12、0039 148c:0032 26 es: 148c:0033 807f0a00 cmpbyte ptr bx+0a,00 148c:0037 7437 jz0070 148c:0039 a15827 movax,2758 148c:003c 39063622 cmp2236,ax -g001cax=148a bx=0000 cx=0000 dx=0000 sp=fffc bp=0000 si=0013 di=0013 ds=1488 es=148a ss=1488 cs=148c ip=001c nv up ei pl zr na pe nc 148c:001c cb retf -d1488

13、:00001488:0000 50 45 52 53 4f 4e 41 4c-20 43 4f 4d 50 55 54 45 personal compute1488:0010 52 24 00 00 00 00 00 00-00 00 00 00 00 00 00 00 r$.1488:0020 50 45 52 53 4f 4e 41 4c-20 43 4f 4d 50 55 54 45 personal compute1488:0030 52 24 00 00 00 00 00 00-00 00 00 00 00 00 00 00 r$.1488:0040 1e 2b c0 50 b8

14、88 14 8e-d8 b8 8a 14 8e c0 8d 36 .+.p.61488:0050 00 00 8d 3e 00 00 b9 13-00 fc f3 a4 cb da 5e 8b .1488:0060 e5 5d c3 90 55 8b ec 56-c4 5e 04 26 80 7f 04 03 .u.v.&.1488:0070 75 07 26 80 7f 0a 00 74-37 a1 58 27 39 06 36 22 u.&.t7.x9.6-d148a:0000148a:0000 50 45 52 53 4f 4e 41 4c-20 43 4f 4d 50 55 54 45

15、 personal compute148a:0010 52 24 00 00 00 00 00 00-00 00 00 00 00 00 00 00 r$.148a:0020 1e 2b c0 50 b8 88 14 8e-d8 b8 8a 14 8e c0 8d 36 .+.p.6148a:0030 00 00 8d 3e 00 00 b9 13-00 fc f3 a4 cb da 5e 8b .148a:0040 e5 5d c3 90 55 8b ec 56-c4 5e 04 26 80 7f 04 03 .u.v.&.148a:0050 75 07 26 80 7f 0a 00 74-

16、37 a1 58 27 39 06 36 22 u.&.t7.x9.6148a:0060 72 14 be 36 22 8b 1c ff-04 2b d8 d1 e3 d1 e3 8b r.6.+.148a:0070 36 04 06 eb 10 90 be 36-22 8b 1c ff 04 d1 e3 d1 6.6.-q實驗心得:這次是做字符串傳送的實驗這套程序在課堂上講過,所以編程序的時候也比較輕松。在調(diào)試階段要注意,本次調(diào)試我的斷點設(shè)置出錯,所以導(dǎo)致了輸出結(jié)果的錯誤,這個問題以后應(yīng)該注意,要知道自己所需要的斷點在哪。不能搞錯,否則輸出的結(jié)果就會有問題。還有就是輸入程序的時候要小心,不能

17、按錯鍵,如果按錯了鍵,在編譯的時候會錯,要返回去tc中改程序,調(diào)試程序的時候耐心也是很重的實驗三、鍵盤輸入與回顯實驗?zāi)康模?、熟悉dos功能的9號功能,從鍵盤輸入并在顯示器上顯示字符串2、熟悉dos功能調(diào)用指令int21h 實驗原理:1、單字符輸入功能號1、7和8都可以接收鍵盤輸入的單字符串,輸入字符以ascii碼形式 存放在累加器al中。其中7號和8號功能無回顯。2、字符串輸入輸入字符串可以通過調(diào)用dos功能的0ah號功能實現(xiàn)。3、單宇符顯示在顯示器上顯示的內(nèi)容都是字符形式,如果是數(shù)字,則一定是其對應(yīng)的ascii 碼。要將一個字符串送到顯示器顯示,可調(diào)用dos功能的2、6、9號功能實現(xiàn)。其中

18、2、6用于顯示單個字符,功能9顯示一個字符帀。4、字符中顯示要在從示器上顯示字符串,可調(diào)用dos功能的9號功能,該功能要求被顯示的字符串必須“$”以字符作為結(jié)束符,否則會引起屏幕混亂。5、返回dos用 4ch號功能返回dos的程序段:mov ah,4chint 21h 實驗內(nèi)容:從鍵盤讀入一串字符,在字符串尾插入一個“$”,并顯示該字符。實驗程序如下:data segmentbufsize db 50actlen db ?chars db 50 dup(20h)data endscode segmentmain proc farassume cs:code,ds:datastart: push

19、 ds sub ax,ax push ax mov ax,data mov ds,ax lea dx,bufsize mov ah,0ah int 21h xor cx,cx mov cl,actlen mov dx,offset chars mov bx,dx add bx,cx mov byte ptrbx,$ mov ah,09h int 21h mov ah,02h mov dl,0ah int 21h mov dl,0dh int 21h mov ah,09h lea dx,chars int 21h mov ah,4ch int 21h main endp code ends en

20、d start實驗結(jié)果:隨機輸入一串不超過50個字符的字符串,按enter鍵之后,字符串會重新顯示。在屏幕上。屏幕顯示為:1d08:0000 1e pushds 1d08:0001 2bc0 subax,ax 1d08:0003 50 pushax 1d08:0004 b8041d movax,1d04 1d08:0007 8ed8 movds,ax 1d08:0009 8d160000 leadx,0000 1d08:000d b40a movah,0a 1d08:000f cd21 int21 1d08:0011 33c9 xorcx,cx 1d08:0013 8a0e0100 movcl

21、,0001 1d08:0017 ba0200 movdx,0002 1d08:001a 8bda movbx,dx 1d08:001c 03d9 addbx,cx 1d08:001e c60724 movbyte ptr bx,24 -u1d08:0021 b409 movah,09 1d08:0023 cd21 int21 1d08:0025 b402 movah,02 1d08:0027 b20a movdl,0a 1d08:0029 cd21 int21 1d08:002b b20d movdl,0d 1d08:002d cd21 int21 1d08:002f b409 movah,0

22、9 1d08:0031 8d160200 leadx,0002 1d08:0035 cd21 int21 1d08:0037 b44c movah,4c 1d08:0039 cd21 int21 1d08:003b 00740d addsi+0d,dh 1d08:003e ff360406 push0604 -g37chenlihuagdaksgchenlihuagdaksgax=0924 bx=0011 cx=000f dx=0002 sp=fffc bp=0000 si=0000 di=0000 ds=1d04 es=1cf4 ss=1d04 cs=1d08 ip=0037 nv up e

23、i pl nz ac pe nc 1d08:0037 b44c movah,4c -q實驗心得體會: 本次試驗因為還沒有學(xué)過,對dos系統(tǒng)的功能的調(diào)用很陌生。所以本次編程的時候感覺很痛苦,編程的時候?qū)χ鴷戳撕荛L時間,才慢慢的知道實驗程序的編寫。在實驗室悟了好長時間才悟懂dos功能的調(diào)用顯示和地址的靈活用法。我忘了一“$”,所以電腦一直在那里響。最后我加上“$”符號后,程序才順利執(zhí)行完。這次實驗做得很艱難,一開始有很多迷惑,經(jīng)過實踐之后迷惑就消除了。實驗四:子程序設(shè)計(計算n!)實驗?zāi)康模?、通過調(diào)用求n!的子程序求一個數(shù)的階乘2、掌握子程序的設(shè)計方法,調(diào)用方法,返回方法3、學(xué)會一種算法:遞歸

24、調(diào)用實驗內(nèi)容:堆棧保護及遞歸算法,用遞歸算法計算5!,實驗程序如下: data segmentn dw 5result dw ?data endsstackseg segmentdw 128 dup(0)tos label wordstackseg endscode segmentmain proc farassume cs:code,ds:data,ss:stacksegstart:mov ax,stackseg mov ss,ax mov sp,offset tos push ds sub ax,ax push ax mov ax,data mov ds,ax mov bx,n push

25、bx call fact pop result retmain ednpfact proc near push ax push bp mov bp,sp mov ax,bp+6 cmp ax,0 jnz fact1 inc ax jmp exitfact1:dec ax push ax call fact pop ax mul bp+6exit:mov bp+6,ax pop bp pop ax retfact endpcode ends end start實驗結(jié)果先退出dos系統(tǒng)。先輸入masm 12.asm后,看有沒有錯誤,如果有錯誤就返回去修改程序,反復(fù)調(diào)試,直到?jīng)]有錯誤為止。再輸入li

26、nk 12.obj再輸入debug 12.exe再按u。設(shè)置好斷點以后再輸入g加斷點地址。查看數(shù)據(jù)段是輸入d:ds 0結(jié)果顯示:-u13e1:0000 b8d113 movax,13d1 13e1:0003 8ed0 movss,ax 13e1:0005 bc0001 movsp,0100 13e1:0008 1e pushds 13e1:0009 2bc0 subax,ax 13e1:000b 50 pushax 13e1:000c b8d013 movax,13d0 13e1:000f 8ed8 movds,ax 13e1:0011 8b1e0000 movbx,0000 13e1:001

27、5 53 pushbx 13e1:0016 e80500 call001e 13e1:0019 8f060200 pop0002 13e1:001d cb retf 13e1:001e 50 pushax 13e1:001f 55 pushbp -u13e1:0020 8bec movbp,sp 13e1:0022 8b4606 movax,bp+06 13e1:0025 3d0000 cmpax,0000 13e1:0028 7504 jnz002e 13e1:002a 40 incax 13e1:002b eb0a jmp0037 13e1:002d 90 nop 13e1:002e 48

28、 decax 13e1:002f 50 pushax 13e1:0030 e8ebff call001e 13e1:0033 58 popax 13e1:0034 f76606 mulword ptr bp+06 13e1:0037 894606 movbp+06,ax 13e1:003a 5d popbp 13e1:003b 58 popax 13e1:003c c3 ret 13e1:003d 7421 jz0060 13e1:003f 8b9e72ff movbx,bp+ff72 -g001dax=13d0 bx=0003 cx=014d dx=0000 sp=00fc bp=0000

29、si=0000 di=0000 ds=13d0 es=13c0 ss=13d1 cs=13e1 ip=001d nv up ei pl nz na pe nc 13e1:001d cb retf -d13d0:000013d0:0000 03 00 78 00 00 00 00 00-00 00 00 00 00 00 00 00 .13d0:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13d0:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13d0:0030 00 0

30、0 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13d0:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13d0:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13d0:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .13d0:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .-q 實驗心得說真的 這次實驗的程序要

31、我自己編寫會有一定的難度。老師在課堂上講過這個程序,所以這次編寫起來就會更順暢一點。這次實驗做起來比較順利,對于程序我只達到能看懂的地步,還沒有達到能全部編寫出來的狀態(tài)。所以我還需要加油,需要對匯編語言有一個更好的了解。這個程序有一個地方需要注意,那就是n的值不能太大,如果太大就會超出所能表示的范圍,則會導(dǎo)致算的不正確。實驗四:子程序設(shè)計(計算n!)實驗?zāi)康?、通過調(diào)用求n!的子程序求一個數(shù)的階乘2、掌握子程序的設(shè)計方法,調(diào)用方法,返回方法3、學(xué)會一種算法:遞歸調(diào)用4、學(xué)會dos功能的調(diào)用的顯示功能實驗內(nèi)容堆棧保護及遞歸算法,用遞歸算法計算5!調(diào)整為是進制以后,并在屏幕上直接顯示。實驗程序如下

32、: data segmentn dw 5 result dw ?data endsstack segment dw 128 dup(0) tos label wordstack endscode segmentmain proc far assume cs:code, ds:data,ss:stackstart: mov ax,stack mov ss,ax mov sp,offset tos push ds sub ax,ax push ax mov ax,data mov ds,ax ; mov bx,n lea dx,string1 ;xianshi mov ah,09h int 21h

33、 ; mov ah,02h ;enter ; mov dl,0ah ; int 21h ; mov dl,0dh ; int 21h mov ah,1 ;shurushuju int 21h sub al,30h xor bx,bx mov bl,al push bx call fact pop result mov ah,02h ;enter mov dl,0ah int 21h mov dl,0dh int 21h lea dx,string2 ;xianshi mov ah,09h int 21h mov bx,result call display ret main endpfact proc nearpush axpush bpmov bp,spmov ax,bp+6cmp ax,0jnz fact1inc axjmp exitfact1: dec ax push ax call fact pop ax mul word ptrbp+6exit:mov bp+6,axpop bppop axretfact endpdisplay proc nearmov si,10xo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論