打印
[51单片机]

51汇编如何获取标号地址的高低位?

[复制链接]
3192|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
ayb_ice| | 2013-9-24 16:35 | 只看该作者
MOV     R0,#HIGH 1234h   ; R0=12h

使用特权

评论回复
板凳
yangfan19641964| | 2013-9-24 16:39 | 只看该作者
SS:

MOV DPH,#HIGH SS
MOV DPL,#LOW SS

使用特权

评论回复
地板
yangfan19641964| | 2013-9-24 16:40 | 只看该作者
AA EQU SS

这一句没有必要

使用特权

评论回复
5
le46710| | 2013-9-24 19:02 | 只看该作者
MOV DPH,#SS/256
MOV DPL,#SS-SS/256*256

使用特权

评论回复
6
lzp3520265|  楼主 | 2013-9-24 19:07 | 只看该作者
ayb_ice 发表于 2013-9-24 16:35
MOV     R0,#HIGH 1234h   ; R0=12h

恩恩,搞定了。3Q

使用特权

评论回复
7
lzp3520265|  楼主 | 2013-9-24 19:07 | 只看该作者
le46710 发表于 2013-9-24 19:02
MOV DPH,#SS/256
MOV DPL,#SS-SS/256*256

编译通不过的

使用特权

评论回复
8
lzp3520265|  楼主 | 2013-9-24 19:09 | 只看该作者
yangfan19641964 发表于 2013-9-24 16:40
AA EQU SS

这一句没有必要

恩恩,当时方便调试用的。已经搞定3Q。
但是keil对标号的乘除以及与或宏运算似乎不支持呢

使用特权

评论回复
9
i55| | 2013-9-24 19:50 | 只看该作者
你这是浮动段,对标号的运算当然不可能支持,因为编译器本身并不知道标号的具体值(所在地址),浮动段源码里面标号的值是连接器BL51确定的。
要是固定段,比如ORG 20H,这时候标号代表的地址的确定的值,编译器是知道的,你写对其进行运算的代码倒是有可能会被正确编译。

使用特权

评论回复
10
lzp3520265|  楼主 | 2013-9-24 21:24 | 只看该作者
i55 发表于 2013-9-24 19:50
你这是浮动段,对标号的运算当然不可能支持,因为编译器本身并不知道标号的具体值(所在地址),浮动段源码 ...

在生成源码前标号的具体值就已经确定了,而标号的运算也是在编译前完成的,只能说KEIL做的还不够完善。如果在PC用NASM之类的编译器就不存在这个问题。

使用特权

评论回复
11
i55| | 2013-9-24 21:33 | 只看该作者
lzp3520265 发表于 2013-9-24 21:24
在生成源码前标号的具体值就已经确定了,而标号的运算也是在编译前完成的,只能说KEIL做的还不够完善。如 ...

RSEG ?PR?SS?AASM 已经说明了这个代码段是可重定位段relocatable,生成的obj文件里面根本就没有标号的具体的值,你的汇编语言学的太差劲了,我十多年没摸过51都记得这点破事儿。

使用特权

评论回复
12
lzp3520265|  楼主 | 2013-9-24 22:07 | 只看该作者
i55 发表于 2013-9-24 21:33
RSEG ?PR?SS?AASM 已经说明了这个代码段是可重定位段relocatable,生成的obj文件里面根本就没有标号的具 ...

呵呵。

使用特权

评论回复
13
ayb_ice| | 2013-9-25 07:52 | 只看该作者
谁说不支持了
但A51与AX51是有点区别的

未命名.JPG (36.51 KB )

未命名.JPG

使用特权

评论回复
14
lzp3520265|  楼主 | 2013-9-25 10:06 | 只看该作者
ayb_ice 发表于 2013-9-25 07:52
谁说不支持了
但A51与AX51是有点区别的

没说不支持,只是实际用的时候,只能加减运算,乘除与或还有移位运算会报错。不过已经用1楼和2楼的方法搞定了。

使用特权

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

本版积分规则

8

主题

41

帖子

0

粉丝