汇编笔记

本文详细介绍了64位和32位系统下汇编语言的区别,包括Intel与AT&T汇编格式的不同、寄存器的差异以及SHL/SHR移位和LAHF/SAHF传送指令的使用。在64位系统中,通用寄存器增加,参数传递方式改变,且支持PC相关的寻址。而在32位系统中,栈帧和EFLAGS寄存器的使用方式有所不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新于20190929

1. Intel和AT&T汇编

参数是反的,AT&T寄存器前加%,常量前加$
Intel

mov     rax, rcx	;rcx -> rax
mov     cl, 2

对应AT&T

movq    %rcx, %rax	;rcx -> rax
mov    	$2, %cl

后文中如无特殊说明,都是Intel格式

2. 寄存器

64位系统下能用的通用寄存器如下图:
通用寄存器
区别有:

  1. 64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位。而剩下的寄存器名则是从r8 - r15,其低位分别用d,w,b指定长度。
  2. 32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数。rax作为返回值
  3. 64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用
  4. 64位支持一些形式的以PC相关的寻址,而32位只有在jmp的时候才会用到这种寻址方式。
  5. </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值