![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序设计-汇编语言
文章平均质量分 81
以linux x86环境为例,讲解代码编译运行的方方面面
SauronKing
这个作者很懒,什么都没留下…
展开
-
为什么使用switch
可以看到,汇编代码并没有频繁的进行分之判断和跳转,而是在.rodata中生成了一个跳转表,里边保存了所有case的执行逻辑的地址,我们所有的code情况只有101,102,103,104,105,106,所以在函数执行开始先把code减去100,这样就剩了个1,2,3,4,5,6,这正好作为跳转的索引,可以看到因为我们101和106对应的逻辑是一样的,所以跳转表为索引1和索引6创建的跳转目标都是.L3,这样只需要执行。,就可以直接跳转到需要执行的逻辑代码了,我们可以想见,神奇的是跳转表又出来了。原创 2023-12-13 16:56:07 · 343 阅读 · 0 评论 -
x86-64的寄存器使用规则
函数A中调用函数B,我们说A是调用者,B是被调用者栈帧栈帧是在函数调用过程中函数负责维护的自己执行过程中使用到的栈空间,在函数A调用函数B的时候,有下列几种情况需要在运行时栈上分配空间保存数据:函数调用过程中,如果寄存器无法全部保存参数数据,就会在运行时栈上分配空间来保存参数数据如果函数存在非静态局部变量,并且无法用寄存器保存,或者使用到了变量的地址,就会在运行时栈上分配空间如果函数存在数组或者结构联合的局部变量,需要分配栈空间保存数据。原创 2023-12-11 16:23:24 · 476 阅读 · 0 评论 -
x86-64条件码是如何决定跳转的
以上这些都是针对于比较操作的标志位组合代表的意思,x86-64中的大部分跳转都是根据这些组合处理的,当然也有些别的情况我们也会根据标志位进行判断,比如。: 无论是什么操作,都说明最高位是1,对于有符号数的比较操作,能说明结果是个非负数。: 无论是什么操作,都说明最高位是0,对于有符号数的比较操作,能说明结果是个负数。SF=0,最高位是0,说明结果大于等于0,根据符号数溢出的条件,SF=1,最高位是1,说明结果小于0,根据符号数溢出的条件,SF=0,最高位是0,说明结果大于等于0,即。原创 2023-12-07 15:28:36 · 1154 阅读 · 0 评论 -
x86-64如何设置条件码
本文讲述x86-64是如何设置条件码状态的。原创 2023-12-07 11:48:29 · 892 阅读 · 0 评论 -
x86-64的算数和逻辑操作
全称(Shift Arithmetic(算术) Right),D向右移动k位,左侧的位用符号位补齐。:寄存器rdx(高64位)和rax(低64位)中的128位数作为有符号被除数,S作为有符号除数,:寄存器rdx(高64位)和rax(低64位)中的128位数作为无符号被除数,S作为无符号除数,:全称(Shift Logical(逻辑) Right),D向右移动k位,左侧的位用0补齐。位长的数据值进行操作,移位量是由寄存器cl的低m位决定的,这里。:计算 S * %rax的值,:计算 S * %rax的值,原创 2023-11-27 18:16:50 · 962 阅读 · 0 评论 -
x86-64的数据传送指令
本篇文章介绍x86-64的数据传送指令,数据指令大类上分为三个。原创 2023-11-27 16:21:11 · 1529 阅读 · 0 评论 -
x86-64汇编指令支持的通用目的寄存器
本篇文章介绍x86-64汇编指令支持的通用目的寄存器,x86-64的中央处理器支持16个通用目的寄存器。每个寄存器存储64位值,因为x86-64的中央处理器需要向前兼容的原因,每个寄存器都分为四个不同的表示形式,分别表示寄存器的低8位低16位低32位全64位,本篇文章只记录一下每个寄存器在汇编指令中的名称,至于用法,后面再介绍。原创 2023-11-27 14:09:39 · 473 阅读 · 1 评论 -
x86-64汇编指令支持的操作数格式
本篇文章介绍x86-64汇编指令支持的操作数格式x86-64汇编指令支持的操作数格式主要分为三类。原创 2023-11-27 10:08:45 · 912 阅读 · 1 评论 -
win11安装VMware+Linux
本文作为linux汇编程序设计的准备工作,在windows 11系统安装VMware+Linux系统。原创 2023-10-31 11:54:00 · 290 阅读 · 1 评论