linux下的播放器:Linux下的汇编器
疯狂代码/ ĵ:http://Linux/
Linux 下两个最主要的汇编器是 Nasm(free, Netwide Assembler)和 GAS(free, Gnu A
ssembler),
后一个和 GCC 结合在一起. 在这篇文章里我将集中在 Nasm 上, 把 GAS 放在后面,
因为它使用 AT&T 的语法, 需要一个长的介绍.
Nasm 调用时应该带上 ELF 格式选项("nasm -f elf "); 产生的目标文件用
GCC 来链接("gcc "), 产生最终的 ELF 二进制代码. 下面的这个脚本可用来
编译 ASM 的模块; 我尽量把它写得简单, 所以所有它做的就是接受传给它的第一个
文件名, 用 Nasm 编译, 用 GCC 来链接.
#!/bin/sh
#
=========================================================
outfile=${1%%.*}
tempfile=
nasm -o $tempfile -f elf $1
gcc $tempfile -o $outfile
rm $tempfile -f
#EOF
=================================================================
=
基本知识:
----------
当然最好的就是在了解系统细节之前从一个例子开始. 这里是一个最基本的
"hello-word" 形式的程序:
;
========================================================
global main
extern printf
section .data
msg db "Helloooooo, nurse!",0Dh,0Ah,0
section .text
main:
push dword msg
call printf
pop eax
ret
; EOF
=================================================================
纲要: "global main" 必须声明为全局的(global) -- 并且既然我们用 GCC 来链接,
进入点必须以"main" 来命名-- 从而装入系统. "extern printf" 只是一个声明,
为以后在程序中调用; 注意这是必须的; 参数的大小不需要声明. 我已经把这个
, .text 分节, 但这不是严格必须的--
段, 就像在 DOS 下一样.
在代码的主体部分, 你必须把参数压栈来传递给调用. 在 Nasm 里, 你必须声明
所有不明确数据的大小; 因此就有"dword
linux下的播放器Linux下的汇编器 来自淘豆网m.daumloan.com转载请标明出处.