Code
;; 可执行文件名: helloworld.asm
;; 程序版本: 0.01
;; 创建日期: 2019/1/02
;; 最后修改日期: 2019/1/02
;; 作者: ieeqc
;; 描述:
;; - 汇编调用c函数实现helloworld程序
;;
;; 编译指令
;; - nasm -f elf -g -F stabs puts_hello.asm -o puts_hello.o
;; - gcc -m32 puts_hello.o -o hello
SECTION .data ; 包含已初始化数据段
EatMsg: db "Hello World!", 0
SECTION .bss ; 包含未初始化数据段
SECTION .text ; 包含代码段
extern puts ; 说明来自glibc的puts函数
global main
main:
push ebp ; 为调试器建立堆栈帧
mov ebp, esp
push ebx ; 保存现场
push esi
push edi
push EatMsg ; 压入函数参数输出信息地址到栈中
call puts ; 调用puts()函数
add esp, 4 ; 清理堆栈, 通过ESP 调用4字节
pop edi ; 恢复现场
pop esi
pop ebx
mov esp, ebp ; 在返回之前,销毁堆栈
pop ebp
ret ; 返回
bash:
nasm -f elf -g -F stabs puts_hello.asm -o puts_hello.o
gcc -m32 puts_hello.o -o hello
原文:https://www.cnblogs.com/ieeqc/p/14532481.html