201406
微机原理上机实验报告
实验一
班级: 物联网1班
姓名: 邓笑游
学号: 01210261y11
成绩:
实验1:8086的微处理器结构(现场)的认识实验
一、实验目的
1、建立自己的DOS平台
2、通过DEBUG工具了解8086的工作现场
3、了解DEBUG工具的A、U、R和T命令
二、预习要点
1、8086的数据现场(CPU的寄存器和存储器的段结构)。
2、8086的寄存器类型、名称和作用。
3、debug工具的作用和特点
三、实验项目
在DOS下利用Debug调试工具完成1+2=3的程序调试
四、实验设备环境
PC机1台,DOS操作系统,Debug调试工具
五、实验方法
在DOS下利用Debug调试工具的R命令查看8086微处理器的现场(数据结构)。
六、实验要求
1、写出R命令的功能。
2、写出8086的当前现场的所有数据部件(寄存器)的名称及作用。
实验1
1.装入本实验程序的本机截图
2.进入DEBUG(直接在桌面打开)
3.执行A命令输入1+2=3的程序
4.用U命令查看程序的形态
5.用R命令查看当前指令的现场
6.执行一条指令,说明指令的现场和指令的功能(本指令改变了那些现场的内
7.执行第二条指令,说明指令的现场及结果的值。
8.实验感受
第二篇:微机原理实验报告_1
《微机原理与接口技术》
实验报告
实验名称: 指令与汇编基础
学 院: 信息科学技术学院
专 业: 电子信息工程
班 级: 20##级理科实验班
学 号: 20091613310032
姓 名: 姬晓鹏
20##年11月17日
一、实验目的
1.了解命令行操作的基本方式和基本命令,掌握PC环境下命令行方式的特点;
2.掌握汇编语言程序指令编辑、宏汇编、连接、运行基本概念;
3.学会利用DEBUG检查认识指令功能的正确方法。
二、实验内容
1.汇编语言汇编、链接、运行、调试:
(1)所需文件:Masm.exe、link.exe,另外WindowsXP自身有的edit.com 和debug.exe(C:\windews\system32)。
(2)建立asm程序.
asm程序可以使用记事本编辑,然后保存为*.asm文件,或者使用edit程序创建。
题目:请把40个字母a的字符串从原缓冲区传送到目的缓冲区。程序如下:
;************************************************************
data segment
source_buffer db 40 dup('a')
data ends
;************************************************************
extra segment
dest_buffer db 40 dup (?)
extra ends
;************************************************************
code segment
main proc far
assume cs:code, ds:data, es:extra
start: push ds
sub ax,ax
push ax
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax
lea si,source_buffer
lea di,dest_buffer
cld
mov cx,40
rep movsb
ret
main endp
code ends
end start
;************************************************************
(3)进行汇编:切换cmd到*.asm所在的文件目录下,运行 masm *.asm,再回车,出现如下界面。
(4)用link程序产生exe文件。
(5)程序的运行:
在cmd窗口中输入:test.exe运行程序,由于没有显示程序结果,需要进一步的调试。
(6) 调试:
在cmd窗口中输入:debug test.exe(需要加*.exe后缀名)然后使用反汇编命令u,得到结果如下图所示:
从上图中可以看到程序的偏移量为1c,运行g命令:-g=0 1c可以看每个寄存器的值。
可以使用D命令分别查看数据段和附加段的有关区域,如查看数据段:-d ds:0,查看附加段:-d es:0
从上图的结果可以发现,40个“a”已从数据段传送到附加段。
三、问题与思考
1. 进行实验时遇到什么问题,如何解决?
(1) 使用debug test命令时,提示“File no found”。
解决方法:debug调试程序时,需要加文件的后缀名*.exe,否则提示找不到文件,而masm和link后的文件可以加后缀名,也可以不加。
(2) 替换movsb、rep指令时,使用的程序如下:
again: mov al,[si]
mov [di],al
add si,1
add di,1
dec cx
jnz again
使用debug查看附加段有关区域,发现数据从数据段无法传送到附加段。
解决方法:将mov [di],al指令修改为mov es:[di],al,重新调试程序,发现数据可以从数据段传送到附加段,可见es在此处是指明地址。
2.用普通指令替换movsb、rep进行程序编写和运行。
查询资料可知:movsb的英文是move string byte,意思是搬移一个字节,它是把 di:si 所指地址的一个字节搬移到 es:di所指的地址上,搬移后原来的内容不变,但是原来es:di所指的内容会被覆盖而且在搬移之后si和di会自动地址向下一个要搬移的地址。
可以将原指令更改为:
again: mov al,[si]
mov es:[di],al
add si,1
add di,1
dec cx
jnz again
程序是将si赋给di,然后di和si分别加1,cx减1,比较cx不等于0时,回到again再次执行。
另外一种替换方法为:
again: mov al,[si]
mov es:[di],al
inc si
inc di
dec cx
jnz again
inc是汇编语言中算术运算类指令,起到加1的功能。
运用movs指令可以精简上述代码:
again: movs byte ptr[di],[si]
dec cx
jnz again
mov指令为双操作数指令,两个操作数中不能全为内存操作数。movs( move string) 是串传送指令,执行操作:[di] = [si] ,将位于ds段的由si所指出的存储单元的字节或字传送到位于es段的由di 所指出的存储单元,再修改si和di,从而指向下一个元素。在执行该指令之前,必须预置si和di的初值,用std或cld设置df值。
经过反复调试,将上述指令中movs byte ptr[di],[si] 修改为movs dest_buffer,source_ buffer,40个“a”也可以从数据段传送到附加段
2. 写出常用调试指令:单步运行、显示寄存器、修改寄存器指令。
单步运行:-t
显示寄存器:-r
修改寄存器:-r [寄存器名] (回车):[修改值]