裝配中的字符串做什麼?裝配中的字符串
在一個內聯彙編電話在C,我寫
.string \"Hello World\"
1)有人可以給我如何.string工程的概況?
2)不知何故,價值被保存在%esi。爲什麼?
3)如何在最後追加回車? \ n不起作用
裝配中的字符串做什麼?裝配中的字符串
在一個內聯彙編電話在C,我寫
.string \"Hello World\"
1)有人可以給我如何.string工程的概況?
2)不知何故,價值被保存在%esi。爲什麼?
3)如何在最後追加回車? \ n不起作用
.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
。
該字符串以null結尾。所以你的記憶如下: [「] [H] [E] [L] [L] [O] [] [W] [O] [R] [L] [D] [」] [\ 0] – beardhatcode
你在用什麼彙編語言?加油站? –
是的。那麼,我的操作系統是x86 linux,我正在用c_編寫__asm__程序集,並在gcc中編譯,因此GAS是正確的? – Gabe
這聽起來像某種引用/轉義問題,所以我們需要看到周圍的代碼。 – user786653