打印
[STC单片机]

汇编语言行号是物理地址,还是相对地址???

[复制链接]
2592|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fannifu|  楼主 | 2014-1-13 21:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
行号是物理地址,还是相对地址???
比如,我们写程序都是这样写的::
DELAY:MOV R3,#7FH
DEL2: MOV R4,#0FFH
DEL1: NOP
DJNZ R4 ,DEL1
DJNZ R3 ,DEL2
RET

按DJNZ R0,rel; 注释里说rel是偏移地址,也就是相对地址;而行标号的解释是存放指令或数据存储单元,这里指的是物理地址,和DJNZ注释有矛盾。

谁能解释下,哪个是怎么正确的??

相关帖子

沙发
ayb_ice| | 2014-1-14 08:01 | 只看该作者
都对,汇编器自动计算了

使用特权

评论回复
板凳
fannifu|  楼主 | 2014-1-18 12:24 | 只看该作者
都对哪不是矛盾了

使用特权

评论回复
地板
ningling_21| | 2014-1-18 12:27 | 只看该作者
编译器会把标号编译为固定地址...

使用特权

评论回复
5
NE5532| | 2014-1-18 17:53 | 只看该作者
编译器帮你算的,指令这样做是为了缩短指令长度,你想一下,如果指令里要存绝对地址,绝对地址是不是很长,比如16bit,而存相对地址,8bit甚至7bit就足够了。

另外汇编写的标号不一定是绝对地址,还要看linker的设置,因为一般我们写程序都是一个汇编文件一个工程(include进来的不算),如果是多个汇编文件组成一个工程,编译器就会用浮动地址来编译,最后统一组装,当然这个需要用关键字声明,等楼主再了解深入了以后再研究。

使用特权

评论回复
6
soso| | 2014-1-18 19:23 | 只看该作者
行号不属于 汇编语言, 它是由 汇编器来计算的, 定位用的 标号.

使用特权

评论回复
7
znmcu| | 2014-1-19 08:20 | 只看该作者
汇编没有编译器

使用特权

评论回复
8
独自探索| | 2014-1-20 12:36 | 只看该作者
汇编也有编译器,不然怎 产生代码? ,行号是物理地址,,你这汇编程序开头不是要一个ORG ???H 来指定地址开始吗? 只要指定,那么这行号通过编译计算编译就有了物理地址了.

使用特权

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

本版积分规则

9

主题

56

帖子

1

粉丝