当前位置: 网学 > 编程文档 > 汇编语言 > 正文

Linux下的汇编程序设计

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式

Linux汇编简介:

一、汇编语言的优缺点:

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

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

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

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

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

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

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

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

l 易出BUG,且调试困难

l 代码不易维护

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

总的来说,汇编语言要用在必须的地方,尽量少用汇编编写大型程序,多采用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 location 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操作系统。

二、Linux操作系统简介:

操作系统实际是抽象资源操作到具体硬件操作细节之间的接口。对Linux这样的多用户操作系统来说,它需要避免用户对硬件的直接访问,并防止用户之间的互相干扰。所以Linux接管了BIOS调用和端口输入输出,关于端口输入输出方面请参阅Linux IO-Port-Programming HOWTO。而要通过Linux对硬件硬件进行访问就需要用到System Call,实际上是许多C的函数,可以在汇编程序中调用,调用方法与DOS下的汇编完全相同,而且用ASM汇编时不用链接额外的库函数。

Linux与DOS的主要区别在于内存管理、进程(DOS下无进程概念)、文件系统,其中内存管理和进程与汇编编程的关系比较密切:

1、内存管理:

对任一台计算机而言,其内存以及其他资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量

  • 上一篇资讯: 汇编语言超浓缩教程
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号