TA的每日心情 | 开心 昨天 08:44 |
---|
|
Eip寄存器:指令寄存器,指向下一条要执行的指令的地址
mov 赋值指令 mov eax,100 mov ebx,ecx
lea 地址传输指令 lea eax,[ebx] =mov eax,ebx mov eax,[ebx]
add 加法指令 add ecx,1 add,eax,ebx
sub 减法指令 sub edx,1 sub ebx,ecx
push 压栈 把操作数压入堆栈 push 1 push edx
pop 出栈 把栈顶的数据弹出堆栈 pop edx pop eax
call 相当于一个子函数,跳到call地址去执行代码,执行完之后返回调用call的地方
retn 返回指令 调用完子函数(call)之后,返回到原调用位置的指令
test 比较指令,对两个操作数进行按位的'与'运算,不将'与'的结果送目的操作数,不改变操作数的值,只影响标志位
xor 异或指令,实现两个操作数按位‘异或’运算,结果送至目的操作数中 xor edx,edx 这就是给edx清零
cmp 对两数进行相减,进行比较,不修改操作数的值,只影响标志位
jmp jn je jne jnz jnb ja jbe……各种跳转 由标志位寄存器决定是否跳转
fld 相当于push 只不过是将数据压入cpu的浮点运算寄存器st0-st7
fstp 与FST相类似,所不同的是:指令FST执行完后,不进行堆栈的弹出操作,即:堆栈不发生变化,而指令FSTP执行完后,则需要进行堆栈的弹出操作,堆栈将发生变化。
FST 将协处理器堆栈栈顶的数据传送到目标操作数中。在进行数据传送时,系统自动根据控制寄存器中舍入控制位的设置把栈顶浮点数舍入成相应精度的数据。
rep 循环指令 当ECX=0时终止 1、是一个循环 2、循环次数由ecx来决定
《汇编语言》 王爽
异或:如果a、b两个值不相同,则异或结果为1。如果a、b两个值相同,异或结果为0。 1和1 异或,结果为0,0和0异或,结果为0,0和1异或,
结果为1
浮点运算(FPU)的处理器有8个寄存器,分别为ST0~ST7,它们有80bit宽。这些寄存器用来存储32位或64位的浮点数
CF(carry flag):进位标志位
PF(parity flag):奇偶标志位
AF(auxiliary flag):辅助进位标志位
ZF(zero flag):零标志位。这个位就很简单了,判断结果是不是0。如果结果为0,就置1;不为0,就置0。
SF(sign flag):符号标志位。既然是符号标志位,就是对有符号数据来说的。如果结果为负,就置1;结果为正,就置0。
TF(timer overblow flag):定时器溢出标志。这个位主要是用来在debug中进行-t指令时使用的。当cpu在执行完一条指令后,如果检测到TF位的值为1,则产生单步中断,引发中断过程。通过这个位,我们就可以在debug中对程序进行单步跟踪。
IF(interrupt flag):中断允许标志位。当IF=1时,cpu在执行完当前指令后响应中断,引发中断过程;当IF=0时,则不响应可屏蔽中断。
DF(direction flag):方向标志位。在串处理指令中,控制每次操作后,si(指向原始偏移地址)、di(指向目标偏移地址)的增减。当DF=0时,每次操作后,si、di递增;DF=1时,每次操作后,si、di递减。我们可以使用cld指令将DF的值置为0,使用std指令将DF的值置为1。DF需要与rep、movsb等指令配合使用。
OF(overflow flag):溢出标志位
lea edi,[ebp-0C0h]
mov ecx,30h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
12 xor 35
001100
100011 101111
1、数组:有序的元素序列,在内存中是一段连续的内存地址。 mov ebx ,[edx+edi*4]
数组遍历一般就是一个计次循环就可以了
背包数组 技能数组 怪物数组……
2、链表:链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。
每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
链表分为:单链表 双链表 循环链表
3、二叉树:二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。
满二叉树 完全二叉树
背包二叉树 怪物二叉树 技能二叉树
4、堆栈:堆栈是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
特点:先进后出 往低地址开辟空间
通常用于传递参数和保存局部变量的值以及调用CALL之后的返回地址。
esp->指向栈顶
ebp->只是存取某时刻的esp,这个时刻就是进入一个函数内后,cpu会将esp的值赋给ebp,此时就可以通过ebp对栈进行操作,比如获取函数参数,局部变量等。
堆:内存空间大一些,主要存放一些通过new出来的对象或者malloc申请的内存空间。
|
|