汇编 6502 中的 256 和 64 位数字

问题描述

我必须用 6502 汇编语言编写代码,使用基本的位移运算以及算术和逻辑运算将 256 位数字除以 64 位数字。 我只是不知道如何在汇编 6502 中编写 256 和 64 位数字。

解决方法

我只是不知道如何在程序集 6502 中编写 256 和 64 位数字。

您可以将它们分别存储为 328 字节的字符串。

在内存中,qword 编号 $1122334455667788 看起来像这 8 个字节:

$88,$77,$66,$55,$44,$33,$22,$11

类似,但对于 256 位数字来说,时间长了 4 倍。


了解如何处理多字节数字。这是几个 16 位数字的相加。
如果 NumA 为 1122 美元,NumB 为 3344 美元,则总和将为 Res

CLD
CLC
LDA NumA    ; -> A = $22
ADC NumB    ; -> A = $22 + $44 = $66
STA Res
; The carry propagates to the higher order addition
LDA NumA+1  ; -> A = $11
ADC NumB+1  ; -> A = $11 + $33 = $44
STA Res+1

Res 现在持有 4466 美元。

处理非常大的数字将需要一个循环。接下来是两个qwords的相加:

 CLD
 CLC
 LDY #8        ; Qwords have 8 bytes
 LDX #0
Loop:
 LDA NumA,X
 ADC NumB,X
 STA Res,X
 INX           ; INX and DEY don't clobber the carry
 DEY           ; and thus it can propagate
 BNE Loop