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

SIC汇编程序输出异常排查:输出00 00 00而非预期时间格式

SIC汇编程序输出异常排查与修复

开发的SIC汇编程序在指定模拟器运行时,向设备64输出00 00 00,而非预期的时间格式。

程序原代码

CLOCK    START   3072
T        WORD    48500
D        WORD    64
H        RESW    1
M        RESW    1
F        RESW    1
P        RESB    1
TMP      RESB    1
A        BYTE    C'A'
P2       BYTE    C'P'

         LDA     T
         AND     #8000
         STA     F

         LDA     T
         AND     #7FFF
         DIV     #3600
         STA     H
         STX     TMP

         LDA     TMP
         DIV     #60
         STA     M
         STX     TMP

         LDA     F
         COMP    #8000
         JEQ     P24

         LDA     H
         COMP    #12
         JLT     AM
         SUB     #12
         STA     H
         LDA     P2
         STA     P
         J       P12

AM       LDA     A
         STA     P

P12      LDA     H
         COMP    #10
         JLT     SH12
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     H
         ADD     #48
         LDCH    0
         WD      D
         J       M12

SH12     LDA     H
         ADD     #48
         LDCH    0
         WD      D

M12      LDA     M
         COMP    #10
         JLT     SM12
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     M
         ADD     #48
         LDCH    0
         WD      D
         J       PD

SM12     LDA     M
         ADD     #48
         LDCH    0
         WD      D

PD       LDA     P
         LDCH    0
         WD      D
         RSUB

P24      LDA     H
         COMP    #10
         JLT     SH24
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     H
         ADD     #48
         LDCH    0
         WD      D
         J       M24

SH24     LDA     H
         ADD     #48
         LDCH    0
         WD      D

M24      LDA     M
         COMP    #10
         JLT     SM24
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     M
         ADD     #48
         LDCH    0
         WD      D
         RSUB

SM24     LDA     M
         ADD     #48
         LDCH    0
         WD      D
         RSUB

         END     CLOCK

已尝试的排查措施

  • 确保定时器值处理正确,按剩余秒数拆分小时和分钟
  • 根据定时器值最高位选择12小时/24小时格式
  • 使用ADD #48将数值转换为正确ASCII值
  • 用LDCH加载字节后通过WD指令发送至设备

预期输出

  • 12小时制:01:28P(ASCII码:31 3A 30 31 3A 32 38 50)
  • 24小时制:13:28(ASCII码:31 33 3A 32 38)

问题定位与修复说明

核心错误点

  1. 除法运算逻辑颠倒:
    SIC的DIV指令执行后,商存入X寄存器,余数存入A寄存器。原代码错误地将X(商)存入TMP作为余数处理,A(余数)存入H作为小时数,导致时间计算完全错误,最终得到的小时/分钟均为0。

  2. LDCH指令操作数错误:
    SIC的LDCH是从指定内存地址加载字节到A的低8位,原代码用LDCH 0读取地址0的内容(通常为0),而非转换后的ASCII值,直接导致输出全0。

  3. 缺少格式元素:
    原程序未处理冒号的输出,且单数字时间未补前导0,不符合预期格式。

修复后代码

CLOCK    START   3072
T        WORD    48500
D        WORD    64
H        RESW    1
M        RESW    1
F        RESW    1
P        RESB    1
TMP      RESB    1
A        BYTE    C'A'
P2       BYTE    C'P'
COLON    BYTE    C':'  ; 新增冒号存储单元

         LDA     T
         AND     #8000
         STA     F

         LDA     T
         AND     #7FFF
         DIV     #3600
         STX     H       ; 修正:DIV后X是商(小时数),存入H
         STA     TMP     ; 修正:DIV后A是余数(剩余秒数),存入TMP

         LDA     TMP
         DIV     #60
         STX     M       ; 修正:DIV后X是商(分钟数),存入M

         LDA     F
         COMP    #8000
         JEQ     P24

         LDA     H
         COMP    #12
         JLT     AM
         SUB     #12
         STA     H
         LDA     P2
         STA     P
         J       P12

AM       LDA     A
         STA     P

P12      LDA     H
         COMP    #10
         JLT     SH12
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     H
         ADD     #48
         STA     TMP     ; 新增:将ASCII值存入TMP
         LDCH    TMP     ; 修正:读取TMP而非地址0
         WD      D
         J       COLON_OUTPUT  ; 跳转输出冒号

SH12     LDA     #48     ; 新增:补前导0
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     H
         ADD     #48
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D

COLON_OUTPUT  ; 新增:输出冒号
         LDCH    COLON
         WD      D
         J       M12

M12      LDA     M
         COMP    #10
         JLT     SM12
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     M
         ADD     #48
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D
         J       PD

SM12     LDA     #48     ; 新增:补前导0
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     M
         ADD     #48
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D

PD       LDA     P
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D
         RSUB

P24      LDA     H
         COMP    #10
         JLT     SH24
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     H
         ADD     #48
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D
         J       COLON_OUTPUT2

SH24     LDA     #48     ; 新增:补前导0
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     H
         ADD     #48
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D

COLON_OUTPUT2  ; 新增:输出冒号
         LDCH    COLON
         WD      D
         J       M24

M24      LDA     M
         COMP    #10
         JLT     SM24
         SUB     #10
         ADD     #48
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     M
         ADD     #48
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D
         RSUB

SM24     LDA     #48     ; 新增:补前导0
         STA     TMP
         LDCH    TMP
         WD      D
         LDA     M
         ADD     #48
         STA     TMP     ; 新增:存入TMP
         LDCH    TMP     ; 修正:读取TMP
         WD      D
         RSUB

         END     CLOCK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 23:44:59