打印
[AVR单片机]

ROM的知识求教!!

[复制链接]
2508|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Tomzong|  楼主 | 2007-2-1 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
AA_55| | 2007-2-1 17:16 | 只看该作者

这是因为指令代码自身所带的立即数长度决定的

例如51的短跳转指令ACALL格式是两个字节(16个位),第一个字节中有5位是用来表示指令编码的(00001B),那么留给跳转目的地址的自身立即数只有11位,能表达的地址范围就是2048byte,也就是2k了。

使用特权

评论回复
板凳
Tomzong|  楼主 | 2007-2-1 17:23 | 只看该作者

一位朋友这样回复:..到底是谁对了?

  AJMP addr11
  ACALL addr11
这个是指在以当前PC值的2K范围内跳转或调用~~要想在程序ROM的任意空间跳转或调用,可用以下两个指令.
  LJMP addr16
  LCALL addr16
 

使用特权

评论回复
地板
zhiwei| | 2007-2-1 17:23 | 只看该作者

呵呵

8051还有64kB的呢!,距离不够还有绝对跳转啊。LJMP

使用特权

评论回复
5
AA_55| | 2007-2-1 17:32 | 只看该作者

看来楼主没有仔细解读过MCS-51指令系统

AJMP addr11不是和我说的一样嘛。addr11就是说地址范围是11位2进制,换算成十进制不就是2048嘛。

这条指令是这样执行的:指令计数器PC+2,然后用这个11位地址替代PC内的A10~A0地址,然后从新的PC地址上取下一条指令执行。就是说,它只能在当前地址的2K范围内跳转。

如果使用LJMP,指令中立即数地址范围达到了16位,执行这条指令时候,是直接把16位地址装入PC(PC本身就是16位的),这就可以在64k寻址范围内任意跳转了

使用特权

评论回复
6
Tomzong|  楼主 | 2007-2-2 11:49 | 只看该作者

谢谢AA_55大虾的指点!

谢谢AA_55大虾的指点!

使用特权

评论回复
7
chunk| | 2007-2-2 17:39 | 只看该作者

多了解一些计算机的发展史吧。

以前存储器价格高昂,因此如何省存储器是CPU设计中一项重要的任务。这些CPU的设计者虽然是玩硬件的,但他们对编译器如何生成汇编代码十分在行,他们深知在很多程序逻辑结构中出现的跳转只是在一个小地址范围内进行,这样就未必要在机器码中表达全地址范围,所以他们设计了很多“短转移”指令,用8bit,10bit,或12bit表示地址,这样本来需要3字节的转移指令就变成2字节了,这种指令用得多了存储器必然节省。当然3字节的“长转移”指令也是保存的,因为也有用到的时候。

仅是转移指令就有长短之分,可见指令集的编码是“复杂”的(称为CISC),这当然不利于CPU译码和执行。后来存储器便宜了,省内存已不重要,速度快才是重点。那干脆指令集的编码全统一成16bit,24bit,32bit吧,形式上就“精简”了(称为RISC),CPU评码执行就很痛快,CPU内所需的晶体管也少了,功耗当然降下来。

为了更疯狂地提升RISC处理器的性能,CPU的设计者开始运用“流水”思路尽可能地提升CPU内部电路的并行性。这要求在CPU内部集成大量的SRAM(称CACHE),于是RISC开始偏离了当初“简约”地路线。另一群狂人还不满足,在一个CPU中集成多个计算部件,比如做上两个ALU,一旦发现指令流中有不相关地两条计算指令,就把他俩放在两个ALU上一起算。这种结构很适合实现“信号的数学化处理算法”,所以这种CPU又称“DSP”。

之后有人开始对RISC不满,于是翻出了古老的“堆栈计算机”体系,搞了个“最小”指令集系统(称MISC)。一个叫“太阳”的公司在“堆栈计算机”体系的基础上弄了个叫“JAVA”的玩意儿,本打算在“嵌入系统设计”中获益,不成功。后来在一个叫“INTERNET”的网络上反而得到广泛地应用。

CPU今后的发展,就是“并行”,就是N多个CPU放一颗硅片上一块跑。

编译器是跟随CPU共同发展的。

至于编写程序的这一群被称为“程序员”的人嘛......唉————,我只能说计算机科学本身并不要求你把它切成“硬件”和“软件”两个部分,这种切法是社会分工造成地。学习完整的计算机科学未必很难,有可能“越学越简单”。

使用特权

评论回复
8
Tomzong|  楼主 | 2007-2-27 14:06 | 只看该作者

谢谢!

顶!!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

93

帖子

0

粉丝