簡體   English   中英

MSP430中的JL指令

[英]JL instruction in MSP430

鑒於MSP430中的代碼:

     CLR  R6
     MOV  #5, R5                                  
L1:  DEC  R5
     CMP  #0, R5
     JL   L1
     INC  R6

告訴我執行后R5的值為4而不是0。

這是JL指令特有的嗎?

JL為“ 如果小於跳轉 ”。

從指令集中:

JL : Jump to Label if (N .XOR. V) = 1 

因此,僅當設置了負標志或溢出標志(但不能同時設置兩個標志)時,才會發生跳轉。

CMP指令可以設定這些作為執行的結果b - aR5 - 0在這種情況下) - CMP #0, R5是簡單地測試R5的值的一個方式。

CMP和JL一起表示IF R5 < 0 GOTO L1

由於已將其設置為5,並將其遞減為4,因此它將不小於零,因此JL不會分支。

可能是JNZ的意圖(“ 如果不為零則跳轉 ”),或者其同義詞JNE(“ 如果不等於則為跳轉 ”)。

     CLR  R6      ; R6 = 0
     MOV  #5, R5  ; R5 = 5                        
L1:  DEC  R5      ; R5 = R5 - 1

     CMP  #0, R5  ; if R5 - 0 ...
     JL   L1      ; ... is less than zero ... <-- This is never true
                  ; ... then goto L1 

     INC  R6      ; R6 = R6 + 1
                  ; Here R5 = 4, R6 = 1

還要注意,DEC指令也設置了N和V標志,因此CMP實際上是不必要的。

     CLR  R6      ; R6 = 0
     MOV  #5, R5  ; R5 = 5                        
L1:  DEC  R5      ; R5 = R5 - 1

     JNZ  L1      ; if R5 is not zero ... 
                  ; ... then goto L1   <-- This will loop until R5 == zero

     INC  R6      ; R6 = R6 + 1
                  ; Here R5 = 0, R6 = 1

請參見手冊中的以下示例:

CMP  @R7,R6   ; Is R6 < @R7?
JL   Label5   ; Yes, go to Label5
...           ; No, continue here

在所有兩個操作數的MSP指令中,第一個操作數是源,第二個操作數是目標。 對於所有其他指令,此約定更具可讀性,但對於CMP,則意味着將第二個操作數與第一個操作數進行比較。

因此CMP #0, R5JL檢查R5是否小於零(不是這種情況)。

為了確保循環后R5為零,請在R5不等於零(即JNE (並且CMP #0, xTST x相同。)

這是我認為其他答案缺少的重點。 正如克利福德指出,如果V xor N為1,則JL表示跳躍

0x0005-0x0000

減法是通過加法,求反和加法完成的

11111111111111111
 0000000000000101
+1111111111111111
===================
 0000000000000101

N是0,V是0

N xor V為0 xor 0為0

JL不應分支。

N為0,V為0,Z為0,並且進位取決於體系結構,可以將其保持為C = 1,也可以將其求反,因為這是減法並認為是借位C = 0

從注釋中聽起來,您希望它退出R5 = 0的循環,所以我們知道R5大於0的標志是什么(我們可以假設)

0x0000-0x0000

   11111111111111111
    0000000000000000
 +  1111111111111111
====================
    0000000000000000

V是0,N是0,Z現在是1,C是0或1,具體取決於架構

最容易使用的一個是如果不為零則跳轉(如果未設置z標志則為跳轉),這也不會有大於或小於您對於體系結構和文檔了解的問題對於無符號數學或有符號數學,大於助記符小於助記符會有所不同。 例如,如果您看一下arm,您會看到它從已簽名的代碼中調用了未簽名的符號(同一指令的兩個助記符/名稱)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM