专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »汇编语言 » 汇编寄存器:汇编学习--寄存器(待更新) »正文

汇编寄存器:汇编学习--寄存器(待更新)

来源: 发布时间:星期三, 2008年12月10日 浏览:2次 评论:0
本文所提均为8086汇编语言

寄存器(Register)是CPU内部元件所以在寄存器之间数据传送非常快
//----------------------------------------------------------------------
8086 有8个8位数据寄存器这些8位寄存器可分别组成16位寄存器:

AH&AL=AX:累加寄存器常用于运算;

BH&BL=BX:基址寄存器常用于地址索引;

CH&CL=CX:计数寄存器常用于计数;

DH&DL=DX:数据寄存器常用于数据传递
//-----------------------------------------------------------------------
8086设定了四个段寄存器专门用来保存段地址:

CS(Code Segment):代码段寄存器;

DS(Data Segment):数据段寄存器;

SS(Stack Segment):堆栈段寄存器;

ES(Extra Segment):附加段寄存器

//---------------------------------------------------------------------------

特殊功能寄存器:

IP(Intruction Poer):指令指针寄存器与CS配合使用可跟踪执行过程;

SP(Stack Poer):堆栈指针与SS配合使用可指向目前堆栈位置

BP(Base Poer):基址指针寄存器可用作SS个相对基址位置;

SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针;

DI(Destination Index):目变址寄存器可用来存放相对于 ES 段之目变址指针还有个标志寄存器FR(Flag Register),有九个有意义标志

//-------------------------------------------------------------------------------------------------------------------------------


通用寄存器:
  EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP(这个虽然通用,但很少被用做除了堆栈指针外用途)
  
  这些32位可以被用作多种用途,但每个都有"专长". EAX 是"累加器"(accumulator), 它是很多加法乘法指令缺省寄存器. EBX 是"基地址"(base)寄存器, 在内存寻址时存放基地址. ECX 是计数器(counter), 是重复(REP)前缀指令和LOOP指令内定计数器. EDX是...(忘了..哈哈)但它总是被用来放整数除法产生余数. 这4个寄存器低16位可以被单独访问,分别用AX,BX,CX和DX. AX又可以单独访问低8位(AL)和高8位(AH), BX,CX,DX也类似. 返回值经常被放在EAX中.
  
  ESI/EDI分别叫做"源/目标索引寄存器"(source/destination index),在很多串操作指令中, DS:ESI指向源串,而ES:EDI指向目标串.

  EBP是"基址指针"(BASE POINTER), 它最经常被用作高级语言"框架指针"(frame poer). 在破解时候,经常可以看见个标准起始代码:
  
  push ebp ;保存当前ebp
  mov ebp,esp ;EBP设为当前堆栈指针
  sub esp, xxx ;预留xxx字节给临时变量.
  ...
  
  这样来,EBP 构成了该个框架, 在EBP上方分别是原来EBP, 返回地址和参数. EBP下方则是临时变量. 返回时作 mov esp,ebp/pop ebp/ret 即可.
  
  ESP 专门用作堆栈指针.

段寄存器:
  CS(Code Segment代码段) 指定当前执行代码段. EIP (Instruction poer, 指令指针)则指向该段中个具体指令. CS:EIP指向哪个指令, CPU 就执行它. 般只能用jmp, ret, jnz, call 等指令来改变流程,而不能直接对它们赋值.
  DS(DATA SEGMENT, 数据段) 指定个数据段. 注意:在当前计算机系统中, 代码和数据没有本质差别, 都是串二进制数, 区别只在于你如何用它. 例如, CS 制定段总是被用作代码, 般不能通过CS指定地址去修改该段. 然而,你可以为同个段申请个数据段描述符"别名"而通过DS来访问/修改. 自修改代码常如此做.
  ES,FS,GS 是辅助段寄存器, 指定附加数据段.
  SS(STACK SEGMENT)指定当前堆栈段. ESP 则指出该段中当前堆栈顶. 所有push/pop 系列指令都只对SS:ESP指出地址进行操作

如果本文没有解决您的问题,请进老妖怪开发者社区提问

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: