【发布时间】:2014-02-20 21:39:40
【问题描述】:
我最初(寻求帮助)并在 6502 宠物模拟器中编写了一个 BASIC 程序,该程序添加了两个 n 字节整数。但是,我的反馈是它只是添加两个 16 位整数(而不是添加 n 字节整数)。
谁能通过查看我的代码来帮助我理解这个反馈并指出正确的方向来制作一个添加两个 n 字节整数的程序?
感谢您的合作!
文档: 使用绝对索引寻址添加两个 n 字节整数。加数从内存位置 $0600、$0700 开始,答案是 $0800。整数的字节长度为 $0600 (¢ —> 256)
Machine Code:
18 a2 00 ac 00 06 bd 00
07 7d 00 08 9d 00 09 e8
00 88 00 d0
操作码、文档、变量:
A1 = $0600
B1 = $0700
B2 = $0800
Z1 = $0900
[START] = $0500
CLC 18 // loads x with 0
LDX A2 00 // loads length on Y
LDY A1 AC 00 06 // load first operand
loop: LDA B1, x BD 00 07 // adds second operand
ADC B2, x 7D 00 08 // store result
STA Z1, x 9D 00 09 // go to next byte
INX E8 00 // count how many are left
DEY 88 00 // do more if needed
BNE loop D0
【问题讨论】:
-
注释在汇编程序中是必不可少的。这段代码的参数是什么——在哪些寄存器/位置中提供了哪些数据,以及返回的结果在哪里?猜测:看起来 A 应该是字节数(两个值的长度相同); B1 和 B2 是两个值的起始地址(表示为 LSB 在前),z 是具有相同长度的输出块。真的?如果是这样,我不确定我是否理解投诉。
-
我没有包含我的所有文档;愚蠢的错误。已编辑。请再次结帐。
-
仍然试图理解抱怨——自从我的 C64 以来已经太久了——你确定进位位从 add 到 add 正确传播了吗? (在你开始这个过程之前就很清楚了吗?)
-
我相信是因为我认为 ADC 被正确放置在循环中
标签: byte simulator addition basic 6502