码迷,mamicode.com
首页 > 编程语言 > 详细

汇编语言学习

时间:2019-08-02 20:52:58      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:class   a*   amp   -o   cal   ext   format   text   ima   

 

参考文章:

(1)x86-64指令系统过程调用学习笔记 https://blog.csdn.net/weixin_44735312/article/details/89818907 

 

创建文本sum.c并编写如下程序:

#include <stdio.h>

int sum(int x,int y){
    int t = x +y;
    return t;
}  

通过如下命令生成sum.o文件。

gcc -O2 -c sum.c

通过如下命令查看在x86-64平台上的机器指令:

objdump -d sum.o

最终的机器指令如下:

sum.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <sum>:
   0:	8d 04 37      lea    (%rdi,%rsi,1),%eax
   3:	c3            retq  

lea传输源操作数偏移(而不是值)到目的寄存器。源操作数必须为内存操作数,目的寄存器必须为同一寄存器。 

 

创建fun.c文件,内容如下:

long caller(){
   char a = 1;
   short b = 2;
   int c = 3;
   long d = 4;
   callee(a,&a,b,&b,c,&c,d,&d);
   return a*b + c*d;
}

void callee(char a,char* ap,short b,short* bp,int c,int* cp,long d,long* dp){
   *ap += a;
   *bp += b;
   *cp += c;
   *dp += d;
}

生成的机器码如下:

 

技术图片

 

汇编语言学习

标签:class   a*   amp   -o   cal   ext   format   text   ima   

原文地址:https://www.cnblogs.com/mazhimazhi/p/11290793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!