AT&T汇编-参考

汇编程序中以.开头的名称并不是指令的助记符,不会被翻译成机器指令,而是给汇编器一些特殊指示,称为汇编指示(Assembler Directive)或伪操作(Pseudo-operation),由于它不是真正的指令所以加个“伪”字。

IA-32 硬件特性

1 寄存器

1.1 通用寄存器

通用寄存器用于存放正在处理的数据。

	EAX 用于操作数和结果数的累加器
	EBX 指向数据内存断中的数据的指针
	ECX 字符串和循环操作的计数器
	EDX IO指针
	EDI 用于字符串操作的目标的数据指针
	ESI 用于字符串操作的源的数据指针
	ESP 堆栈指针
	EBP 堆栈数据指针

其中寄存器EAX,EBX,ECX,EDX又可以通过16位和8位寄存器名称引用。如EAX,AX引用EAX低16位,AL引用EAX低8位,AH引用AL之后的高8位。

1.2 段寄存器

IA-32平台允许使用3中内存模型: 平坦内存模式 分段内存模式 实地址模式。

1.2.1 平坦内存:

平坦内存把全部的系统内存表示为连续的地址空间, 通过线性地址的特定地址访问内存位置。

1.2.2 分段内存:

分段内存把系统内存划分为独立的段组,通过位于寄存器中的指针进行引用。每个段用于包含特定类型的数据。一个段用于包含指令码,另一个段包含数据元素,第三个段包含数据堆栈。段中的内存位置是通过逻辑地址引用的, 逻辑地址是由段地址加上偏移量构成, 处理器把逻辑地址转换为相应的线性地址以便访问。

段寄存器:

CS 代码段
DS 数据段
SS 堆栈段
ES 附加段指针
FS 附加段指针
GS 附加段指针

每个段寄存器都是16位的,包含指向内存特定段起始位置的指针,程序不能显示加载或改变CS寄存器。DS、ES、FS、GS都用于指向数据段,通过4个独立的段, 程序可以分隔数据元素,确保他们不会重叠,程序必须加载带有段的正确指针值的数据段寄存器,并且使用偏移值引用各个内存的位置。SS段寄存器用于指向堆栈段,堆栈包含传递给函数和过程的数据值。

1.2.3 实地址

如果实地址模式, 所有段寄存器都指向线性0地址, 并且都不会被程序改动, 所有的指令码、数据元素、堆栈元素都是通过他们的线性地址直接访问的。

1.3 指令指针寄存器

指令指针寄存器是EIP寄存器,它跟踪要执行程序的下一条指令代码,应用程序不能修改指令指针本身,不能指定内存地址把它拖放EIP寄存器中,相反必须通过一般的跳转指令来改变预存取缓存的下一条指令。

在平坦内存模型中,指令指针包含下一条指令码的线性地址,在分段模型中指令指针包含逻辑地址指针,通过CS寄存器的内存引用。

1.4 控制寄存器(CR0,CR1,CR2,CR3,CR4)

这几个寄存器是与分页机制密切相关的,因此,在进程管理及虚拟内存管理中会涉及到这几个寄存器,读者要记住CR0、CR2、CR3及CR4这三个寄存器的内容

1.4.1. CR0寄存器

不能直接访问控制寄存器,但是能把控制寄存器中的值传递给通用寄存器,如果必须改动控制寄存器的标志,可以改动通用寄存器的值,然后把内容传递给控制寄存器。

CR0是系统内的控制寄存器之一。控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性。
CR0的第0位是保护允许位PE(Protedted Enable),用于启动保护模式,如果PE位置1,则保护模式启动,如果PE=0,则在实模式下运行。
CR0的第1位是监控协处理位MP(Moniter coprocessor),它与第3位一起决定:当TS=1时操作码WAIT是否产生一个“协处理器不能使用”的出错信号。
CR0的第2位是模拟协处理器位 EM (Emulate coprocessor),如果EM=1,则不能使用协处理器,如果EM=0,则允许使用协处理器。
CR0的第3位是任务转换位(Task Switch),当一个任务转换完成之后,自动将它置1。随着TS=1,就不能使用协处理器。
CR0的第4位是微处理器的扩展类型位ET(Processor Extension Type),其内保存着处理器扩展类型的信息,如果ET=0,则标识系统使用的是287协处理器,如果 ET=1,则表示系统使用的是387浮点协处理器。
CR0的第16位是写保护未即WP位(486系列之后),只要将这一位置0就可以禁用写保护,置1则可将其恢复。
CR0的第31位是分页允许位PG(Paging Enable),当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址。在开启这个标志之前必须已经或者同时开启PE标志。即若要启用分页机制,那么PE和PG标志都要置位。

14.2 CR1寄存器

CR1是未定义的控制寄存器,供将来的处理器使用。

14.3 CR2寄存器

CR2是页故障线性地址寄存器,保存最后一次出现页故障的全32位线性地址。

14.4 CR3寄存器

CR3是页目录基址寄存器,保存页目录表的物理地址,页目录表总是放在以4K字节为单位的存储器边界上,因此,它的地址的低12位总为0,不起作用,即使写上内容,也不会被理会。

14.5 CR4寄存器

CR4在Pentium系列(包括486的后期版本)处理器中才实现,它处理的事务包括诸如何时启用虚拟8086模式等。。

1.5 eflags寄存器

IA-32使用单一的寄存器来包含一组状态控制和系统标志,eflags寄存器包含32位标志信息。

在64-bit模式下,eflags寄存器被扩展为64位的rflgas寄存器,高

  • 0
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值