linux 汇编2-关于寄存器及系统调用

yumo6663个月前 (05-11)技术文章10

后续主要在linux操作系统下学习基于X86的32位汇编语言

32位的X86处理器中有8个32位的通用寄存器(EAX、EBX、ECX、EDX、ESI、)EDI、ESP、EBP),由于历史的原因,EAX通常用于计算,ECX通常用于循环变量计数。ESPEBP有专门用途,ESP指示栈指针(用于指示栈顶位置),而EBP则是基址指针(用于指示子程序或函数调用的基址指针)。

主要寄存器如下图所示

如图中所示,EAX、EBX、ECX和EDX的前两个高位字节和后两个低位字节可以独立使用,也就是AX、BX、CX、DX作为16位寄存器使用,其中16位又被独立分为H和L部分,可以作为8位寄存器使用,这样做的原因主要是考虑兼容16位的程序。使用寄存器时,其名称大小写是不敏感的EAXeax没有区别

2. 系统调用

系统调用是用户空间访问内核的唯一手段;除了异常和陷入外,他们是内核唯一的合法入口程序员需要直接操作硬件,拥有的唯一接口是操作系统内核本身。为了使用汇编构建有用的程序,我们需要使用内核提供的linux系统调用(systemcall)。这些系统调用是内置在操作系统中的库,提供例如从键盘读取和输出到屏幕的函数。

在linux中,每个系统调用都被赋予一个独一无二的系统调用号。当用户空间的进程执行一个系统调用的时候,这个系统调用号就用来指明到底是要执行哪个系统调用:进程不会提及调用的名称。

当你调用一个系统调用,内核将立即暂停你的程序的执行。它将通过必要的驱动需要在硬件上执行你请求的任务然后将控制权还给你的程序。

通过将想要执行的函数号(操作码)存入到EAX寄存器以及将想传给系统调用的参数填充到剩余的寄存器,我们可以在汇编中完成系统调用。一个软件被请求INT命令中断,内核接管后使用我们的参数从库调用函数。

X86平台上,Linux在通过软中断指令int 0x80进行系统调用时(在Intel Pentium II 以后又引入了sysenter指令,调用号存在于EAX中,第一个参数存在于EBXECXEDXESiEDI来依次传递最多五个参数

常用调用号如下:

举个例子,请求一个中断,当EAX寄存器为1时,将调用sys_exit,当EAX寄存器为4时将调用sys_write代替。如果函数需要,EBX,ECX和EDX将作为参数传递。

回过头再看第一个汇编helloWorld源程序

图中 1 部分:将使用系统调用sys_write来输出我们的消息到控制台窗口。这个函数在linux系统调用表中的操作码被分配为4,所以代码就是: mov eax,4

这个函数也带有三个参数,在请求中断来执行任务之前,将它们有序的存入EBX、EDX,ECX三个寄存器中。

传递的参数如下:

  • EBX将被存入我们想写入的文件(在本例中为标准化输出STDOUT)
  • ECX将被存入我们在 .data 段创建的变量的地址
  • EDX将被存入字符串的长度

图中 2部分:使用系统调用sys_exit 终止进程来退出程序

每一行都有英文的注释, 通过这次的学习是不是又理解的更清楚了

相关文章

编写汇编语言常见错误分析

一、汇编软件汇编失败原因分析:这里采用Keil C51软件包中的宏汇编器A51作为编绎器,单片机的汇编语言编写时要注意一定的语法,详细介绍可以参考相关参考书,语法错误会造成汇编失败,常见的汇编错误如下...

1.2电脑的软件组成和功能。

软件只运行在电脑硬件上,用于实电脑高级功能的程序。用户通过软件才能对电脑进行控制和实现各种高级功能。电脑只有同时具备软件和硬件才可以正常工作。软件主要储存在外部储存中软件系统一部分操作系统软件。程序设...

学点汇编吧,它让你懂得更多

我是从学foxbase开始接触编程的(当foxbase是编程语言吧)。很容易学,不多久就可以就可以设计自己的数据库,配合简单的菜单来操控数据库:增加、删除、插入、排序、查找、打印都得心应手,觉得编程好...

程序员的自由与黑客文化

简介世界上超过一大半的计算机都在运行开源软件为我们提供各种便利,它们是由谁编写的,为何要免费提供给我们?free software 为什么不是表示的免费软件,而是自由软件?它为何和 open sour...

电算化之会计软件的运行环境 多选

1、计算机网络是现代计算机技术与通信技术相结合的产物,它是以()为目的。在统一的网络协议控制下,将地理位置分散的许多独立的计算机系统连接在一起所形成的网络。A.硬件资源和软件资源共享B.信息化C.信息...

学习操作系统心得体会

一个学期的《操作系统》课程就要结束了,在这个学期,通过老师的传授和课本以及课下的阅读学习,让我对计算机操作系统的一些实现原理和简单的操作过程有了基本的了解。在学习操作系统之前,我在前面几个学期计算机...