2011-10-04 65 views
2

裝配中的字符串做什麼?裝配中的字符串

在一個內聯彙編電話在C,我寫

.string \"Hello World\" 

1)有人可以給我如何.string工程的概況?

2)不知何故,價值被保存在%esi。爲什麼?

3)如何在最後追加回車? \ n不起作用

+2

你在用什麼彙編語言?加油站? –

+0

是的。那麼,我的操作系統是x86 linux,我正在用c_編寫__asm__程序集,並在gcc中編譯,因此GAS是正確的? – Gabe

+0

這聽起來像某種引用/轉義問題,所以我們需要看到周圍的代碼。 – user786653

回答

2

.string是GAS中的彙編指令,類似於.long,.int.byte。它所做的只是創建並初始化內存,供您在程序中使用。在這種情況下,彙編器將爲13個連續字節的內存中的13個字符分配空間。如果你要查看內存,你會看到:

["][H][e][l][l][o][ ][W][o][r][l][d]["] 

除了在十六進制而不是字符。我不確定%esi指向字符串的方式或原因(它可能是我不熟悉的彙編程序設置,或者是您未向我們顯示的一行代碼中設置的那種方式)。這意味着%esi「指向」字符串的第一個字節 - 在本例中爲第一個["]。您可以使用%esi寄存器通過使用偏移量(%esi + 5將爲[o])或通過增加寄存器本身來遍歷字節。

要添加換行符,您可能需要嘗試\x0D\x0A而不是\n

+0

該字符串以null結尾。所以你的記憶如下: [「] [H] [E] [L] [L] [O] [] [W] [O] [R] [L] [D] [」] [\ 0] – beardhatcode

1
  1. 它只是發出一個字符序列到適當的代碼/數據部分。請參閱thisthis(儘管如此,它們使用.ascii)。
  2. 向我們展示代碼。
  3. 嘗試\\ n或\ 12或\ xa。