【发布时间】: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'(注意#符号)。此外,LDAA和EORA都带有立即操作数,可以用一个带有 XOR 结果 (LDAA #$52) 的LDAA替换,因为它们都是常量,结果可以由汇编程序或程序员计算。
标签: assembly subroutine 68hc12