x86彙編入門第一節:用GAS語法打印HelloWorld

.data
msg:
    .asciz "Hello, world!\n"
 
.extern _printf
.text
    .global _main
_main:
    movl %esp, %ebp
    pushl $msg  # 壓棧,首先,因爲編譯環境是32位,推棧前esp先減少2字(DWORD類型=4字節),然後再將msg指向的內容放入棧中,相當於就是指到這個新位置)
    call _printf  # 調用系統函數
    
    popl %eax # 出棧,首先將esp指向的元素移入eax裏,然後將esp+2字,恢復到原來的指向
    #addl $4, %esp # esp寄存器是存放棧頂指針的,將esp+4字節後,恢復到原來的指向,等同於上面的popl操作
    
    xorl %eax, %eax # 通過異或自身 來清0,相當於return 0
    ret
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章