汇编程序经常会使用基于内存的计数器,偶尔需要进行+1和-1的操作。一种解决思路是依次使用LSB
和MSB
指令,并借助ADC/SBC
指令实现增加或减少1的操作。但实际上6402芯片的指令集提供了INC
和DEC
这两条更加高效的指令来实现这一操作。
递增操作比较简单粗暴,我们只增加最不重要的字节,直到结果变成零。这表明计算已经换行(例如01 => $00),并且需要增加到最重要的字节。
; Increment a 16 bit value by one
_INC16 INC MEM+0 ;Increment the LSB
BNE _DONE ;If the result was not zero we're done
INC MEM+1 ;Increment the MSB if LSB wrapped round
_DONE EQU *
递减则有点棘手,因为我们需要知道最不重要的字节何时将从FF。答案是首先将其加载到累加器中以设置处理器标志,从而对其进行测试。
; Decrement a 16 bit value by one
_DEC16 LDA MEM+0 ;Test if the LSB is zero
BNE _SKIP ;If it isn't we can skip the next instruction
DEC MEM+1 ;Decrement the MSB when the LSB will underflow
_SKIP DEC MEM+0 ;Decrement the LSB
网友评论