高分悬赏:有关ARM汇编的一点疑问。下面的代码是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高分悬赏:有关ARM汇编的一点疑问。下面的代码是啥意思?相关的知识,希望对你有一定的参考价值。

loop
ORR r3,r2,r1,LSL#20 ; Build pattern into empty register
STR r3,[r0,r1,LSL#2] ; Use loop counter to create individual table base addresses
SUBS r1,r1,#1 ; Decrement loop counter
BPL loop ; Loop until r1 goes negative

首先,你得先弄明白每条指令是什么操作;
其次,还要看每条指令的操作数。
最后,再联系上下文,看整段指令是在做什么。

首先,
loop是一个标号,用来标志指令中的某个位置。
ORR是“或”指令,后面的LSL是逻辑左移;
STR是存储指令;
SUBS是影响标志位的减法;
BPL是跳转指令,其中PL代表正号+,BPL也就是当结果为正时,跳转。

其次,
ORR r3,r2,r1,LSL#20
是先将r1寄存器的值逻辑左移20位,和r2做或操作,将结果放到r3中,即r3=r2 | (r1<<20)
STR r3,[r0,r1,LSL#2]
是先将r1寄存器的值左移2位,然后与r1相加,得到一个地址addr,然后将r3的内容保存到addr所指定的内存地址。
SUBS r1,r1,#1
是将r1减1操作,由于SUB后面有个S,该指令将根据结果设置标志位。

BPL loop

上面已经说过,当标志位为+,也就是前一条指令r1=r1-1的结果不是负数的话,那么就跳到loop,继续循环。

最后,
我们来分析一下整段代码是在做什么:
在这里面,
r1寄存器用来计数,
r2
参考技术A loop
ORR r3,r2,r1,LSL#20 ; r1左移20位后与r2做或运算,运算结果放r3
STR r3,[r0,r1,LSL#2] ; r1左移2位与r0相加,相加的结果放r0.然后以r0的值为地址,把r3存储在这个地址里
SUBS r1,r1,#1 ; r1=r1-1,并影响CPSR寄存器中的标志位
BPL loop ; r1不为负则继续循环追问

那个[ ]中括号表示什么?

追答

从内存里取数

如何关闭w7系统下的21和3306端口,高分悬赏,求详细过程,拒绝复制粘贴,不要xp操作方法。

我装的是W7系统,按照百度搜索得到的答案,却没有发现W7服务项File Transfer Protocol,文件传输协议。

请高人指点,我很菜,请详细填写过程。谢谢!

参考技术A 控制面板-windows防火墙-高级设置-(入站规则)-新建规则-选择“端口”下一步—本地特定端口,填上21,下一步—选择阻止连接—完成。

建完入站规则后再按照上述步骤设置出站规则。
tcp和udp都要禁的话就在重复一次步骤。

以上是关于高分悬赏:有关ARM汇编的一点疑问。下面的代码是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

MFC关于Radio Button控件的问题 高分悬赏!!敬请指点

11.汇编代码简单操作

高分悬赏!如何将制作FLASH源文件里的每个场景导出?

高分悬赏急求一段源代码

高分悬赏!关于软件

关于 ARM NEON 周期的一些疑问