当前位置: 首页 > 汇编 > 正文

X86&&X64 汇编学习——内联基础

前言

现在已经进入了64位时代,但是几乎所有的汇编教程道还停留在16位,32位上。总是让人用起来有种脱轨的感觉,诚如上面所言,我们很难很难找到讲授X64汇编的文档,手册,甚至教程。

但是我还是需要使用的,没办法需要自己慢慢查资料摸索。最近在回顾X86的内嵌汇编,所以想着在做32位内嵌汇编的同时学习64位汇编。

X64汇编的学习你至少要知道X86 32位汇编的基础知识。

在C语言中内嵌汇编访问全局变量

X86

 

这段程序的目的用result 来保存 a 与 b 的乘积,典型的X86用法。我们再来看看X64的用法:

首先指令上:movl   —>  movq  转变成了64位指令

imull   —>  imulq

其次看寄存器:

e*x   —>   r*x   32位寄存器转换成空了64位寄存器

扩展ASM

__asm__ __volatile__(“assembly code”:output locations : input locations : changed registers);

汇编代码,输出代码,输入代码,修改寄存器/破坏性描述

 使用寄存器

在使用寄存器的时候,我们需要注意的是:内存和寄存器交互使用,需要用“%”转义寄存器。64位下随机选择寄存器使用“g”参数。

例如我们将变量b的值赋值给变量a.

替换占位符

简单来说就是做了标记,使用[] 给变量起一个别名

效果和之前时一样的。

寄存器破坏

如果使用再输入输出中没有声明但是已经使用的寄存器,需要在破坏描述符部分说明:

内联跳转,宏一样处理。

本文固定链接: http://zmrlinux.com/2016/07/21/x86x64-%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0-%e5%86%85%e8%81%94%e5%9f%ba%e7%a1%80/ | Kernel & Me

该日志由 root 于2016年07月21日发表在 汇编 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: X86&&X64 汇编学习——内联基础 | Kernel & Me