rocky1972 发表于 2008-04-13 18:56

请教这句ARM汇编的意思:andeq r0, r0, r4, ror #20

andeq        r0, r0, r4, ror #20

关键是andeq这个命令,EQ是一个助记符,加在and后面是什么意思阿?

请高手解释一下,谢谢

mik 发表于 2008-04-13 23:01

原帖由 rocky1972 于 2008-4-13 18:56 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
andeq        r0, r0, r4, ror #20

关键是andeq这个命令,EQ是一个助记符,加在and后面是什么意思阿?

请高手解释一下,谢谢

这个... 还是看看 arm 指令集方面的说明吧,偶不懂 arm,改天看看 arm 再来答你

cjaizss 发表于 2008-04-13 23:41

伪码(不要当C码看):if(Z==1)r0=r0+{(r4&0xfff00000)>>20|(r4&0x000fffff)<<12}
括号内是所谓的循环右移(ror)
Z是相等标志

mik 发表于 2008-04-14 00:07

原帖由 rocky1972 于 2008-4-13 18:56 发表 http://linux.chinaunix.net/bbs/images/common/back.gif
andeq        r0, r0, r4, ror #20

关键是andeq这个命令,EQ是一个助记符,加在and后面是什么意思阿?

请高手解释一下,谢谢


大致看了一下 arm 文档,结论如下:

eq 是条件码,等于的意思,基于 Z 标志。
ror 是操作码,循环右移的意思, ror #20 意思是:循环右移20位

andeq        r0, r0, r4, ror #20   的意思是:
若为0(Z=1) 则: r4 循环右移20位(但不改变r4值),然后 r0 | r4 。最后 r0 = r0 | r4

也就是:
if (zero) {
    tmp = r4 >> 20; (循环)
   r0 = r0 | tmp;
}

若没理解错,应该是这样吧。

PS:ARM 的指令格式还挺怪的

rocky1972 发表于 2008-04-14 13:58

回复 #4 mik 的帖子

多谢milk和cjaizss

小弟只是不懂EQ的意思,现在明白了。谢谢两位BOW

wylhistory 发表于 2008-04-15 16:43

应该是and 而不是 “|”吧,
这通常在反汇编arm程序经常看到的。。
页: [1]
查看完整版本: 请教这句ARM汇编的意思:andeq r0, r0, r4, ror #20