打印

ARM 指令格式和时序7

[复制链接]
243|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冰糖炖雪梨|  楼主 | 2018-8-31 17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单一数据交换(ARM 3 和以后,包括 ARM 2aS) xxxx0001 0B00nnnn dddd0000 1001mmmm
典型的汇编语法:
       SWP Rd, Rm, [Rn]
这些指令装载一个内存的一个字(用寄存器 Rn 给出地址)到一个寄存器 Rd 并存储寄存器 Rm 到相同的地址。Rm 和 Rd 可以是同一个寄存器,在这种情况下交换寄存器和内存位置的内容。装载和存储操作通过设置 LOCK 引角(pin)为高电平来在操作期间锁定在一起,这指示内存管理器它们应当被没有中断的完成。
如果设置了 B 位,则传送一字节的内存,否则传送一个字。
Rd、Rn、和 Rm 都不能是 R15。
执行这个指令使用 1S + 2N + 1I 个周期。

状态寄存器传送(ARM 6 和以后) xxxx0001 0s10aaaa 11110000 0000mmmm  MSR  寄存器形式
xxxx0011 0s10aaaa 1111rrrr bbbbbbbb  MSR  立即数形式
xxxx0001 0s001111 dddd0000 00000000  MRS
典型的汇编语法:
       MSR   SPSR_all, Rm          ;aaaa = 1001
       MSR   CPSR_**, #&F0000000  ;aaaa = 1000
       MSRNE CPSR_ctl, Rm          ;aaaa = 0001
       MRS   Rd, CPSR
设置 s 位时意味着访问当前特权模式的 SPSR,而不是 CPSR。只能在特权模式下执行这个命令的时候设置此位。
使用 MSR 来传送一个寄存器或常数到一个状态寄存器。
aaaa 位接受下列值:
值        意思

0001        设置有关的 PSR 的控制位。
1000        设置有关的 PSR 的标志位。
1001        设置有关的 PSR 的控制位和标志位(就是说所有现存的位)。
其他的值为将来的扩充而保留。 在寄存器形式中,源寄存器是 Rm。在立即数形式中,来源是 #b, ROR #2r。
R15 不应该被指定为 MRS 指令的源寄存器。
使用 MRS 来传送处理器的状态到一个寄存器。
dddd 位存储目的寄存器的编号;Rd 一定不能是 R15。
N.B. 指令编码对应于对应与操作码(opcode)是 10xx 并清除了 S 位的数据处理指令(就是测试指令)。
执行这些指令总是使用 1S 个周期。

未定义指令xxxx0001 yyyyyyyy yyyyyyyy 1yy1yyyy 专属 ARM 2
xxxx011y yyyyyyyy yyyyyyyy yyy1yyyy
这些指令目前未定义。在遇到未定义指令时,ARM 切换到 SVC 模式(在 ARM 3 和以后)或 Undef 模式(在 ARM 6 和以后),把 R15 的旧有值放置到 R14_SVC (或 R14_UND)中并跳转到一个位置,在那里它希望找到解码这个未定义指令的代码并相应的执行它。
注意:
这些指令被文档为“未定义的”,原因是这种方式下它们进入未定义指令处理器陷阱。许多其他指令是以更宽松的方式未被定义的,而不说出它们做什么。 例如,下面形式的位模式(pattern):                xxxx0000 01xxxxxx xxxxxxxx 1001xxxx
与数据处理的指令、乘法、长乘法和 SWP 指令有关,但却不是其中一个的原因是: 数据处理指令的位 25 = 0 和位 4 = 1 时有寄存器控制的移位,所以必须位 7 = 0。 乘法指令的位 23:22 = 00。 长乘法指令的位 23:22 = 1U。 SWP指令的位 24 = 1。 这些指令只是简单的未定义做什么,但是上面列出的那些指令实际上定义为进入未定义指令陷阱,至少直到将来为它们找到某种用途。 注意“专属 ARM2”的未定义指令包括了在 ARM3/ARM2as 和以后成为 SWP 的那些指令。

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

430

主题

436

帖子

0

粉丝