You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Motorola68k模拟器中多BCD数链表求和汇编实现问询

Motorola 68k 单字节BCD链表累加修正方案

问题分析

你的代码核心问题在于过度复杂化了单字节BCD的累加逻辑,同时链表遍历的元素定位有误,且错误地将BCD值当作二进制数进行加法,导致结果不符合BCD编码规则。

修正思路

  1. 简化BCD累加:每个链表元素是单字节BCD,直接将其加到D6的低字节,用DAA指令调整为BCD格式(自动处理进位)
  2. 正确遍历链表:每个元素结构为[4字节下元素长地址][1字节BCD数],当前元素的BCD数在A0+4位置,下一个元素地址直接取(A0)的长地址
  3. 修正内存布局:$6000地址(LIST)需存放首元素地址、链表长度、结果,因此ORG应指向LIST而非LISTA
  4. 移除冗余临时存储:无需NUM1、NUM2等中间变量,直接操作寄存器即可

修正后的代码

DATA:           EQU     $1500
PROG:           EQU     $1000
LIST:           EQU     $6000       ; 任务要求的$6000地址

                ORG     LIST        ; 定位到$6000存储首地址、长度、结果
FIRST           DS.L    1           ; 链表首元素长地址
LENGTH          DS.W    1           ; 链表长度(字)
RESULT          DS.W    1           ; 结果存储位(字)

                ORG     PROG

START:      
                MOVE.L  FIRST, A0   ; A0指向当前链表元素
                MOVE.W  LENGTH, D1  ; D1存储剩余遍历次数
                MOVEQ   #0, D6      ; D6初始化为0,用于累加BCD结果
                CLR.W   RESULT      ; 初始化结果存储单元
                CLR.CC              ; 清除进位标志,确保初始累加正确

SUM_LOOP:
                CMP.W   #0, D1
                BEQ     DONE        ; 遍历完成,跳转到结束
            
                ; 取出当前元素的BCD数(元素结构:4字节下地址 + 1字节BCD)
                MOVE.B  4(A0), D0   ; D0 = 当前元素的BCD字节
                ADD.B   D0, D6      ; 将BCD字节加到D6低字节
                DAA                 ; 调整D6低字节为BCD格式(处理进位)
            
                ; 移动到下一个元素
                MOVE.L  (A0), A0    ; A0 = 当前元素指向的下一个元素地址
            
                SUBQ.W  #1, D1      ; 剩余次数减1
                BRA     SUM_LOOP

DONE:
                MOVE.W  D6, RESULT  ; 将累加的BCD结果存入RESULT

                MOVE.B  #9, D0
                TRAP    #15         ; 暂停模拟器

                END     START

关键细节说明

  • DAA指令:用于将二进制加法结果调整为BCD格式,必须在字节加法后立即使用,会根据进位标志和寄存器低4位的值自动调整,确保结果符合0-9的BCD编码规则
  • 链表元素定位:4(A0)指向当前元素的BCD字节,因为前4字节是下一个元素的长地址
  • 进位处理:初始清除进位标志,每次ADD.B后DAA会自动将进位传递到D6的高字节,最终D6的16位会存储符合要求的BCD累加结果,适配RESULT的字存储需求

内容的提问来源于stack exchange,提问作者Muchacho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:32:51