0

我正在尝试用汇编语言为stm8sf103微控制器编写程序。我想在 ram 寄存器中存储一个立即的十六进制值(例如 $0),但这不起作用,我想知道为什么:

stm8/
    segment 'rom'

loop
    ld  $0,#5
    jp  loop

    end

我得到错误:

as1 : Error 54: Can't match Addressing mode ' ld $0,#5'

4

1 回答 1

4

利用

MOV $0, #5

该指令影响任何条件标志。

ST8 Programming Manual,描述MOV

将一个字节的数据从源地址移动到目标地址。数据在移动时被检查1。蓄能器不受影响。

MOV指令有 3 种寻址方式:

  • 直接存储位置的立即字节
  • 一个直接内存位置到另一个直接内存位置(从 $00 到 $FF)
  • 一个直接内存位置到另一个直接内存位置(从 $0000 到 $FFFF)

您可以参考该手册了解支持的寻址模式(总共 20 种),这样您就可以理解为什么ld $0,#5不能工作(没有直接寻址和立即寻址)。


1我看不懂这句话,我相信有一个错字(应该是Data is not checks ...)。该手册明确指出没有标志受到影响。

于 2016-12-21T23:11:00.513 回答