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

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

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

第四课时:Linux 命令行参数

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

  例3. 处理命令行参数

  

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

51CTO技术栈公众号