一段有趣的 C51 代码~~~

[复制链接]
4035|12
 楼主| ETUAL 发表于 2007-8-16 23:00 | 显示全部楼层 |阅读模式
今天逛blog发现的一段比较有趣的代码,可能比较老的了,分享一下吧~~~hoho~~ 有兴趣的朋友看看~~拍拍砖~~

代码如下,实现的功能是软复位,提示,copy过去keil,编译后运行,然后用反汇编窗口看一下生成的代码是啥,想想就知道的了,哈~~~
我觉得这个程序段很好,很好的诠释了一些基本的概念,但是不是很被人在意的概念。
数组名的本质,函数名的本质,指针的本质,执行子程序的时候PC和堆栈究竟做了些什么工作,函数指针怎么用,怎么用实际的内存地址来做指针变量。数组里面的数据的本质是什么?跟代码有啥不同?(将数组里面的数据当代码用 ....... ) 另外,这里用到的一些基本技巧是 DOS 病毒上面也会用的~~~所以原blog称他为病毒了 ,囧

main()

{

   unsigned char code rst[]={0xe4,0xc0,0xe0,0xc0,0xe0,0x32};  // 复位代码

   (*((void (*)())(rst)))();  // 执行上一行代码,将rst数组当函数调用

}


想了半天想不出来,或者想出来想对对答案的:
http://www.roboticfan.com/blog/user_2005/11202/archives/2007/2007612224342.shtml
(这不是我的blog,只是偶尔逛过看到而已, 所以没有广告成分....)
xwj 发表于 2007-8-16 23:35 | 显示全部楼层

也没什么啊,N年前就倒塌过了

computer00 发表于 2007-8-17 00:17 | 显示全部楼层

理解了微机原理就会自己写了。

ayb_ice 发表于 2007-8-17 07:28 | 显示全部楼层

指令的二进制编码而已....

etual 发表于 2007-8-17 10:41 | 显示全部楼层

无论怎么样

无论怎么样,我都觉得这段简单的代码背后蕴藏的东西是值得学习的。
象我等小鸟们一起共勉吧,HOHO~~~
zjf0000 发表于 2007-8-17 13:04 | 显示全部楼层

晕,有才!

ljmp 0  更直接
hyh0lh 发表于 2007-8-17 18:14 | 显示全部楼层

脑子好使~

fishingok 发表于 2007-8-17 18:54 | 显示全部楼层

re

楼主可以自己编了
kukucat 发表于 2007-8-19 10:24 | 显示全部楼层

不错,又能学到点东东~~~

ntao0227 发表于 2007-8-19 13:19 | 显示全部楼层

我很不明白

这更象是教材上的代码游戏。
gamethink 发表于 2007-8-19 14:13 | 显示全部楼层

有用吗

其实用处不大
dai_weis 发表于 2007-8-19 22:22 | 显示全部楼层

工作中把MCU给复位了?

那我还是采用硬件办法,一个IO通过三极管和一个电容电阻组成的RC或者外接芯片,一条指令,保证复位
yongzai 发表于 2011-5-8 11:48 | 显示全部楼层
看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

192

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部