32位环境下的16汇编程序设计
2011-10-27 21:39
190 查看
本篇文章是年前写的,本不打算贴在csdn上的,但是为了避免其他新手在这上面走弯路,还是贴上来好了。
相信学过汇编的同学一定用汇编写过读写CMOS芯片的程序吧,最常见的就是从CMOS芯片读出当前系统的时间,但是无法向CMOS芯片写入数据来更改系统时间,这并不代表不能向CMOS写入数据,能写入,但不是在操作系统下。
masm5.0编译器只支持16位汇编,也就是说,编译出来的exe文件是16位程序,但是我们的电脑平时工作在保护模式下,以32位为主。有人会说,难道16位程序不能在保护模式下使用?答案嘛,很显然,不能,至于我们用汇编写的程序为什么可以运行,很好解释,因为我们的程序不是运行在保护模式下的,而是运行在虚拟8086模式下的,为什么16位程序不能运行在保护模式下呢,很好解释,看下面的例子
16位下,mov ax, 1234h对应的机器码是 B8 34 12
但是在32位下是这样的 66 B8 34 12
在32位下mov eax, 1234h B8 34 12 00 00
假设我写一个16位程序,用masm编译的
mov ax, 1234h B8 34 12
push ax 50
mov ax, bx 8B C3
如果我们写的16位程序直接通过CPU执行就会成这样
mov eax, 8b501234h B8 34 12 50 8B
ret C3
我们之所以写出来的读写CMOS程序只能读不能写,就是因为我们写出来的16位程序实在虚拟8086模式下运行的,相当于是在一个虚拟的环境里运行的,没有实际意义。
但并不是32位CPU的所有实际运行的模式下操作十六位寄存器的指令前都必须加66,实际上在实模式下,使用32位寄存器前需要加66,我们的读写CMOS芯片的程序直接开机引导运行的话,是可以将数据写入到CMOS芯片里的。
相信学过汇编的同学一定用汇编写过读写CMOS芯片的程序吧,最常见的就是从CMOS芯片读出当前系统的时间,但是无法向CMOS芯片写入数据来更改系统时间,这并不代表不能向CMOS写入数据,能写入,但不是在操作系统下。
masm5.0编译器只支持16位汇编,也就是说,编译出来的exe文件是16位程序,但是我们的电脑平时工作在保护模式下,以32位为主。有人会说,难道16位程序不能在保护模式下使用?答案嘛,很显然,不能,至于我们用汇编写的程序为什么可以运行,很好解释,因为我们的程序不是运行在保护模式下的,而是运行在虚拟8086模式下的,为什么16位程序不能运行在保护模式下呢,很好解释,看下面的例子
16位下,mov ax, 1234h对应的机器码是 B8 34 12
但是在32位下是这样的 66 B8 34 12
在32位下mov eax, 1234h B8 34 12 00 00
假设我写一个16位程序,用masm编译的
mov ax, 1234h B8 34 12
push ax 50
mov ax, bx 8B C3
如果我们写的16位程序直接通过CPU执行就会成这样
mov eax, 8b501234h B8 34 12 50 8B
ret C3
我们之所以写出来的读写CMOS程序只能读不能写,就是因为我们写出来的16位程序实在虚拟8086模式下运行的,相当于是在一个虚拟的环境里运行的,没有实际意义。
但并不是32位CPU的所有实际运行的模式下操作十六位寄存器的指令前都必须加66,实际上在实模式下,使用32位寄存器前需要加66,我们的读写CMOS芯片的程序直接开机引导运行的话,是可以将数据写入到CMOS芯片里的。
相关文章推荐
- Windows下32位汇编程序环境搭建
- 64位Linux环境 编译32位汇编程序(外链C库函数)
- Windows下32位汇编程序环境搭建
- 32位汇编语言学习笔记(34)--一个数据的柱状图显示程序
- 汇编程序开发环境搭配
- 汇编程序开发环境搭配
- win32汇编环境搭建以及第一个程序
- 32位汇编语言学习笔记(22)--大小写转换程序1
- Linux下的汇编程序设计
- 汇编语言三 设数组ARRAY存储多个8位无符号数据,其中第一个字用于存放数据个数,试编写程序求数组元素之和,将结果存放在AX中,若计算的和超过16位数表示的范围,则给出溢出标志DX=-1,否则D
- Coursera - 计算机组成 - W3 - MIPS汇编程序设计
- 简单OS开发前奏<一>EDITPLUS+MASM32搭建汇编开发环境(16位+32位)
- 汇编程序语言设计复习题整理
- 微机原理课程设计32位汇编学习之一(显示消息框)
- Windows 环境下32位汇编语言程序设计 Makefile文件定义
- WOW64(判断32位程序运行在64位环境下)
- Windows 32位 汇编语法 [2] 程序入口、注释与换行
- Windows环境下32位汇编程序设计C版code--第五章(一)
- 基于网络环境的程序设计综合实验报告
- 汇编程序开发环境搭配(转载)