武汉大学
微机接口实验报告
目录
目录... 2
实验一 数据传送... 3
实验二 算术逻辑运算及移位操作... 8
实验三 算术逻辑运算及移位操作... 13
实验四 字符及字符串的输入和输出... 15
《微机原理与接口技术》软件编程题目... 18
实验一 数据传送
一、 实验目的
1. 熟悉8086指令系统的数据传送指令及8086的寻址方式。
2. 利用EMU调试工具来调试汇编语言程序。
二、 实验预习要求
1. 复习8086指令系统中的数据传送类指令和8086的寻址方式。
2. 预习EMU的使用方法:
3. 按照题目要求预先编写好实验中的程序段。
三、 实验任务
1.通过下述程序段的输入和执行来熟悉EMU的使用,并通过显示器屏幕观察程序的执行情况。练习程序段如下:
MOV BL,08H
MOV CL,BL
MOV AX,03FFH
MOV BX,AX
MOV DS:[0020H],BX
2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下:
MOV AX,0102H
MOV BX,0304H
MOV CX,0506H
MOV DX,0708H
PUSH AX
PUSH BX
PUSH CX
PUSH DX
出栈段程序:
POP CX
POP DX
POP BX
POP AX
RET
3. 指出下列指令的错误并加以改正,上机验证之。
(1) MOV [BX],[SI]
存储器操作数不可直接传递,改为MOV [BX], SI
(2) MOV AH,BX
操作数字长不相同,改为MOV AH,BH
(3) MOV AX,[SI][DI]
基址?渲费爸肥保?辉市砹奖渲芳拇嫫髯楹显谝黄穑?奈?/p>
MOV AX,[BX][DI]
(4) MOV BYTE PTR[BX],2000H
字长不同,改为MOV WORD PTR[BX],2000H
(5) MOV CS,AX
段寄存器CS内容不通过MOV指令改写
(6) MOV DS,2000H
不能用立即数直接给段寄存器赋值,改为
MOV AX, 2000H
MOV DS, AX
5. 将DS:1000H字节存储单元中的内容送到DS:2020H单元中存放。试分别用8086的直接寻址、寄存器间接寻址、变址寻址、寄存器相对寻址传送指令编写程序段,并上机验证结果。
(1)直接寻址
MOV AX , [1000H]
MOV [2010H],AX
(2)寄存器间接寻址
MOV BX,1000H
MOV AX, [ BX]
MOV [2020H], AX
(3)变址寻址
MOV SI,1000H
MOV AX, [SI]
MOV [2020H], AX
(4)寄存器相对寻址
MOV AX,[1000H]
MOV BX,1000H
MOV 1020H[BX] ,AX
6. 设AX寄存器中的内容为1111H,BX寄存器中的内容为2222H,DS:0010H单元中的内容为3333H。将AX寄存器中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容与DS:0010H单元中的内容进行交换。试编写程序段,并上机验证结果。
MOV AX,1111H
MOV BX,2222H
MOV [0010H],3333H
MOV DX,BX
MOV BX,AX
MOV AX,DX
MOV DX,BX
MOV BX, [0010H]
MOV [0010H],DX
7. 设(DS)=1000H,(ES)=2000H,有关存储器的内容如图1.5所示。要求将DS段的内容传送到AX寄存器,ES段的内容传送到BX寄存器,试编写程序段。
MOV [1000H],0EEFFH
MOV ES:[2000H],0CCDDH
MOV AX,[1000H]
MOV BX,ES:[2000H]
四、实验报告要求
小结EMU的使用方法:
1.首先选择是建立.COM 文件还是.EXE文件。这取决于是要编写运行一个程序段还是可执行程序。本节均是验证程序段。故采用.COM文件。
实验二 算术逻辑运算及移位操作
一、 实验目的
1.熟悉算术逻辑运算指令和移位指令的功能。
2.了解标志寄存器各标志位的意义和指令执行对它的影响。
二、 实验预习要求
1.复习8086指令系统中的算术逻辑类指令和移位指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、 实验任务
1. 实验程序段及结果表格如表1.2:
![](https://upload2.fanwen118.com/wk001/4086757/4086757_table_1.png)
2.用BX寄存器作为地址指针,从BX所指的内存单元(0010H)开始连续存入三个无符号数(10H、04H、30H),接着计算内存单元中的这三个数之和,和放在0013H单元中,再求出这三个数之积,积放0014单元中。写出完成此功能的程序段并上机验证结果。
程序如下:
MOV BX,0010H
MOV [BX],10H
MOV [0001H][BX],04H
MOV [0002H][BX],30H
MOV AL,[BX]
ADD AL,[0001H][BX]
ADD AL,[0002H][BX]
MOV [0003H][BX],AL
MOV AL,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的内容。
程序如下:
MOV AL,15H
MOV DX,2
MUL DX
MOV BL,15H
MUL BL
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
MOV AX,[1000H]
MOV CL,2
SAR AX,CL
DIV [1002H]
MOV [1003H],AL
RET
5.下面的程序段用来清除数据段中从偏移地址0010H开始的12个字存储单元的内容(即将零送到这些存储单元中去)。
(1) 将第4条比较指令语句填写完整(划线处)。
MOV SI,0010H
NEXT: MOV WORD PTR[SI],0
ADD SI,2
CMP SI,(填写18)
JNE NEXT
HLT
(2) 假定要按高地址到低地址的顺序进行清除操作(高地址从0020H开始),则上述程序段应如何修改?
程序如下:
MOV SI,0020H
NEXT: MOV WORD PTR[SI],0
SUB SI,2
CMP SI,18
JNE NEXT
HLT
6. 输入并运行表1.3中的程序段,把结果填入表右边的空格中,并分析结果,说明本程序段的功能是什么。
![](https://upload2.fanwen118.com/wk001/4086757/4086757_table_2.png)
功能是将第一个数除以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
MOV DI,1000H
MOV AX,55AAH
MOV CX,10H
REP STOSW
(1) 从DS:1000H开始的16个字单元的内容是什么?
(2) (DI)= ?(CX)= ?,并解释其原因。
2. 在上题的基础上,再输入以下程序段并运行之,回答后面的问题。
MOV SI,1000H
MOV DI,2000H
MOV CX,20H
REP MOVSB
(1) 从DS:2000H开始的16个字单元的内容是什么?
(2) (SI)= ?(DI)= ?(CX)= ?,并分析之。
3. 从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si siht”),试编写程序段并上机验证之。
#MAKE_COM#
ORG 100H
JMP START
STR DB 'THIS IS A STRING',13,10
START: LEA SI, STR
MOV DI,1000H
MOV CX,10H
CLD
REP MOVSB
MOV CX,10H
MOV SI,1000H
MOV DI,200FH
AGAIN: CLD
LODSB
STD
STOSB
LOOP AGAIN
四、 实验报告要求
1. 简要说明执行串操作指令之前应初始化哪些寄存器和标志位。
应预设源串指针DS,SI,目标串指针ES,DI,重复次数CX,及操作方向DF
2. 总结串操作指令的用途及使用方法。
实验四 字符及字符串的输入和输出
一、 实验目的
1.熟悉如何进行字符及字符串的输入输出。
2.掌握简单的DOS系统功能调用。
二、 实验预习要求
1.复习系统功能调用的1、2、9、10号功能。
2.按照题目要求预先编写好实验中的程序段。
三、 实验任务
1. 要在屏幕上显示一个字符串“Hello, world”,写出该字符串变量的定义语句和显示这个字符串的程序段。上机验证之。
DSEG SEGMENT
STR DB ‘Hello,world’, 0DH,0AH,’$’
DSEG ENDS
CSEG SEGMENT
ASSUME CS: CSEG,DS: DSEG
START: MOV AX,DSEG
MOV DS,AX
LEA DX,STR
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
2. 按6行×16列的格式顺序显示ASCII码为20H到7FH之间的所有字符,即每16个字符为一行,共6行。每行中相邻的两个字符之间用空格字符分隔开。试编写程序段并上机运行验证。提示:程序段包括两层循环,内循环次数为16,每次内循环显示一个字符和一个空格字符;外循环次数为6,每个外循环显示一行字符并显示一个回车符(0DH)和一个换行符(0AH)。
程序如下:
#MAKE_EXE#
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE
START:
MOV AH, 02H
MOV DL, 20H
MOV BL, 6
E:
MOV CX, 16
L:
INT 21H
PUSH DX
MOV AH, 02H
MOV DL, 0
INT 21H
MOV AH, 02H
MOV DL, 0
INT 21H
POP DX
INC DL
LOOP L
PUSH DX
MOV AH, 02H
MOV DL, 0DH
INT 21H
MOV AH, 02H
MOV DL, 0AH
INT 21H
POP DX
DEC BL
CMP BL, 0
JNE AGAIN
JE E
EXIT:
MOV AX, 4CH
INT 21H
MAIN ENDP
CODE ENDS
END START
四、 实验报告要求
1. 1、2、9、10号功能的输入输出参数有哪些?分别放在什么寄存器中?
2. 总结一下,如何实现字符及字符串的输入输出。
字符串输入:MOV AH, 0AH ;功能号0AH
LEA DX, <字符串缓冲区首地址>; 字符串在内存中的存放地址(由DS:DX定)
INT 21H
字符串输出:显示字符串(功能号=9)
MOV AH, 9
LEA DX, <字符串> ; DS:DX待输出字符串的偏移地址
INT 21H
注意:被显示的字符串必须以’$’结束。
《微机原理与接口技术》软件编程题目
(0)、设MEM1中有一个任意字符串STRING,以ASCII码’$’结尾,假定MEM1中的字符串不会导致数据段的溢出,编写一个程序,在STRING中找到第一次出现“OK”这个字母序列的首地址,如果没有这个序列,则直接返回0,并在显示器(LED)上显示。
程序及结果如下所示:
#MAKE_EXE#
DATA SEGMENT
STRING DB 'DGDFEROKGVDF',0DH,0AH,'$'
STR DB 'OK'0DH,0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START :
LEA DX,STR
MOV SI,DX
INC SI
LEA DI , STRING
CLD MOV AL,[SI]
SCAN: REPNE SCASB
JZ MATCH NO: MOV DL,'0'
JMP DESPLY ; MATCH:
REPZ CMPSB
POP DI
POP SI
JZ FOUND
JNZ NO
JMP SCAN
DESPLY:
MOV AH , 02H INT 21H
FOUND: DEC DI
HLT
CODE ENDS
END START