c源码:testg.c

1 #include<stdio.h>     
         
2                                  

3 #define sum(a, b) a + b           

4                                   

5 int main(int argc,char
**argv)   

6 {                                

7     int num = sum(1,2);
        

8     printf("num =%d\n", num);  

9                                   

10     return0;                   

11
使用命令:gcc -S testg.c

寄存器:8位:al,ah

16位:ax

32位:eax

64位:rax 新增(r8-r15寄存器,低32位r8d-r15d,低16位r8w-r15w,低8位r8b-r15b)

操作符标示:8位:b

16位:w

32位:l

64位:q

1        .file   "testg.c"

2         .section        .rodata

3 .LC0:

4         .string "num = %d\n"

5         .text

6         .globl  main

7         .type   main, @function

8 main:

9 .LFB0:

10         .cfi_startproc

11         pushq   %rbp

12         .cfi_def_cfa_offset16

13         .cfi_offset6, -16

14         movq    %rsp, %rbp

15         .cfi_def_cfa_register6

16         subq    $32, %rsp

17         movl    %edi, -20(%rbp)

18         movq    %rsi, -32(%rbp)

19         movl    $3, -4(%rbp)

20         movl    -4(%rbp),
%eax

21         movl    %eax, %esi

22         movl    $.LC0, %edi

23         movl    $0, %eax

24         call    printf

25         movl    $0, %eax

26         leave

27         .cfi_def_cfa7,
8

28         ret

29         .cfi_endproc

30 .LFE0:

31         .size   main, .-main

32         .ident  "GCC: (GNU)5.1.0"

33         .section        .note.GNU-stack,"",@progbits 
    

linux系统中64位汇编和32位汇编的系统调用主要有以下不同:

(1)系统调用号不同.比如x86中sys_write是4,sys_exit是1;而x86_64中sys_write是1,
sys_exit是60。linux系统调用号实际上定义在/usr/include/asm/unistd_32.h和/usr/include/asm/unistd_64.h中。

(2)系统调用所使用的寄存器不同,x86_64中使用与eax对应的rax传递系统调用号,但是  x86_64中分别使用rdi/rsi/rdx传递前三个参数,而不是x86中的ebx/ecx/edx。

(3)系统调用使用“syscall”而不是“int 80”。

64位linux 汇编的更多相关文章

  1. MiniCRT 64位 linux 系统移植记录:64位gcc的几点注意

    32位未修改源码与修改版的代码下载: git clone git@github.com:youzhonghui/MiniCRT.git MiniCRT 64位 linux 系统移植记录 MiniCRT ...

  2. 64位linux报错Could not initialize class java.awt.image.BufferedImage

    最近碰到一个问题: 64位linux报错Could not initialize class java.awt.image.BufferedImage 在WIN平台下运行正常BufferedImage ...

  3. 在64位linux下编译32位程序

    在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783

  4. /usr/local/lib/libz.a: could not read symbols: Bad value(64 位 Linux)

    /usr/local/lib/libz.a: could not read symbols: Bad value(64 位 Linux) /usr/bin/ld: /usr/local/lib/lib ...

  5. 树莓派4B安装64位Linux(不用显示器键盘鼠标)

    入手了树莓派4B,我对它的定位是作为一个Docker实验环境,平时用到的镜像多为Java服务端常用的技术.以及自己作的Java应用镜像,因此宿主机需要64位操作系统,而树莓派官方操作系统只有32位的, ...

  6. 树莓派4B安装docker-compose(64位Linux)

    准备工作 树莓派4B已装好64位Linux,并且装好了19.03.1版本的Docker,具体的安装步骤请参考<树莓派4B安装64位Linux(不用显示器键盘鼠标)> 安装docker-co ...

  7. 64位Linux编译C代码,crt1.o文件格式不对的问题

    今天在某台64位LInux下编译一个简单的hello world的C程序,报错: /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../crt1.o: cou ...

  8. 64位linux下玩32位汇编编程

    利用下假期,打算把linux下的汇编语言给熟悉下,结果是以32位为版本的,只能在办公室的机器上跑了个opensuse的32位版本,家里的suse挂了,无法输入中文.打算再安装下32位系统,今天找到了个 ...

  9. 64位Linux安装32位向日葵

    查看linux系统版本信息如下,可以看出系统为64位. [root@localhost bin]# uname -aLinux localhost.localdomain 3.10.0-327.3.1 ...

随机推荐

  1. DeepFaceLab进阶(4):通过Colab免费使用Tesla K80 跑模型!

    当学会了换脸软件DeepFaceLab基本使用,各种参数配置,各有优化技能之后.唯一约束你的可能是电脑配置. CPU能跑,但是慢到怀疑人生,低配模型都得跑一周 低配显卡,显存不够,H128 根本就跑不 ...

  2. js中如何把RGB颜色转换为16进制颜色

    将RGB颜色值转换为16进制颜色值,主要是将 R.G.B 值分别转换为对应的十六进制值,填入 #RRGGBB 中. 推荐在线颜色转换工具:http://www.ecjson.com/rgbhex/ 例 ...

  3. Python基础函数必学

    我们知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需要计算3个不同大小的圆的面积: r1 = 12.34 r2 = 9.08 r3 = 73.1 ...

  4. mongodb安装,库操作,集合操作(表),文档操作(记录)

    安装 1.下载地址 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi 2.如果报没 ...

  5. poj-3253 fence repair(贪心题)

    题目描述: Farmer John wants to repair a small length of the fence around the pasture. He measures the fe ...

  6. 动态规划:HDU2844-Coins(多重背包的二进制优化)

    Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. vim 命令总结

    命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filename 打开vim ...

  8. Java程序占用实际内存大小

    很多人错误的认为运行Java程序时使用-Xmx和-Xms参数指定的就是程序将会占用的内存,但是这实际上只是Java堆对象将会占用的内存.堆只是影响Java程序占用内存数量的一个因素.要更好的理解你的J ...

  9. 2 Model层 - 模型查询

    1.简介 查询集表示从数据库中获取的对象集合 查询集可以含有零个.一个或多个过滤器 过滤器基于所给的参数限制查询的结果 从Sql的角度,查询集和select语句等价,过滤器像where和limit子句 ...

  10. mysql sum聚合函数和if()函授的联合使用

    今天去面试遇到一个数据库试题,首先说一下表结构如下: 表结构:mytest 表数据:mytest 要查询的结果如下: 在本题目中,需要用到sum聚合函数和if函数 sql如下: ,)) ,)) AS ...