【问题标题】:IAR Embedded workbench illegal opcode errorIAR Embedded Workbench 非法操作码错误
【发布时间】:2018-10-26 08:06:19
【问题描述】:

我写这段代码,目的是为了返回???????????? = ∑A∙B,当 A,B 是 2 个长度为 8 的数字数组时。

当程序到达 RET 命令时,出现错误: “在地址 0X0 上发现非法操作码”。 我不知道为什么会这样。

    #include <msp430xG46x.h>     ;define controlled include file

         ORG 1100h
Arr1     DW   2,0,4,2,6,5,1,1  
Arr2     DW   3,0,8,5,2,9,3,7  
Size     DW   8         ; Arr length

var1     DS32  1

         RSEG   CODE                  ; ORG   0x3100 - place program in 'CODE' segment in to Flash memory
         RSEG   CSTACK

Main    
         MOV   #Arr1,R5
         MOV   #Arr2,R6
         MOV   Size,R7
         CLR   R8
Loop      
          call #Func
          DEC  R7
          JNZ  Loop
L1        JMP  L1

Func      
          MOV  @R5,R10            ;Adding @R6, @R5 times to R8 
          CLR  R4
          ADD  @R6,R4
L2       
          DEC  R10
          JZ   Result
          ADD  @R6,R4
          ADC  R9
          JMP  L2
Result    
          MOV  R4,var1
          MOV  #2,R11
          MOV  R9,var1(R11)
          ADD  var1,R8
          INCD R5
          INCD R6      
          RET

;-------------------------------------------------------------------------------

          COMMON  INTVEC                  ; Interrupt Vectors
;-------------------------------------------------------------------------------

         ORG     RESET_VECTOR            ; POR, ext. Reset

         DW      Main

         END

【问题讨论】:

  • 假设您在堆栈顶部没有正确返回地址的时间点执行RET 指令。使用调试器找出这可能是如何发生的。顺便说一句,你的乘法似乎不正确。如果A 为 0 会怎样? (因为它有时会与您的测试数据一起使用)。
  • 嗨迈克尔,谢谢,我会尝试查看退货地址。等我结束后,我会再次检查乘法。

标签: assembly msp430


【解决方案1】:

1) SP 寄存器未初始化,因此您将内存推送到 0x0000,这取决于您的 MCU 可能是任何东西。这也会使调用和调用变得一团糟。

2) 您的代码以堆栈段结尾,因为 RSEG CSTACK 位于 RSEG CODE 之后和您的代码之前。

改变

    RSEG   CODE                  ; ORG   0x3100 - place program in 'CODE' segment in to Flash memory
    RSEG   CSTACK

Main

     RSEG   CSTACK
     RSEG   CODE                  ; ORG   0x3100 - place program in 'CODE' segment in to Flash memory

Main     MOV     #SFE(CSTACK), SP

【讨论】:

    猜你喜欢
    • 2013-10-20
    • 2013-06-21
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2019-02-17
    • 2015-10-18
    • 2011-02-25
    • 2012-08-18
    相关资源
    最近更新 更多