打印

为什么要乘以2

[复制链接]
3048|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
djtloveic|  楼主 | 2007-6-6 19:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一次用AVR单片机,用汇编写了一段查表程序
......
DIS:LDI   R30,TAB
     CLR   R31
     .....
TAB: .DB 01,02
     .......
这样查不正确,把上面的LDI  R30,TAB改为LDI  R30,TAB*2,查的值就正确了,想了好久都不知道为什么要乘以2,请各位指点一下。

     

相关帖子

沙发
turmary| | 2007-6-6 19:35 | 只看该作者

编移器的单位总题

TAB是个程序标号,
标号都是偏移量,是按字(16BIT)计算的,
但是程序指今中的数据偏移量要求
按字节(8BIT)计算的,所以字*2=字节偏移量.

使用特权

评论回复
板凳
djtloveic|  楼主 | 2007-6-6 19:41 | 只看该作者

谢谢turmary 的解答

谢谢turmary 的解答,不过能说的再详细点吗?
这种转换单指AVR单片机吗?
我以前用51的时候,是不用转换的。

使用特权

评论回复
地板
ATmega16| | 2007-6-6 19:55 | 只看该作者

因为读取FLASH 数据指令 LPM是字节寻址

因为读取FLASH 数据指令 LPM是字节寻址
所有要将以字寻址的地址*2

使用特权

评论回复
5
djtloveic|  楼主 | 2007-6-6 20:10 | 只看该作者

谢谢

学习了,谢谢~~~

使用特权

评论回复
6
zhaoyu2005| | 2007-6-7 08:22 | 只看该作者

ATmega16的是正解,turmary的错了

为什么呢?我也说不清楚,但是知道标号与偏移量没什么关系,标号只是让编程人员便于**,本身代表表格的第一个元素的地址,每个元素所占多少字节与标号无关,但是偏移量就是以所占多少字节为基准的

使用特权

评论回复
7
ZRL700424| | 2007-6-7 09:38 | 只看该作者

都没错

标号代表的是地址,AVR单片机是两个字节为一个地址,比如标称8K的M8实际上只有4K地址,LPM是以字节来查表的

使用特权

评论回复
8
gyt| | 2007-6-7 10:21 | 只看该作者

记住LS

记住LS说的就可以了:)

使用特权

评论回复
9
djtloveic|  楼主 | 2007-6-9 19:07 | 只看该作者

m8实际只有4K地址?

    ZRL700424说m8实际只有4K地址?这是怎么回事?是说它只有4K的存储空间吗?
写程序时从开发工具上看它的CODE,当时发现一个两个单字节数据存在同一个地址中,这样看虽然地址只有4K,但代码空间还应是8K,不知这样说对不对?

使用特权

评论回复
10
smallapple| | 2007-6-10 22:20 | 只看该作者

re

字长

使用特权

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

本版积分规则

18

主题

113

帖子

0

粉丝