跳轉到內容

TI 83 Plus 彙編/跳轉

來自華夏公益教科書,開放的書籍,為開放的世界

在之前的程式中,寫了一個標籤

text:
      .db "Hello, World",0

text: 是一個標籤。標籤永遠不會被縮排,並且總是以冒號結尾。標籤實際上是 16 位數字,指向緊隨其後的指令。因此,標籤實際上是 16 位立即數,可以以相同的方式處理(相同的載入適用於它們)。它們標記程式中的一個位置。可以使用 jp labelname 跳轉到一個標籤。

.NOLIST
#define END .end
#define end .end
#define equ .equ
#include "ti83plus.inc"
.LIST

      .org 9D93h
      .db $BB,$6D
      jp clearscreen   ;here it is
      ld a,0
      ld (CURCOL),a
      ld (CURROW),a
      ld hl,text
      B_CALL(_PutS)
      ret
text:
      .db "Text",0
clearscreen:           ;and here it goes
      B_CALL(_ClrLCDFull)
.end
end

(B_CALL(_ClrLCDFull) 清理螢幕。) 上面的程式清除了螢幕,但從未顯示文字。為什麼?因為 jp clearscreen 會自動跳轉到標籤 clearscreen,並一直執行到程式結束,跳過所有文字顯示程式碼。

jp label 等於此無效語法程式碼 LD PC,label

順便說一句,以分號結尾的內容是註釋:它們用於解釋程式碼,並且編譯器會忽略它們。(編譯器是將您編寫的程式碼轉換為機器可以讀取的程式碼的程式。)

jr 是一個類似於 jp 的跳轉指令,但有一些重要的區別。它小一個位元組(這可能看起來不算多,但它可以累加起來);然而,與 jp(可以跳轉到任何地址)不同,jr 只能跳轉到程式碼中最多向前 127 位元組或最多向後 128 位元組的標籤。因此,如果標籤很遠,請使用 jp,否則使用 jr。事實上,您可能希望始終使用 jr,因為當您編譯時,如果標籤距離過遠,就會返回錯誤。編譯器將 jr 後面標籤指向的地址從標籤本身的地址中減去,如果結果不適合帶符號的 8 位數字,它將丟擲錯誤,因為它無法編譯(地址超出範圍)。JR 始終比 JP 慢,並且您無法在其中使用所有條件。JR 可以使用條件 Z、NZ、C 和 NC,而 JP、RET 和 CALL 可以使用條件 Z、NZ、C、NC、PO(奇校驗)、PE(偶校驗)、P(正數)和 M(負數)。

上面程式中的跳轉可以用 jr 替換

.NOLIST
#define END .end
#define end .end
#define equ .equ
#include "ti83plus.inc"
.LIST

      .org 9D93h
      .db $BB,$6D
      jr clearscreen      ;this saves space!

假設您要跳轉到某個地方然後返回。CALL 將其地址 +3 推入堆疊;RET 從 PC 中彈出堆疊的頂部。這與 PUSH-POP 堆疊完全相同,因此請小心。使用 call 和 ret 到某處“跳轉”並返回

.NOLIST
#define END .end
#define end .end
#define equ .equ
#include "ti83plus.inc"
.LIST

      .org 9D93h
      .db $BB,$6D
      call clearscreen   ;1. here it is
      ld a,0             ;4. to here
      ld (CURCOL),a
      ld a,0
      ld (CURROW),a
      ld hl,text
      B_CALL(_PutS)
      ret              ;5. and ends
text:
      .db "Text",0
clearscreen:           ;2. here it goes
      B_CALL(_ClrLCDFull)
      ret              ;3. then it comes back
.end
end

如您所見,第一個 ret(緊接在 _ClrLCDFull 之後)返回到 call 命令之後。然後,第二個 ret 結束了程式。您可以將您的程式視為一個大型呼叫例程,其中結束的 ret 返回到主計算器。警告:呼叫會干擾堆疊。

這些跳轉可以與在後面部分中學到的程式碼結合使用。


前一個:Hello World
下一個:暫存器
目錄:TI 83 Plus 彙編

華夏公益教科書