Xtensa指令:L32R - 加载哪个地址?

时间:2015-01-15 15:44:36

标签: memory assembly embedded processor

我正在尝试阅读一些xtensa汇编代码并被L32R指令困扰:

E.g。给出以下一行:

0000 2f04 <my_func>:
     2f0c:  ffef21          l32r    a2, 2ec8

这会加载哪个地址?

2 个答案:

答案 0 :(得分:4)

第382页上的Xtensa Instruction Set Architecture Reference Manual手动状态,l32r地址的计算方法如下:

L32R forms a virtual address by adding the 16-bit one-extended constant value encoded
in the instruction word shifted left by two to the address of the L32R plus three with the
two least significant bits cleared. Therefore, the offset can always specify 32-bit aligned
addresses from -262141 to -4 bytes from the address of the L32R instruction. 32 bits
(four bytes) are read from the physical address.

所以继续上面的例子;操纵常数:

     ffef    16-bit constant
ffff ffef    16-bit constant one-extended
ffff ffbc    shifted left by two

掌控PC:

0000 2f0c    program counter
0000 2f0f    pc +3
0000 0f0c    masked bits 0 and 1

计算虚拟地址:

  ffff ffbc
+ 0000 2f0c
===========
1 0000 2ec8

因此丢弃16位以外的所有内容:2ec8

答案 1 :(得分:0)

L32R指令从指示的地址加载32位值。所以&#34; l32r a2,2ec8&#34;将位于地址0x2ec8的32位值加载到寄存器a2中。您必须在反汇编中查看该位置。