我无法在谷歌找到我的答案,我想在汇编语言中找到关于" 表操作和多向分支的一些基本信息#34;举个例子
答案 0 :(得分:0)
unsigned int fun ( unsigned int x )
{
switch(x&7)
{
case 0: return(x<<1);
case 1: return(2);
case 2: return(x>>1);
case 3: return(x+x);
case 4: return(x&3);
case 5: return(x+(x<<1));
case 6: return(5);
case 7: return(x+x+x);
}
}
一种实施方式。
00000000 <fun>:
0: e2003007 and r3, r0, #7
4: e2433001 sub r3, r3, #1
8: e3530006 cmp r3, #6
c: 979ff103 ldrls pc, [pc, r3, lsl #2]
10: ea000006 b 30 <fun+0x30>
14: 00000040 andeq r0, r0, r0, asr #32
18: 00000050 andeq r0, r0, r0, asr r0
1c: 00000030 andeq r0, r0, r0, lsr r0
20: 00000048 andeq r0, r0, r8, asr #32
24: 00000038 andeq r0, r0, r8, lsr r0
28: 00000058 andeq r0, r0, r8, asr r0
2c: 00000038 andeq r0, r0, r8, lsr r0
30: e1a00080 lsl r0, r0, #1
34: e12fff1e bx lr
38: e0800080 add r0, r0, r0, lsl #1
3c: e12fff1e bx lr
40: e3a00002 mov r0, #2
44: e12fff1e bx lr
48: e2000003 and r0, r0, #3
4c: e12fff1e bx lr
50: e1a000a0 lsr r0, r0, #1
54: e12fff1e bx lr
58: e3a00005 mov r0, #5
5c: e12fff1e bx lr
程序计数器以编程方式计算,因此基于输入,可以根据输入和数学在任何一个位置着陆。 (很好的捕获优化我试图不要有任何直接重复的情况,但没有尝试那么难)