找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2203|回復(fù): 13
收起左側(cè)

單片機(jī)匯編語言SJMP問題

[復(fù)制鏈接]
ID:883031 發(fā)表于 2022-11-29 21:48 | 顯示全部樓層 |閱讀模式
在用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表示外還有其他表示方法嗎?
求解答。


回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-11-29 22:37 | 顯示全部樓層
你完全可以這么寫:
  1.         DB    80H, 03H
復(fù)制代碼


這里面80H就是SJMP,03H就是你以為的rel,03。
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2022-11-29 22:49 | 顯示全部樓層
Hephaestus 發(fā)表于 2022-11-29 22:37
你完全可以這么寫:

我的意思是,SJMP的偏移量只能用符號(hào)來表示嗎?
SJMP AAA
能不能在SJMP后面直接給出偏移量的值。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-11-29 23:02 | 顯示全部樓層
cn_zhx 發(fā)表于 2022-11-29 22:49
我的意思是,SJMP的偏移量只能用符號(hào)來表示嗎?
SJMP AAA
能不能在SJMP后面直接給出偏移量的值。

SJMP  $+3
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2022-11-29 23:17 | 顯示全部樓層

$的值為FEH(補(bǔ)碼),那么$+3等于01h,用$+5可以跳到AAA處,+3還是不能正確跳轉(zhuǎn)。
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2022-11-29 23:22 | 顯示全部樓層

感謝!用這種表示方法可以,需要+5。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-11-29 23:56 | 顯示全部樓層
cn_zhx 發(fā)表于 2022-11-29 23:22
感謝!用這種表示方法可以,需要+5。

你的這種做法除了讓別人和你自己看不懂以外,還有別的現(xiàn)實(shí)意義嗎?
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2022-11-30 00:39 | 顯示全部樓層
Hephaestus 發(fā)表于 2022-11-29 23:56
你的這種做法除了讓別人和你自己看不懂以外,還有別的現(xiàn)實(shí)意義嗎?

你的說法很有道理,我贊同。多謝指教!
這是在給別人講的時(shí)候,需要講清楚rel的值是多少,當(dāng)然,用符號(hào)表示是最簡(jiǎn)便的,而且在編程的時(shí)候也不會(huì)去一條指令一條指令的去計(jì)算這個(gè)偏移量,只是覺得rel既然是偏移量,能不能用數(shù)值直接表示,試了一下,總是不能正確的跳轉(zhuǎn),就想把這個(gè)問題搞清楚。
回復(fù)

使用道具 舉報(bào)

ID:955673 發(fā)表于 2022-11-30 15:27 | 顯示全部樓層
用符號(hào)表示,偏移量是活的,方便修改
回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2022-11-30 17:02 | 顯示全部樓層
這是由編譯平臺(tái)的翻譯方式?jīng)Q定的。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-11-30 20:07 | 顯示全部樓層
cn_zhx 發(fā)表于 2022-11-30 00:39
你的說法很有道理,我贊同。多謝指教!
這是在給別人講的時(shí)候,需要講清楚rel的值是多少,當(dāng)然,用符號(hào)表 ...

那么我在沙發(fā)上面的例子不更加直觀嗎?不需要減掉SJMP語句自身占用的2個(gè)字節(jié)地址。
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 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)就行了
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 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ǔ)碼。
回復(fù)

使用道具 舉報(bào)

ID:883031 發(fā)表于 2022-12-17 18:34 | 顯示全部樓層
多謝各位的指教。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表