自动化微机实验指导手册.docx
- 文档编号:27836118
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:18
- 大小:143.22KB
自动化微机实验指导手册.docx
《自动化微机实验指导手册.docx》由会员分享,可在线阅读,更多相关《自动化微机实验指导手册.docx(18页珍藏版)》请在冰豆网上搜索。
自动化微机实验指导手册
实验一熟悉汇编语言程序设计的实验环境
一、实验目的
1、熟悉MASM5.0汇编环境和汇编过程。
2、熟练掌握汇编程序从编写到执行的过程。
二、实验内容及步骤
对汇编程序设计而言,目前绝大多数应用是基于MASM的宏汇编语言。
通常,汇编语言系统软件包括:
(1)汇编语言编译器:
将汇编语言源程序(.ASM文件)翻译为二进制目标代码(.OBJ文件)。
具有这个功能的编译器有MASM.EXE、ML.EXE和CV.EXE等。
本书使用较为普遍的MASM5.0版本。
(2)连接器:
连接二进制目标代码和库函数代码生成可执行程序(.EXE文件),常用的程序为LINK.EXE。
(3)动态调试器:
对可执行程序(.EXE)进行静态了解和动态执行调试,具有这个功能的软件有DEBUG.EXE、TR.EXE等。
本书使用较为普遍的DEBUG.EXE。
注意:
上述软件要在PC机的DOS系统下运行。
在WINDOWS操作系统上,提供了模拟的DOS操作系统环境。
(一)了解实验环境
1、下载MASM文件夹到学生机上的e:
\。
2、进入DOS环境中。
单击电脑桌面左下角的“开始”→点击“运行”→输入“cmd”,如下图1-1和图1-2所示。
图1-1打开“运行”对话框图1-2显示“运行”对话框
单击“确定”后,进入DOS方式,如图1-3所示。
图1-3
3、改变路径,进入到汇编编译器MASM所在的路径,如图1-4
图1-4
4、查看汇编编译器MASM所在文件夹masm,是否具备所需的汇编语言系统软件,如图1-5。
图1-5
列出的当前目录中必须有MASM.EXE和LINK.EXE文件,否则汇编语言实验将无法进行。
随着用户上机操作的进行,在该文件夹中将不断增加新的文件。
(二)熟悉汇编语言程序设计的上机过程
汇编语言程序设计的上机操作流程如下:
(1)建立与编辑汇编语言源程序。
方式一:
使用DOS系统中的EDIT.EXE程序来编辑源程序。
(由于EDIT.EXE是常驻内存的程序,因此,并不需要出现在文件夹masm中。
)
E:
\masm>editsy1.asm
将出现对话框,如图1-6所示。
图1-6
编辑完源程序,如图1-7所示。
File/save,保存好汇编语言程序源文件。
图1-7
方式二:
采用“记事本”建立并编辑汇编语言源程序(扩展名为.asm)。
源程序如下:
CODESEGMENT
ASSUMECS:
CODE
MOVAX,0123H
MOVBX,4567H
MOVAH,4CH
INT21H
CODEENDS
END
编辑完成后,将文件保存为:
文件名sy1.asm。
注:
分号后的文字是程序的注释,可以不输入;为了使得汇编语句更整齐,可用Tab键设置间隔,如输入MOV按Tab输入AX…)
(2)汇编(即编译)。
使用宏汇编程序MASM对.asm文件进行汇编,即对.asm文件进行语法检查,在没有语法错误的情况下,可将.asm文件汇编成.obj文件。
E:
\masm>masmsy1.asm
(注:
事先应将源程序文件sy1.asm保存在文件夹E:
\masm中。
)
汇编完成后,窗口中若出现图1-8的提示,表明源程序中没有错误(0warningerrors和0severeerrors),可继续往下一步。
否则,要回到源程序sy1.asm中改正错误,再重新汇编,直至出现图1-8所示的提示信息为止。
图1-8
(3)连接。
通过连接程序LINK.EXE,将.obj文件连接成在可执行文件.exe。
如图1-9所示。
图1-9
上图中出现的warning是nostacksegment,可忽略。
如果连接不成功,必须重新编辑、汇编和连接,直至生成可执行文件。
(4)运行与调试。
上述编译、连接的过程只是保证了没有语法上的错误或较为简单的错误,并不能保证程序在逻辑或算法上没有出错,所以,必须对程序的执行过程进行调试、跟踪分析,才能保证所设计程序的正确性。
由于汇编语言指令系统涉及的输入输出较复杂,因此,通常程序运行的结果往往存放在内存单元或寄存器中,因此,初学汇编语言程序设计时,要了解程序运行结果,就必须熟练掌握直接深入内存的调试程序DEBUG.EXE。
在完成步骤
(1)~(3)后,如果sy1.exe的运行结果达不到要求或出现异常,则要修改源程序,再重新进行编辑、编译、连接和运行调试(即步骤
(1)~(4))。
用调试程序(Debug)来对可执行文件进行调试、跟踪一个程序的运行过程:
①进入Debug.EXE调试程序。
如图1-10。
图1-10
进入Debug调试环境后,出现提示符“-”,此时,可键入所需的DEBUG命令。
②DEBUG命令。
-用u命令查看一下Debug加载入内存的程序。
-用t命令单步跟踪程序执行的情况。
-用r命令查看寄存器的内容。
-用d命令查看内存单元的内容。
-用g命令执行程序或程序连续运行,直至程序正常终止,出现“Programterminatednormally”提示。
-退出Debug程序用q命令。
-对于某些中断程序、子程序,没有必要进行单步跟踪时,用p命令,直接执行完该中断程序或子程序,如遇到DOS功能调用指令int21h,用P命令后,在执行完int21h指令,会返回到int21h的下一条指令上。
实验步骤:
用u命令,查看一下Debug加载入内存的程序,如图1-11。
显然,本实验中的sy1中的汇编语句在前面四行中。
图1-11
用一次r命令,观察在程序执行前寄存器AX、BX的内容,记录其值。
如图1-12所示。
图1-12
用t命令单步执行sy1中的每条语句,观察寄存器AX、BX的变化,记录其值,直至出现语句int21h,用p命令。
如图1-13所示。
图1-13
根据实验结果,AX=0123H,BX=4567H,与实验设想的结果相同,故本程序sy1.asm实现了实验要求。
三、思考题
1.汇编程序从写出到执行的过程包括哪些步骤?
2.已知用Debug.EXE将sy1.EXE程序加载入内存后,CX中存放的是程序的长度,则本实验中的程序长度为字节。
3.已知DS中存放着sy1.EXE程序所在内存区的段地址,从DS:
0起始的内存区,前256个字节存放的是PSP(程序段前缀,DOS用来和程序进行通信),从256字节后的空间才开始存放程序。
所以,本实验中存放程序的起始物理地址为:
,可用段地址和偏移地址表示为:
。
提示:
存放程序的起始内存单元物理地址:
PA=(DS)×16+256
=(DS)×16+0100H
=(DS)×24+28
=[(DS)+24]×24+0000H
=(CS)×24+0000H
4.将下面的程序保存为sy2.asm文件,并将其生成可执行文件sy2.exe。
CODESEGMENT
ASSUMECS:
CODE
MOVAX,2000H
MOVSS,AX
MOVSP,0
ADDSP,10
POPAX
POPBX
PUSHAX
PUSHBX
POPAX
POPBX
MOVAH,4CH
INT21H
CODEENDS
END
用DEBUG.EXE调试sy2.exe,写出每一步执行后,相关寄存器的内容。
实验二寻址方式与基本指令的使用
一、实验目的
熟悉8086寻址方式及基本指令的功能。
二、实验内容
1.读懂源程序,将其生成可执行文件sy3.exe。
DATASEGMENT
NUMDB82H,68H,88H
SUMDB?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVBX,OFFSETNUM
MOVAL,[BX]
INCBX
ADDAL,[BX]
INCBX
ADDAL,[BX]
MOVSUM,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
2.回答下列问题。
(1)程序加载后,寄存器CS的内容为H,代码段第一条可执行指令“MOVAX,DATA”对应的机器码是H,它是一条个字节的指令,该指令的源操作数DATA的寻址方式是。
(2)执行完MOVDS,AX指令后,数据段寄存器DS的内容为H,源程序数据段中定义的数据82H、68H、88H对应的存储单元的偏移地址分别是:
H、H、H。
(3)程序中的第一条ADDAL,[BX]指令中,源操作数所在存储单元逻辑地址为(DS):
(BX)=,执行该指令后(AL)=H,CF=H,OF=,ZF=,SF=,AF=,PF=。
(4)执行完第二条ADDAL,[BX]指令后,(AL)=H,CF=,OF=,ZF=,SF=,AF=,PF=。
(5)指令MOVSUM,AL中,目的操作数的寻址方式为,该指令执行后,SUM单元中的值为H。
三、上机自测题
1.指出下列指令错误的原因,上机运行,观察汇编程序MASM给出的出错信息,
(1)MOVBP,BL
(2)MOV[BX],[BP]
(3)MOV[BX],20H(4)INC[SI]
(5)ADDAX,[SI+DI](6)SHLAX,3
(7)PUSH2000H(8)POPAL
(9)MOVCS,AX(10)MOVDS,1000H
附:
状态标志位在DEBUG.EXE中如何显示1、0的状态
标志名
置位(为1)
复位(为0)
溢出Overflow(是/否)
OV
NV
方向Direction(减量/增量)
DN
UP
中断Interrupt(允许/屏蔽)
EI
DI
符号Sign(负/正)
NG
PL
零Zero(是/否)
ZR
NZ
辅助进位AuxiliaryCarry(是/否)
AC
NA
奇偶Parity(偶/奇)
PE
PO
进位Carry(是/否)
CY
NC
实验三多字节二进制加、减法编程实验
一、实验目的
1、熟悉汇编语言二进制多字节加法基本指令的使用方法;
2、熟悉汇编语言二进制多字节减法基本指令的使用方法;
3、掌握汇编语言编程的一般结构。
二、实验内容及步骤
1、将两个双字长度的数分别相加并将结果存放在result中。
分析:
(1)存放多精度数
多精度数的存放有两种方式,高地址优先(如1234H,5678H表示56781234H)和低地址优先(如1234H,5678H表示12345678H),具体的存放方式由用户根据自己的习惯选择。
在这里虑我们使用了高地址优先的存储方式。
(2)分析程序设计
由于汇编语言的ADD,ADC,SUB,SBB指令都不支持两个操作数都是存储器操作数的情况,因此将一个操作数的低字放到寄存器AX中,高字放到寄存器DX中分别完成高字部分的加法,高字部分的带进位加法。
(3)具体程序设计
datasegment
data1dw5311h,8a13h;表示数据8a135311h
data2dw4783h,9526h;表示数据95264783h
resultdw2dup(?
);存放多字节加法的结果
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movax,data1
movdx,data1+2
addax,data2;低字部分相加
adcdx,data2+2;高字部分带进位相加
movresult,ax;存放低字部分相加结果
movresult+2,dx;存放高字部分相加结果
codeends
endstart
2、编写程序,实现长度为2字的两个多精度数相减。
利用DEBUG程序进行调试,查看数据区的加减法结果是否正确。
3、编写程序,实现一个长度为3字的多精度数和一个长度为2字的多精度数相加减。
利用DEBUG程序进行调试,查看数据区的加减法结果是否正确。
三、思考题
在例子中没有考虑最高位溢出的问题,若考虑到最高位可能发生溢出,该如何修改程序。
实验四十进制数的BCD加、减法编程实验
一、实验目的
1、熟悉BCD码的基本知识。
2、熟悉汇编语言BCD码多字节加减法基本指令的使用方法。
3、掌握BCD码调整指令的使用方法。
二、实验内容及步骤
1、分别计算长度为2字节的两个压缩BCD码相加和长度为2字节的两个非压缩BCD码相加。
分析:
(1)分析程序设计
这里我们仍然采用高地址优先的方式来存放多精度数,高位相加的时候采用带进位相加。
只是由于BCD码的加法是十进制数相加,所以每次相加之后都要进行调整。
压缩的BCD码加法采用指令DAA进行调整,非压缩的BCD码采用指令AAA进行调整。
(2)具体程序设计
datasegment
bcd1db34h,18h;压缩的BCD码表示十进制数1834
bcd2db89h,27h;压缩的BCD码表示十进制数2789
result1dB2dup(?
);存放压缩的BCD码相加的结果
bcd3db05h,02h;非压缩的BCD码表示十进制数25
bcd4db08h,03h;非压缩的BCD码表示十进制数38
result2dB2dup(?
);存放非压缩的BCD码相加的结果
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
;压缩的BCD码相加计算
moval,bcd1
addal,bcd2
daa
movresult1,al
moval,bcd1+1
adcal,bcd2+1
daa
movresult1+1,al
;非压缩的BCD码相加计算
moval,bcd3
addal,bcd4
aaa
movresult2,al
moval,bcd3+1
adcal,bcd4+1
aaa
movresult2+1,al
codeends
endstart
2、编写程序,分别实现长度为2字节的两个压缩BCD码相减与长度为2字节的两个非压缩BCD码相减。
利用DEBUG程序进行调试,查看数据区的减法结果是否正确。
3、编写程序,实现长度分别为3字节、2字节的两个压缩BCD码相减与长度分别为3字节、2字节的非压缩BCD码相减。
利用DEBUG程序进行调试,查看数据区的减法结果是否正确。
三、思考题
在例子中没有考虑最高位溢出的问题,若考虑到最高位可能发生溢出,该如何修改程序。
实验五逻辑运算编程实验
一、实验目的
1、了解汇编语言的逻辑运算指令;
2、熟悉汇编语言中逻辑运算指令的使用方法;
3、掌握利用汇编语言逻辑运算指令实现程序设计的方法。
二、实验内容及步骤
1、实验内容
(1)用A命令编写程序片段,实现逻辑非,逻辑与,逻辑或,逻辑异或,逻辑测试运算;
提示:
进入DEBUG调试环境,用A命令输入程序片段如图7-1所示。
图7-1
(2)得到实际的结果,用T或P命令查看结果正确性。
图7-1是实现的是逻辑非的运算验证。
然后,用P或T命令查看寄存器AX内容的变化,如图7-2所示。
图7-2
(3)实验内容
进行逻辑测试运算中,注意状态和标志位的变化,并记录。
逻辑非:
NOT14H
逻辑与:
32HAND0FH
逻辑或:
32HOR0FH
逻辑异或:
32HXOR0FH
逻辑测试:
测试AX的值是否为0
三、思考题
1、对寄存器清0,有几种方式?
怎样用逻辑运算命令来实现?
2、逻辑测试命令前后,状态和标志有什么变化?
为什么?
3、检测一操作数与另一确定的操作数是否相等,用逻辑指令如何实现?
实验六移位操作编程实验
一、实验目的
1、了解汇编语言移位操作指令;
2、熟悉汇编语言逻辑移位指令的使用方法;
3、掌握利用汇编语言逻辑移位运算指令实现程序设计的方法。
四、实验内容及步骤
1、实验内容
(1)用A命令写程序片段,在寄存器AX中存入一个数,要求对其用移位命令进行乘8,除4的操作。
(2)编写程序片段,实现如下的计算A=10*B,要求用到移位命令,不用乘法计算。
(3)编写指令序列把由DX和AX组成的32位二进制数进行算术左移。
2、实验步骤
(1)利用在DEBUG调试中的A命令输入对应程序片段;
(2)对写好的程序片段,利用DEBUG的T、P命令或G命令查看数据区,核对实验结果。
实验提示:
(1)移位运算中,左移一位相当于乘2操作,右移一位相当于除2操作;对寄存器AX赋值为4,然后先执行左移1位操作,再执行右移1位操作,用P命令观察寄存器AX的变化,如图8-1所示。
图8-1
(2)算术移位适合于有符号数的运算,逻辑移位适用于无符号数的运算。
(3)32位的移位注意CF的变化。
三、思考题
1、执行以下命令,观察AX是否有变化:
(1)SAL AX,1
SAR AX,1
(2)SAR AX,1
SAL AX,1
2、移位指令如何影响标志位CF、OF?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动化 微机 实验 指导 手册