標(biāo)題: 單片機(jī)匯編語言SJMP問題 [打印本頁]

作者: cn_zhx    時(shí)間: 2022-11-29 21:48
標(biāo)題: 單片機(jī)匯編語言SJMP問題
在用SJMP指令時(shí),偏移量rel只能用符號(hào)表示嗎?如下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,對(duì)該指令的解釋中rel應(yīng)該為二進(jìn)制補(bǔ)碼,但寫成SJMP 03H,就會(huì)跳轉(zhuǎn)到0003H地址處。根據(jù)運(yùn)行的結(jié)果看,rel好像是個(gè)地址。
這里的rel除了用AAA表示外還有其他表示方法嗎?
求解答。



作者: Hephaestus    時(shí)間: 2022-11-29 22:37
你完全可以這么寫:
  1.         DB    80H, 03H
復(fù)制代碼


這里面80H就是SJMP,03H就是你以為的rel,03。
作者: cn_zhx    時(shí)間: 2022-11-29 22:49
Hephaestus 發(fā)表于 2022-11-29 22:37
你完全可以這么寫:

我的意思是,SJMP的偏移量只能用符號(hào)來表示嗎?
SJMP AAA
能不能在SJMP后面直接給出偏移量的值。
作者: Hephaestus    時(shí)間: 2022-11-29 23:02
cn_zhx 發(fā)表于 2022-11-29 22:49
我的意思是,SJMP的偏移量只能用符號(hào)來表示嗎?
SJMP AAA
能不能在SJMP后面直接給出偏移量的值。

SJMP  $+3
作者: cn_zhx    時(shí)間: 2022-11-29 23:17
Hephaestus 發(fā)表于 2022-11-29 23:02
SJMP  $+3

$的值為FEH(補(bǔ)碼),那么$+3等于01h,用$+5可以跳到AAA處,+3還是不能正確跳轉(zhuǎn)。
作者: cn_zhx    時(shí)間: 2022-11-29 23:22
Hephaestus 發(fā)表于 2022-11-29 23:02
SJMP  $+3

感謝!用這種表示方法可以,需要+5。
作者: Hephaestus    時(shí)間: 2022-11-29 23:56
cn_zhx 發(fā)表于 2022-11-29 23:22
感謝!用這種表示方法可以,需要+5。

你的這種做法除了讓別人和你自己看不懂以外,還有別的現(xiàn)實(shí)意義嗎?
作者: cn_zhx    時(shí)間: 2022-11-30 00:39
Hephaestus 發(fā)表于 2022-11-29 23:56
你的這種做法除了讓別人和你自己看不懂以外,還有別的現(xiàn)實(shí)意義嗎?

你的說法很有道理,我贊同。多謝指教!
這是在給別人講的時(shí)候,需要講清楚rel的值是多少,當(dāng)然,用符號(hào)表示是最簡便的,而且在編程的時(shí)候也不會(huì)去一條指令一條指令的去計(jì)算這個(gè)偏移量,只是覺得rel既然是偏移量,能不能用數(shù)值直接表示,試了一下,總是不能正確的跳轉(zhuǎn),就想把這個(gè)問題搞清楚。
作者: 冰火風(fēng)輪    時(shí)間: 2022-11-30 15:27
用符號(hào)表示,偏移量是活的,方便修改
作者: yzwzfyz    時(shí)間: 2022-11-30 17:02
這是由編譯平臺(tái)的翻譯方式?jīng)Q定的。
作者: Hephaestus    時(shí)間: 2022-11-30 20:07
cn_zhx 發(fā)表于 2022-11-30 00:39
你的說法很有道理,我贊同。多謝指教!
這是在給別人講的時(shí)候,需要講清楚rel的值是多少,當(dāng)然,用符號(hào)表 ...

那么我在沙發(fā)上面的例子不更加直觀嗎?不需要減掉SJMP語句自身占用的2個(gè)字節(jié)地址。
作者: Y_G_G    時(shí)間: 2022-11-30 21:20
SJMP  $-4
rel就是個(gè)地址的意思,匯編沒有補(bǔ)碼這個(gè)說法,說補(bǔ)碼只是給學(xué)了C的人更好理解而已
SJMP就是這指令的當(dāng)前地址向前跳轉(zhuǎn)或者身后跳轉(zhuǎn),rel就是這個(gè)值的范圍
以前這個(gè)指令還是經(jīng)常用的
現(xiàn)在用得不多了,直接用JMP了
別去搞那$+ $-的,那只會(huì)讓程序更亂,直接用標(biāo)號(hào)就行了
作者: Hephaestus    時(shí)間: 2022-11-30 22:04
Y_G_G 發(fā)表于 2022-11-30 21:20
SJMP  $-4
rel就是個(gè)地址的意思,匯編沒有補(bǔ)碼這個(gè)說法,說補(bǔ)碼只是給學(xué)了C的人更好理解而已
SJMP就是這 ...

匯編怎么可能沒有補(bǔ)碼,有符號(hào)運(yùn)算中,ffh要看成是-1,不能看成255,這就叫補(bǔ)碼。
作者: cn_zhx    時(shí)間: 2022-12-17 18:34
多謝各位的指教。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1