请教一道ARM汇编的题目?

有以下函数func用于处理长整形变量V,请详细分析程序,解释算法的计算过程和程序的功能,并给出在ARM系统中实现相同功能的对应的汇编程序

unsigned long func(unsigned long v)
{ 
    unsigned long t;
    t=v^((v<<16)|(v>>16));
    t&=~0xff0000;
    v=(v<<24)|(v>>8)
    return v^(t>>8);
}
阅读 3k
1 个回答

函数就是一系列的位级别的逻辑操作,最后函数返回等于接收的变量v。
没有arm的机器,AT&T的32位Intel反汇编表示如下:

0804841d <func>:
 804841d:    55                       push   %ebp
 804841e:    89 e5                    mov    %esp,%ebp
 8048420:    83 ec 10                 sub    $0x10,%esp
 8048423:    8b 45 08                 mov    0x8(%ebp),%eax
 8048426:    c1 c8 10                 ror    $0x10,%eax
 8048429:    33 45 08                 xor    0x8(%ebp),%eax
 804842c:    89 45 fc                 mov    %eax,-0x4(%ebp)
 804842f:    81 65 fc ff ff 00 ff     andl   $0xff00ffff,-0x4(%ebp)
 8048436:    c1 4d 08 08              rorl   $0x8,0x8(%ebp)
 804843a:    8b 45 fc                 mov    -0x4(%ebp),%eax
 804843d:    c1 e8 08                 shr    $0x8,%eax
 8048440:    33 45 08                 xor    0x8(%ebp),%eax
 8048443:    c9                       leave  
 8048444:    c3                       ret    

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进