一、实验内容
1.基本要求
熟悉51仿真系统;设计并单步调试,实现将R5中数值(初值为本人学号后两位)拆分成两位独立的数据分别存于R6,R7中;
2.扩展要求
将R6,R7中的被拆出来的一位HEX数据转换为可显示的ASCII编码;
3.思考要求
分析BIN,HEX,BCD, ASCII等不同编码的数学意义及表现形式上的异同。
二、理论分析或算法分析
要求将R5中的数值分开高四位和低四位显示在R6和R7当中,R5的二进制有八位,需要将R5拆成两部分,变成两个独立的数据,分别保存在R6,R7当中,R6保存R5的高四位,R6的高四位为0000,;R7保存R5的低四位,R7的高四位为0000;
实现拆字实验有以下方法:
- XCHD、SWAP使用累加器互换,将7654的值与3210的值进行交换;
- 使用除法,R5除以10H,可以得到商是7654,余数是3210;
- 使用逻辑运算,R5与0F0H 以及R5 与0FH;
R5:7654 3210 27H
R6:xxxx 7564
R7:xxxx 3210
扩展要求:
R5:7654 3210 27H
R6:xxxx 7564 02H
R7:xxxx 3210 07H
对应的数据是3和5,对应的数据取值范围是从0到15,0到9的转化结果是30H到39H,10到15转化的结果需要转化为A到F的转变;
实现的办法:
- 直接进行数学计算;R6和R7大于等于10,就把内容变成+41H-10=55,反之,直接加30H=48;
- 可以使用查表的方法,“0123456789ABCDEF”,movc A,@A+DPTR
三、实现方法
基本要求代码
使用方法一的代码:
使用方法二的代码:
扩展要求代码
四.实验结果分析
基本要求结果
方法一执行过程:
取R5为27H.
单步运行:(R7赋值为00H)
(R0赋值为07H)
执行结果:(R6为02,R7为07)
方法二执行过程:
取R5为27H,
单步执行:
实现结果:(R6中保存2,R7中保存7)
扩展要求结果
出现的问题
(1)表达语法错误:
(2)表达语法错误:
解决方法
1.将A5保存到A当中,将R7保存到B当中;
2.使用寄存器间接寻址;
五、结论
在本次实验中,学会了如何使用medwin编程来实现对字节的拆分,使用了两种算法来将一个字节的数拆分成两个数值,将其高四位存于一个数,将其低四位存于一个数,了解到了medwin的操作以及窗口平铺等功能。
思考题:分析BIN,HEX,BCD, ASCII等不同编码的数学意义及表现形式上的异同。
BIN在数字上表示的是二进制。其数值为0和1,是计算机中的最小的存储单位;而HEX表示的是十六进制。其数值范围为0到9、A到F,便于在计算机中进行计算ASCII是单字节编码系统,定义字符表示;而BCD码是用来解决二进制和十进制之间的一些转换。