64位Linux汇编

操作系统都开始向64位过度了,但大部分教材教程书籍资料还停留在32位,绝大部分语言不用care这个问题,但汇编还是有较大变化的。

C语言代码:

int main()
{
        exit(2);
}

32位汇编实现上述C语言代码相同功能:

.section .data
.section .text
.global _start
_start:
        movl $1, %eax
        movl $2, %ebx
        int  $0x80
64位Linux系统汇编以上代码:
$ as -32 -o exit.o exit.s
链接:
$ ld -m elf_i386 -o exit exit.o
运行:
$ ./exit
查看运行结果:
$ echo $?

相同功能的64位版本:

.section .data
.section .text
.global _start
_start:
        movq $60, %rax
        movq $2, %rdi
        syscall
汇编:
$ as -o exit.o exit.s
链接:
$ ld -o exit exit.o
运行和查看运行结果同32位:
$ ./exit
$ echo $?

32位汇编和64位汇编区别:

  1. 寄存器名不同,分别是eax和rax
  2. 系统调用号不同,详见文件/usr/include/asm/unistd_32.h 和 unistd_64.h
  3. 系统调用参数所用寄存器不同,32位是ebx,ecx,edx而64位是rdi,rsi,rdx
  4. 系统调用触发指令不同,分别是int 80和syscall


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值