汇编的相关知识
仅针对x86架构
32位x86寄存器:¶
64位x86寄存器:¶
1 2 3 4 |
|
快速入门¶
这篇博客,快速入门 https://www.cs.virginia.edu/~evans/cs216/guides/x86.html
调用函数用call 标签 代码跳转用 junmp 标签
汇编中任何一个地方都可以用<标签:>标记:
比如 my_tag:
[addr]:表示addr地址指向的内容 比如[rax]:表示rax寄存器中存的是一个地址,[rax]表示该地址指向的值。
常用的指令:¶
- mov、push、pop、lea、add、sub、inc\dec、imul、idiv、and、or、xor、not、neg、shl(左移位)、shr(右移位)、je(等于跳转)、jne(不等跳转)、jg(大于)、jge(大于等于)、jl(小于)、jle(小于等于)、cmp(比较,通常和跳转连用)、call、ret
一些惯用的代码:¶
- 变量名+[rip]表示变量的值,rip为程序指针,指示当前程序运行的位置。上图a[rip]代表2
- 函数的开头和结尾:
1 2 3 4 5 6 7 |
|


浮点数的表示¶
float在内存中中32位二进制数表示