机械专业微机原理及接口技术实验指导书.docx
- 文档编号:13531155
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:22
- 大小:365.34KB
机械专业微机原理及接口技术实验指导书.docx
《机械专业微机原理及接口技术实验指导书.docx》由会员分享,可在线阅读,更多相关《机械专业微机原理及接口技术实验指导书.docx(22页珍藏版)》请在冰点文库上搜索。
机械专业微机原理及接口技术实验指导书
微机原理与接口技术
实验指导书
1汇编基本原理2
1.1程序,可直接运行的程序,汇编源程序,汇编2
1.2CPU取指令、执行指令的过程3
2汇编工具MASM5.0使用方法3
2.1汇编源程序文件的建立方法3
2.2编译阶段5
2.3链接阶段6
2.4程序调试阶段7
3实验项目9
实验一寻址方式和汇编语言程序上机调试步骤9
实验二清零实验11
实验三码制转换实验13
实验四数据区移动实验16
实验五冒泡法排序实验18
1汇编基本原理
1.1程序,可直接运行的程序,汇编源程序,汇编
程序
程序以文件的形式存在,它是由若干条“指令”顺序排列存储构成的。
指令是对符合CPU指令集的所有信息的统称,“指令”在程序中以两种形式存在,一种是以“指令代码”的形式(在可直接运行的程序文件中),另一种是以“助记符”的形式(在汇编源程序文件中)。
无论“可直接运行的程序”还是“汇编源程序”,其中的指令都是以顺序排列的方式存储的,只是指令存在的方式不同。
可直接运行的程序
当程序中的指令是以可执行的“指令代码”的形式存在时,该程序即为可直接运行的程序,该程序所在的文件即为“可执行程序文件”。
“直接运行”是指该程序中的指令代码可以被CPU直接执行。
汇编源程序
当程序中的指令是以“助记符”的形式存在时,该程序即为汇编源程序。
该程序所在的文件即为“汇编源程序文件”。
汇编
每一条指令助记符都一一对应着一条指令代码。
将以助记符形式存储的汇编源程序文件翻译成以指令代码形式存储的可执行程序文件的过程叫汇编。
其逆过程叫反汇编。
换言之,以图1所示为例,经过汇编过程后,汇编源程序文件(*.asm)中以顺序排列方式存储着的所有指令助记符1到指令助记符n,都一一对应的转换成了可执行程序文件(*.exe)中的指令代码1到指令代码n。
图1
1.2CPU取指令、执行指令的过程
如图1所示,CPU取指、执行指令的的过程如下
1)CPU中程序计数器PC所指向的地址即为将要取出的指令代码所在的地址;
2)PC指向地址后,经读信号有效,该地址中存放的指令代码通过数据总线传送到CPU内部指令寄存器IR中,此时CPU只是取出该指令的二进制代码,尚不知道该二进制代码的具体含义;
3)CPU内部的指令译码器ID对IR寄存器中的二进制代码进行译码,经比对其内部的指令集后,CPU即可知道IR中二进制代码的具体指令代码含义;
4)知道指令代码的具体含义后,IR中的指令将被执行。
2汇编工具MASM5.0使用方法
MASM5.0宏汇编程序用于DOS环境下。
这里我们主要使用它的MASM.exe编译工具和LINK.exe链接工具。
如前所述,汇编是将助记符书写的源程序文件翻译为二进制指令代码的可执行文件的过程。
在MASM5.0工具,实际的汇编过程分为两个阶段,编译阶段和链接阶段。
图2
2.1汇编源程序文件的建立方法
可以使用任何一个文本编辑软件来建立汇编源程序文件。
如在windows环境下可以使用其“记事本”工具,在DOS环境下可以使用工具等。
需要注意的是,建立的汇编源程序文件必须以.asm为扩展名,由于DOS不支持中文和长文件名系统,因此*.asm的文件名部分不可以采用中文输入法输入文件名,常见的可以采用英文、数字或下划线等,并且字符的长度不可以超过8个(最多可以是8个)。
例如“12345678.asm”和“abc_1.asm”都是合法的,而“123456789.asm”及“汇编.asm”都是非法文件名,不能被masm5.0的编译工具识别。
此外,存盘路径也不可以出现中文或长字符。
实例:
在windows操作系统点“开始”菜单——“运行”栏,在其中输入cmd,回车,进入模拟DOS环境。
如图3所示。
MASM5.0工具通常安装在实验室电脑的D:
\或者E:
\根目录下。
在模拟DOS环境中敲入D:
\或者E:
\,进入相应盘的根目录。
然后敲edit回车,进入文本编辑环境。
如图4所示。
图3
图4
在edit编译器中,输入源程序,点击“file”菜单的“saveas”“另存为”选项,选择存盘路径为D:
\或者E:
\(根据masm5.0所在的路径选择),在FileName栏中输入汇编源程序文件名abc.asm,点击“ok”即建立汇编源程序文件成功。
如图5所示。
图5
2.2编译阶段
如图2所示,建立好汇编源程序后,需要使用masm.exe工具进行编译,编译的目的是为了得到*.obj的目标代码文件,该文件是纯二进制代码文件,不能直接显示在屏幕上。
经链接后才能得到可执行文件*.exe。
在编译阶段中,masm.exe工具将对源程序的语法进行检验,如果发现错误将给予提示。
错误提示分为严重错误和警告错误两种。
严重错误指示某些指令存在语法错误,不能形成对应的二进制机器指令。
而警告错误指示某些指令含义不够明确,需要提醒程序员注意。
程序员可以根据提示对源程序进行修改,直到得到正确的结果为止。
在汇编过程中还会产生列表文件和交叉引用文件。
列表文件的后缀为.LST,主要用于给出源程序和机器代码程序的清单,其中包含了源程序中各语句及其对应的目标代码,各语句的偏移量等相关信息,对调试程序有帮助,以供检查程序使用。
交叉索引文件的后缀为.CRF,它是一个为源程序所引用的各种符号进行前后对照的文件,主要用于给出不同程序段中互相引用的全部符号列表。
初学者可以不用建立。
举例:
在以上步骤建立abc.asm源程序文件后,对源文件进行编译。
键入
“masmabc.asm”回车,如没有语法错误,则生成目标文件,如图6所示。
图6
若有错误,则提示错误所在的行号及错误类型,回到源程序中重新改正相应错误处存盘,重复编译过程,直到没有错误才可以得到.obj的目标文件。
如图7所示
图7
2.3链接阶段
在汇编过程中形成了目标文件(.OBJ),但是在该文件中,只是将源程序的操作码部分变成了机器码,而地址操作数还是可浮动的相对地址,不是实际地址,浮动地址需要再定位。
只有经过链接过程才能形成最后的可执行文件。
链接程序的功能就是把一个或多个目标文件合并成一个可执行文件,其后缀为.EXE。
其实在链接过程中一共形成两个文件:
第一个是可执行文件(.EXE)。
默认的可执行文件名字与源程序文件相同,也可以根据用户要求修改可执行文件的名字;链接过程中形成的第二个文件是内存映像文件(.MAP),它给出了每个段的地址分配情况和长度。
如果不需要该文件则可以在链接命令执行时直接输入Enter键。
在链接过程中还与一个库文件(.LIB文件)相关。
一般的汇编程序不需要库文件。
但是当汇编语言与高级语言(如C语言)接口时需要用到库文件。
此时输入相应的库文件名字即可。
如图8所示,输入linkabc.obj,对目标文件进行链接,得到可执行文件abc.exe。
图8
2.4程序调试阶段
只有得到*.exe可执行文件后才可以进行调试,调试使用windows自带的debug.exe调试工具。
使用方法是,在图8所示状态下,输入“debugabc.exe”回车。
进入debug调试环境提示符“-”,用“-U”命令可以显示反汇编信息。
如图9所示,在-u命令后的第一行处,显示的“0b5e:
0000”即第一条指令代码存放的地址,其中0b5e是指令段段地址,0000是偏移地址。
该地址存放的指令代码是b44c,占两个字节(0000和0001两个便宜地址),因此第二行指令偏移地址从0002开始存放。
该行右边的“movah,4ch”即“b44c”这条指令代码对应的助记符。
回顾汇编过程,源程序*.asm中存放的即为图9右边所示的助记符;经过masm.exe工具编译后得到目标文件*.obj,即得到了图9中间部分的指令代码(该指令代码可以直接被CPU识别),但是此时并没有得到物理地址,只有相对的浮动地址;再经过link.exe工具链接后得到可执行文件*.exe,即得到了图9左边所示的指令代码所在的具体物理地址。
所以只有可执行文件.exe才可以直接运行,因为其中既包含了指令代码,又包含了指令代码所在的具体物理地址。
图9
在debug调试环境中,“-q”命令是退出调试状态。
“-d”,“-g”,“-t”也经常使用,如图10所示。
图10
单步执行-t后状态字信息的含义如表1所示
溢出标志OF
方向标志DF
中断标志IF
符号标志SF
零标志ZF
辅助标志AF
奇偶标志PF
进位标志CF
OV
(1)
DN
(1)
EI
(1)
NG
(1)
ZR
(1)
AC
(1)
PE
(1)
CY
(1)
NV(0)
UP(0)
DI(0)
PL(0)
NZ(0)
NA(0)
PO(0)
NC(0)
表1debug中状态字信息的含义
3软件实验项目
实验一寻址方式和汇编语言程序上机调试步骤
一、实验目的
1、掌握在HQFC环境下8086的寻址方式。
2、掌握在HQFC环境下汇编语言程序上机步骤及调试过程。
3、掌握连续执行、单步执行、跳过执行及设置断点的方法。
4、掌握连续执行、单步执行过程中如何查寄存器、存储器、堆栈中的数据。
二、实验内容
1、在HQFC环境下单步执行下列指令,查看每条指令的执行过程,随时查看寄存器、存储器、堆栈及反汇编窗口并记录执行结果,查看、记录每条指令的操作码和操作数,查看、记录所有指令的反汇编结果。
codesegment
assumecs:
code
start:
movax,1234h
movbx,4321h
addax,bx
movcx,ax
pushcx
popdx
loop:
jmploop
codeends
endstart
将3、4语句1234h、4321h改为1234、4321后再执行程序,观察结果寄存器窗口,说明变化原因。
在语句PUSHCX设置断点,连续执行后查看结果,说明设置断点对程序调试有何作用?
2、在数据段X单元存放有数据42,Y单元存放有数据-43,编程求这两数之和,并把结果存放到S单元,编写出完整程序,上机调试,查看、记录执行结果。
3、已知数据段X单元存放的数据为10H,编程将该数据左移四位后存放到Y单元,编写出完整程序,上机调试,查看、记录执行结果。
三、实验预习
1、8086的寻址方式,理解什么是操作码和操作数。
2、了解汇编语言程序上机(编辑→编译→链接→执行)过程。
3、学习利用汇编语言编写简单的源程序。
4、什么是反汇编,反汇编的作用?
四、实验报告要求
1、写出在HQFC环境下汇编语言程序上机的步骤。
2、写出第1题源程序及对应指令的反汇编结果,写出3、4条指令的操作码和操作数,说出双字节数在存储器中的存放规律,写出单步执行完每条指令后,对应指令寄存器的值。
3、写出第2题、第3题的源程序和执行结果。
实验二清零实验
一、实验目的
熟悉MASM编译环境,了解程序的汇编方法,熟悉常用汇编指令。
二、实验内容
编写程序,将程序数据段内256个字节内容清零(或写为55h)
三、实验步骤
1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)
2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;
3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;
4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看清0(清55H)后的内容
图11调试时先用-U命令查看数据段段地址
图12运行程序前先用-d命令查看数据段,看到0000-00ffh地址中有256个AAH
图13–g连续运行程序,提示程序正常执行
图14再次用d命令看数据段,看到00-00ffH共256个单元清成了55h
五、参考程序
datasegment
bufdb256dup(0aah)
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,256
leasi,buf
moval,55h
L1:
mov[si],al
incsi
loopL1
movah,4ch
int21h
codeends
endstart
实验三码制转换实验
一、实验目的
了解16进制码转ascii码的方法,学习汇编指令。
二、实验内容
编写程序,将程序数据段内0,1,2,……0Ah,0Bh,0Ch,0Dh,0Eh,0Fh的16个16进制数转换为相应的ascii码,并存储在原码所在的相应地址中。
三、编程原理
取出一个数后,首先判断该数是否大于等于10(或小于10),如果大于10则加37H转换,小于10则加30H。
四、实验步骤
1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)
2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;
3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;
4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看转码后的内容
图15–U命令查看数据段段地址
图16程序运行前先用-d命令查看数据段内容
图17程序运行后再用-d命令查看数据段内容
四、参考程序
datasegment
bufdb0,1,2,3,4,5,6,7,8,9,0Ah,0bH,0CH,0Dh,0Eh,0Fh
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,16
leasi,buf
L2:
moval,[si]
cmpal,10
jbL1
addal,7h
L1:
addal,30h
mov[si],al
incsi
loopL2
movah,4ch
int21h
codeends
endstart
实验四数据区移动实验
一、实验目的
了解交叉区域的数据移动方法,学习汇编指令。
二、实验内容
编写程序,将程序数据段内00-000fH的16个数据传送到从0008偏移地址开始的16个字节的区域中。
三、编程原理
在没有数据区重叠的情况下,可以用递增或递减的方式随意传送。
在有数据区重叠的情况只能使用其中一种。
因此作为通用的情况,可以先将源区域的首地址和目的区域的首地址进行比较,如果源区域首地址比目的区域首地址小,无论有没有重叠区域,一律采用递减方式传送(即先传送末地址,然后地址指针递减);否则如果源区域首地址比目的区域首地址大,无论有没有数据区重叠,一律用递增方式传送。
图18数据重叠情况数据传送原理示意图
四、实验步骤
1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)
2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;
3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;
4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看数据传送后的内容
图19运行前后数据区的变化
五、参考程序
datasegment
buf1db0,1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh;buf1为源区域首地址
org08H
buf2db8;buf2为目的区域首地址
org10H;由于偏移地址10H-1Fh区域可能被使用,所以建立足够的数据段缓冲区
db?
;当10H被db伪指令占用后,10h-1fH都会分配给数据段使用
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movcx,16
leasi,buf1;如需改变源区域和目的区域位置关系,只要将这里的buf1
leadi,buf2;和这里的buf2倒一下次序即可
cmpsi,di
jaL1
addsi,cx
decsi;源区域首地址+16-1即为源区域末地址
adddi,cx;
decdi;目的区域首地址+16-1即为目的区域末地址
std
L3:
moval,[si]L3:
repmovsb
mov[di],al;递减方式jmpL2
decsi
decdi
loopL3
jmpL2;初学者往往在这里容易遗漏
L1:
moval,[si]L1:
cld
mov[di],alrepmovsb
incsi;递增方式L2:
movah,4ch
incdiint21h
loopL1
L2:
movah,4ch
int21h
codeends
endstart
实验五冒泡法排序实验
一、实验目的
了解冒泡法原理,学习多重循环的编程方法。
二、实验内容
编写程序,用冒泡法实现将数据段内5,3,3,2,1按照由小到大的顺序重新排列。
三、编程原理
冒泡即将数据两两比较,确保大的数放到右边。
N个数经历N-1次冒泡后可以找到最大的气泡。
其中“两两比较”可以用内循环的结构实现。
经历第一次冒泡后剩下的N-1个数依然是无序的,可以重新重复冒泡过程,第二次只需经历n-2次两两比较即可以找到次大的气泡。
依次类推,第N-1次冒泡后恰好可以排好所有的数。
重复执行的N-1次的冒泡过程可以用外循环结构实现。
由图21可知,内循环次数只要每次和外循环次数相等即可
图20冒泡法原理示意图1
图21冒泡法原理示意图2
四、实验步骤
1)按照本章第2节所述,建立源程序文件*.asm(*为自己输入的文件名)
2)用masm.exe工具队源程序进行编译,得到目标文件*.obj;
3)用link.exe工具对目标文件进行链接,得到可执行文件*.exe;
4)用debug调试环境的-U命令,查看数据段段地址,用-D命令查看运行前存储器内容,用-g运行程序后再用-d查看转码后的内容
5)可以用-T命令单步执行,观察每条指令运行后的寄存器及存储器变化情况,观察冒泡法的原理
图22程序运行前后的冒泡法排序情况
五、参考程序
datasegment
buf1db5,4,3,2,1
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,4;dx中存放外循环次数
L3:
movcx,dx;cx中存放内循环次数,内循环次数等于外循环次数
leasi,buf1
L2:
moval,[si];取出第一个数
cmpal,[si+1];两个数比较
jbL1;如果第一个数比第二个数大,则两两交换
xchgal,[si+1]
mov[si],al
L1:
incsi
loopL2
decdx;外循环次数减1,没减到0则跳转至L3处,重新置
jnzL3;入内循环的计数初值
movah,4ch
int21h
codeends
endstart
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 机械 专业 微机 原理 接口 技术 实验 指导书
![提示](https://static.bingdoc.com/images/bang_tan.gif)