x86 汇编程序基础

最简单的汇编程序:



这个程序只做了一件事情:退出,退出状态是 4

链接(linking):就是将不同部分的代码和数据收集和组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行。链接可以执行于编译(compile time)时,也就是在源代码被翻译成机器代码时;也可以执行于加载(load)时,也就是在程序被加载器(loader)加载到存储器并执行时。甚至执行于运行时(run time),由应用程序来执行。使得分离编译成为可能。 —— 摘自《深入理解计算机系统》

链接的两个主要作用:1. 修改目标文件中的信息,对地址做重定位。2. 把多目标文件合并成一个可执行文件。 —— 《Linux C 一站式编程学习》

.section 指示把代码分成若干个段,程序被操作系统加载执行时,每个段被加载到不同的地址,操作系统对不同的页面设置不同的读、写、执行权限。
.data 段,保存程序的数据,是可读可写的,相当于 C 的全局变量。
 .text 段, 是只读和可执行的,后面的指令属于 .text 段。

_start : 是一个符号(Symbol),符号在汇编程序中代表一个地址,可以用在指令中,汇编程序在经过汇编器的处理之后(也就是成为 .o 文件),所有的符号都被替换为它所代表的真实地址值。

.globl :  指令告诉汇编器, _start 这个符号要被链接器用到,所以要在目标文件中的符号表中标记它是一个全局符号。
_start 就像 C 程序的main函数一样特殊,是整个程序的入口,链接器在链接时会查找目标文件中的 _start 符号代表的地址,把它设置为整个程序的入口地址,所以每个汇编程序都要有一个_start ,并且用 .globl声明。
如果一个符号没有被 .globl 声明,就表示这个符号不会被链接器用到。

$1 表示 cpu 内部产生一个立即数,不需要读取内存
% 表示寄存器,为了和符号名区分开

int 指令是软中断指令,可以用这条指令故意产生一个异常。异常的处理和中断类似,CPU从用户模式切换到特权模式,然后跳到内核代码中执行异常处理程序。

求一组数中的最大值,汇编代码:
汇编代码详细解释,请见《Linux C编程一站式学习》 p280,非常详细。


转为机器(指令码)码:





第Ο章 写在前面...................................................................................................................2 第一章汇编语言简介.............................................................................................................3 第二章认识处理器.................................................................................................................4 2.1 寄存器........................................................................................................................4 2.2 使用寄存器................................................................................................................6 第三章操作内存...................................................................................................................12 3.1 实模式......................................................................................................................12 3.2 保护模式..................................................................................................................16 3.3 操作内存..................................................................................................................19 3.4 串操作......................................................................................................................21 3.5 关于保护模式中内存操作的一点说明.................................................................22 3.6 堆栈.........................................................................................................................23 本章小结.........................................................................................................................25 第四章利用子程序与中断...................................................................................................25 4.1 子程序......................................................................................................................25 4.2 中断..........................................................................................................................31 第五章编译优化概述...........................................................................................................34 5.1 循环优化:强度削减和代码外提.........................................................................36 5.2 局部优化:表达式预计算和子表达式提取.........................................................37 5.3 全局寄存器优化.....................................................................................................38 5.4 x86体系结构上的并行最大化和指令封包..........................................................40 5.5 存储优化..................................................................................................................42 第六章 Linux X86汇编程序设计........................................................................................46 6.1编译和链接...............................................................................................................46 6.2基本示例...................................................................................................................46 第七章 X86汇编指令集汇总...............................................................................................47 一.数据传输指令............................................................................................................47 二、算术运算指令.........................................................................................................49 三、逻辑运算指令.........................................................................................................49 四、串指令.....................................................................................................................50 五、程序转移指令.........................................................................................................50 六、伪指令.....................................................................................................................52 七、寄存器.....................................................................................................................52 八、位操作指令,处理器控制指令.............................................................................52 九、FPU instructions......................................................................................................54 第八章 GCC内联汇编基础..................................................................................................54 1. GCC汇编格式...........................................................................................................55 2.内联汇编基本形式......................................................................................................56 3. 扩展形式内联汇编....................................................................................................56 4. 深入constra................................................................................................................59 5.结束语..........................................................................................................................63
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值