以前学的汇编没有用到实际编程中;最近闲来无事学习一下;在网上东拼西凑了一点资料- - !
寄存器
作用:保存操作数和运算结果,减少读取操作数所需要占用总线和访问存储器的时间。(相当于告诉缓存)
字节说明:拿EAX举例,它代表一个32位的寄存器;他由一个高16位寄存器和一个低16位寄存器组成。在拿一个16位寄存器AX来举例,它分高8位(AH),低8位(AL)。
段寄存器
说明:内存是分段管理的,访问内存的方式为【段位:偏移值】
CS——代码段寄存器(Code Segment Register),其值为代码段的段值;
DS——数据段寄存器(Data Segment Register),其值为数据段的段值;
ES——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
SS——堆栈段寄存器(Stack Segment Register),其值为堆栈段的段值;
FS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值;
GS——附加段寄存器(Extra Segment Register),其值为附加数据段的段值。
数据寄存器
作用概览:保存算术逻辑运算结果,作为算术运算操作数,传输数据;作为指针寄存器(32位独有)
EAX 是"累加器"(accumulator),它是很多加法、乘法、除法和输入输出等指令的缺省寄存器;使用频率极高。
EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址,即常常用作存储器的指针。
ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器;它常常用于控制循环操作次数。
EDX 在运算时(加减乘除)用于存放操作数参与运算,也可用于存放I/O端口地址。
变址寄存器(偏移)
作用概览:主要用于存放存储单元在段内的偏移量,作为通用寄存器,也可以作为操作数使用;也可以作为存储器指针使用
说明:不可以分割为8位寄存器
ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),因为在很多字符串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串.
指针寄存器(堆栈)
作用概览:主要用于存放堆栈内存储单元的偏移量;也可用于存储操作数
说明:不可以分割为8位寄存器
ESP:堆栈指针(指向栈顶),用它只可以访问栈顶
EBP是"基址指针"(BASEPOINTER),可以直接存取堆栈中的数据;常用作高级语言函数调用的"框架指针"(framepointer). 在破解的时候,经常可以看见一个标准的函数起始代码:
push ebp ;保存当前ebp mov ebp,esp ;EBP设为当前堆栈指针 sub esp, xxx ;预留xxx字节给函数临时变量. |
指令指针寄存器
用于存放下一次要执行指令的偏移量;在具有预取指令功能的系统中,下次要执行的指令通常已被预取到指令队列中,除非发生转移情况。
其他寄存器
1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)