1

这是一个涉及汇编语言的微控制器考试的练习题,它要求在执行最后一行后在累加器中查找内容。如果有人对组装有任何了解,我无法理解答案是 $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
4

1 回答 1

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)

注意#$vs $(立即十六进制值 vs 内存地址/偏移十六进制值)和汇编器的整体语法(我实际上主要是在猜测你正在使用哪个 CPU 和汇编器,看起来像飞思卡尔 HCS08,但你应该知道得更好我从来没有为类似的代码做过代码),因为每个汇编程序都可以有微妙的(不同的)细节如何编写某些机器指令,每个 CPU 都有不同的指令集(哪些指令可用以及如何有效地解决某些编程问题)。

因此,您应该知道足够好的语法以正确评估特定行生成的指令,然后您可以查看指令集手册,该指令(及其变体)究竟做了什么。练习调试器也很有帮助,实际上编写了一些小任务并在调试器中单步执行每条指令,将实际结果与您的假设进行比较。

于 2018-08-19T17:59:33.277 回答