簡體   English   中英

ARM匯編-指令是否等效?

[英]ARM Assembly - Are the instructions equivalent?

“ stmdb r3 !, {sp,lr}”是否等效於序列?

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

“ ldmia r0 !, {sp,lr}”是否等效於序列?

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

我誤解了stmdb的功能。 等價於“ stmdb r3 !, {sp,lr}”,將是交換順序“ lr”,然后是“ sp”:

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

謝謝,維傑

stmdb r3 !, {sp,lr}

str sp,[r3,#-4]!

str lr,[r3,#-4]!

stmdb r3 !, {sp,lr}-在每次傳輸前存儲多個寄存器和遞減地址。 r3基址寄存器和! -將起始r3地址+ offcet寫回r3。 DB-由於4種堆棧類型(全降序堆棧,全升序堆棧,空降序堆棧,空升序堆棧)。 用STM DB對應於Full Descending堆棧。 因此,sp-堆棧指針和lr-鏈接寄存器存儲到由r3和r3尋址的內存中== sizeof(sp)+ sizeof(ls)。 r3 + = 8;

  1. r3指向某個內存地址。

  2. r3-= 8; (4字節指令)將r3移入較低的存儲器地址。 遞減r3。

  3. 存儲順序lr-first sp-second。 到r3-8-lr將被存儲,到r3-4 sp將被存儲。

  4. r3-點到端(r3 + = 8);

str sp,[r3,#-4]! (預索引變體)-將sp存儲到r3-4內存地址中並保存r3- = 4;

str lr,[r3,#-4]! -將lr存儲到(r3-4)-4中並保存r3- = 4;

因此,將stmdb r3 !, {sp,lr}-放入更高的地址lr中。 (str sp,[r3,#-4]!)+(str lr,[r3,#-4]!)lr再次位於較高的地址中。

介紹ARM匯編語言

ldmia r0 !, {sp,lr}-之后加載多個增量。

從r0指向的內存中獲取值並將其保存到sp中。 從內存中獲取下一個值並保存到lr中。 r0 + = 8;

ldr sp,[r0],#4-將值從存儲器r0 + 4加載到sp。 ([r0],#4)-后索引變式的第一次加載和下一次編輯r0,r0 + = 4。

ldr lr,[r0],#4-將值從存儲器r0 + 4加載到lr中。

來自較高內存的兩個變量值都復制到了lr中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM