实模式使用32位寄存器
来源:互联网 发布:unity3d ai寻路插件 编辑:程序博客网 时间:2024/05/17 08:27
16位模式与32位模式:
在如下情况下使用16位模式:
实模式;
虚拟86模式;
系统管理模式;
保护模式但代码数据堆栈段都设为16位;
同时含有16位和32位段的保护模式任务;
含有16位指令的32位代码段。
在保护模式下如何将16位模式与32位模式整合,如何同时将16位和32位代码放到32位代
码段中?
ia32用如下方式来区分16位和32位段和操作:
1.代码段描述符的标志位D(缺省操作数和地址大小)。
代码段描述符的D标志置位(置1)则是32位,清除(置0)则是16位。实模式和虚拟86模式
下不使用段描述符,因此缺省就是16位。
2.堆栈段描述符的标志位B(缺省堆栈大小)。
堆栈段描述符B指明了栈顶指针的大小(32位esp或16位sp寄存器),
3.16位和32位调用门,中断门,陷阱门。
当通过调用门,中断门,陷阱门在代码段之间传递程序控制权时,所使用的操作数的大
小(位数)由调用门,中断门,陷阱门的位数决定,而不是由D标志位和传送指令前缀决
定。门的位数决定如何在栈中保存返回信息。
4.16位和32位普通用途寄存器。
对大多数程序来说,32位任务必须使D标志位和B标志位置位,而对于16位程序来说则必
须清除这两个标志。(实模式和v86模式下无上述标志,默认16位)。
控制权由16位段向32位段转移的时候需要通过门。
使用操作前缀(prefixes)可以改写缺省的操作数和地址的大小。(在D标志位和B标志位
清除的情况下使用32位寄存器)。标志位可在任意模式下使用。
操作前缀仅在有限时间内(即前缀所作用的语句)改变操作数和地址的大小。
以下操作前缀可以允许在同一个段中使用16和32位操作。
操作数前缀:66h
地址前缀:67h
使用上述操作前缀会将D标志位和B标志位置位置反。
例如:
将32位操作数从32位寄存器移到一个32位有效地址(EA)的内存里。
使用操作数前缀,可将16位操作数从16位寄存器移到一个32位有效地址(EA)的内存里。
使用地址前缀,可将32位操作数从32位寄存器移到一个16位有效地址(EA)的内存里。
如果同时使用操作数和地址前缀,可将16位操作数从16位寄存器移到一个16位有效地址
(EA)的内存里
- 实模式使用32位寄存器
- 32位模式下使用64位寄存器注意事项
- 32位寄存器与64位寄存器
- 32位寄存器
- 32位CPU寄存器
- 32位CPU寄存器
- 32位CPU寄存器
- 32位CPU寄存器
- 32位汇编寄存器
- 32位汇编寄存器
- 32位CPU寄存器
- 32位寄存器
- 32位寄存器
- 32位寄存器与指令
- 32位CPU寄存器简介
- 32位CPU 寄存器说明
- 64位与32位系统中函数调用中寄存器使用规则
- 位操作-在寄存器中的使用
- 健身一招:每日八搓强身健体
- DataGrid控件实现编辑、删除、分类以及分页操作
- 将SQL Server中所有表的列信息显示出来
- 有氧代谢运动八步走
- 二级下拉列表的实现
- 实模式使用32位寄存器
- js动态新增表格行
- How to study Linux
- 使用非托管代码直接修改字符串
- ASP+Js+Access 实现无级分类
- RIS远程操作系统安装服务
- 【原创】用MASM32操作INI文件
- javascript 技巧集 (ZT)
- 十二生肖求职信