这是涉及汇编语言的微控制器考试的一个实践问题,它要求在执行最后一行后在累加器中查找内容。如果有人对汇编有任何了解,我不明白答案是$ 5C,请帮帮我!
START: LDA #$11 ; load accumulator
STA $2123 ; store accumulator to a memory address
CLRA
LDA #$67 ; load accumulator
LDHX #$2120 ; load index register
SUB $03, X ;subtract accumulator using index register
ADD #$06 ; add accumulator
答案 0 :(得分:4)
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)
请注意#$
与$
(立即十六进制值与内存地址/偏移十六进制值)以及整个汇编程序的语法(实际上,我主要是在猜测哪个CPU和汇编程序正是您所需要的)正在使用,好像是Freescale HCS08,但您应该了解得更多,而我从来没有为类似的代码编写代码),因为每个汇编器对于如何编写某些机器指令都可能具有微妙的(不同的)细节,并且每个CPU都有不同的指令集(哪些指令可用,以及如何有效地解决某些编程问题。
因此,您应该足够了解语法,以正确评估特定行生成的指令,然后可以检查指令集手册,该指令(及其变体)的确切功能。这对于调试器的实践也有很大帮助,实际上是编写一些小任务并在调试器中对每条指令进行单步调试,将实际结果与您的假设进行比较。