benny5609的专栏

人生,到世上走一遭,只不过是单纯的体验与学习认识,当我们在临死的时候,可以光荣地对自己说:"我已领略过"便不枉此生。...

8个32位的常规目的寄存器

字体变小字体变大

8个32位的常规目的寄存器

 

地址

 

名称

 

描述

 

EAX*

 

累加器

 

计算操作数和存放结果数据

 

EBX

 

基础寄存器

 

指向DS数据段的数据指针

 

ECX*

 

计数寄存器

 

字符串和循环操作的计数器

 

EDX*

 

数据寄存器

 

输入/输出指针

 

ESI

 

源索引

 

字符串操作的源地址指针

 

EDI

 

目的索引

 

字符串操作的目的地址指针

 

ESP

 

栈指针

 

栈指针,不能直接使用

 

EBP

 

基址指针

 

栈的数据指针

 

注意:尽管它们被称为通用寄存器,但只有标了‘*’号的寄存器能在Windows编程中通用。

 

6个16位的段寄存器,定义内存中的段

 

地址

 

名称

 

描述

 

CS

 

代码段

 

存储指令和执行的地方

 

DS, ES, FS, GS

 

数据段

 

数据段

 

SS

 

堆栈段

 

当前程序存储堆栈的地方

 

2个32位的不属于任何种类的寄存器

 

地址

 

名称

 

描述

 

EFLAGS

 

代码段

 

状态、控制和系统标志

 

EIP

 

指令指针

 

下一条将要执行指令的地址

 

 

 

 

基本指令集

 

X86指令非常多,但我们通常都无需全部用到。下面的一些简单指令是你一开始就要掌握的:

 

指令

 

描述

 

ADD* reg/memory, reg/memory/constant

 

将两个操作数作加法运算,并将结果存入到第一个操作数,如果有进位则会设置CF标志。

 

SUB* reg/memory, reg/memory/constant

 

从第一个操作数中减去第二个操作数,并将结果存入到第一个操作数中

 

AND* reg/memory, reg/memory/constant

 

在操作数之间执行逻辑位与运算,并将结果存入到第一个操作数中

 

OR* reg/memory, reg/memory/constant

 

在操作数之间执行逻辑位或运算,并将结果存入到第一个操作数中

 

XOR* reg/memory, reg/memory/constant

 

在操作数之间执行逻辑位异或运算,并将结果存入到第一个操作数中。注意不能XOR两个内存操作数。

 

MUL reg/memory

 

将操作数与累加器(eax)相乘,并将结果存入累加器

 

DIV reg/memory

 

从累加器中除以操作数,并将结果存入累加器

 

INC reg/memory

 

将操作数的值增1,并将结果存回到操作数中

 

DEC reg/memory

 

阅读更多
个人分类: ASM
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭