This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] WEBENCH®︎Tools/MSP430G2153:在 IAR Workbench 中编译汇编代码时出现问题

Guru**** 2550040 points
Other Parts Discussed in Thread: MSP430G2153

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/588885/webench-tools-msp430g2153-problems-in-compiling-assembly-code-in-iar-workbench

器件型号:MSP430G2153

工具/软件:WEBENCHRegistered设计工具

第一次来这里、我是一个新用户、我正在尝试编译一些汇编代码、但它不起作用。

我在 C/C++中执行了一个代码、该代码仅使用求和和和减法计算平方根、我尝试将其转换为汇编语言、这里是代码:

主:


     MOV.w #36、R15;将我要计算的平方根值放在 R15中
     调用 Square_Root;调用函数平方根
     JMP 结束

平方根:


     MOV.w #0、R14;R14是一个计数器'n'并且被设定为零
     TST.w R15;如果 R15 = 0、则转至 END_2
     JZ 结束_2
             ;;初始估算


     MOV.w R15、R12; 这是除法算法的一部分,R12是分子
     MOV.w #2、R11;R11是分母: R12/R11
     调用 Division_1
     MOV.w R13、R10;R13是除法的结果,将其放入 R10中

         

同时:           ;计算平方根的算法基本上是: x (n+1)=(x (n)+ S/x (n))/2,在 n+1次迭代之后,S 是我要计算平方根的数字,在本例中为0x36d
    

              CMP #16、R14;将 R14与0x16d 进行比较。 此处的目的是创建一个包含多达16个计数器的计数器
              jeq end_2;如果 R14 = 16 ->跳转至 end_1

              MOV.w R15、R12;这里再次采用除法算法,只是传递参数
              MOV.w R10、R11;  
              调用 Division_1
              MOV.w R13、R9;R9 = R13 (除法的结果)
              ADD.w R10、R9;R9 = R9 + R10
              MOV.w R9、R12;编号器
              MOV.w #2、R11;分母
              调用 Division_1;
              Inc. w R14;将 R14 in 1.
              MOV.w R13、R10;R10 = R13上一次除法的结果
              JMP while

结束_1:
             MOV.w R10、R15;将平方根的结果放在 R15中
结束_2:
             可重置


除法1:
            MOV.w #0、R13;将计数器取零
除法2:

            CMP #0、R12;将 R12与0进行比较

           JL end_Division;如果小于零->跳转到分部的最后一个

           jeq end_Division;->如果等于零->跳转到分部的最后一个

           sub.w R11、R12;R12 = R12 - R11 -> R12分子、R11分母
           Inc.w R13;包括计数器  
           JMP 除法2

结束除法:
          可重置
结束:
JMP $;无穷大循环

嗯、我不知道代码是否足够清楚、对此我深表歉意。

IAR Workbench 给我的错误是:

 用户错误:在地址0x430E 上发现非法操作码
无法执行:驱动程序错误。 发生错误后、程序计数器(PC)为 。

感谢你的帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jucelino、您好!

    我有点担心第一个提到地址0x430E 的错误、因为查看线程标题中提到的 MSP430G2153器件的数据表、没有内存、因此应该没有代码。 您使用的是 MSP430G2153器件还是不同的 MSP430? 我认为您的项目设置中的某些内容可能已关闭。

    您提到过您之前用 C/C++编写了代码-当您更改为汇编时、您是否确保在 IAR 中设置用于汇编的项目? 这涉及到转到"Project">"Create New Project">"and select asm to make a assembly project"。

    您是否知道您是否为相应的 MSP430器件设置了项目? 创建项目后、转至 Project > Options、然后在 Target 选项卡上的 General Options 下、确保 Device 设置为您正在使用的器件(MSP430G2153?)

    希望其中一个可能会导致我们找到您问题的根本原因。

    此致、
    Katie
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jucelino、您好!

    你有更新吗? 我们是否可以做更多的工作来帮助您、或者您是否能够解决您的问题?

    此致、
    Katie