【问题标题】:need help debugging assembly code (HCS 12)需要帮助调试汇编代码(HCS 12)
【发布时间】:2019-11-03 16:28:34
【问题描述】:

需要帮助调试,当汇编代码进入我的子程序时,它会打印出寄存器 B 的值而不是寄存器 A 的值。非常感谢任何帮助。

            dc.b    "Type a character"
            dc.b    0    ; using zero terminated strings

         LDS   #ROMStart         ; load stack pointer
         JSR   TermInit         ; needed for Simulator only
LOOP
         LDD   #PROMPT          ; pass the adr of the string
         JSR     printf     ; print the string         
         JSR     getchar     ; call getchar function -result is: character in B
         JSR    putchar
         CMPB           ‘W’     ;COMPARE USER INPUT TO W
         BNE     LOOP       ;
         JSR    WFCN
-------------------------------------------------------------------------------------------------------
  WFCN  PSHA
        LDAA    #$3D
        EORA     #$6F
        JSR     out2hex
        PULA
        RTS```

【问题讨论】:

  • 这台机器的寄存器非常有限。虽然返回值是在寄存器中完成的,但我相信参数是在堆栈上传递的。因此,您需要在 JSR putchar 之前将要打印的值推送到堆栈上。你能把B 寄存器压入堆栈吗?
  • 谢谢克里斯,这实际上是我在子例程中最终所做的 (pshb),然后清除它并将我想要打印的值存储到寄存器 B。
  • 对于即时模式应该是CMPB #'W'(注意# 符号)。此外,LDAAEORA 都带有立即操作数,可以用一个带有 XOR 结果 (LDAA #$52) 的 LDAA 替换,因为它们都是常量,结果可以由汇编程序或程序员计算。

标签: assembly subroutine 68hc12


【解决方案1】:

这些 C 函数的名称一直具有误导性。 getchar 返回 int 而不是 char,16 位。同样,putchar 采用 16 位 int 参数。因此,您的特定调用约定很可能使用双累加器 D(Codewarrior 调用约定就是这样工作的)。

由于 D = A + B(和大端),您期望的结果最终会出现在 ls 字节,累加器 B 中。

【讨论】:

    猜你喜欢
    • 2014-07-10
    • 1970-01-01
    • 2013-08-12
    • 2013-03-24
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2010-10-21
    相关资源
    最近更新 更多