汇编语言
- 种类
- 8086汇编(16bit)
- x86汇编(32bit)
- x64汇编(64bit)
- ARM汇编
- x64汇编,根据编译器的不同有两种书写格式
- Intel
- AT&T
项目 | AT&T | Intel | 说明 |
---|---|---|---|
寄存器名 | %eax | eax | Intel不带% |
操作数顺序 | movl %eax,%edx | mov edx,eax | 将eax的值赋值给edx |
立即数 | movl $3,%eax movl $0x10,%eax | mov eax,3 mov eax,0x10 | 将3的值赋值给eax 将0x10的值赋值给eax |
jmp指令 | jmp *%edx jmp *0x4001002 jmp *(%eax) | jmp edx jmp 0x4001002 jmp [eax] | 在AT&T中jmp地址前要加* |
操组数长度 | movl %eax,%edx movb $0x10,%al leaw 0x10(%dx),%ax | mov edx,eax mov al,0x10 lea ax,[dx+0x10] |
- 汇编语言不区分大小写
x64汇编-寄存器
- 通常CPU将内存中的数据存储到寄存器中,然后再对寄存器中的数据进行运算
- PC是非intel厂家对IP的称呼,也就是说PC起始跟CS:IP是一回事儿。
内联汇编
#include <iostream>
using namespace std;
int main()
{
int a = 1;
__asm {
mov eax, a;
add eax,1;
mov a, eax;
}
cout << a << endl;
return 0;
}