Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在6502中添加两个n字节整数以生成n字节答案?_Loops_Assembly_Addition_6502 - Fatal编程技术网

Loops 在6502中添加两个n字节整数以生成n字节答案?

Loops 在6502中添加两个n字节整数以生成n字节答案?,loops,assembly,addition,6502,Loops,Assembly,Addition,6502,我在6502中遇到了另一个问题 我试图添加两个n字节整数以生成一个n字节的结果。我不完全确定我是否了解6502芯片,因为我应该为这个项目,所以任何对我目前的代码反馈将是非常有帮助的 我知道我应该使用INX(递增x寄存器)和DEY(递减y寄存器),但我不确定操作码的位置 说明: 使用绝对索引寻址添加两个n字节整数 Adding two n-byte integers using absolute indexed addressing  The addends start at memory loc

我在6502中遇到了另一个问题

我试图添加两个n字节整数以生成一个n字节的结果。我不完全确定我是否了解6502芯片,因为我应该为这个项目,所以任何对我目前的代码反馈将是非常有帮助的

我知道我应该使用INX(递增x寄存器)和DEY(递减y寄存器),但我不确定操作码的位置

说明: 使用绝对索引寻址添加两个n字节整数

Adding two n-byte integers using absolute indexed addressing 
The addends start at memory locations $xxxx, $yyyy, answer is at $zzzz
Byte length of the integers is at $AAAA (¢—>256)

START = $0500
              CLC
              ____
loop          LDA      $0400, x 
              ADC      $0410, x
              STA      $0412, x
             ____
             BNE      loop
             BRK
LDA、ADC和STA在环路外(首次在组件中使用环路)

编辑:


这假设加数/结果字段以小端格式(LSB/MSB)存储,这对于6502(实际上是大多数8位)系统来说是不寻常的。但是,OP没有指定endian ness,因此它可以按原样工作。请注意,如果数据存储在MSB/LSB中,则可以避免使用两个索引寄存器,而只使用一个act作为长度和计数器来缩短/加速循环。在进行加法之前,我还会根据需要显式设置/清除十进制模式。您觉得这样做合适吗?(带内存地址)@8bitGuru:6502是little-endian,所以我希望数据是little-endian——我从来没有听说过基于6502的系统使用big-endian做任何事情……编辑版本不就是这么做的吗?对不起,我搞混了。我的错,我把我的‘endian’调换了。然而,我从未见过一个n字节的算法能处理存储在这个序列中的数据。考虑两个3字节的值543210和654321 -这些将通常按给定的顺序存储在存储器中,并且您将添加10 + 21,然后32 + 43 +C,然后54 + 65 + C。示例算法期望值为103254和214365-与6502的尾数一致,但与通常存储和处理n字节值的方式相反。该算法假设加数/结果字段以小尾数格式(LSB/MSB)存储,这对于6502(实际上是大多数8位)系统来说是不寻常的。但是,OP没有指定endian ness,因此它可以按原样工作。请注意,如果数据存储在MSB/LSB中,则可以避免使用两个索引寄存器,而只使用一个act作为长度和计数器来缩短/加速循环。在进行加法之前,我还会根据需要显式设置/清除十进制模式。您觉得这样做合适吗?(带内存地址)@8bitGuru:6502是little-endian,所以我希望数据是little-endian——我从来没有听说过基于6502的系统使用big-endian做任何事情……编辑版本不就是这么做的吗?对不起,我搞混了。我的错,我把我的‘endian’调换了。然而,我从未见过一个n字节的算法能处理存储在这个序列中的数据。考虑两个3字节的值543210和654321 -这些将通常按给定的顺序存储在存储器中,并且您将添加10 + 21,然后32 + 43 +C,然后54 + 65 + C。示例算法期望值为103254和214365-与6502的尾数一致,但与通常存储和处理n字节值的方式相反。该算法假设加数/结果字段以小尾数格式(LSB/MSB)存储,这对于6502(实际上是大多数8位)系统来说是不寻常的。但是,OP没有指定endian ness,因此它可以按原样工作。请注意,如果数据存储在MSB/LSB中,则可以避免使用两个索引寄存器,而只使用一个act作为长度和计数器来缩短/加速循环。在进行加法之前,我还会根据需要显式设置/清除十进制模式。您觉得这样做合适吗?(带内存地址)@8bitGuru:6502是little-endian,所以我希望数据是little-endian——我从来没有听说过基于6502的系统使用big-endian做任何事情……编辑版本不就是这么做的吗?对不起,我搞混了。我的错,我把我的‘endian’调换了。然而,我从未见过一个n字节的算法能处理存储在这个序列中的数据。考虑两个3字节的值543210和654321 -这些将通常按给定的顺序存储在存储器中,并且您将添加10 + 21,然后32 + 43 +C,然后54 + 65 + C。示例算法期望值为103254和214365-与6502的尾数一致,但与通常存储和处理n字节值的方式相反。该算法假设加数/结果字段以小尾数格式(LSB/MSB)存储,这对于6502(实际上是大多数8位)系统来说是不寻常的。但是,OP没有指定endian ness,因此它可以按原样工作。请注意,如果数据存储在MSB/LSB中,则可以避免使用两个索引寄存器,而只使用一个act作为长度和计数器来缩短/加速循环。在进行加法之前,我还会根据需要显式设置/清除十进制模式。您觉得这样做合适吗?(带内存地址)@8bitGuru:6502是little-endian,所以我希望数据是little-endian——我从来没有听说过基于6502的系统使用big-endian做任何事情……编辑版本不就是这么做的吗?对不起,我搞混了。我的错,我把我的‘endian’调换了。然而,我从未见过一个n字节的算法能处理存储在这个序列中的数据。考虑两个3字节的值543210和654321 -这些将通常按给定的顺序存储在存储器中,并且您将添加10 + 21,然后32 + 43 +C,然后54 + 65 + C。示例算法期望值为103254和214365-与6502的endian一致,但与通常存储和处理n字节值的一般方式相反
    Variables

A1 = $0600
B1 = $0700
B2 = $0800
Z1 = $0900

    [START] = $0500

            CLC             18  
            LDX             AE  
            LDY     A1      AC
loop:       LDA     B1, x   BD      
            ADC     B2, x   7D  
            STA     Z1, x   9D      
            INX     E8  
            DEY             88  
            BNE    loop     D0
;Adding two n-byte integers using absolute indexed addressing 
;The addends start at memory locations $xxxx, $yyyy, answer is at $zzzz
;Byte length of the integers is at $AAAA (¢—>256)

        CLC
        LDX #0        ; start at the beginning
        LDY $AAAA     ; load length into Y
loop:   LDA $xxxx, X  ; load first operand
        ADC $yyyy, x  ; add second operand
        STA $zzzz, x  ; store result
        INX           ; go on to next byte
        DEY           ; count how many are left
        BNE loop      ; if more, do more