汇编语言:简单示例程序讲解
本文最后更新于:2022年9月4日 下午
最简单的汇编程序
1 |
|
- 编写完成后,通过as指令汇编为.o文件,然后通过ld指令链接为可执行文件
- 该汇编程序的本质:
- 将退出状态设置为4
- shell中使用$?得到退出的状态码可以检测退出状态
- #表示注释
.
开头的表示伪指令.data
段保存程序的数据,是可读可写的,C程序的全局变量也属于.data段。本程序中没有定义数据,所以.data段是空的。.text
段保存代码,是只读和可执行的
- 符号(Symbol)
- 符号在汇编程序中代表一个地址。汇编程序经过汇编器的处理之后,所有的符号都被替换成它所代表的地址值
- 变量名和函数名都是符号,本质上是代表内存地址的
- 通过变量名访问一个变量,本质是读写某个地址的内存单元
- 通过函数名调用一个函数,其实就是跳转到该函数第一条指令所在的地址
- _start
- 是一个地址,整个程序的入口
- .globl指示告诉汇编器,_start这个符号要被链接器用到
- int指令称为软中断指令,可以用这条指令故意产生一个异常,从而从用户态下陷到内核态
- int指令中的立即数0x80是一个参数,触发系统调用
- eax和ebx寄存器的值是传递给系统调用的两个参数
- eax的值是系统调用号,1对应_exit系统调用
- ebx的值是传给_exit系统调用的参数,也就是退出状态
求一组数的最大值
1 |
|
- data_items是数组的首地址
- edi的值是数组的下标
- 4表示数组的每个元素占4字节,数组中第edi个元素的地址是
data_items + edi * 4
- ebx寄存器保存到目前为止找到的最大值
- eax寄存器保存当前要比较的数
汇编语言:简单示例程序讲解
http://gls.show/p/2fa8408d/