START: LDA #$11 ; load accumulator
- A=$11
STA $2123 ; store accumulator to a memory address
- memory[$2123] = $11
CLRA
- A=$00 (redundant, as next instruction will load A again)
LDA #$67 ; load accumulator
- A=$67
LDHX #$2120 ; load index register
- H:X=$2120
SUB $03, X ;subtract accumulator using index register
- this is addressing mode "Indexed, 8-Bit Offset" (indexed by H:X)
- target memory address is calculated as H:X+$03 = $2123
- finally subtraction is done on A: A=A-memory[$2123] ($67-$11=$56)
ADD #$06 ; add accumulator
- A=A+$06 ($56+$06=$5C)
注意#$
vs $
(立即十六进制值 vs 内存地址/偏移十六进制值)和汇编器的整体语法(我实际上主要是在猜测你正在使用哪个 CPU 和汇编器,看起来像飞思卡尔 HCS08,但你应该知道得更好我从来没有为类似的代码做过代码),因为每个汇编程序都可以有微妙的(不同的)细节如何编写某些机器指令,每个 CPU 都有不同的指令集(哪些指令可用以及如何有效地解决某些编程问题)。
因此,您应该知道足够好的语法以正确评估特定行生成的指令,然后您可以查看指令集手册,该指令(及其变体)究竟做了什么。练习调试器也很有帮助,实际上编写了一些小任务并在调试器中单步执行每条指令,将实际结果与您的假设进行比较。