簡體   English   中英

為什么此NASM組件不打印?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM