2011-09-13 80 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