当前位置: 首页 > 知识库问答 >
问题:

IT点指令臂组件

慕阳平
2023-03-14
CMP             R0, #0
ITT EQ
MOVEQ           R0, #0x7FFFFFFF
BXEQ            LR

其次,为什么需要IT指导?为什么不直接:

CMP             R0, #0
MOVEQ           R0, #0x7FFFFFFF
BXEQ            LR

它是MOV而不是MOVS,因此标志不会被更新,并且BXEQ中的EQ仍然“引用”CMP设置的标志值。

共有1个答案

充培
2023-03-14

你为什么不试试呢?

.cpu cortex-m3
.thumb
.syntax unified

    CMP             R0, #0
    ITT EQ
    MOVEQ           R0, #0x7FFFFFFF
    BXEQ            LR


    CMP             R0, #0
    MOVEQ           R0, #0x7FFFFFFF
    BXEQ            LR

初试

arm-none-eabi-as vectors.s -o vectors.o
vectors.s: Assembler messages:
vectors.s:13: Error: thumb conditional instruction should be in IT block -- `moveq R0,#0x7FFFFFFF'
vectors.s:14: Error: thumb conditional instruction should be in IT block -- `bxeq LR'
make: *** [vectors.o] Error 1

这是显而易见的,因为在thumb模式下没有这些指令的条件版本。

.cpu cortex-m3
.thumb
.syntax unified

    CMP             R0, #0
    ITT EQ
    MOVEQ           R0, #0x7FFFFFFF
    BXEQ            LR
   0:   2800        cmp r0, #0
   2:   bf04        itt eq
   4:   f06f 4000   mvneq.w r0, #2147483648 ; 0x80000000
   8:   4770        bxeq    lr
.cpu cortex-m3
.thumb
.syntax unified

    CMP             R0, #0
    ITT EQ
    MOV           R0, #0x7FFFFFFF
    BX            LR
vectors.s:8: Error: instruction not allowed in IT block -- `mov R0,#0x7FFFFFFF'
vectors.s:9: Error: incorrect condition in IT block -- `bx LR'
.cpu cortex-m3
.thumb
.syntax unified

    CMP             R0, #0
    IT EQ
    MOVEQ           R0, #0x7FFFFFFF
    BX            LR
   0:   2800        cmp r0, #0
   2:   bf08        it  eq
   4:   f06f 4000   mvneq.w r0, #2147483648 ; 0x80000000
   8:   4770        bx  lr

注意bx lr是相同的指令0x4770,在端或不在端的eq显然是一个汇编语法的东西,以帮助您解决问题,并确保您获得正确数量的指令绑定到If Then指令。(您可以看到在一个条件指令和两个条件指令之间发生了变化)。

我确实觉得很烦

.cpu cortex-m3
.thumb
.syntax unified

    CMP             R0, #0
    IT EQ
    MOVSEQ           R0, #0x7
    BX            LR

    movs r0,#7
    mov r0,#7
    movs.w r0,#7

在本例中使用thumb2扩展名

00000000 <.text>:
   0:   2800        cmp r0, #0
   2:   bf08        it  eq
   4:   f05f 0007   movseq.w    r0, #7
   8:   4770        bx  lr
   a:   2007        movs    r0, #7
   c:   f04f 0007   mov.w   r0, #7
  10:   f05f 0007   movs.w  r0, #7
.syntax unified

    CMP             R0, #0
    MOVSEQ           R0, #0x7
    BXEQ            LR

    movs r0,#7
    mov r0,#7

给出

00000000 <.text>:
   0:   e3500000    cmp r0, #0
   4:   03b00007    movseq  r0, #7
   8:   012fff1e    bxeq    lr
   c:   e3b00007    movs    r0, #7
  10:   e3a00007    mov r0, #7

也许这就是你问题的根源,但很有可能汇编语言可以为你插入it指令,但汇编语言希望是一对一的(尽管存在所有处理器的伪指令),所以我猜他们希望你明确地表明你想要If Then指令和/或你想要If Then指令。汇编程序也在帮助您,它说您需要使用一个IT块,而不是简单地说它是一个无效指令。

另一个实验

.cpu arm7t
.thumb
.syntax unified

    CMP             R0, #0
    MOVSEQ           R0, #0x7
    BX            LR

    movs r0,#7
vectors.s:7: Error: selected processor does not support Thumb mode `it EQ'
vectors.s:7: Error: thumb conditional instruction should be in IT block -- `movseq R0,#0x7'
 类似资料:
  • 如果click在具体的DOM元素之外,我使用下面的指令来检测和隐藏块: 我已将此指令应用于元素: 部件代码为: 问题是当我调用click时,我设置了< code >这个。_searchContentOpen设置为真/假。 视情况而定,我在应用指令的地方显示块。但是当ngIF工作时,指令也总是同步工作。所以结果块永远不会显示。 如何修复它?

  • 例如,Angular 2内置的属性指令ngClass和ngStyle,可以在任何组件或元素上工作。

  • 1.多臂赌博机 多臂赌博机是指一类问题,这类问题重复的从k个行为(action)中选择一个,并获得一个奖励(reward),一次选择的时间周期称为一个时间步(time-step)。当选择并执行完一个行为后,得到一个奖励,我们称奖励的期望为这次行为的真实值(value)。在t时刻选择的行为用At表示,对应的奖励用Rt表示,对于行为a,其真实值为q∗(a),表示行为a的期望奖励,即: $$q_*(a)

  • View Example 指令与我们看到的其他指令有不同的语法。 如果你熟悉for...of语句,你会注意到,他们几乎相同。 ngFor允许您指定要迭代的iterable对象,以及在范围内引用每个项的名称。 在我们的示例中,您可以看到该 可用于插值以及属性绑定。 该指令做一些额外的解析,所以当它扩展到模板形式,它看起来有点不同: View Example 请注意,模板元素上有一个奇怪的let-ep