搜索
bottom↓
回复: 12

请教大家:程序这样跑飞的情况有没有可能存在

[复制链接]

出0入0汤圆

发表于 2015-11-1 10:55:50 | 显示全部楼层 |阅读模式
本帖最后由 abc0010 于 2015-11-1 11:02 编辑

现在假设这款单片机的每条指令都是单字节的,指令用bit表示

ROM 地址     指令
0000H         10001111b
0001H         10001001b
0002H         10001101b
0003H         10010001b
0004H         .....
0005H         ......


正常情况下程序是这样运行的,10001111b→10001001b→10001101b→10010001b
现在的疑问是,PC指针有没有可能不指向字节,而是指向bit串中的某一位,比如内容没变,后移4bit,执行顺序变成 11111000b→11011000b→11011001b→00011000b

字节错位的情况STM8是存在的,但是不知道bit错位的情况存不存在,向大家求教,谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2015-11-1 10:57:55 | 显示全部楼层
标题写了个错别字怎么改,应该是“请教大家:程序这样跑飞的情况有没有可能存在”

出0入0汤圆

发表于 2015-11-1 11:02:21 | 显示全部楼层
没有可能吧。存储器最少都是字节访问的。。。

出0入0汤圆

 楼主| 发表于 2015-11-1 11:07:19 | 显示全部楼层
zhiwei 发表于 2015-11-1 11:02
没有可能吧。存储器最少都是字节访问的。。。

谢谢回复 ,有没有相关的文档支持呢,字节错位的情况,我后来在STM8的文档里看到的,bit的情况想想也没有,但是很多文档说的“程序处于未知状态”,如果这种情况不存在的话,那程序的状态是可以确定的,似乎没有必须强调“程序的未知状态”,有点不理解

出0入0汤圆

发表于 2015-11-1 11:52:52 | 显示全部楼层
单片机在任何情况下都会出现任何意想不到的错误~~~~~~~~~

出0入0汤圆

 楼主| 发表于 2015-11-1 14:47:19 | 显示全部楼层
本帖最后由 abc0010 于 2015-11-1 14:49 编辑
lxa0 发表于 2015-11-1 11:52
单片机在任何情况下都会出现任何意想不到的错误~~~~~~~~~


恩, 也有很多状态是可以检测然后防止的, 比如说寄存器出错, 内存出错, 堆栈错误都是可以纠正的,晶振停止的硬件问题也是有方法检测和纠正的。

如果bit错位的情况不存在的, 那么“单字节指令”的单片机可否说是最安全的,因为哪怕是字节错位,下个程序周期自动就纠正了

出0入85汤圆

发表于 2015-11-1 14:53:28 | 显示全部楼层
在8bit总线复杂指令集MCU中,非单字节指令多,可能存在这种可能,即把操作码和操作数搞乱,也就是防止反汇编中的花指令

出0入0汤圆

发表于 2015-11-1 15:35:24 | 显示全部楼层
pc都是指向Byte地址而不是bit位,pc出错只能飞到错误的byte绝不会bit错位。再说存储器结构是按byte访问而不是按bit访问,虽然的确是有指令修改bit位但也是拆分步骤的,只能按byte访问

出0入0汤圆

发表于 2015-11-1 15:36:55 | 显示全部楼层
abc0010 发表于 2015-11-1 14:47
恩, 也有很多状态是可以检测然后防止的, 比如说寄存器出错, 内存出错, 堆栈错误都是可以纠正的,晶振停止 ...

可以跑到不是cpu指令的位置啊,跑到操作数那去了,这是一种情况的跑飞

出0入0汤圆

发表于 2015-11-1 16:39:02 | 显示全部楼层
不是都是字节访问的吗?

出0入0汤圆

 楼主| 发表于 2015-11-1 18:57:12 | 显示全部楼层
Earthman 发表于 2015-11-1 15:36
可以跑到不是cpu指令的位置啊,跑到操作数那去了,这是一种情况的跑飞

恩,说的非常有道理,像STM8的PC指针确实是有机会跑到EPROM或RAM里的,还有有可能跑到寄存器里。

但是在51这类的单片机里,PC指针应该是只能在ROM里的

出0入0汤圆

 楼主| 发表于 2015-11-1 18:59:08 | 显示全部楼层
yick 发表于 2015-11-1 16:39
不是都是字节访问的吗?

不是很清楚哦,所以请教大家了。论坛有做过存储器的大神,应该能解答我们这个疑问

出0入0汤圆

 楼主| 发表于 2015-11-1 19:02:54 | 显示全部楼层
本帖最后由 abc0010 于 2015-11-1 19:04 编辑
marshallemon 发表于 2015-11-1 14:53
在8bit总线复杂指令集MCU中,非单字节指令多,可能存在这种可能,即把操作码和操作数搞乱,也就是防止反汇 ...


是的,8位单片机多字节指令的确实多,上次有坛友说STM8的外接晶振经常死机,后来专门试了下,确实死了,可能是这些多字节的指令的一个特色,我猜的。不过今天想到的这个问题,是在使用一款单字节指令的单片机的时候突然想到的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 10:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表