微机接口实验报告.docx
《微机接口实验报告.docx》由会员分享,可在线阅读,更多相关《微机接口实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
微机接口实验报告
武汉大学
微机接口实验报告
实验一数据传送
一、实验目的
1.熟悉8086指令系统的数据传送指令及8086的寻址方式。
2.利用EMU调试工具来调试汇编语言程序。
二、实验预习要求
1.复习8086指令系统中的数据传送类指令和8086的寻址方式。
2.预习EMU的使用方法:
3.按照题目要求预先编写好实验中的程序段。
三、实验任务
1.通过下述程序段的输入和执行来熟悉EMU的使用,并通过显示器屏幕观察程序的执行情况。
练习程序段如下:
MOVBL,08H
MOVCL,BL
MOVAX,03FFH
MOVBX,AX
MOVDS:
[0020H],BX
2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。
压栈程序段如下:
MOVAX,0102H
MOVBX,0304H
MOVCX,0506H
MOVDX,0708H
PUSHAX
PUSHBX
PUSHCX
PUSHDX
出栈段程序:
POPCX
POPDX
POPBX
POPAX
RET
3.指出下列指令的错误并加以改正,上机验证之。
(1)MOV[BX],[SI]
存储器操作数不可直接传递,改为MOV[BX],SI
(2)MOVAH,BX
操作数字长不相同,改为MOVAH,BH
(3)MOVAX,[SI][DI]
基址変址寻址时,不允许两变址寄存器组合在一起,改为
MOVAX,[BX][DI]
(4)MOVBYTEPTR[BX],2000H
字长不同,改为MOVWORDPTR[BX],2000H
(5)MOVCS,AX
段寄存器CS内容不通过MOV指令改写
(6)MOVDS,2000H
不能用立即数直接给段寄存器赋值,改为
MOVAX,2000H
MOVDS,AX
5.将DS:
1000H字节存储单元中的内容送到DS:
2020H单元中存放。
试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。
(1)直接寻址
MOVAX,[1000H]
MOV[2010H],AX
(2)寄存器间接寻址
MOVBX,1000H
MOVAX,[BX]
MOV[2020H],AX
(3)变址寻址
MOVSI,1000H
MOVAX,[SI]
MOV[2020H],AX
(4)寄存器相对寻址
MOVAX,[1000H]
MOVBX,1000H
MOV1020H[BX],AX
6.设AX寄存器中的内容为1111H,BX寄存器中的内容为2222H,DS:
0010H单元中的内容为3333H。
将AX寄存器中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容与DS:
0010H单元中的内容进行交换。
试编写程序段,并上机验证结果。
MOVAX,1111H
MOVBX,2222H
MOV[0010H],3333H
MOVDX,BX
MOVBX,AX
MOVAX,DX
MOVDX,BX
MOVBX,[0010H]
MOV[0010H],DX
7.设(DS)=1000H,(ES)=2000H,有关存储器的内容如图1.5所示。
要求将DS段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。
MOV[1000H],0EEFFH
MOVES:
[2000H],0CCDDH
MOVAX,[1000H]
MOVBX,ES:
[2000H]
四、实验报告要求
小结EMU的使用方法:
1.首先选择是建立.COM文件还是.EXE文件。
这取决于是要编写运行一个程序段还是可执行程序。
本节均是验证程序段。
故采用.COM文件。
实验二算术逻辑运算及移位操作
一、实验目的
1.熟悉算术逻辑运算指令和移位指令的功能。
2.了解标志寄存器各标志位的意义和指令执行对它的影响。
二、实验预习要求
1.复习8086指令系统中的算术逻辑类指令和移位指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验任务
1.实验程序段及结果表格如表1.2:
标志位
CF
ZF
SF
OF
PF
AF
程序段1:
MOVAX,1018H
MOVSI,230AH
ADDAX,SI
ADDAL,30H
MOVDX,3FFH
ADDAX,BX
MOV[20H],1000H
ADD[20H],AX
PUSHAX
POPBX
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
程序段2:
MOVAX,0A0AH
ADDAX,0FFFFH
MOVCX,0FF00H
ADCAX,CX
SUBAX,AX
INCAX
ORCX,0FFH
ANDCX,0F0FH
MOV[10H],CX
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
1
1
1
0
0
0
1
1
1
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
1
0
0
0
0
0
1
0
程序段3:
MOVBL,25H
MOVBYTEPTR[10H],4
MOVAL,[10H]
MULBL
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
程序段4:
MOVWORDPTR[10H],80H
MOVBL,4
MOVAX,[10H]
DIVBL
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
程序段5:
MOVAX,0
DECAX
ADDAX,3FFFH
ADDAX,AX
NOTAX
SUBAX,3
ORAX,0FBFDH
ANDAX,0AFCFH
SHLAX,1
RCLAX,1
0
0
0
0
0
0
0
0
1
0
1
1
1
0
0
0
0
1
0
0
0
0
1
1
0
0
0
0
1
1
0
0
1
0
1
0
0
0
1
0
0
0
0
0
1
0
0
0
1
0
0
1
1
0
1
1
2.用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。
写出完成此功能的程序段并上机验证结果。
程序如下:
MOVBX,0010H
MOV[BX],10H
MOV[0001H][BX],04H
MOV[0002H][BX],30H
MOVAL,[BX]
ADDAL,[0001H][BX]
ADDAL,[0002H][BX]
MOV[0003H][BX],AL
MOVAL,BL
MUL[0001H][BX]
MUL[0002H][BX]
MOV[0004H][BX],AX
3.写出完成下述功能的程序段。
上机验证你写出的程序段,程序运行的最后结果(AX)
(1)传送15H到AL寄存器;
(2)再将AL的内容乘以2;
(3)接着传送15H到BL寄存器;
(4)最后把AL的内容乘以BL的内容。
程序如下:
MOVAL,15H
MOVDX,2
MULDX
MOVBL,15H
MULBL
RET
4.写出完成下述功能的程序段。
上机验证你写出的程序段,程序运行后的商=?
(1)传送数据2058H到DS:
1000H单元中,数据12H到DS:
1002H单元中;
(2)把DS:
1000H单元中的数据传送到AX寄存器;
(3)把AX寄存器的内容算术右移二位;
(4)再把AX寄存器的内容除以DS:
1002H字节单元中的数;
(5)最后把商存入字节单元DS:
1003H中。
程序如下:
MOV[1000H],2058H
MOV[1002H],12H
MOVAX,[1000H]
MOVCL,2
SARAX,CL
DIV[1002H]
MOV[1003H],AL
RET
5.下面的程序段用来清除数据段中从偏移地址0010H开始的12个字存储单元的内容(即将零送到这些存储单元中去)。
(1)将第4条比较指令语句填写完整(划线处)。
MOVSI,0010H
NEXT:
MOVWORDPTR[SI],0
ADDSI,2
CMPSI,(填写18)
JNENEXT
HLT
(2)假定要按高地址到低地址的顺序进行清除操作(高地址从0020H开始),则上述程序段应如何修改?
程序如下:
MOVSI,0020H
NEXT:
MOVWORDPTR[SI],0
SUBSI,2
CMPSI,18
JNENEXT
HLT
6.输入并运行表1.3中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。
程序段
字单元(1A00H)=
字单元(1A02H)=
MOV[1A00H],0AA55H
MOV[1A02H],2AD5H
SHLWORDPTR[1A02H],1
CMP[1A00H],8000H
CMC
RCLWORDPTR[1A02H],1
RCLWORDPTR[1A00H],1
55
00
55
D5
55
AA
55
AA
55
AA
55
55
AA
55
功能是将第一个数除以2,第二个数乘以4
四、实验报告要求
1.简要说明ADD、SUB、AND、OR指令对标志位的影响。
ADD:
对6个状态标志位都会影响;SUB:
影响与ADD指令影响完成相同;
AND:
影响6个标志位,并使CF=OF=0;OR:
影响6个标志位,并使CF=OF=0
2.简要说明一般移位指令与循环移位指令之间的主要区别。
一般移位:
将操作数右移m位,同时每移一位,左边的符号位保持不变,移出的最低位进入标志位CF。
对于有符号数和无符号数而言,算术右移相当于除以2.;
循环移位:
循环移位指令的操作数形式与移位指令相同,如果仅移动一次,可以用1表示;如果需要移位多次,则需用CL寄存器表示移位次数。
实验三算术逻辑运算及移位操作
一、实验目的
1.熟悉串操作指令的功能。
2.了解串操作指令的使用方法。
二、实验预习要求
1.复习8086指令系统中的串操作类指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验任务
1.输入以下程序段并运行之,回答后面的问题。
CLD
MOVDI,1000H
MOVAX,55AAH
MOVCX,10H
REPSTOSW
(1)从DS:
1000H开始的16个字单元的内容是什么?
(2)(DI)=?
(CX)=?
,并解释其原因。
2.在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOVSI,1000H
MOVDI,2000H
MOVCX,20H
REPMOVSB
(1)从DS:
2000H开始的16个字单元的内容是什么?
(2)(SI)=?
(DI)=?
(CX)=?
,并分析之。
3.从DS:
1000H开始存放有一个字符串”Thisisastring”,要求把这个字符串从后往前传送到DS:
2000H开始的内存区域中(即传送结束后,从DS:
2000H开始的内存单元的内容为”gnirtsasisiht”),试编写程序段并上机验证之。
#MAKE_COM#
ORG100H
JMPSTART
STRDB'THISISASTRING',13,10
START:
LEASI,STR
MOVDI,1000H
MOVCX,10H
CLD
REPMOVSB
MOVCX,10H
MOVSI,1000H
MOVDI,200FH
AGAIN:
CLD
LODSB
STD
STOSB
LOOPAGAIN
四、实验报告要求
1.简要说明执行串操作指令之前应初始化哪些寄存器和标志位。
应预设源串指针DS,SI,目标串指针ES,DI,重复次数CX,及操作方向DF
2.总结串操作指令的用途及使用方法。
实验四字符及字符串的输入和输出
一、实验目的
1.熟悉如何进行字符及字符串的输入输出。
2.掌握简单的DOS系统功能调用。
二、实验预习要求
1.复习系统功能调用的1、2、9、10号功能。
2.按照题目要求预先编写好实验中的程序段。
三、实验任务
1.要在屏幕上显示一个字符串“Hello,world”,写出该字符串变量的定义语句和显示这个字符串的程序段。
上机验证之。
DSEGSEGMENT
STRDB‘Hello,world’,0DH,0AH,’$’
DSEGENDS
CSEGSEGMENT
ASSUMECS:
CSEG,DS:
DSEG
START:
MOVAX,DSEG
MOVDS,AX
LEADX,STR
MOVAH,09H
INT21H
MOVAH,4CH
INT21H
CSEGENDS
ENDSTART
2.按6行×16列的格式顺序显示ASCII码为20H到7FH之间的所有字符,即每16个字符为一行,共6行。
每行中相邻的两个字符之间用空格字符分隔开。
试编写程序段并上机运行验证。
提示:
程序段包括两层循环,内循环次数为16,每次内循环显示一个字符和一个空格字符;外循环次数为6,每个外循环显示一行字符并显示一个回车符(0DH)和一个换行符(0AH)。
程序如下:
#MAKE_EXE#
CODESEGMENT
MAINPROCFAR
ASSUMECS:
CODE
START:
MOVAH,02H
MOVDL,20H
MOVBL,6
E:
MOVCX,16
L:
INT21H
PUSHDX
MOVAH,02H
MOVDL,0
INT21H
MOVAH,02H
MOVDL,0
INT21H
POPDX
INCDL
LOOPL
PUSHDX
MOVAH,02H
MOVDL,0DH
INT21H
MOVAH,02H
MOVDL,0AH
INT21H
POPDX
DECBL
CMPBL,0
JNEAGAIN
JEE
EXIT:
MOVAX,4CH
INT21H
MAINENDP
CODEENDS
ENDSTART
四、实验报告要求
1.1、2、9、10号功能的输入输出参数有哪些?
分别放在什么寄存器中?
2.总结一下,如何实现字符及字符串的输入输出。
字符串输入:
MOVAH,0AH;功能号0AH
LEADX,<字符串缓冲区首地址>;字符串在内存中的存放地址(由DS:
DX定)
INT21H
字符串输出:
显示字符串(功能号=9)
MOVAH,9
LEADX,<字符串>;DS:
DX待输出字符串的偏移地址
INT21H
注意:
被显示的字符串必须以’$’结束。
《微机原理与接口技术》软件编程题目
(0)、设MEM1中有一个任意字符串STRING,以ASCII码’$’结尾,假定MEM1中的字符串不会导致数据段的溢出,编写一个程序,在STRING中找到第一次出现“OK”这个字母序列的首地址,如果没有这个序列,则直接返回0,并在显示器(LED)上显示。
程序及结果如下所示:
#MAKE_EXE#
DATASEGMENT
STRINGDB'DGDFEROKGVDF',0DH,0AH,'$'
STRDB'OK'0DH,0AH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
LEADX,STR
MOVSI,DX
INCSI
LEADI,STRING
CLDMOVAL,[SI]
SCAN:
REPNESCASB
JZMATCHNO:
MOVDL,'0'
JMPDESPLY;MATCH:
REPZCMPSB
POPDI
POPSI
JZFOUND
JNZNO
JMPSCAN
DESPLY:
MOVAH,02HINT21H
FOUND:
DECDI
HLT
CODEENDS
ENDSTART