专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 汇编语言

16位段和32位段的根本区别是什么?该怎么解决

发布时间:2010-06-14 15:39:02 文章来源:www.iduyao.cn 采编人员:星星草
16位段和32位段的根本区别是什么?
MASM把USE16、USE32用在SEGMENT后面来说明段的属性,NASM用
[SECTION   .s16]
[BITS   16]

[SECTION   .s32]
[BITS   32]
1.来说明使用的是16位还是32位段,大家有没有想过16位段和32位段到底有什么区别?描述符中的D位究竟有什么作用?
2.还有就是实模式下的16位的BIOS例程,在保护模式下究竟还能不能使用?(大家一定知道,如果能在保护模式下使用BIOS例程将有什么样的重要意义。)提出这个问题供大家探讨。

我对第二个问题的答案是肯定的。

------解决方案--------------------
机器指令不一样
------解决方案--------------------
机器码的区别,主要体现在对MOD/RM的解释上(对SIB也有影响,暂且不提)
IA32的机器码: 前缀+操作码+MOD/RM+SIB+Displacement+立即数
其中MOD/RM是操作数的主要组成部分,表示需要访问的寄存器/内存
在16位和32位模式下,CPU对于MOD/RM的解释有很大的区别
简单来说,就是在32位下不能使用16位内存地址,不能使用16位偏移量,也不能使用ax等16位寄存器

也许有人要骂我吹牛,谁说32位模式不能用ax!!
请写一个两行的汇编语言
[bits 32]
mov ax,5
然后用nasm汇编一下
出来的机器码是不是66 xx xx xx??
66H就是指令前缀,表示该指令强制运行在相反的指令长度模式
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: