微机实验报告模版
实验名称 实验一 Keil 的使用与汇编语言上机操作 指导教师 陶雄飞 专业班级 电子 1301 班 姓名 关曜东 学号 U201313816 联系电话 *** 一、任务要求 1.掌握 Keil 环境的使用 1)字节拆分、合并:调试 1.1.asm 程序,观察相关寄存器和单元的内容。
2)数据块填充:调试 1.2.asm 程序,观察相关寄存器和单元的内容。
2.编写两个十六位数的加法程序。
有两个十六位无符号数,分别存放在从 20H 和 30H 开始的数据区中,低八位先存,高八位在后,和存于 R3(高八位)和 R4(低八位),进位位存于 R2。
二、设计思路 1、任务 1 的代码已给出,所做的是运行程序,观察寄存器和相关单元的内容,用截图来反应结果。
(1)
(2)
2、任务 2 1)、第一个十六位数低八位存在 20H,高八位存在 21H,第二个十六位数低八位存在 30H,高八位存在 31H 2)、将 20H 中的数移到 A 寄存器,与 30H 中的数相加,结果存在 R4 3)、将 21H 的数移到 A 寄存器,与 31H 的数以及 PSW 中的进位 C 相加,结果存在 R3 4)、将寄存器 A 置零,用 ADDC 指令令其与 00H 相加,结果存于 R2,即为进位 三、资源分配 任务 2 中,两个十六位无符号数,分别存放在从 20H 和 30H 开始的数据区中;和存于 R3(高 4 八位)和 R4(低八位),进位位存于 R2 中 四、流程图
赋值于指定数据区低四位求和,结果存于R4高四位与低四位进位求和,结果存于R3将进位存于R2结束开始
五、源代码(含文件头说明、语句行注释)任务 1:
字节拆分、合并程序 File name: e421.asm Description: 1 字节 BCD 码转换为 2 字节 ASCII 2 字节 ASCII 码转化为 1 字节 BCD 码 Date: Designed by: Source used: 30H: BCD data 31H, 32H:ASCII data 31H, 32H->33H ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP, #40H;赋堆栈指针 MOV 30H, #49H;30H 单元赋值 MOV R0, #32H;R0 指针赋值 MOV @R0, #0;32H 单元清零 MOV A, 30H XCHD A, @R0;拆分字节 ORL 32H, #30H;转换为 ASCII SWAP A ORL A, #30H;转换为 ASCII MOV 31H, A;结果存于 31H 单元 MOV A, 31H;从 31H 单元取值 ANL A, #0FH;转换为 BCD SWAP A MOV 33H, A;结果存于 33H 单元 MOV A, 32H;从 32H 单元取值 ANL A, #0FH;转换为 BCD ORL 33H, A;合并字节 HERE: SJMP HERE;踏步 END 数据块填充程序:将片外 RAM 7000H-70FFH 单元按一定规律填充 File name: fill.asm Date: 2011.8.20 Designed by: CDH
Source used: R0: 计数器 DPTR: 片外数据指针 ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP,#40H FILL: CLR A;A 寄存器清零 MOV R0, #00H;设循环计数器 MOV DPTR, #7000H;设数据指针 FILL1: MOVX @DPTR, A;传送到片外 RAM INC A;A 内容加 1 INC DPTR;修改数据指针 INC R0;修改循环计数器 CJNE R0, #00H, FILL1;判断是否结束 HERE: SJMP HERE;原地踏步 END 任务 2:
/*设两个无符号 16 位数为 22A4H 和 EFE7H*/ MAIN: MOV 20H,#0A4H MOV 21H,#22H MOV 30H,#0E7H MOV 31H,#0EFH;存入数据 MOV A,20H;低四位存入寄存器 ADD A,30H;低四位相加 MOV R4,A;将低四位结果存入 R4 MOV A,21H;高四位存入寄存器 ADDC A,31H;高四位相加(包括第四位相加得到的进位)MOV R3,A;高四位结果存入 R3 CLR A;寄存器清零 ADDC A,#00H;获得进位 MOV R2,A;将进位存入 R2
END 六、程序测试方法与结果 任务 1 中结果已于截图中;任务 2 依据程序运算,结果正确,更换数据后,结果仍然正确。
思考题 怎样查看工作寄存器、SFR、片内 RAM、片外 RAM 及程序代码空间内容?Disassembly 窗口有何作用? 答:工作寄存器与 SFR 的内容在调试阶段的“Register 窗口”查看,外围设备的内容在“Peripherals 项目”中查看,也可以通过相对应的固定地址在“Memory 1 窗口”中查看。Disassembly 窗口用于设置断点。
字节拆分、合并还有哪些方法,举一例说明。
答:还可以用如下方法进行拆分(合并方法相同):
…… MOV 30H, #49H MOV A, 30H XCHD A, #03H SWAP A MOV 31H, A MOV A, 30H XCHD A, #30H MOV 32H, A …… 若按递减 1 规律填充数据块,应如何修改程序? 答:将指令“INC A”改为“DEC A”。进行减 1 操作。
若从 7010H 单元开始,连续填充 20 个字节,应该如何修改程序?
答:FILL 与 FILL1 模块改为如下代码:
FILL: CLR A MOV R0, #00H MOV DPTR, #7010H FILL1: MOVX @DPTR, A INC A INC DPTR INC R0 CJNE R0, #14H, FILL1 若完成双字节 BCD 码加法,应如何修改程序? 答:在进行加法操作后,加上一条指令“DA A”,进行转换。
其它说明:
1.4 标题:黑体,小四号 2.正文:宋体,五号,1.5 倍行距 3.流程图使用 SmartDraw7 2 或 Visio 软件绘制 本人承诺: 本报告内容真实,无伪造数据,无抄袭他人成果。本人完全了解学校相关规定,如若违反,愿意承担其后果。
签字:
关曜东 2015 年 10 月 7 日
4.不要加封面
