您的位置 首页 动态

加深对ARM汇编中对stmfd和ldmfd的了解

AREASTMFD,CODE,READONLYENTRYCODE32STARTsubsp,sp,#4;经过此条语句过后,sp的值由原来的0变为了0xfffffffcmovr0,#0x1d;将0x1d赋

AREASTMFD,CODE,READONLY
ENTRY
CODE32
START
subsp,sp,#4 ;通过此条句子往后,sp的值由本来的0变为了0xfffffffc
movr0,#0x1d ;将0x1d赋值给r0寄存器
movr1,#0x1c;将0x1c赋值给r1寄存器

stmfdsp!,{r0};将r0中的值压入仓库,压入进程是,因为r0中的值为32位的,首先将sp减去4,将r0中的低八位放入sp这个方位(即fffffff8处放的是0x1d)
第九位到第十六位放入sp+1的地址即(fffffff9处放的是0x00),将第十七位到第二十四位放入sp+2的方位(fffffffa处放的是0x00),将第二十五位到第三十二位放入
sp+3的方位(fffffffb处放的是0x00).

strr1,[sp,#4];将r1中的值压入仓库,压入进程是,因为r1中的值为32位的,将r0中的低八位放入sp+4(fffffffc处放的是0x1c)这个方位
第九位到第十六位放入sp+5的地址(fffffffd处放的是0x00),将第十七位到第二十四位放入sp+6的方位(fffffffe处放的是0x00),将第二十五位到第三十二位放入
sp+7的方位(ffffffff处放的是0x00).
.

ldmfdsp!,{r2,r3};将仓库中的内容出栈,出栈进程是,将sp这个方位的值放入r2中的低八位,将sp+1这个方位的值放入r2中的第九
位到第十六位,将sp+2这个方位的值放入r2中的第十七位到第二十四位,将sp+3这个方位的值放入r2中的第二十
五位到第三十二位。(即r2中的值为0x0000001d)将sp+4这个方位的值放入r3中的低八位,将sp+5这个方位的值放入r3中的第九位到第十六位,将sp+6这个方位的值放入r3中的第十七位到第二十四位,将sp+4这个方位的值放入r3中的第二十
五位到第三十二位(即r2中的值为0x0000001c)。一起sp=sp+8。

bSTART

END

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/275512.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部