微机实验讲议_16开_201310
更新时间:2023-04-20 04:51:01 阅读量: 实用文档 文档下载
- 微机实验心得体会推荐度:
- 相关推荐
微机原理与接口技术实验
关旭箭编
暨南大学信息科学技术学院
电子工程系
2013 年8 月
目录
8086汇编语言上机调试方法………………………………………………( 2 )
软件部分实验
实验一两个多位十进制数相加的实验………………………………… ( 11 ) 实验二两个数相乘的实验………………………………………………( 15 )实验三二进制到BCD转换………………………………………………( 18 ) 实验四二进制到ASCII码转换…………………………………………( 20 ) 实验五内存块移动………………………………………………………( 22 ) 实验六数据排序…………………………………………………………( 24 ) 实验七字符匹配程序……………………………………………………( 26 ) 实验八字符串匹配程序…………………………………………………( 30 )实验九从键盘输入数据并显示的程序…………………………………( 34 )实验十字符和数据的显示程序…………………………………………( 38 )实验十一将键盘输入的小写字母转换成大写字母的程序………………( 42 )
硬件部分实验
实验一8255可编程输入、输出接口实验……………………………( 46 )
实验二并行口控制的模拟交通灯实验………………………………( 51 )实验三点阵LED的显示实验…………………………………………( 56 ) 实验四 8253可编程计数器实验………………………………………( 61 ) 实验五8253可编程定时器实验………………………………………( 66 ) 实验六电子琴(8253定时器应用实验)……………………………( 68 ) 实验七六位七段数码管显示…………………………………………( 73 ) 实验八键盘扫描及显示的接口实验…………………………………( 79 )
实验九8259可编程外部中断实验……………………………………( 86 )
实验十 A/D0809模数转换实验………………………………………( 92 )
实验十一 D/A0832数模转换实验……………………………………( 100 )
实验十二 8251A串行通讯实验…………………………………………( 105 ) 实验十三温度测量实验………………………………………………( 113 )
附录1 ASCⅡ编码表……………………………………………( 118 )附录2 DOS功能调用( INT 21 )一览表………………………( 120 )附录3动态调试程序DEBUG .EXE的使用…………………( 125 )
附录4 实验系统的地址空间分配表………………………………( 136 ) 附录5 W A VE 仿真器开发环境简介………………………………( 137 )
- 1 -
8086汇编语言上机调试方法
1、用鼠标点击“网上邻居”;
2、输入ftp://202.116.6.197
3、将服务器上“MASM”文件夹中的所有内容复制到E:盘上。
4、进入E:\MASM\UltraEdit v9.00c\文件夹创建“Uedit32.exe”文件的快捷方式,将
“Uedit32快捷方式”复制到桌面。
5、双击“Uedit32快捷方式”启动文本编辑软件UltraEdit,输入汇编语言程序( 注
意:在最后一行的“END”输入完后要按一次回车键,保存源文件的扩展名一定要是ASM 如: EXAMPLE.ASM )。
6、“编译”、“连接”和“调试程序”程序。
方法一、
①、双击“Uedit32快捷方式”启动文本编辑软件UltraEdit,打开\MASM\MASM1文件
夹中的“Example.ASM”源程序。
②、移动光标到UltraEdit工具栏的“高级(A)”处,点击里面的“编译”,若无错误
则继续点击“连接”和“调试程序”,“调试程序”是直接进入“DEBUG”中
对汇编语言程序进行调试。
方法二、
①、用 Windows XP 的命令行方式(在运行程序栏中输入command 并按回车键)
进入\MASM\MASM1文件夹,文件夹中有 MASM.EXE, LINK.EXE , DEBUG.EXE 3个主要的工具软件和Example.ASM 源程序。
②、在 DOS 提示符下进行汇编、连接、动态调试等操作。
例如: 对源文件 EXAMPLE.ASM 进行的操作
E:\MASM\MASM1\MASM EXAMPLE; 汇编源程序操作
E:\MASM\MASM1\LINK EXAMPLE; 连接并生成扩展名为 .EXE 的可执行文件
E:\MASM\MASM1\DEBUG EXAMPLE.EXE 对可执行文件进行调试
7、“DEBUG”中常用的调试命令
U - 反汇编命令
用法: -U 代码段地址:起始偏移地址如:-U CS:100
D - 显示内存中的数据命令
用法: -D 数据段地址:存放数据的偏移地址如:-D DS:00 20
T - 单步执行程序命令
用法: -T 要执行的指令条数如:-T 3
G - 连续执行程序命令
用法: -G=代码段地址:指令的起始偏移地址指令的结束偏移地址
如: -G=CS:100 106
注意: 结束地址一定要是操作码的所在地址
R - 查看和修改寄存器数据命令
用法: -R 回车如:-R AX
F - 对内存单元填充数据命令
用法: -F 数据段地址:偏移首地址偏移未地址填入的数据
如: -F DS:100 120 ff
Q - 退出”DEBUG“应用程序命令
- 2 -
8、应用例子及操作步骤
题目要求:将 AX 中的十六进制数拆为三个 BCD 码, 并存入 Result_1, Result_2, Result_3 的三个单元中。
⑴、输入源程序
DATA SEGMENT ; 数据段
RESULT_1 DB 1
RESULT_2 DB 1
RESULT_3 DB 1
DATA ENDS
STACK SEGMENT STACK ; 堆栈段
STA DB 64 DUP(0)
STACK_TOP DB 0
STACK ENDS
CODE SEGMENT ; 代码段
ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK
START:
; 程序开头必须要有的五条指令
MOV AX, DATA
MOV DS, AX ; 设置数据段
MOV AX, STACK
MOV SS, AX ; 设置堆栈段
LEA SP, STACK_TOP ; 设置栈顶指针
; 程序的中间部分
MOV AX, 587
MOV CL, 100
DIV CL
MOV RESULT_1, AL ; 除以 100, 得百位数
MOV AL, AH
MOV AH, 0
MOV CL, 10
DIV CL
MOV RESULT_2, AL ; 余数除以 10, 得十位数
MOV RESULT_3, AH ; 余数为个位数
; 程序结束必须要有的两条指令
MOV AX,4C00H ;
INT 21H ;
CODE ENDS
END START ; 最后一行要按回车键
- 3 -
⑵、对源程序进行汇编产生OBJ文件
E:\MASM\MASM1>MASM EXAMPLE; ( 输入MASM EXAMPLE; 并按回车键 ) Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
51514 + 408822 Bytes symbol space free
0 Warning Errors
0 Severe Errors
⑶、对目标文件进行连接产生EXE文件
E:\MASM\MASM1>LINK EXAMPLE; ( 输入 LINK EXAMPLE; 并按回车键 )
Microsoft (R) 8086 Object Linker Version 3.05
Copyright (C) Microsoft Corp 1983, 1984, 1985. All rights reserved.
⑷、对可执行文件进行调试
E:\MASM\MASM1>DEBUG EXAMPLE.EXE ( 输入DEBUG EXAMPLE.EXE 并按回车键 ) -U CS:0000 用反汇编命令“U 代码段地址:起始偏移地址”显示出程序的表示符
-U 0 2C ( 按回车键 )
160D:0000 B80716 MOV AX,1607 ; 程序的起始地址是 160DH:0000H 160D:0003 8ED8 MOV DS,AX
160D:0005 B80816 MOV AX,1608
160D:0008 8ED0 MOV SS,AX
160D:000A 8D264100 LEA SP,[0041]
160D:000E B84B02 MOV AX,024B
160D:0011 B164 MOV CL,64
160D:0013 F6F1 DIV CL
160D:0015 A20000 MOV [0000],AL
160D:0018 8AC4 MOV AL,AH
160D:001A B400 MOV AH,00
160D:001C B10A MOV CL,0A
160D:001E F6F1 DIV CL
160D:0020 A20100 MOV [0001],AL
160D:0023 88260200 MOV [0002],AH
160D:0027 B8004C MOV AX,4C00 ; 程序的结束地址是 160DH:0027H 160D:002A CD21 INT 21
160D:002C 9E SAHF
-
执行程序前观察内存中的数据
-D DS:0000 ; 用显示内存中的数据命令 D显示内存中的数据。
命令格式:“D 数据段地址:存放数据的偏移地址”
-D DS:0 30 ( 按回车键 )
15F7:0000 CD 20 00 A0 00 9A F0 FE-1D F0 3C 03 5D 0F 77 03 . ........<.].w. 15F7:0010 5D 0F 04 03 5D 0F 4C 0F-01 01 01 00 02 FF FF FF ]...].L......... 15F7:0020 FF FF FF FF FF FF FF FF-FF FF FF FF E6 15 4C 01 ..............L. -
- 4 -
连续执行程序
-G=CS:0000 0027 ;( 按回车键 )
命令格式:G=代码段地址:指令的起始偏移地址指令的结束偏移地址
AX=0708 BX=0000 CX=000A DX=0000 SP=0041 BP=0000 SI=0000 DI=0000
DS=1607 ES=15F7 SS=1608 CS=160D IP=0027 NV UP EI PL NZ NA PO NC
160D:0027 B8004C MOV AX,4C00
-
执行完程序后,显示出CPU 内的各寄存中的数据和当前的标志状态(见表1-1所示)
执行程序后观察内存中的数据(结果)
-D DS:0000 ; 用显示内存中的数据命令“ D 数据段地址:存放数据的偏移地址”显示内存中的数据
-D DS:00 ; 观察内存中的数据
1607:0000 05 08 07 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 1607:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 1607:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -
-R IP 修改IP寄存器中的数据
IP 0027 显示修改前的数据
:00 输入修改的数据
-
-T ;单步执行程序命令(执行一条指令)
AX=1607 BX=0000 CX=000A DX=0000 SP=0041 BP=0000 SI=0000 DI=0000
DS=1607 ES=15F7 SS=1608 CS=160D IP=0003 NV UP EI PL NZ NA PO NC
160D:0003 8ED8 MOV DS,AX
-
- 5 -
-T3 ;执行3条指令
AX=1607 BX=0000 CX=000A DX=0000 SP=0041 BP=0000 SI=0000 DI=0000
DS=1607 ES=15F7 SS=1608 CS=160D IP=0005 NV UP EI PL NZ NA PO NC
160D:0005 B80816 MOV AX,1608
AX=1608 BX=0000 CX=000A DX=0000 SP=0041 BP=0000 SI=0000 DI=0000
DS=1607 ES=15F7 SS=1608 CS=160D IP=0008 NV UP EI PL NZ NA PO NC
160D:0008 8ED0 MOV SS,AX
AX=1608 BX=0000 CX=000A DX=0000 SP=0041 BP=0000 SI=0000 DI=0000
DS=1607 ES=15F7 SS=1608 CS=160D IP=000E NV UP EI PL NZ NA PO NC
160D:000E B84B02 MOV AX,024B
-
-R ; 查看寄存器数据命令
AX=0302 BX=0000 CX=000A DX=0000 SP=0014 BP=0000 SI=0000 DI=0000
DS=1607 ES=1607 SS=12A0 CS=129D IP=0028 NV UP EI PL NZ NA PO NC
129D:0028 B8004C MOV AX,4C00
-R AX ;查看和修改寄存器数据命令
AX 0302
:FFFF
-R ; 查看寄存器数据命令
AX=FFFF BX=0000 CX=000A DX=0000 SP=0014 BP=0000 SI=0000 DI=0000
DS=1607 ES=1607 SS=12A0 CS=129D IP=0028 NV UP EI PL NZ NA PO NC
129D:0028 B8004C MOV AX,4C00
-
-F 数据段地址:偏移首地址偏移未地址填入的数据
-F DS:0000 0030 DF ; 对内存单元填充数据
-D DS:00 ; 观察内存中的数据
1607:0000 DF DF DF DF DF DF DF DF-DF DF DF DF DF DF DF DF ................ 1607:0010 DF DF DF DF DF DF DF DF-DF DF DF DF DF DF DF DF ................ 1607:0020 DF DF DF DF DF DF DF DF-DF DF DF DF DF DF DF DF ................ 1607:0030 DF A2 01 00 88 26 02 00-B8 00 4C CD 21 0B A1 D6 .....&....L.!... 1607:0040 5D 48 50 E8 85 0C 83 C4-02 C6 14 00 00 00 28 00 ]HP...........(. -
-Q ; 退出”DEBUG“应用程序命令
- 6 -
方法三、使用用 Emu8086 仿真软件来调试 8086汇编语言程序
⑴、进入E:\MASM\Emu8086-v4.05\文件夹点击8086仿真安装文件“Emu8086-v4.05_Setup.exe ”安装Emu8086
⑵、第一次运行Emu8086 要进行注册,点击“please enter the registration
key”项
⑶、按下图进行注册
⑷、点击“NEW”创建新文件
- 7 -
⑸、选择扩展名为“EXE”点击“OK”
⑹、点击“Open”打开文件,装入Example.asm源程序;并点击
“Compile 对Example.asm源程序选择进行编译;
- 8 -
⑺、点击“保存”保存可执行文件;
⑻、点击“RUN”进入程序的仿真运行
- 9 -
⑼、进入调试汇编语言程序阶段
- 10 -
软件实验
实验一、两个多位十进制数相加的实验
1、实验目的
(1).学习数据传送和算术运算指令的用法。
(2).熟悉在PC机上建立、汇编、链接、调试和运行8088汇编语言程序的过程。
2、实验内容
将两个多位十进制数相加。要求被加数均以ASCII码形式各自顺序存放在以DA TAl和DA TA2为首的5个内存单元中(低位在前),结果送回DA TAl处。
3
显示被加数和加数
被加数和加数以ASCII码表示的数字串形式
转化为由十六进制表示的数字串形式
计数值5一> CX
清除最低位进位
执行ADC带进位相加
AAA调整
结果送被加数区
调整偏移量
CX-1=
十六进制的结果转化为ASCII 码表示的数字串
显示结果
结束
- 11 -
4、参考程序:
DATA SEGMENT ;数据段
DATA1 DB 33H,39H,31H,37H,34H ; 47193的ASCII码作为被加数DATA2 DB 36H,35H,30H,38H,32H ; 28056的ASCII码作为加数DATA ENDS
STACK SEGMENT STACK ;堆栈段
STA DB 64 DUP(0)
SP_TOP DB 0
STACK ENDS
CODE SEGMENT ; 代码段
ASSUME CS:CODE, DS:DATA, ES:DATA, SS:STACK START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SP, SP_TOP
MOV SI,OFFSET DATA1 ; 送被加数地址
MOV BX,05 ; 送显示字符的个数
CALL DISPL ; 显示被加数
CALL CRLF ; 回车、换行
MOV SI,OFFSET DATA2 ; 送加数地址
MOV BX,05 ; 送显示字符的个数
CALL DISPL ;显示加数
CALL CRLF ; 回车、换行
MOV SI,OFFSET DATA1 ; 送被加数地址
MOV DI,OFFSET DATA2 ; 送加数地址
CALL ADDA ; 加法运算
MOV SI,OFFSET DATA1 ; 送结果地址
MOV BX,05 ; 显示加数
CALL DISPL ; 显示结果
CALL CRLF
MOV AX,4C00H
INT 21H ; 主程序结束
- 12 -
CRLF PROC NEAR ;回车、换行于功能
MOV DL,0DH ;回车(0DH为回车的ASCII 码)
MOV AH,02H ; 送DOS 的中断调用功能号
INT 21H ; DOS 的中断调用
MOV DL,0AH ;换行(0AH为换行的ASCII 码)
MOV AH,02H ; 送DOS 的中断调用功能号
INT 21H ; DOS 的中断调用
RET
CRLF ENDP
DISPL PROC NEAR ; 显示子程序
DSL: MOV AH,02 ; 送显示功能号
MOV DL,[SI+BX-1] ; 显示字符串中一字符(ASCII 码)
INT 21H ; DOS INT 21 功能调用
DEC BX ;修改偏移量
JNZ DSL
RET
DISPL ENDP
ADDA PROC NEAR
MOV BX,05
ADI: SUB BYTE PTR[SI+BX-1],30H
SUB BYTE PTR[DI+BX-1],30H
DEC BX ;将ASCII码表示的数转化为十六进制数
JNZ ADI
PUSH SI
PUSH DI
MOV CX,05 ;包括进位,共5位
CLC ;清进位位
AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL ;带进位相加
AAA ;非组合BCD码的加法调整
MOV [SI],AL ;结果送被加数区
INC SI
INC DI ;指向下一位
- 13 -
LOOP AD2 ;循环
POP DI
POP SI
MOV BX,05H
AD3: ADD BYTE PTR [SI+BX-1],30H
ADD BYTE PTR [DI+BX-1],30H
DEC BX ;十六进制的数转化为ASCII码表示的数
JNZ AD3
RET
ADDA ENDP
CODE ENDS
END START
- 14 -
实验二、两个数相乘的实验
1、实验目的
掌握乘法指令和循环指令的用法
2、实验内容
实现十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,乘积在屏幕上显示出来。
3、程序框图
乘数->BL
BL中数由ASII码转化为十六进制数
SI指向被乘数
DI指向存储结果区域(预清0)
计数值5->CX
取被乘数[SI]单元与BL 相乘
AAM调整
结果低位与前次计算的进位[DI]相加
AAA调整
结果[DI]
DI+1指向下一单元
本次计算的进位-> [DI]
CX-l=
- 15 -
显示结果
结束
4、参考程序:
DATA SEGMENT
DATA1 DB 32H, 39H, 30H, 35H, 34H
DATA2 DB 33H
RESULT DB 6 DUP(00H)
DATA ENDS
STACK SEGMENT STACK
STA DB 30 DUP(0)
TOP DB 0
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATA START: MOV AX, DATA
MOV DS, AX
MOV AX, STACK
MOV SS, AX
LEA SP, TOP
MOV SI, OFFSET DATA2
MOV BL,[SI] ; 乘数送BL
AND BL,0FH ;屏蔽高4位,ASCII码转十六进制数
MOV SI,OFFSET DATA1
MOV DI,OFFSET RESULT
MOV CX,05
LOOPl: MOV AL,[SI]
AND AL,0FH ;取被乘数将ASCII码转十六进制数
INC SI ; 指向被乘数的下一单元
MUL BL ;相乘
AAM ;AAM调整
- 16 -
ADD AL,[DI] ;结果低位与前次计算的进位加
AAA ;AAA调整
MOV [DI],AL
INC DI ;结果送存到下一单元
MOV [DI], AH
LOOP LOOPl ;计算结果高位进位送存
MOV CX,06
MOV SI,OFFSET RESULT + 5
DISPL: MOV AH,02
MOV DL,[SI]
ADD DL,30H
INT 21H
DEC SI
LOOP DISPL ;显示结果
MOV AX,4C00H
INT 21H ;结束
CODE ENDS
END START
- 17 -
实验三、二进制到BCD转换
1、实验要求:
将给定的一个二进制数,转换成二十进制(BCD)码
2、实验目的:
(1)掌握简单的数值转换算法
(2)基本了解数值的各种表达方法
3、实验说明:
计算机中的数值有各种表达方式,这是计算机的基础。掌握各种数制之间的转换是一种基本功。有兴趣的同学可以试试将BCD转换成二进制码。
4、程序框图:
给出要转换的二进制数
将数除以100,得百位数
保存百位数
将余数再除以10,得十位数
保存十位数
余数为个位数,将其保存
结束
- 18 -
5、参考程序:
; 将 AX 拆为三个 BCD 码, 并存入 Result 开始的叁个单元
DATA SEGMENT ; 数据段
RESULT_1 DB 1
RESULT_2 DB 1
RESULT_3 DB 1
DATA ENDS
STACK SEGMENT STACK ; 堆栈段
STA DB 64 DUP(0)
STACK_TOP DB 0
STACK ENDS
CODE SEGMENT ; 代码段
ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK START: MOV AX, DATA
MOV DS, AX ; 设置数据段
MOV AX, STACK
MOV SS, AX ; 设置堆栈段
LEA SP, STACK_TOP ; 设置栈顶指针
MOV AX, 123
MOV CL, 100
DIV CL
MOV RESULT_1, AL ; 除以 100, 得百位数
MOV AL, AH
MOV AH, 0
MOV CL, 10
DIV CL
MOV RESULT_2, AL ; 余数除以 10, 得十位数
MOV RESULT_3, AH ; 余数为个位数
MOV AX,4C00H ; INT 21H ; CODE ENDS
END START ; 最后一行要按回车键
- 19 -
实验四、二进制到ASCII码转换
1、实验要求:
给出一个BCD数,将其转换成ASCII值。
2、实验目的:
(1)了解BCD值和ASCII值的区别
(2)了解如何将BCD值转换成ASCII值
(3)了解如何查表进行数值转换及快速计算。
3、实验说明:
此实验主要让学生了解数值的BCD码和ASCII码的区别,利用查表功能可能快速地进行数值转换。进一步了解数值的各种表达方式。
4、程序框图:
给出要转换数BCD码
取出BCD码高四位
查表得到ASCII码
保存高位ASCII码
取出BCD码低四位
查表得到ASCII码
保存低位ASCII码
结束
- 20 -
正在阅读:
微机实验讲议_16开_20131004-20
关于粤西扶贫问题探讨09-27
医院感染控制风险评估计划03-26
相声的传承和内幕故事05-20
2019-2025年中国陶瓷纤维棉市场竞争力分析及投资战略预测研发报告10-01
泄密堪舆水法11-14
浅谈创业指导 如何开一家户外用品店06-01
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 微机
- 实验
- 201310
- 16
- 供应链融资模式优化方案
- 鄂教版2022届九年级上学期语文期末质量检测试卷B卷
- 2012年执业药师中药学专业知识(二)预测试题与答案
- 小学语文成语大全及解释
- 英文软件需求分析文档模板SRS4.0
- 中国人民大学出版社(第四版)高等数学一第10章课后习题详解
- 学生会干事个人工作总结优秀范文
- 群文阅读(蒋军晶)(新)
- 浙江省温州市2022届高三英语6月适应性考试(三模)试题
- 惠安县2022-2022学年高一“达利杯”学科素养竞赛 英语试题(含答
- 【学生会文体部工作计划】文体部工作计划三篇
- 小学生作文《我的爸爸》五篇(400字)
- 《九江》剧本(上期)
- 老干部走访慰问情况报告
- 2022-2025年中国冶金设备制造产业市场分析及发展前景研究报告
- 八年级数学上册《15.3分式方程》教学反思
- 2022年湖南师范大学教育科学学院884心理学研究方法之实验心理学
- 竞男女孩就是这么牛
- 太原五中2022-2022学年高一物理上学期期中试题新人教版
- 《不一样的电路连接》教案