一.先行课程

1.C/C++语言

1-1.static 静态变量、函数:http://c.biancheng.net/view/3...

1-2.inline 内联函数 http://c.biancheng.net/view/1...

2.gcc编译内联汇编

2-1.内嵌汇编语法如下:

__asm__(汇编语句模板: 输出部分: 输入部分: 破坏描述部分)

“asm”表示后面的代码为汇编代码,__asm__ 是 asm的别名。
“volatile”告诉gcc编译器不要进行代码优化,后面的代码保持原样。

2-2.汇编语言模板:

模板语句由汇编语言序列组成,汇编语句间使用";"、"\n"、"\n\t"进行分隔。
指令中的操作数可以使用占位符引用C语言变量,占位符最多有10个,名称是0%、...9%。
指令中占位符表示操作数,总是被当做long类型(4字节);但也可以显示的控制其,"b"表示低字节,如%b1,"h"表示高字节,如%h1.

2-3.输出部分:

输出部分描述输出操作数,不同的操作数之间用 "," 隔开,每个操作数描述符由限定字符串和C语言变量组成。
每个输出操作数的限定字符串必须包含"="表示他是一个输出操作数。
描述符字符串表示对该操作数的限制,这样gcc编译器可以根据限制决定如何分配寄存器,如何产生必要的代码将占位符与C语言或C语言变量联系起来。

2-4.输入部分:

输入部分描述输入操作数,不同的操作数描述符之间使用逗号格开,每个操作数描述符由限定字符串和C语言表达式或者C语言变量组成。

2-5.破坏描述符:

破坏描述符用于通知编译器我们使用了哪些寄存器或内存,由逗号格开的字符串组成,每个字符串描述一种情况,一般是寄存器名;除寄存器外还有"memory"。
例如:"%eax","%ebx","memory"等。
对"memory"的解释:Memory
Memory描述符告知GCC:
1)不要将该段内嵌汇编指令与前面的指令重新排序;也就是在执行内嵌汇编代码之前,它前面的指令都执行完毕
2)不要将变量缓存到寄存器,因为这段代码可能会用到内存变量,而这些内存变量会以不可预知的方式发生改变,因此GCC插入必要的代码先将缓存到寄存器的变量值写回内存,如果后面又访问这些变量,需要重新访问内存。

如果汇编指令修改了内存,但是GCC 本身却察觉不到,因为在输出部分没有描述,此时就需要在修改描述部分增加"memory",告诉GCC 内存已经被修改,GCC 得知这个信息后,就会在这段指令之前,插入必要的指令将前面因为优化Cache 到寄存器中的变量值先写回内存,如果以后又要使用这些变量再重新读取。

2-6.限定符表:

分类限定符描述
通用寄存器“a”将输入变量放入eax
“b”将输入变量放入ebx
“c”将输入变量放入ecx
“d”将输入变量放入edx
“s”将输入变量放入esi
“d”将输入变量放入edi
“q”将输入变量放入eax,ebx,ecx,edx中的一个
“r”将输入变量放入通用寄存器,也就是eax,ebx,ecx,edx,esi,edi中的一个
"A"把eax和edx合成一个64 位的寄存器(use long longs)
内存“m”内存变量
“o”操作数为内存变量,但是其寻址方式是偏移量类型, 也即是基址寻址,或者是基址加变址寻址
“V”操作数为内存变量,但寻址方式不是偏移量类型
" "操作数为内存变量,但寻址方式为自动增量
“p”操作数是一个合法的内存地址(指针)
寄存器或内存“g”将输入变量放入eax,ebx,ecx,edx中的一个 或者作为内存变量
“X”操作数可以是任何类型
立即数“I”0-31之间的立即数(用于32位移位指令)
“J”0-63之间的立即数(用于64位移位指令)
“N”0-255之间的立即数(用于out指令)
“i”立即数
“n”立即数,有些系统不支持除字以外的立即数, 这些系统应该使用"n"而不是"i"
匹配" 0 "表示用它限制的操作数与某个指定的操作数匹配
“1”也即该操作数就是指定的那个操作数,例如"0"
“9”去描述"%1"操作数,那么"%1"引用的其实就是"%0"操作数,注意作为限定符字母的0-9 与 指令中的"%0"-"%9"的区别,前者描述操作数,后者代表操作数。
&;该输出操作数不能使用过和输入操作数相同的寄存器
操作数类型“=”操作数在指令中是只写的(输出操作数)
“+”操作数在指令中是读写类型的(输入输出操作数)
浮点数“f”浮点寄存器
“t”第一个浮点寄存器
“u”第二个浮点寄存器
“G”标准的80387浮点常数
%该操作数可以和下一个操作数交换位置,例如addl的两个操作数可以交换顺序 (当然两个操作数都不能是立即数)
#部分注释,从该字符到其后的逗号之间所有字母被忽略
*表示如果选用寄存器,则其后的字母被忽略

3.x86汇编语言

3-1.汇编语言表

https://www.cnblogs.com/lsgxe...


牛刀杀鸡
3 声望0 粉丝

下一篇 »
知识点梳理