Linux下的汇编语言之系统调用

运维 系统运维
汇编语言是基本的语言之一,他的明显优势是速度快,可以直接对硬件进行操作。Linux下如何使用汇编语言,语法格式有哪些?需要使用哪些开发工具?本文将会为大家详细道来。

      作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿 Linux 内核来讲,虽然绝大部分代码是用 C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在 Linux 的启动部分。由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。

第四课时:Linux 命令行参数

   在 Linux 操作系统中,当一个可执行程序通过命令行启动时,其所需的参数将被保存到栈中:首先是 argc,然后是指向各个命令行参数的指针数组 argv,最后是指向环境变量的指针数据 envp。在编写汇编语言程序时,很多时候需要对这些参数进行处理,下面的代码示范了如何在汇编代码中进行命令行参数的处理:

  例3. 处理命令行参数

  

  1. # args.s  
  2.  
  3.   .text  
  4.  
  5.   .globl _start  
  6.  
  7.   _start:  
  8.  
  9.   popl %ecx # argc  
  10.  
  11.   vnext:  
  12.  
  13.   popl %ecx # argv  
  14.  
  15.   test %ecx, %ecx # 空指针表明结束  
  16.  
  17.   jz exit  
  18.  
  19.   movl %ecx, %ebx  
  20.  
  21.   xorl %edx, %edx  
  22.  
  23.   strlen:  
  24.  
  25.   movb (%ebx), %al  
  26.  
  27.   inc %edx  
  28.  
  29.   inc %ebx  
  30.  
  31.   test %al, %al  
  32.  
  33.   jnz strlen  
  34.  
  35.   movb $10, -1(%ebx)  
  36.  
  37.   movl $4, %eax # 系统调用号(sys_write)  
  38.  
  39.   movl $1, %ebx # 文件描述符(stdout)  
  40.  
  41.   int $0x80  
  42.  
  43.   jmp vnext  
  44.  
  45.   exit:  
  46.  
  47.   movl $1,%eax # 系统调用号(sys_exit)  
  48.  
  49.   xorl %ebx, %ebx # 退出代码  
  50.  
  51.   int $0x80  
  52.  
  53.   ret  
  54.  

【编辑推荐】

  1. 2.3 用汇编语言编写程序
  2. 术语汇编 基本CSS滤镜概述
  3. 琢石成器—Windows环境下32位汇编语言程序设计
  4. 3.1.3 as86汇编语言程序的编译和链接
  5. 3.1.2 as86汇编语言程序
  6. 3.1.1 as86汇编语言语法
  7. 3.2.6 as汇编命令
责任编辑:zhaolei 来源: 网络转载
相关推荐

2011-01-14 14:15:11

Linux汇编语言

2011-01-14 14:08:17

Linux汇编语言

2011-01-14 14:39:32

Linux汇编语言

2011-01-14 13:44:45

Linux汇编语言

2018-01-11 14:58:40

2021-03-25 13:05:56

网络安全寄存器汇编语言

2012-02-09 09:00:54

汇编语言

2011-01-04 17:08:10

汇编语言

2021-06-11 10:02:39

语言编程开发

2010-11-09 09:51:52

汇编语言

2022-10-31 14:02:24

汇编语言神经网络

2023-11-23 08:25:40

开发人员SmaliAndroid

2011-07-21 09:59:26

JavaScript

2009-06-14 21:54:37

动态语言Java脚本API

2017-01-12 22:36:30

2023-06-01 16:27:34

汇编语言函数

2022-04-22 15:06:59

C++PythonJava

2010-06-04 17:56:22

Linux 常用工具

2012-08-13 14:13:46

2012-02-13 10:03:31

编程开发
点赞
收藏

51CTO技术栈公众号