16位段和32位段
来源:互联网 发布:cctv怀旧源码新势力 编辑:程序博客网 时间:2024/04/30 22:05
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就是指令前缀,表示该指令强制运行在相反的指令长度模式
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就是指令前缀,表示该指令强制运行在相反的指令长度模式
0 0
- 16位段和32位段
- 16位和32位代码段
- 关于16位和32位代码段
- 16位和32位代码段的区别
- 位段和联合
- 16位代码段和32位代码段的区别
- 32位代码段和16位代码段切换的实例
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- 位段
- Fragment中嵌套Fragment问题
- java实现图片转ascii字符画
- 使用bootstrap-table遇到的一个坑
- 对于 Recursive Algorithm 中应当注意的
- C语言回调函数一个简单的例子
- 16位段和32位段
- release AAR的导出及自动拷贝
- Android源码编译出错No rule to make...
- kafka本机搭建、测试及常用命令
- noip2015 day2 t3
- Redis系列~安装(一)
- 使用 Github Pages 发布你的项目文档
- win7系统下VirtualBox升级后不能为虚拟电脑打开一个新任务
- UVA 11107 Life Forms(后缀数组)