Chinaunix首页 | 论坛 | 博客
  • 博客访问: 319956
  • 博文数量: 60
  • 博客积分: 2781
  • 博客等级: 少校
  • 技术积分: 600
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-23 16:42
文章分类

全部博文(60)

文章存档

2011年(33)

2010年(27)

分类: WINDOWS

2010-11-30 22:40:40

x86汇编语言编程小结

Registers(寄存器)

832位通用寄存器(EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI)解释如下:

EAXThe Accumulator Register(累加寄存器),函数的返回值就保存在EAX中。

EBXThe Base Register(基址寄存器),在8个通用寄存器中,EBX是唯一一个没有被用作特殊用途的寄存器,经常用来存放数组的开始地址或者中间计算。

ECXThe Count Register(计数寄存器),经常被用作数组的索引寄存器,或者是循环计数器。

EDXThe Data Register(数据寄存器),是除EAX之外其他七个通用寄存器中与EAX关系最为紧密的寄存器,可以看作是EAX的扩展,存储EAX当前运算过程中的数据。同时,EDX也用于IO指令中,EAX存放端口上待读写的数据,而EDX则存放端口地址。

EBPThe Base Pointer,栈帧指针(Stack Frame Pointer)即栈的基址指针。

ESPThe Stack Pointer,栈指针,指向栈顶。

ESIThe Source Index,源索引,源变址寄存器。

EDIThe Destination Index,目的索引,目的变址寄存器,以上二者常在拷贝数据块时使用。

EIPInstruction Pointer,指令指针寄存器,存放下一条待执行指令的地址。隐含地设置,反汇编代码中看不到。

操作系统还有一个32位的标志寄存器(EFLAGS),部分位保留或给系统开发人员使用,用户只需要了解低16位中的8位常用标志位即可,如(ZF,PF,CF,SF,OF)

另外还有616位的段寄存器segment register(CS, DS, SS, ES, FS, GS),段寄存器里存放的是段选择子(segment selector),段选择子指向段描述符(segment descriptror),段描述符指定了相应的段。结合博客中《段寄存器的基本概念》阅读理解。

Addressing Mode(寻址模式)

立即寻址模式:操作数就是已有的立即数,如mov EAX, 56H

直接寻址模式:操作数是地址,如mov EAX, [12345678H]

寄存器寻址模式:寄存器中存放操作数,如mov EAX, EBX

寄存器间接寻址模式:寄存器中存放内存地址,如mov EAX, [EDI]

基址偏移和相对寻址模式:基址加偏移,查询内存得到。

Common Instructions(常见指令)

数据移动指令

Instruction

Operands

Notes

Mov des sour

reg  immed

reg  reg

reg  mem

mem  immed

mem  reg

立即数à寄存器

寄存器à寄存器

内存à寄存器

立即数à内存

寄存器à内存

注意:没有 内存à内存

Push

reg

immed

寄存器压栈

立即数压栈

ESP减去4字节(栈的增长方向从高向低)

注意:没有内存压栈

Pop

reg

栈顶元素弹出到寄存器

ESP增加4字节

Lea

reg  mem

读取内存地址到寄存器


Offset也是取数据的地址指令,数据的地址必须是明确的(编译阶段确定),如全局变量、静态变量、字符串常量等存放在.data/.rdata节中的数据,不能获取运行时的地址,如栈上的数据地址。

Lea常用来获取栈上的数据的地址,也可以获取确定的地址。

算数运算指令

值得注意的是算数运算指令的目的寄存器必须是EAX,EBX,ECX,EDX其中之一。


逻辑运算指令

与(AND) 或(OR) 非(NOT) 异或(XOR)

 

比较运算指令

cmp dest sourdest – sour不将结果保存至目的寄存器中,只是修改标志寄存器EFLAGS

test dest sour:将destsour按位AND操作,但不将结果保存至目的寄存器中,只是修改标志寄存器EFLAGS

数据存储

Little EndianIntel系列处理器)

Little Endian指的是数据低位存放在内存低字节位置上。比如要表示十进制整型100,那么换成十六进制表示就是64H,因为在计算机设计中,数据类型整型int需采用4字节表示,所以Intel处理器将64H放在低字节上,其他三个字节均是00H

Big EndianMotorola PowerPC系列处理器)

Big Endian指的是数据低位存放在内存高字节位置上。

阅读(2015) | 评论(1) | 转发(0) |
0

上一篇:Win7的安装

下一篇:Intel x86处理器工作模式

给主人留下些什么吧!~~

chinaunix网友2010-12-01 15:12:37

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com