设置首页  |   加入收藏  |  联系我们   
您的位置: 主页>Linux知识>Linux程序设计>正文
Linux操作系统的X86汇编程序设计
文章来源:  编辑:  发布时间:2007-11-01

本质上来说, 这篇文章是把我最感兴趣的两样编程东西: Linux 操作系统和汇编语言程序设计结合在一起. 这两个都不(或者说应该不)需要介绍; 像 Win32 的汇编,Linux 的汇编运行在 32 位的保护模式下...但它又有一个截然不同的优势就是它允许你调用 C 的标准库函数和 Linux 的共享库函数。 我开始给 Linux 下的汇编语言编程来个简要介绍; 为了更好读一点, 你可能要跳过这个基本的小节。

编译和链接

Linux 下两个最主要的汇编器是 Nasm(free, Netwide Assembler)和 GAS(free, Gnu Assembler),后一个和 GCC 结合在一起. 在这篇文章里我把集中在 Nasm 上, 把 GAS 放在后面,因为它使用 AT&T 的语法, 需要一个长的介绍.Nasm 调用时应该带上 ELF 格式选项("nasm -f elf hello.asm"); 产生的目标文件用GCC 来链接("gcc hello.o"), 产生最终的 ELF 二进制代码. 下面的这个脚本可用来编译 ASM 的模块; 我尽量把它写得简单, 所以所有它做的就是接受传给它的第一个文件名, 用 Nasm 编译, 用 GCC 来链接。

#!/bin/sh 
# assemble.sh 
outfile=${1%%.*} 
tempfile=asmtemp.o 
nasm -o $tempfile -f elf $1 
gcc $tempfile -o $outfile 
rm $tempfile -f 
#EOF

基本知识:

当然最好的就是在了解系统细节之前从一个例子开始. 这里是一个最基本的"hello-word" 形式的程序:

; asmhello.asm 
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



Tags:程序设计 汇编 操作系统 一个 Linux tempfile 就是 GCC
Google
 
上一篇: Linux系统下C语言编程--进程的创建   下一篇: Linux操作系统的声音设备编程实例
【返回顶部】 【打印】 【大】 【中】 【小】 【关闭】

 我来说两句
用户名: 新注册) 密码: 匿名评论 [论坛讨论]
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 相关文章
 热门文章

 
版权所有  2005-2006  Linux集中营  闽ICP备07500055号