微机实验二报告模板Word文件下载.docx
- 文档编号:19873941
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:20
- 大小:76.18KB
微机实验二报告模板Word文件下载.docx
《微机实验二报告模板Word文件下载.docx》由会员分享,可在线阅读,更多相关《微机实验二报告模板Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
DEBUG是调试汇编语言程序的工具,它具有跟踪程序的运行、显示修改内存与寄存器的内容等功能,因此在调试中可以寻找错误和修改错误,可以对小段程序进行汇编,是调试各种应用程序的极其方便的工具。
经过DEBUG调试后的程序,必须重新进行编辑、汇编和连接后才可执行。
5、DEBUG的主要特点:
(1)能够在最小环境下运行汇编程序;
(2)提供简单的修改手段;
(3)提供用户和计算机内部联系的窗口;
四、实验步骤
(一)常用软件的使用
1、在系统盘下建立一个文件夹MASM,将MASM、EDIT、LINK和DEBUG四个文件复制到此目录下;
2、点击“开始”菜单——“程序”----“附件”--------“DOS命令提示符”,进入到DOS状态;
3、利用CD命令进入到MASM文件夹中
CD\
CDMASM
4、利用DIR命令查看是否有这些文件,如果无则要重新复制
5、进入EDIT程序,输入下列内容:
datasegment
notedb'
hello,world!
'
'
$'
dataends
codesegment
assumecs:
code,ds:
data
begin:
movax,data
movds,ax
movdx,offsetnote
movah,09h
int21h
movah,4ch
codeends
endbegin
保存文件名为你的学号_01.ASM
6、汇编程序:
masm汇编源程序文件名
7、连接程序:
LINK目标文件名
8、执行可执行文件,查看结果
9、按如上方法(5-8步骤),输入下列内容:
code
start:
moval,32h
movdl,37h
adddl,al
subdl,30h
movah,2
endstart
保存文件名为你的学号_02.ASM
10、用EXIT退出DOS系统
(二)DEBUG常用命令的使用
1、通过DEBUG编写和运行汇编程序
(1)进入到DEBUG状态:
进入到MASM目录中,输入DEBUG执行DEBUG调试程序。
进入DEBUG状态的标志是:
屏幕显示“—”
(2)输入程序并汇编:
用DEBUG的A命令送入程序。
在DEBUG状态,输入A,然后回车。
当输入A命令时会自动产生程序所送内容单元的段地址和偏移地址,通过偏移地址可以看到每条指令站内存单元的字节数。
当程序段送完时,只键入回车键,就退出汇编状态(A状态)回到DEBUG状态“—”。
其中输入数据为16进制,DEBUG状态下程序中的数据都按16进制来处理,不需要键入H来表示。
输入以下程序:
MOVAL,32
MOVDL,37
ADDDL,AL
SUBDL,30
MOVAH,2
INT21
INT20
(3)执行程序:
用DEBUG的G命令执行刚刚汇编的程序。
在DEBUG状态下直接输入G,回车,查看结果。
(4)反汇编:
可以用反汇编U命令将键入的程序调出,并可以得到每条汇编指令的机器码。
在DEBUG状态输入:
U10010D
(5)退出DEBUG返回DOS状态:
用Q命令退出。
2、DEBUG常用命令的使用
(1)汇编命令A
格式:
A[段寄存器名]:
[偏移地址]
A[段寄存器地址]:
[偏移地址]
A[偏移地址]
A
功能:
该命令允许键入汇编语言语句,并能把它们汇编成机器代码,相继地存放在从指定地址开始的存储区中。
其中最后一个格式的偏移地址为0100H。
(2)检查和修改寄存器命令R
∙显示CPU内所有寄存器内容和标志位状态,其格式为:
-R
例如:
-r
AX=0000
BX=0000
CX=010A
DX=0000
SP=FFFE
BP=0000
SI=0000
DI=0000
DS=18E4
ES=18E4
SS=18E4
CS=18E4
IP=0100
NVUPDIPLNZNAPONC
18E4:
0100
C70604023801
MOV
WORDPTR[0204],0138
DS:
0204=0000
其中标志位状态的含义可见下表:
标
志
名
标志为1
标志为0
OF
DF
IF
SF
ZF
AF
PF
CF
溢出(是/否)
方向(减量/增量)
中断(允许/关闭)
符号(负/正)
零(是/否)
辅助进位(是/否)
奇偶(偶/奇)
进位(是/否
OV
DN
EI
NG
ZR
AC
PE
CY
NV
UP
DI
PL
NZ
NA
PO
NC
∙显示和修改某个寄存器内容,其格式为:
-R
registername
例如,键入
-r
ax
系统将响应如下:
AX
F1F4
:
即AX寄存器的当前内容为F1F4,如不修改则按Enter键,否则,键入欲修改的内容如:
bx
BX
0369
059F
则把BX寄存器的当前内容修改为059F。
∙显示和修改标志位状态,命令格式为:
-RF
系统将响应,如:
OVDNEINGZRACPECY-
此时如不修改其内容可按Enter键,否则,建入欲修改的内容,如:
OVDNEINGZRACPECY–PONZDINV即可,键入的顺序是任意的。
(3)追踪与显示命令T
T[=address]
从指定地址起执行一条指令后停下来,显示所有寄存器内空及标志位的值。
如未指定则从当前的CS:
IP开始执行。
(4)反汇编命令U
从指定地址开始,反汇编32个字节,其格式为:
U[range]
-u100
如果地址被省略则从上一个U命令的最后一条指令的下一个单元开始显示32个字节。
(5)运行命令G
-G
[=address1][address2[address3
...]]
其中,地址1指定了运行的起始地址,如不指定则从当前的CS:
IP开始运行。
后面的地址均为断点地址,当指令执行到断点时,就停止执行并显示当前所有寄存器及标志位的内容,和下一条将要执行的指令。
(6)结束命令Q
-Q
它退出DEBUG,返回DOS。
3、利用DEBUG调试EXE文件
(1)通过EDIT编辑源程序;
(2)用MASM程序汇编源程序;
(3)用连接程序形成可执行文件
(4)用DEBUG调试可执行文件
●用DEBUG调入可执行文件;
●用U命令查看程序是否进入内存;
●用R、T命令跟踪程序的执行的过程并察看CPU内部寄存器的内容。
(5)DOS状态下查看程序清单和执行结果
五、实验数据
两个源程序。
程序一:
程序二:
六、实验结果分析
1、指出寄存器发生的变化和写出结果。
寄存器发生的变化:
①AX=0032IP从0100变为0102
②DX=0037IP从0102变为0104
③DX=0069IP从0104变为0106
④DX=0039IP从0106变为0109
⑤DX=0232IP从0109变为010B
2、写出实验结果。
试验结果:
程序二:
9
二、字符及字符串的输入输出程序的编写与调试
1、通过实验掌握基本的寻址方式;
2、理解指令的功能,熟悉DEBUG的调试命令;
3、掌握字符输入输出的方法;
4、掌握字符串输入输出的方法;
5、进一步了解DOS系统功能调用。
1、单字符输入(1号调用)
格式:
MOVAH,01H
INT21H
从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示
2、单字符显示(2号调用)
MOVDL,待显示字符的ASCII码
MOVAH,02H
将DL寄存器中的字符送显示器显示
3、结束调用(4C号调用)
MOVAH,4CH
终止当前程序并返回调用程序
4、INT20H,在DEBUG下正常结束程序
5、字符串的输入(10号功能调用):
其作用是从键盘输入字符串。
在调用前首先要建立一个输入缓冲区,规定缓冲区的第一个字节用来存放输入字符串的最大长度,可以由用户根据需要设定,第二个字节用来存放实际输入的字符数,在DOS返回时自动赋值,从第三个字节开始存放实际输入的字符串,串的输入以回车作为结束符。
LEADX,缓冲区首偏移地址
MOVAH,0ah
INT21H
从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示
6、字符串显示(9号功能调用)
LEADX,待显示字符串首偏移地址
MOVAH,09H
将当前数据区中以‘$’结尾的字符串送显示器显示
1、假设DS=2000H,ES=2100H,SS=1500H,请通过实验指出下列指令的寻址方式:
MOVAX,1234
MOVBX,1002
MOVDL,39
ADDAX,BX
INCBX
DECDL
MOVSI,3
Int20
注意:
本步骤实验只要求在DEBUG状态下进行。
(1)、首先进入DEBUG状态,用R命令修改各寄存器的内容,以满足题目的要求;
(2)、用A命令写入要实验的8条语句;
(3)、用T命令单步执行,观察并记录运行的结果;
2、编写汇编语言程序,要求将键盘输入的一个大写字母用小写字母显示出来。
要求用两种方法调试出结果,即DEBUG方法和编辑、汇编和连接的方法。
参考程序如下:
movah,01h
addal,20h
movdl,al
movah,02h
3、编写汇编语言程序,要求先提示用户输入,然后将用户的输入直接显示出来。
datasegment//DATA段定义开始
msgdb'
whatisyourname:
//给变量msg定义存储单元,db表示定义字节数据
bufdb30,?
30dup(?
)//给变量buf定义存储单元,db表示定义字节数据,?
只分配存储单元,不定义初值。
带DUP的表达式,定义重复数据。
dataends//DATA段定义结束
codesegment//CODE段定义开始
data//运行程序时,需要通过段寄存器访问存储单元,ASSUME指令就是用来建立段寄存器与段之间关系
movax,data//begin为程序的起始标号;
将data段的起始地址传送给ax
movds,ax//将ax的内容传送给ds,完成数据段寄存器的加载
movdx,offsetmsg//offset计算变量或标号的段内偏移地址,也可以用leadx,msg来实现以下3句为9号调用
movdx,offsetbuf
movah,0ah
codeends//CODE段结束
endbegin//用结束伪指令END加载程序的起始地址。
写出编写的程序清单。
datasegment
)
dataends
codesegment
data
begin:
movax,data
movds,ax
movdx,offsetmsg
codeends
endbegin
1、分析程序调试过程中出现的错误,是如何解决的。
程序出现错误通过查书本和询问同学,细心调查解决。
2、写出程序运行的结果。
程序一运行的结果:
输入一个大写字母用小写字母显示出来,例如输入大写字母A,则屏幕显示的结果为Aa。
程序二运行的结果:
提示用户输入,然后将用户的输入直接显示出来。
例如输入zhaoyanjiao,则屏幕显示的结果为:
zhaoyanjiao
3、分析执行每个命令后相应寄存器的变化。
程序一的变化:
①BX从0000变为1002IP从0103变为0106
②BX从0000变为1002IP从0103变为0106
③DX变为0039IP从0106变为0108
④AX变为2236BX=1002IP从0108变为010A
⑤BX=1003IP从010A变为010B
⑥DX=0038IP从010B变为010D
⑦IP从0108变为0110
IP从0110变为0172
4、写出寻址方式。
MOVAX,1234是立即寻址
MOVBX,1002是寄存器间寻址
MOVDL,39是立即寻址
ADDAX,BX是寄存器间寻址
MOVSI,3是立即寻址
movax,data是直接寻址
Movds,ax是寄存器寻址
movdx,offsetmsg是寄存器间接寻址
movah,09h是立即寻址
movdx,offsetbuf是寄存器间接寻址
movah,0ah是立即寻址
movah,4ch是立即寻址
三、存储器块清零
一、实验要求
指定存储器中某块的起始地址和长度,要求能将其内容清零。
二、实验目的
1.掌握存储器读写方法
2.了解存储器的块操作方法
三、实验说明
通过本实验,学生可以了解读写存储器的读写方法,同时也可以了解单片机编程,调试方法。
如何将存储器块的内容置成某固定值(例全填充为0FFH)?
请学生修改程序,完成此操作。
四、参考程序
1、参考程序
Blockdb256dup(55h)
code,ds:
startprocnear
movax,data
movds,ax
movbx,offsetBlock;
起始地址
movcx,256;
清256字节
Again:
mov[bx],byteptr0
incbx
LoopAgain;
记数减一
jmp$
五、实验步骤
(1)进入Wave6000,输入程序并检查,保存程序。
(2)“编译”程序。
(3)“全速执行”程序。
(4)“暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。
(5)在指令“jmp$”处设断点。
(6)“全速执行”程序。
(7)在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。
四、内存块移动
将指定源地址和长度的存储块移到指定目标位置
1.了解内存的移动方法。
2.加深对存储器读写的认识。
三、实验说明
块移动是计算机常用操作之一,多用于大量的数据复制和图象操作。
本程序是给出起始地址,用地址加一方法移动块,请思考给出块结束地址,用地址减一方法移动块的算法。
另外,若源块地址和目标块地址有重叠,该如何避免?
四、程序框图
;
移动256字节
Sourcedb256dup(055h)
Targetdb256dup(0aah)
data,es:
moves,ax
movsi,offsetSource
movdi,offsetTarget
movcx,256
repmovsb
(3)在指令“jmp$”处设断点。
(4)“全速执行”程序。
(5)在“数据窗口(MEMOREY)”分别查看0400H、0500H开始256个单元的内容,记录并分析实验结果。
1、实验结果:
256个aah全部被256个55h所代替。
2、用地址减一方法移动块的算法程序如下:
datasegment
Sourcedb256dup(055h)
Targetdb256dup(0aah)
dataends
codesegment
assumecs:
startprocnear
Addsi:
255
Adddi:
std
codeends
3、如果出现源块地址与目标地址有重叠可以采用一下的办法来避免:
把源块地址的第一个块移动到目标地址的最后一个块,把源块地址的第二个块移动到目标地址的倒数第二个块,依次类推就可以避免出现源块地址与目标地址有重叠的情况。
五、数据排序
给出一组随机数,将此组数据排序,使之成为有序数列
二、实验目的
了解数据排序的简单算法。
有序的数列更有利于查找。
本程序用的是“冒泡排序”法,算法是将一个数与后面的数相比较,如果比后面的数大,则交换,如此将所有的数比较一遍后,最大的数就会在
数列的最后面。
再进行下一轮比较,找出第二大数据,直到全部数据有序。
Lenequ10
Arraydb5,2,1,0,2,3,8,6,5,9
Changedb0
Sort:
movbx,offsetArray
movcx,Len-1
movChange,0
Goon:
moval,byteptr[bx]
cmpal,byteptr[bx]
jngNext;
前小后大,不交换
movChange,1;
前大后小,置交换标志
movah,[bx]
mov[bx],al;
交换
mov[bx-1],ah
Next:
loopGoon
cmpChange,0
jneSort
(2)“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 实验 报告 模板