[英]Why This NASM Assembly is Not Printing?
我正在嘗試學習NASM Assembly(在Linux上,因此是AT&T語法),但是我一直試圖通過syscall打印“ Hello World”。 下面的代碼可以匯編並正常運行,但不會顯示任何內容。 有什么線索嗎?
.text
.globl main
main:
movl $4, %eax
movl $1, %ebx
movl string1, %ecx
movl $20, %edx
int $0x80
.data
string1: .string "hello world"
更新 :我找到了。 我需要在“ string1”前面包含一個$符號,因此該行變為“ movl $ string1,%ecx”。 當我不包括它時會發生什么解釋?
您正在使用的syscall需要一個指向ecx
字符串的指針。 這就是添加$
作用-將string1
的值放入ecx
。 如果您不使用$
,則將string1
處的第一個單詞放入ecx
-不管hell
的等效數值是多少。 在帶有ASCII字符串(應該是您的情況)的小端計算機上,這意味着您要將0x6c6c6568
放入ecx
。 該值不太可能是指向任何類型字符串的有效指針,因此syscall不會打印任何內容。 它很容易崩潰或引起其他瘋狂的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.