關於微控制器裡相對轉移指令中rel的問題

2021-03-11 07:22:14 字數 1597 閱讀 4594

1樓:潘達

sjmp是短轉移指令,用相對地址,相對地址是有符號數,所以用的都是補碼,89是一回個負數,答因為第一位是1,所以他如果變成雙位元組就要填ff,如果是正數才填00。。。。

補碼你應該懂得把,負數的補碼就是反碼+1,實際這個語句是向前跳轉,是一個減法,加上一個數的補碼就是相當於執行了減法,89h不是原碼他更不代表-89h。。。

所以向這樣的語句你只要判斷首位是不是比8大,如果大說明是負數加ff,向前跳轉,反之向後跳轉。。。

通常如果你想向前跳,想跳幾個地址就把這個數化成2進位制補碼的形式變成16進位制填上就沒問題,不過實際當中這些事我們不需要做,編譯器可以替我們幹,我們只需要用標示,比如sjmp d1,在要跳的位置填d1: 編譯器會替我們算。。。

用於運算的數的分浮點數,有符號數,無符號數,只有無符號整型數的16進位制才符合我們的常規思維,其他兩種第一次見都會迷惑。。。

2樓:匿名使用者

sjmp 89h

就是跳bai轉到du89h這個地址,書上zhi這dao麼解釋版是錯的.

參考權

在微控制器原理中,rel具體是什麼意思?怎麼用?

3樓:匿名使用者

你說的應該是跳轉指令後面的rel助記符吧rel是relative的簡寫,表示相對當前地址的跳轉偏移,它是一個有符號數。具體範圍要參閱處理器的指令手冊。以常見的51系列為例,它是一個8位有符號數,因此範圍是-128至127。

現在一般都不用自己去計算具體的數值了,彙編器和連結器會做好轉換和重定位工作的。

4樓:匿名使用者

rel 是偏移量,就是相對一條指令來說的相對地址 每條指令都是要佔用地址的不過寫彙編時直接寫絕對地址就行 想跳轉到**就在那裡做個標記 象 xx:這樣djnz r7,xx;就在滿足要求的時候就能跳轉到地址為xx:的地方了,編譯時彙編程式會自動將絕對地址換算成偏移量 在寫跳轉時候 不用管rel什麼的例如:

sjmp rel ;中跳到pc+2+rel 中pc表示 sjmp這條指令的地址 每條指令都有他的地址(都有它的pc指標地址的)其中中2是這整條語句的長度 這整體的意思就是 要跳到 這整條語句開始的地址 加上被它這條地址佔據的2個地址 再加rel偏移量在實際程式設計中只要在一個地方標記xx:語句;當執行到sjmp xx;的時候就會跳到標記地址為xx的地方了 其中xx可以使任何標記

微控制器相對定址jc rel值怎麼算出來?

5樓:做而論道

相對轉移的偏移量,是用目的

地的地址,減去發源地的地址,結果再變成補碼。

如果是向後轉移,目的地的地址號碼小,將得到負數。

這時,應該用發源地的地址,減去目的地的地址,得到這個負數的絕對值。

寫成負數之後,再變成補碼,即可。

rel = 0f85h - (1003h + 02h),顯然不夠減,那麼,反過來相減:

即:1005 - 0f85 = 80h,這就是絕對值:128。

-128,其補碼就是 80h。

這個計算過程,現在不用人工計算了,編譯軟體會替人們完成。

關於微控制器中的jc指令,關於微控制器中的JC指令

閣下首先搞清楚cjne a,25,1的含義,它的含義有三點 1.當a等於25時,執行下一句 2.當a不等版於25時,跳轉到權ne1語句執行 3.要注意當a不等於25時,a必定大於25或者小於25,如果a小於25,則不僅要跳轉到ne1執行,還要給cy標誌位置一,如果a大於25,則僅僅要跳轉到ne1執行...

微控制器中斷返回指令,微控制器組合語言指令中中斷返回指令RET和RETI有什麼不同?

程式結構錯誤。mov th0,65536 50000 256 定時50毫秒 mov tl0,65536 50000 256mov ie,82h setb tr0 主程式,到這,就沒有了,這那行?timer 下面就是 定時器中斷服務程式mov th0,65536 50000 256 初脈衝50ms m...

關於微控制器裡的SJMP知道的請進

sjmp 是在原地迴圈,一般都用在等待中斷到來,然後進入中斷處理程式。處理完了,再繼續在原地迴圈。比如你的手機現在不用了,估計也在這裡迴圈,你按下鍵,它就當是有中斷來了,就去處理,處理完了,它又開始迴圈等待你的操作了。end是每個程式必須寫的指令,如果你的程式走到了這條指令就停下來了。一般的程式是不...