跳轉到內容

TI 83 Plus 彙編/高階

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

高階 z80 程式設計技術

[編輯 | 編輯原始碼]

什麼是中斷?

[編輯 | 編輯原始碼]

中斷型別

[編輯 | 編輯原始碼]

如何編寫它們

[編輯 | 編輯原始碼]

如何安裝它們

[編輯 | 編輯原始碼]
跳轉表
[編輯 | 編輯原始碼]

直接 LCD 互動

[編輯 | 編輯原始碼]

最佳化

[編輯 | 編輯原始碼]

將累加器 (A) 設定為零的常用快捷方式是將其與自身異或

 ; instead of doing this
   ld a,0
 ; you can do this
   xor a

這非常普遍,不會影響程式碼的可讀性。事實上,它如此常見,以至於它甚至可能比使用“ld a,0”更具可讀性。但請注意,“xor a”會修改標誌(例如,它會設定 z 標誌並重置進位),而“ld a,0”不會修改任何標誌。

ld (addr),reg16

[編輯 | 編輯原始碼]

在向記憶體中的兩個連續位元組寫入資料時,使用一個 16 位暫存器通常比使用兩個帶 a 的載入指令更快且更小。

 ; rather than
   ld a,$10
   ld (penCol),a
   ld a,$20
   ld (penCol),a
 ; you can do
   ld de,$2010
   ld (penCol),de

這將 e 載入到 (penCol) 中,並將 d 載入到 (penCol+1) 中。penCol+1 是 penRow。但是,請記住,使用 hl 讀取/寫入記憶體地址比使用 de/bc 更快(4 個 t 狀態)且更小。

X <= A <= Y

[編輯 | 編輯原始碼]

如果您想知道累加器值是否在其他兩個值(例如 10 和 25)之間,您可能會想做類似這樣的事情

   cp 10      ; check if a >= 10
    jr c,wrongValue
   cp 26      ; check if a <= 25
    jr nc,wrongValue
 ; do whatever you wanted to do
 wrongValue:
 ; ...

但是,您無需進行兩次比較和跳轉,可以將第一個 cp 更改為減法。這將任何小於 10 的數字轉換為負數。例如

   sub 10      ; a value of 10 now equals 0
   cp 26-10    ; because of the sub 10, we now need to check if a is between 0 and 16, not 10 and 26
    jr nc,wrongValue
 ; do whatever you wanted to do
 wrongValue:
 ; ...

這種方法可以避免第一個 jr。

華夏公益教科書