找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 944|回复: 13
收起左侧

单片机汇编语言SJMP问题

[复制链接]
ID:883031 发表于 2022-11-29 21:48 | 显示全部楼层 |阅读模式
在用SJMP指令时,偏移量rel只能用符号表示吗?如下AAA,
ORG 0000H
LJMP MAIN
ORG 0050H
MAIN:
        SJMP AAA
        MOV 50H,#30H
AAA:        MOV R0,#40H
        MOV A,R0
        MOV A,@R0
        SJMP $

rel偏移量为03,对该指令的解释中rel应该为二进制补码,但写成SJMP 03H,就会跳转到0003H地址处。根据运行的结果看,rel好像是个地址。
这里的rel除了用AAA表示外还有其他表示方法吗?
求解答。


回复

使用道具 举报

ID:883242 发表于 2022-11-29 22:37 | 显示全部楼层
你完全可以这么写:
  1.         DB    80H, 03H
复制代码


这里面80H就是SJMP,03H就是你以为的rel,03。
回复

使用道具 举报

ID:883031 发表于 2022-11-29 22:49 | 显示全部楼层
Hephaestus 发表于 2022-11-29 22:37
你完全可以这么写:

我的意思是,SJMP的偏移量只能用符号来表示吗?
SJMP AAA
能不能在SJMP后面直接给出偏移量的值。
回复

使用道具 举报

ID:883242 发表于 2022-11-29 23:02 | 显示全部楼层
cn_zhx 发表于 2022-11-29 22:49
我的意思是,SJMP的偏移量只能用符号来表示吗?
SJMP AAA
能不能在SJMP后面直接给出偏移量的值。

SJMP  $+3
回复

使用道具 举报

ID:883031 发表于 2022-11-29 23:17 | 显示全部楼层

$的值为FEH(补码),那么$+3等于01h,用$+5可以跳到AAA处,+3还是不能正确跳转。
回复

使用道具 举报

ID:883031 发表于 2022-11-29 23:22 | 显示全部楼层

感谢!用这种表示方法可以,需要+5。
回复

使用道具 举报

ID:883242 发表于 2022-11-29 23:56 | 显示全部楼层
cn_zhx 发表于 2022-11-29 23:22
感谢!用这种表示方法可以,需要+5。

你的这种做法除了让别人和你自己看不懂以外,还有别的现实意义吗?
回复

使用道具 举报

ID:883031 发表于 2022-11-30 00:39 | 显示全部楼层
Hephaestus 发表于 2022-11-29 23:56
你的这种做法除了让别人和你自己看不懂以外,还有别的现实意义吗?

你的说法很有道理,我赞同。多谢指教!
这是在给别人讲的时候,需要讲清楚rel的值是多少,当然,用符号表示是最简便的,而且在编程的时候也不会去一条指令一条指令的去计算这个偏移量,只是觉得rel既然是偏移量,能不能用数值直接表示,试了一下,总是不能正确的跳转,就想把这个问题搞清楚。
回复

使用道具 举报

ID:955673 发表于 2022-11-30 15:27 | 显示全部楼层
用符号表示,偏移量是活的,方便修改
回复

使用道具 举报

ID:123289 发表于 2022-11-30 17:02 | 显示全部楼层
这是由编译平台的翻译方式决定的。
回复

使用道具 举报

ID:883242 发表于 2022-11-30 20:07 | 显示全部楼层
cn_zhx 发表于 2022-11-30 00:39
你的说法很有道理,我赞同。多谢指教!
这是在给别人讲的时候,需要讲清楚rel的值是多少,当然,用符号表 ...

那么我在沙发上面的例子不更加直观吗?不需要减掉SJMP语句自身占用的2个字节地址。
回复

使用道具 举报

ID:401564 发表于 2022-11-30 21:20 | 显示全部楼层
SJMP  $-4
rel就是个地址的意思,汇编没有补码这个说法,说补码只是给学了C的人更好理解而已
SJMP就是这指令的当前地址向前跳转或者身后跳转,rel就是这个值的范围
以前这个指令还是经常用的
现在用得不多了,直接用JMP了
别去搞那$+ $-的,那只会让程序更乱,直接用标号就行了
回复

使用道具 举报

ID:883242 发表于 2022-11-30 22:04 | 显示全部楼层
Y_G_G 发表于 2022-11-30 21:20
SJMP  $-4
rel就是个地址的意思,汇编没有补码这个说法,说补码只是给学了C的人更好理解而已
SJMP就是这 ...

汇编怎么可能没有补码,有符号运算中,ffh要看成是-1,不能看成255,这就叫补码。
回复

使用道具 举报

ID:883031 发表于 2022-12-17 18:34 | 显示全部楼层
多谢各位的指教。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表