Jol*_*oza 3 assembly arm conditional-statements
为什么以下编译:
ITE EQ
MRSEQ R0, MSP
MRSNE R0, PSP Run Code Online (Sandbox Code Playgroud)
但这不是:
ITT NE
MRSNE R0, PSP
MRSEQ R0, MSP Run Code Online (Sandbox Code Playgroud)
是否有可能MRSNE R0,PSP和MRSEQ R0,MSP都执行(这是我的情况)?
This compiles:
ITT NE
MRSNE R0, PSP
MRSNE R0, MSP Run Code Online (Sandbox Code Playgroud)
它是ARM标准吗?
art*_*ise 13
但这不是:
Run Code Online (Sandbox Code Playgroud)ITT NE MRSNE R0, PSP MRSEQ R0, MSP
首先,你有一些概念问题.什么ITT都有关系?首先是一些历史.早期的ARM CPU不支持Thumb(16位),也不支持Thumb2(混合16/32bit)编码.对于纯ARM,大部分(4个前导位)专用于条件执行.将拇指指令集不支持条件执行.对于Thumb2(您在Cortex-M部件上想要的内容),条件执行有一些变化.不是在每条指令中编译条件,而是it在条件寄存器中设置8位的指令.
的it指令给出的比较来测试(EQ,NE,LO等).然后它最多提供四个条件指令.从Cortex-A程序员手册中,
第A.1.34节
IT(If-then)最多可以有四条有条件的指令(称为IT块).条件可以全部相同,或者某些条件可以是其他条件的逻辑反转.IT是ARM状态下的伪指令.
语法:IT{x{y{z}}} {cond}
where:cond是条件代码.请参见6.1.2节,它指定了IT块中第一条指令的条件.
例如,x,y和z指定IT块中第二,第三和第四条指令的条件开关ITTET.条件开关可以是:
为了支持Thumb2和ARM汇编程序,创建了一种称为统一汇编语言的新模式.参考:统一语法
对于纯ARM,IT评估为空.指令使用条件进行编码.对于Thumb2,它会使条件寄存器置位以设置条件位.ARM汇编程序有三种模式; .arm,.thumb和.unified.还.code 32和.code 16.根据使用的模式和特定的汇编程序(Gnu,ARM等),您将收到不同的警告和/或错误.但是,这种模式永远不会失败,
MRS
该IT指令是"IT块".在您的情况下,您使用thumb2特殊寄存器,因此统一语法对于手头的任务没有多大意义.见下面的注释.
制作统一IT块时,您应该注意一些规则.
cmpne块不应设置条件代码.即,IT指导.IT块.IT,所以COND在PSR一定的第一个指令相匹配.cpsr,ITE等见注IT
可以在ARM中工作,但不适用于Thumb2.在你的情况下,你打破了规则'4'并得到一个错误.
例:
ITE NE ; first NE, 2nd !NE = EQ (Thumb2)
MRSNE R0, PSP ; first NE (ARM)
MRSEQ R0, MSP ; 2nd !NE = EQ (ARM)
Run Code Online (Sandbox Code Playgroud)
拆卸ARM,
movlo r1, #-1
moveq r1, #0
movhi r1, #1
Run Code Online (Sandbox Code Playgroud)
拆卸的thumb2,
.text
.syntax unified
ITE NE @ first NE, 2nd !NE = EQ (Thumb2)
movne R0, #1 @ first NE (ARM)
moveq R0, #2 @ 2nd !NE = EQ (ARM)
Run Code Online (Sandbox Code Playgroud)
对于thumb2,这是没有IT指令的等价物,
00000000 <.text>:
0: 13a00001 movne r0, #1
4: 03a00002 moveq r0, #2
Run Code Online (Sandbox Code Playgroud)
即,两个动作设置条件代码.汇编程序中的第二个数字当然是机器代码.对于thumb2 OS/scheduler,它将恢复恢复PSR状态的条件寄存器,您可以进入IT块的中间.也可以手动执行此操作(但是,它可能具有高度CPU特定性,并且没有我所知道的文档).
注意:对于改变它的Cortex-M调度程序代码PSR,您需要使用分支.这些寄存器控制IT块执行.你不应该PSR在ITT块中修改它.这同样适用于任何上下文恢复指令; 我不是100%熟悉Cortex-M模式切换,它涉及更改活动it.
| 归档时间: |
|
| 查看次数: |
5264 次 |
| 最近记录: |