标题: 单片机汇编语言SJMP问题 [打印本页]

作者: cn_zhx    时间: 2022-11-29 21:48
标题: 单片机汇编语言SJMP问题
在用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表示外还有其他表示方法吗?
求解答。



作者: Hephaestus    时间: 2022-11-29 22:37
你完全可以这么写:
  1.         DB    80H, 03H
复制代码


这里面80H就是SJMP,03H就是你以为的rel,03。
作者: cn_zhx    时间: 2022-11-29 22:49
Hephaestus 发表于 2022-11-29 22:37
你完全可以这么写:

我的意思是,SJMP的偏移量只能用符号来表示吗?
SJMP AAA
能不能在SJMP后面直接给出偏移量的值。
作者: Hephaestus    时间: 2022-11-29 23:02
cn_zhx 发表于 2022-11-29 22:49
我的意思是,SJMP的偏移量只能用符号来表示吗?
SJMP AAA
能不能在SJMP后面直接给出偏移量的值。

SJMP  $+3
作者: cn_zhx    时间: 2022-11-29 23:17
Hephaestus 发表于 2022-11-29 23:02
SJMP  $+3

$的值为FEH(补码),那么$+3等于01h,用$+5可以跳到AAA处,+3还是不能正确跳转。
作者: cn_zhx    时间: 2022-11-29 23:22
Hephaestus 发表于 2022-11-29 23:02
SJMP  $+3

感谢!用这种表示方法可以,需要+5。
作者: Hephaestus    时间: 2022-11-29 23:56
cn_zhx 发表于 2022-11-29 23:22
感谢!用这种表示方法可以,需要+5。

你的这种做法除了让别人和你自己看不懂以外,还有别的现实意义吗?
作者: cn_zhx    时间: 2022-11-30 00:39
Hephaestus 发表于 2022-11-29 23:56
你的这种做法除了让别人和你自己看不懂以外,还有别的现实意义吗?

你的说法很有道理,我赞同。多谢指教!
这是在给别人讲的时候,需要讲清楚rel的值是多少,当然,用符号表示是最简便的,而且在编程的时候也不会去一条指令一条指令的去计算这个偏移量,只是觉得rel既然是偏移量,能不能用数值直接表示,试了一下,总是不能正确的跳转,就想把这个问题搞清楚。
作者: 冰火风轮    时间: 2022-11-30 15:27
用符号表示,偏移量是活的,方便修改
作者: yzwzfyz    时间: 2022-11-30 17:02
这是由编译平台的翻译方式决定的。
作者: Hephaestus    时间: 2022-11-30 20:07
cn_zhx 发表于 2022-11-30 00:39
你的说法很有道理,我赞同。多谢指教!
这是在给别人讲的时候,需要讲清楚rel的值是多少,当然,用符号表 ...

那么我在沙发上面的例子不更加直观吗?不需要减掉SJMP语句自身占用的2个字节地址。
作者: Y_G_G    时间: 2022-11-30 21:20
SJMP  $-4
rel就是个地址的意思,汇编没有补码这个说法,说补码只是给学了C的人更好理解而已
SJMP就是这指令的当前地址向前跳转或者身后跳转,rel就是这个值的范围
以前这个指令还是经常用的
现在用得不多了,直接用JMP了
别去搞那$+ $-的,那只会让程序更乱,直接用标号就行了
作者: Hephaestus    时间: 2022-11-30 22:04
Y_G_G 发表于 2022-11-30 21:20
SJMP  $-4
rel就是个地址的意思,汇编没有补码这个说法,说补码只是给学了C的人更好理解而已
SJMP就是这 ...

汇编怎么可能没有补码,有符号运算中,ffh要看成是-1,不能看成255,这就叫补码。
作者: cn_zhx    时间: 2022-12-17 18:34
多谢各位的指教。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1