assembly MSP430汇编语言:变量分配误差

c0vxltue  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(138)

在课堂上学习MSP430 Launchpad汇编语言目前的任务是做逐步乘法和除法(即,用递归加法和减法模拟它们)。
我和教授一起学习了如何用汇编语言声明变量,但是当我试图编译时,却抛出了错误。

; Initialization Operations
Init:
            mov.b   m, R4   ;store m in R4
            mov.b   M, R5   ;store M in R5
            mov.w   #0, R6  ;store 0 in R6

for:
            add.w   R4, R6  ;add contents of R4 to P
            dec.w   R5      ;decrement R5
            jnz     for     ;jump to R4 until R5 is zero
exitFor:
            mov.w   R6, P   ;store R6 in P
            jmp     exitFor ;infinite loop
            nop             ; end program

; Variables for multiplication
            .data
m:          .byte   #40     ; multiplicand
M:          .byte   #5      ; multiplier
P:          .short          ; product

错误都在.data指令下面。m和M线抛出[E0200] Bad term in expression[E0000] Commas must separate directive elements,P线抛出[E0005] Operand missing。我在程序的除法版本上也遇到了类似的问题。

aydmsdu9

aydmsdu91#

来自Fuz的评论:
请注意,程序集是组装的,而不是编译的。错误是你有一个前导符号#。这对于指令来说是错误的。指令没有寻址模式,只是接受它们的参数而不加修饰,例如。.byte 40。对于.short指令,您忘记了给予初始值。加上这个,它应该工作。(SRC)
好吧,就这样了。

.data
m:          .byte   40      ; multiplicand
M:          .byte   5       ; multiplier
P:          .short  0       ; product

另外,我最初没有初始化P,因为实验说明中说要定义但不要初始化它。我不明白我需要使用.space.bss来处理这个问题,所以严格来说,“正确”的解决方案应该是:

.data
m:          .byte   40      ; multiplicand
M:          .byte   5       ; multiplier
P:          .space  2       ; product

相关问题