win7 64位真的不能装masm吗?

还是用DOS启动盘吧,因为一进windows,很多指令就就只能由windows执行了,你写的很多指令都不能执行了。

因为在具有保护功能的系统启动的时,系统会把标志寄存器EFLAGS上的IOPL置0,并且系统程序会抢占0特权级,于是所有的IO操作都必须由系统进行,于是非内核模式的程序无法进行IO,只能请求系统内核了。
如果你要用汇编开发操作系统,是不可能把windows作为开发环境的。因为你如果要开发一个操作系统,首先要把一个磁盘格式化成你自己设计的文件系统,然后要把这个系统的所有数据写入你格式化好的磁盘,但是这些都涉及到IO操作,要使用“out”这条指令,而windows下的应用程序的CPL为3,IOPL为0,“out”这条指令无法执行。

所以,如果你要开发一个新的操作系统,只能在DOS之类的非保护型操作系统上作为开发环境,你在DOS上写汇编代码,用DOS环境下的汇编器汇编你的代码,然后运行代码,把一个磁盘格式化成你自己设计的文件系统,然后把这个系统的所有数据写入你格式化好的磁盘,然后你就可以退出DOS重启,选择从你刚装好系统的那个磁盘启动,就可以进入你写的操作系统了。

这也是为什么高级语言有windows上的集成开发环境,但几乎所有的汇编器都运行在DOS上的原因。因为汇编本身就是用来做系统的,如果已经装好了系统,设置了IOPL保护了,当然不能再做系统了,所以还是DOS下才好做系统。

注意:由于DOS运行于实模式,只能用1M的内存,你如果需要更大内存空间,可以把cr0寄存器的第0位PE置1进入保护模式,此时你可以执行任何指令,因为此时你的程序的CPL为0,而标志寄存器EFLAGS上的IOPL为3。

当然,你也可以不用任何开发环境,直接用磁头在磁盘上一位一位地刻。早期的计算机不仅没有编译器,而且没有操作系统,键盘和鼠标都不能用,更别提什么集成开发环境了。但早期的磁盘比现在大得多,每一位存储单元都是肉眼可见的,早期的程序员们拿着磁头,直接在磁盘上磁化每一位,最早的操作系统和编译器就是这样一位一位刻出来的。

用虚拟机是比较方便的,如果不嫌麻烦,也可以做个DOS启动盘,在DOS下调试。
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页