1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数码转换的理解;
2. 熟悉Keil C51 集成开发环境的 *** 作及程序调试的方法。
2.2.2 实验设备
PC机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或
“TD-PITE 教学实验系统+TD-51 系统平台”
2.2.3 实验内容
1. 将BCD 码整数0~255 存入片内RAM 的20H、21H、22H 中,然后转换为二进制整数
00H~FFH,保存到寄存器R4 中。
2. 将16 位二进制整数存入R3R4 寄存器中,转换为十进制整数,以组合BCD 形式存储在
RAM 的20H、21H、22H 单元中举嫌。
2.2.4 实验步骤
1. BCD 整数转换为二进制整数
实验参考例程:(Asm2-1.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #20H BCD 存放高位地址
MOV R7, #03H BCD 码0--255, 最多3 位
CLR A
MOV R4, A
LP1: MOV A, R4
MOV B, #0AH
MUL AB 乘10
ADD A, @R0 加下一位的值
INC R0 指向下一单元
MOV R4, A 结果存入R4
DJNZ R7, LP1 转换未结束则继续
SJMP MAIN 设置断点, 观察实验结果R4 中的内容
END
实验步骤:
(1)输入程序,检查无误后,编译、链接程序,首先给系统复位,然后点击命令进入
调试状态;
(2)修改20H、21H、22H 单元的内容,如:00H,05H,08H;
(3)在SJMP MAIN 语句行设置断点,然后运行程序;
(4)程序遇到断点后停止程序运行,此时查看寄存器R4 的内容,应为3AH;
(5)重新修改20H、21H、22H 单元的内容,再次运行程序,验证程序的正确性;
(6)实验结束,按复位键将系统复位,点击退出调试状态。
2. 二进制整数转换为十进制整数
图2-2-1 程序流程图
实验参考例程:(Asm2-2.asm)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #22H 转换结果低位地址
MOV A, R0
PUSH ACC ACC 表示累加器A 的直接地址
MOV R7, #03H
CLR A
LP1: MOV @R0, A 结果存储地址清零
DEC R0
DJNZ R7, LP1
POP ACC
MOV R0, A
MOV R7, #16
LP2: PUSH ACC
CLR C
MOV A, R4 R4中为二进制数的低位
RLC A
MOV R4, A
MOV A, R3 R3中为二进制数的高位
RLC A
MOV R3, A
MOV B, #03H
LP3: MOV A, @R0
ADDC A, @R0 执行乘2 *** 作
DA A 十进制调整
MOV @R0, A 结果保存
DEC R0
DJNZ B, LP3
POP ACC
MOV R0, A
DJNZ R7, LP2
LJMP MAIN 设置断点观察结果, 可进行下一次转换
END
实验步骤:
(1)编写实验程序,程序流程图如图2-2-1 所示,编译、链接无误后,进入调试状态;卖答腔
(2)修改R3R4 寄存器,例如A2H、FCH;
(3)在LJMP MAIN 语中衫句行设置断点,然后运行程序;
(4)程序停止后,查看存储器20H 的内容,应为:04H、17H、24H;
(5)反复修改R3R4 寄存器的内容,运行实验程序,验证程序的正确性。
有两个方面的原因引起的。一是硬件问题。硬件问题一般都是内存的地址分配失败了,还有可能是内存坏了或者质量有问题。
二是软件问题。在使用动态分配的应用程序中,有时会有这样的情况出现:程序试突读写一块「应该可用」的内存,但不知为什么,这个预料中可用的光标已经失效了。有可能是「忘记了」向 *** 作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而「没有留意」等等。注销了的内存被系统绝嫌回收,其访问权已经不属于该应用程序,因此读写 *** 作也同样会触发系统的保护机制,企图「违法」的程序唯一的下场就是被 *** 作终止执行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊!像这样的情况都属于程序自身的BUG,你往往可在特定的 *** 作顺序下重现错误。无效光标不一定总是0,因此错误提示中的内存地址也不一定为「0x00000000」,而是其它随机数字。而在内存中有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。这个问题,经常出现windows2000和XP系统上,Windows 2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法 *** 作,系统为保持稳定,就会出现上述情况。
解决方法:
1 内存条坏了 更换内存条
2 双内存不兼容 使用同品牌的内存或只要一条内存
3 内存质量问题 更换内存条
4 散热问题
加强机箱内部的散热
5 内存和主板没插好或其他硬件不兼容 重插内存或换个插槽
6 硬件有问题 更换硬盘
7 驱动问题
重装驱动,如果是新系统,应先安装主板驱动
8 软件损坏 重装软件
9 软件有BUG 打补丁或更新到最新版本
10 软件和系统不兼容
给软件打上补丁或是试试系统的兼容模式
11 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试
12 软件要使用其他相关的软件有问题
重装相关软件,比如播放某一格式的文件时出错,可能是这个文件并则手的解码器有问题
13 病毒问题 杀毒
14 杀毒软件与系统或软件相冲突
由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试
15 系统本身有问题
有时候 *** 作系统本身也会有BUG,要注意安装官方发行的盯升更新程序,象SP的补丁,最好打上.如果还不行,重装系统,或更换其他版本的系统。
内存指令不能written,这是在电脑使用中经常出现的问题,内存是主板上的存储部件,是CPU直接与之沟通,并用其存放当前正在使用的数据和命令的重要部件。当你用键盘或鼠标输入某个命令后,CPU就会解释命令并将指令或程式载入到内存中,这样程序才能够被执行。而一旦内存发生问题了,程序就不能被执行,因此就产生了前面我们提到的“该内存不能为written”错误的警告。当然,出现了“该内存不能为written”的故障也不一定都是内存的问题,电脑中了病毒或木马以及运行的程序本身的Bug也会造成这种现象。很难分清究竟是什么原因造成的,一时半会不好排除,但没关系,按确定、取消,重启,即可。感兴趣的网友可用下述办法试着去解决:1、打开的程序太多,如果同时打开的文档过多或者运行的程序过多,没有足够的内存运行其他程序,要随时关闭不用的程序和窗口。
2、自动运行的程序太多,关闭一些启动程序, 开始-运行-Msconfig---启动 ,除杀毒软件、输入法外一般的程序都可以关掉。
3、物理内存过小,加大物理内存;内存和主板没插好或其他硬件不兼容 重插内存或换个插槽 ;双内存不兼容 ,要使用同品牌的内存或只要一条内存 ;劣质内存条或内存条坏了 更换漏简内存条;合理设置虚拟内存。
4、市电电压过大的波动,或者PC机上使用劣质电源,都会给内存带来损害,更换功率大、质量好的电源。
5、PC机箱内充满灰尘,或者PC工作环境相对潮湿,也会造成运行不正常。及时除尘。
6 、CPU、显卡散热问题 ,改善散热 。
7、硬盘有问题 ,扫描修复或更换硬盘 。
8 、驱动问题 重装更新驱动 。
9、非法 *** 作,系统无法执行。
10、 软件损坏 重装软件 ;软件有BUG 打补丁或更新到最新版本 ; 软件和系统不兼容 给软件打上返胡裤补丁或是试试系统的兼容模式 ; 软件和软件之间有冲突 如果最近安装了什么新软件,卸载了试试 。
11、 系统本身有问题 有时候 *** 作系统本身也会有BUG,要注意安装官方发行的更新程序最好及时补上,必要时重装系统。
12、 病毒问题 杀毒 ;杀毒软件与系统或软件相冲突 由于杀毒软件是进入底层监控系统的,可能与一些软件相冲突,卸载试试 。
13、运行执行regedit进入注册表, 在进入:HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ShellExecuteHooks下,这个键值下面应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 如果有其他的我们可以将其它的全部删除,只做返保留这个默认键值。
14、试用命令排除
开始-运行- 输入cmd-- 回车,在命令提示符下输入下面命令
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
怕输入错误,可以复制这条指令,然后在命令提示符后击鼠标右键,打“粘贴”,回车,耐心等待,直到屏幕滚动停止为止。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)