2011-09-13 48 views
0

powerpc汇编程序中该指令的结果是什么?程序计数器如何在powerpc汇编程序中操作

. = 0x100 

我认为这涉及到程序计数器,但是反汇编使用这个指令的可执行文件在输出中会出现一些奇怪的现象。 这是简单的代码:

int main() 
{ 
    __asm__(". = 0x100"); 
    return 0; 
} 

,这是反汇编代码:

$ gcc -o prog main.c 
$ objdump -d prog 

[...] 
100003dc <main>: 
100003dc:  94 21 ff f0  stwu r1,-16(r1) 
100003e0:  93 e1 00 0c  stw  r31,12(r1) 
100003e4:  7c 3f 0b 78  mr  r31,r1 
    ... 
100004dc:  38 00 00 00  li  r0,0 
100004e0:  7c 03 03 78  mr  r3,r0 
100004e4:  81 61 00 00  lwz  r11,0(r1) 
100004e8:  83 eb ff fc  lwz  r31,-4(r11) 
100004ec:  7d 61 5b 78  mr  r1,r11 
100004f0:  4e 80 00 20  blr 
[...] 

该指示有出现了三个点。他们的含义是什么? GAS如何处理这个问题?

谢谢大家!

回答

1

.设置当前位置计数器正如你所猜测的。在您的示例中,您已将位置计数器设置为main()+0x100,即0x100003dc+0x100 = 0x100004dc。然而,在0x100003e4的地址0x100004dc之后将没有有效的指令,但是(您通常会在此分支)。

+0

谢谢保罗,但我认为程序计数器移动了一个absoulte地址,我猜想要找到一个像分支的指令......如何编码该指令? – MirkoBanchi

+1

@Mirko:它不是一条指令,它是一个汇编指令* - 它只是改变后续指令汇编的相对地址。 –

+1

[特殊点符号](http://tigcc.ticalc.org/doc/gnuasm.html#SEC49) – user786653