orange's一个操作系统的实现--学习过程  第三章:a  为什么需要认识IA32架构IntelCPU保护模式

第三章主要是讲IA32架构IntelCPU的相关内容,因为只有了解了CPU的一些特性,才能够写出操作系统,这也是操作系统为什么和硬件CPU有关系的原因。同样也是因为只是为了了解CPU的特性,第三章主要就是通过汇编代码去熟悉这些特性,因此借助DOS去执行也无妨。

从汇编源码编译成执行文件,所有变量和地址都是按照线性地址编译出来的。虽然实模式和保护模式的寻址方法不一样,但是只要他们计算的线性地址结果是一样的,那获取的内容也就是一样的。保护模式的优势就是通过分段的方法(即段式存储机制)与汇编源码的SECTION可以对应起来,从汇编源码的编写角度来看就简单了很多。

从汇编源码生成的执行程序是一个纯二进制文件,就是程序执行的内存影像和二进制文件是一样的。并且执行程序文件的汇编指令是按照线性地址一直排下去的。执行程序在内存的起始线性地址是按照约定放置的,例如com文件起始地址是0100h。执行程序的数据段地址可以是通过源码设置的。


汇编程序可以选择2种执行方式

(1,在虚拟机直接执行,要求编译出来的程序不能大于512字节;显然通过2,在DOS环境下执行更好一些)
(我这里使用DOSBox的环境,没有使用虚拟机的FreeDos,不需要通过linux把二进制程序复制到软盘上让FreeDos去识别)


1,在虚拟机直接执行  
按照起始地址org    07c00h编译成二进制程序,复制到引导软盘下,在虚拟机下开机执行。
nasm pmtest1.asm -o pmtest1.bin
dd  if=pmtest1.bin  of=a.img  bs=512  count=1  conv=notrunc


2,在DOS环境下执行
按照起始地址org    0100h编译成二进制程序,直接在DOS下执行即可。
nasm pmtest1b.asm -o pmtest1.com 
在DOS环境下执行 pmtest1.com 
 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
看望王爽老师的《汇编语言》后这本书给了我很大的信心,为了继续深入查阅相关汇编书籍资料后找了了一本名著《intel 汇编语言程序设计 第五版》,拿到这本书之后就迫不及待的翻开那本神秘而令人陶醉的《intel 汇编语言程序设计(第五版)》看了几章之后感觉有点抽象(幸亏有汇编语言护体不然肯定吃不消),这本书调用了作者的链接库而且分为保护模式编程和实模式编程,所以以前的编译器肯定扛不住了,无赖有的为编译器浪费时间,上百度一收郁闷怎么都和我同病相怜了都是在狂找编译器有的寻你无果不了了之直接放弃了,或者选择了其他的编译器,找遍了百度,搜狐,看雪,问问,搜搜。。。最后看见一位老兄花了五个月的时间终于成功适用masm6.15编译出程序,我看到之后雷到了,有这么夸张吗! 没办法不得不面对现实按照老兄的方法用配制了masm6.15勉强调试吧,应为这都是很久以前的编译器了吧从作者的网站下载的最新连接库更新到masm6.15后出现了编译错误,无赖是不是的考虑会编译器了可是换啥好了,集成开发用不习惯汇编一路走过来一直是在用masm 对于这个品牌我很信任,最后下定决心一定要做一个属于自己的编译。。。星期1(很无赖的回家)。。。星期6(毫无进展)。。。星期日(今天的心情非常沉重...)。。。。。。。星期1(中于有点头绪了)。。。。星期2(终于有了点效果可以编译保护模式程序了但实模式的编译提示路径不对)。。。。。星期4(这注定不是个平凡的日子今天7月7 编译器大功告成 编译器取名为 masm10.0(取这名是用原因的 1.提取了微软vs2010集成开发的汇编指令编译(ml) 连接(link) 程序。2.把作者的链接库集成到了masm10.0 3.巧妙的修改作者批处理文件asm32.bat 和 make16 使得大家无需安装vs2010 只需一条命令即可编译连接程序) 使用方便简单身材小巧无副作用老少皆宜。)过程就不多啰嗦,反正很艰辛。 申明:此编译器特针对 intel 汇编语言程序设计 理论上只需要修改库文件中的数据即可编译所用调用库的实模式\保护模式程序(切忌不可修改bin文件夹下所有文件的名称否则可能造成不可预知的故障!) 内附使用教程
抽象工厂模式是一种创建对象的设计模式,它通过提供一个接口来创建一系列相关或相互依赖的对象,而无需指定具体的类。 在进行计算机设备的创建过程中,可以使用抽象工厂模式来实现。首先,在抽象工厂模式中需要定义一个抽象工厂接口,用于创建计算机设备的各个部件。该接口中可以定义创建内存和CPU的方法。 ```java interface ComputerFactory { Memory createMemory(); CPU createCPU(); } ``` 然后,根据具体的产品族,实现具体的工厂类和产品类。例如,创建Intel产品族的工厂: ```java class IntelComputerFactory implements ComputerFactory { public Memory createMemory() { return new IntelMemory(); } public CPU createCPU() { return new IntelCPU(); } } ``` 创建AMD产品族的工厂: ```java class AMDComputerFactory implements ComputerFactory { public Memory createMemory() { return new AMDMemory(); } public CPU createCPU() { return new AMDCPU(); } } ``` 同时,需要定义每个具体产品的类。例如,创建内存和CPU的抽象类: ```java abstract class Memory { } abstract class CPU { } ``` 再具体实现Intel和AMD的内存和CPU类: ```java class IntelMemory extends Memory { // 具体实现省略 } class IntelCPU extends CPU { // 具体实现省略 } class AMDMemory extends Memory { // 具体实现省略 } class AMDCPU extends CPU { // 具体实现省略 } ``` 最后,在客户端中使用抽象工厂来创建计算机设备: ```java class Client { public static void main(String[] args) { ComputerFactory factory = new IntelComputerFactory(); Memory memory = factory.createMemory(); CPU cpu = factory.createCPU(); // 根据需要进行后续操作 } } ``` 以上就是使用抽象工厂模式实现计算机设备创建过程的示例,根据图片所示的产品等级结构,可以根据具体的产品族来实现对应的工厂类和产品类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值