首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>系统管理>内核技术>正文

Linux操作系统下的汇编程序设计简介

http://www.oklinux.cn  2006-01-01  来源: 赛迪网技术社区  meitia   会员收藏  游客收藏  【 】 

摘要:本文主要讲述了Linux下使用汇编的利弊,以及常用汇编工具的使用和语法特点。重点讲述了NASM。

引言:汇编语言是低级语言,与硬件和操作系统紧密联系。个人电脑以前都是用DOS,现在发展成了WINDOWS 98,而另一个操作系统Linux也正在崛起。下面比较一下这三个操作系统:

DOS较稳定,速度快无法充分发挥计算机性能,没有图形界面较低。

WINDOWS 98操作简便,应用软件多,硬件兼容性好;不稳定,经常死机,速度慢高。

Linux性能优秀,非常稳定,界面美观,操作简便;缺乏软件厂商支持,应用软件少免费。

由以上的比较可知,Linux操作系统本身具有较大优势,它的普及应该只是时间问题,所以如何在Linux下开发软件是我们计算机系学生必须学习与研究的一个课题。

Linux 下的主要编程语言是C,同时Linux还支持其他许多编程语言,汇编语言作为最重要的编程语言之一,当然也包括在内。它能够完成许多其他语言所不能完成的功能。要学习Linux编程,就必须要学习Linux下的汇编程序设计。下面我就来介绍一下Linux下的汇编程序设计。

Linux汇编简介

一、汇编语言的优缺点

由于Linux是用C写的,所以C自然而然的就成为了Linux的标准编程语言。大部分人都把汇编给忽略了,甚至在因特网上找资料都是非常的困难,很多问题都需要靠自己来尝试。我认为这样对待汇编语言是不公平的,不能只看到它的缺点,当然也不能只看到它的优点,下面把它的优缺点作一个比较:

优点:汇编语言可以表达非常底层的东西

可以直接存取寄存器和I/O;

编写的代码可以非常精确的被执行;

可以编写出比一般编译系统高效的代码;

可以作为不同语言或不同标准的接口。

缺点:汇编语言是一个非常低级的语言

非常冗长单调,在DOS下编程时就可以体会到;

易出BUG,且调试困难;

代码不易维护;

兼容性不好,与硬件关系非常紧密。

总的来说,汇编语言要用在必须的地方,尽量少用汇编编写大型程序,多采用inline模式。

二、汇编语言工具

DOS 下常用的工具MASM和TASM到Linux下就用不起来了,Linux有自己的汇编工具,而且种类非常的多。其中Gas可以算是标准配置,每一种 Linux中都包括有Gas,但是GAS采用的不是我们通常在DOS下采用的汇编语法,它采用的是AT&T的语法格式,与intel语法格式有很大的不同。

如果要采用与DOS接近的语法格式,就必须用另一种汇编工具NASM,NASM基本与MASM相同,但也有不少地方有较大区别,特别涉及到操作系统原理时,与DOS可以说是截然不同。

Linux汇编程序设计

一、Hello,world!

几乎所有的语言入门篇都是以“Hello,world!”为例,那么我也以Hello,world!为例开始。

NASM's standalone Hello-World.asm for Linux 
section .text
extern puts
global main

main: 
push dword msg ;stash the *** of msg on the stack.
call puts ;call the 'puts' routine (libc?) 
add esp, byte 4 ;clean the stack?
ret ;exit.

msg:
db "Hello World!",0 

编译:
nasm –f elf hello.asm
gcc –o hello hello.o

说明:这个程序实际上是调用了,Linux系统的puts函数,原理与调用DOS下C语言的函数相同,先用Extern声明puts是外部函数,再把参数(即msg的地址)压入堆栈,最后Call函数实现输出。

我们再来看一个程序:

section .text
global main

main: 
mov eax,4 ;4号调用
mov ebx,1 ;ebx送1表示stdout
mov ecx,msg ;字符串的首地址送入ecx
mov edx,14 ;字符串的长度送入edx
int 80h ;输出字串
mov eax,1 ;1号调用
int 80h ;结束
msg:
db "Hello World!",0ah,0dh 
(编译同上一个程序)

这个程序与DOS程序十分相似,它用的是linux中的80h中断,相当于DOS下的21h中断,只是因为Linux是32位操作系统,所以采用了 EAX、EBX等寄存器。但是Linux作为一个多用户的操作系统与DOS又是有着非常大的区别的。要写出有特色的程序,不了解操作系统和硬件是不行的。下面我介绍一下Linux操作系统。

共3页: 上一页 1 [2] [3] 下一页

上一篇:Linux系统内核定时器机制详解(下)   下一篇:Linux操作系统下的软中断问题分析


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux操作系统下的软中断问题分析
·Linux系统内核定时器机制详解(下)
·Linux操作系统源代码详细分析(二)
·Liunx操作系统编程之Const使用详解
·Linux操作系统源代码详细分析(一)
·使用Ioctl向Linux内核传递参数的方法
·精华:升级Linux操作系统内核奋斗记
·Linux内核入侵检测安全增强实现(上)
·深入学习Linux系统,Linux内核编程风格
·如何编译一个操作系统内核-Ubuntu方式
·GNU/Linux开发者需要从桌面突破
·Linux系统应用程序和内核模块的区别
·Linux桌面系统开发者求同存异谋发展
·从Linux2.4到2.6内核开发中的改进
·Linux内核编译菜单中相关选项的意义
·Linux下通用线程池的创建与使用(上)
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·学习园地:Linux系统内核中判断大小的
·系统编译:如何给Make命令来传递参数
·Linux 2.6内核中sysfs文件系统简单概述
·Fedora 8 Linux系统的内核配置注意事项
·升级Linux内核的一般步骤方法
·Linux发行版知识普及:三个版本的CPUID
·编译安装Virtualbox驱动模块
· Linux系统的内核解读入门
·新手学堂 Linux系统的内核解读入门
·Linux系统内核中网络参数的意义及其应
·走向Linux系统高手之路 内核编译过程解
·Linux系统中安装内核的方法详细介绍
  阅读排行
· 深入理解LINUX内核中文版下载地址
·基于S3C44B0微处理器的uClinux内核引导
·Kernel command using Linux system ca
·Linux 2.6内核如何武装Fedora Core 2
·Process priority and control on AIX
·Linux操作系统的内核编译内幕详解
·推荐:Linux用户态与内核态的交互
·通过振动向Linux ThinkPad传输信息
·Linux操作系统源代码详细分析(二)
·Linux系统内核接收以太帧的处理程序
·Linux and symmetric multiprocessing
·主流嵌入式Linux系统下GUI解决方案
·揭秘Linux内核调试器之内幕
·用命令行加挂Linux的文件系统简介
·Linux内核和核心OS组件的测试与分析
网摘收藏: