美文网首页
6502芯片:加/减法和取反(Addition / Subtra

6502芯片:加/减法和取反(Addition / Subtra

作者: 苹果王子刘泽庆 | 来源:发表于2021-05-23 09:07 被阅读0次

加法和减法(Addition & Subtraction)

6502芯片提供了8位的加减指令和一个进/借位标志来实现加减法计算。

为了实现16位加法,程序员必须编写两对加法;一个用于最低有效字节,一个用于最高有效字节。在第一次添加之前必须清除进位标志,以确保不执行额外的自增操作。

; 16 bit Binary Addition
        CLC             ;Ensure carry is clear
        LDA VLA+0       ;Add the two least significant bytes
        ADC VLB+0
        STA RES+0       ;... and store the result
        LDA VLA+1       ;Add the two most significant bytes
        ADC VLB+1       ;... and any propagated carry bit
        STA RES+1       ;... and store the result

减法也遵循同样的模式,但是必须在第一对字节被减法以获得正确的结果之前设置进位。

; 16 bit Binary Subtraction
        SEC             ;Ensure carry is set
        LDA VLA+0       ;Subtract the two least significant bytes
        SBC VLB+0
        STA RES+0       ;... and store the result
        LDA VLA+1       ;Subtract the two most significant bytes
        SBC VLB+1       ;... and any propagated borrow bit
        STA RES+1       ;... and store the result

通过对另外两个字节的数据重复LDA/ADC/STA或LDA/SBC/STA模式,加法和减法算法都可以扩展到32位。

取反(Negation)

对一个采用补码的2进制数进行取反操作,典型的操作方法是所有位取反(通过EOR指令将操作数和$FF进行异或操作),然后加1,如下所示。

; 8 bit Binary Negation
        CLC         ;Ensure carry is clear
    EOR #$FF    ;Invert all the bits
    ADC #1      ;... and add one

这种技术适用于累加器中已有的单个字节,但不适用于更大的数字。有了这些,从0减去它们会更简单。

; 16 bit Binary Negation
        SEC             ;Ensure carry is set
        LDA #0          ;Load constant zero
        SBC SRC+0       ;... subtract the least significant byte
        STA DST+0       ;... and store the result
        LDA #0          ;Load constant zero again
        SBC SRC+1       ;... subtract the most significant byte
        STA DST+1       ;... and store the result

相关文章

网友评论

      本文标题:6502芯片:加/减法和取反(Addition / Subtra

      本文链接:https://www.haomeiwen.com/subject/bflojltx.html