IP:相应的偏移值。 CS+IP
1. call word ptr + 内存单元地址
这个指令的是先将call指令的下一条指令的IP入栈,然后跳到以内存单元地址为IP的代码处
2.call dword ptr + 内存单元地址
call是汇编指令,用来调用子过程。后面的Dword ptr[40105c]是一个内存地址,就是要调用的子过程的首地址。这个指令先将call指令的下一条指令的CS(代码段寄存器)入栈,再将call指令的下一条指令的IP入栈,然后跳到以内存单元的高位为CS,低位为IP的代码处
3.eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。
4.乘法运算对应的汇编指令有有符号imul和无符号mul两种。由于乘法指令的执行周期较长,在编译过程中,编译器会首先尝试吧乘法转换为加法,或者使用移位指令。不能转换时,才会使用乘法指令。
5.SHL(左移)指令使目的操作数逻辑左移一位,最低位用 0 填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃
6.ESP 就是一直指向栈顶的指针,而 EBP 只是存取某时刻的栈顶指针
7.inc 加1指令 dec 减1指令
8.有的汇编指令需要16位地址对齐,这样的话速度更快,注意c代码中的地址。
9.movups 不必16字节对齐移动指令 表示打包的单精度浮点数
10.movaps 16字节对齐移动指令 表示打包的单精度浮点数
11. movd 指令在通用寄存器或内存和XMM或MMX寄存器之间复制双字或四字。
13.lea
1、lea eax,[addr] 就是将表达式addr的值放入eax寄存器,
2、lea eax,dword ptr [ebx];将ebx的值赋值给eax
3、lea eax,c;其中c为一个int型的变量,该条语句的意思是把c的地址赋值给eax;
14.XMM 寄存器是一个完全独立的寄存器集,随 SSE 一起引入,至今仍被广泛使用.它们是 128 位宽,指令可以将它们视为 64、32(整数和浮点)、16 或 8 位(仅限整数)值的数组.其中 8 个在 32 位模式下,16 个在 64 位模式下.实际上,所有浮点数学运算都是在 64 位模式下在 SSE(以及 XMM 寄存器)中完成的,因此,与 MMX 寄存器不同,它们仍然非常相关.
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176779.html原文链接:https://javaforall.net
