[51单片机] 51汇编如何获取标号地址的高低位?

[复制链接]
3910|13
 楼主| lzp3520265 发表于 2013-9-24 16:31 | 显示全部楼层 |阅读模式
  1. /*----------一些声明----------------*/
  2. NAME AASM
  3. ?PR?SS?AASM SEGMENT CODE
  4. PUBLIC SS
  5. RSEG ?PR?SS?AASM
  6. /*----------这样是可以的----------*/
  7. AA EQU SS
  8. SS:
  9. MOV DPTR,#AA
  10. END
  11. /*---------这样就不可以----------*/
  12. AAH EQU SS>>8
  13. AAL EQU 0x00FF&SS
  14. SS:
  15. MOV DPH,#AAH
  16. MOV DPL,#AAL
  17. END

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

这一句没有必要
le46710 发表于 2013-9-24 19:02 | 显示全部楼层
MOV DPH,#SS/256
MOV DPL,#SS-SS/256*256
 楼主| lzp3520265 发表于 2013-9-24 19:07 | 显示全部楼层
ayb_ice 发表于 2013-9-24 16:35
MOV     R0,#HIGH 1234h   ; R0=12h

恩恩,搞定了。3Q
 楼主| lzp3520265 发表于 2013-9-24 19:07 | 显示全部楼层
le46710 发表于 2013-9-24 19:02
MOV DPH,#SS/256
MOV DPL,#SS-SS/256*256

编译通不过的
 楼主| lzp3520265 发表于 2013-9-24 19:09 | 显示全部楼层
yangfan19641964 发表于 2013-9-24 16:40
AA EQU SS

这一句没有必要

恩恩,当时方便调试用的。已经搞定3Q。
但是keil对标号的乘除以及与或宏运算似乎不支持呢
i55 发表于 2013-9-24 19:50 | 显示全部楼层
你这是浮动段,对标号的运算当然不可能支持,因为编译器本身并不知道标号的具体值(所在地址),浮动段源码里面标号的值是连接器BL51确定的。
要是固定段,比如ORG 20H,这时候标号代表的地址的确定的值,编译器是知道的,你写对其进行运算的代码倒是有可能会被正确编译。
 楼主| lzp3520265 发表于 2013-9-24 21:24 | 显示全部楼层
i55 发表于 2013-9-24 19:50
你这是浮动段,对标号的运算当然不可能支持,因为编译器本身并不知道标号的具体值(所在地址),浮动段源码 ...

在生成源码前标号的具体值就已经确定了,而标号的运算也是在编译前完成的,只能说KEIL做的还不够完善。如果在PC用NASM之类的编译器就不存在这个问题。
i55 发表于 2013-9-24 21:33 | 显示全部楼层
lzp3520265 发表于 2013-9-24 21:24
在生成源码前标号的具体值就已经确定了,而标号的运算也是在编译前完成的,只能说KEIL做的还不够完善。如 ...

RSEG ?PR?SS?AASM 已经说明了这个代码段是可重定位段relocatable,生成的obj文件里面根本就没有标号的具体的值,你的汇编语言学的太差劲了,我十多年没摸过51都记得这点破事儿。
 楼主| lzp3520265 发表于 2013-9-24 22:07 | 显示全部楼层
i55 发表于 2013-9-24 21:33
RSEG ?PR?SS?AASM 已经说明了这个代码段是可重定位段relocatable,生成的obj文件里面根本就没有标号的具 ...

呵呵。
ayb_ice 发表于 2013-9-25 07:52 | 显示全部楼层
谁说不支持了
但A51与AX51是有点区别的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| lzp3520265 发表于 2013-9-25 10:06 | 显示全部楼层
ayb_ice 发表于 2013-9-25 07:52
谁说不支持了
但A51与AX51是有点区别的

没说不支持,只是实际用的时候,只能加减运算,乘除与或还有移位运算会报错。不过已经用1楼和2楼的方法搞定了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

41

帖子

0

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