简体   繁体   English

ARM汇编-指令是否等效?

[英]ARM Assembly - Are the instructions equivalent?

Is "stmdb r3!, {sp,lr}" equivalent to the sequence ? “ stmdb r3 !, {sp,lr}”是否等效于序列?

  1. str sp, [r3, #-4]! str sp,[r3,#-4]!
  2. str lr, [r3, #-4]! str lr,[r3,#-4]!

And

Is "ldmia r0!, {sp,lr}" equivalent to the sequence ? “ ldmia r0 !, {sp,lr}”是否等效于序列?

  1. ldr sp, [r0], #4 ldr sp,[r0],#4
  2. ldr lr, [r0], #4 ldr lr,[r0],#4

I misunderstood the stmdb functioning. 我误解了stmdb的功能。 The equivalent for "stmdb r3!, {sp,lr}", would be a swapped order "lr" first followed by "sp": 等价于“ stmdb r3 !, {sp,lr}”,将是交换顺序“ lr”,然后是“ sp”:

  • str lr, [r3, #-4]! str lr,[r3,#-4]!
  • str sp, [r3, #-4]! str sp,[r3,#-4]!

Thanks, Vijay 谢谢,维杰

stmdb r3!, {sp,lr} stmdb r3 !, {sp,lr}

str sp, [r3, #-4]! str sp,[r3,#-4]!

str lr, [r3, #-4]! str lr,[r3,#-4]!

stmdb r3!, {sp,lr} - Store Multiple registers and Decrement address Before each transfer. stmdb r3 !, {sp,lr}-在每次传输前存储多个寄存器和递减地址。 r3 - base register and ! r3基址寄存器和! - write start r3 address + offcet into r3 back. -将起始r3地址+ offcet写回r3。 DB - due to 4 stack type (Full Descending stack, Full Ascending stack, Empty Descending stack, Empty Ascending stack). DB-由于4种堆栈类型(全降序堆栈,全升序堆栈,空降序堆栈,空升序堆栈)。 With STM DB correspond to Full Descending stack. 用STM DB对应于Full Descending堆栈。 So sp - stack pointer and lr - link register store into memory addressed by r3 and r3 += sizeof(sp) + sizeof(ls). 因此,sp-堆栈指针和lr-链接寄存器存储到由r3和r3寻址的内存中== sizeof(sp)+ sizeof(ls)。 r3 += 8; r3 + = 8;

  1. r3 point to some memory address. r3指向某个内存地址。

  2. r3 -= 8; r3-= 8; (4 byte instruction) move r3 into lower memory address. (4字节指令)将r3移入较低的存储器地址。 Decrement r3. 递减r3。

  3. Store order lr-first sp-second. 存储顺序lr-first sp-second。 Into r3-8 - lr will be stored and into r3-4 sp will be stored. 到r3-8-lr将被存储,到r3-4 sp将被存储。

  4. r3 - point to end (r3+=8); r3-点到端(r3 + = 8);

str sp, [r3, #-4]! str sp,[r3,#-4]! (pre-index variant) - store sp into r3-4 memory address and save r3-=4; (预索引变体)-将sp存储到r3-4内存地址中并保存r3- = 4;

str lr, [r3, #-4]! str lr,[r3,#-4]! - store lr into (r3-4)-4 and save r3-=4; -将lr存储到(r3-4)-4中并保存r3- = 4;

So stmdb r3!, {sp,lr} - into higher address lr situated. 因此,将stmdb r3 !, {sp,lr}-放入更高的地址lr中。 (str sp, [r3, #-4]!) + (str lr, [r3, #-4]!) lr located into higher address again. (str sp,[r3,#-4]!)+(str lr,[r3,#-4]!)lr再次位于较高的地址中。

Introducing ARM assembly language 介绍ARM汇编语言

ldmia r0!, {sp,lr} - load multiple increment after. ldmia r0 !, {sp,lr}-之后加载多个增量。

Get value from memory pointed by r0 and save it into sp. 从r0指向的内存中获取值并将其保存到sp中。 Get next value from memory and save into lr. 从内存中获取下一个值并保存到lr中。 r0 += 8; r0 + = 8;

ldr sp, [r0], #4 - load value from memory r0+4 into sp. ldr sp,[r0],#4-将值从存储器r0 + 4加载到sp。 ([r0], #4) - post-indexed variant first load and next edit r0, r0+=4. ([r0],#4)-后索引变式的第一次加载和下一次编辑r0,r0 + = 4。

ldr lr, [r0], #4 - load value from memory r0+4 into lr. ldr lr,[r0],#4-将值从存储器r0 + 4加载到lr中。

Into both variants value from higher memory was copied to lr. 来自较高内存的两个变量值都复制到了lr中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM