参考:
https://blog.csdn.net/tyler_download/article/details/52242599
DOS是实模式,20位总线,1M内存。体验不好。寄存器也是16位的。90年代用dos编程,竟然也有WPS这样的神作,真是佩服求伯君。
windows是保护模式,32位总线。4G内存,80386是经典,win95也是经典。
保护模式不再直接寻址,而是用GDT获取描述符,描述符中再计算地址。
进入保护模式一个巨大好处是可以引入C语言。
本次实验就是把数据写入内存5M位置,然后在从这个位置读取数据显示出来,体现寻址5M的能力。
boot_read5M.asm
比上节GDT表中增加了LABEl_DESC_5M这样一个段,基地址0500000h,也就是5M的位置。
selector_5M是这个段离表头的偏移。
es指向selector_5M,也就是5M的基地址,es:edi循环写入字符串msg。
然后显示msg: [es:si]是5M基地址,到[gs:edi]显存。
编译:nasm -o boot.bat boot_read5M.asm
使用上几节的OpSystem.java类,这个只写了第一个引导扇区,其他扇区写了个字符串,不影响,可直接使用这个工具做system.img
加载到virtualbox 运行成功:

boot_read5M.asm

%include "pm.inc"

org 0x7c00

jmp LABEL_BEGIN

[SECTION .gdt]
LABEL_GDT:         Descriptor  0,         0,                0
LABEL_DESC_CODE32: Descriptor  0,         SegCode32Len - 1, DA_C + DA_32
LABEL_DESC_VIDEO:  Descriptor  0B8000h,   0ffffh,           DA_DRW
LABEL_DESC_5M:     Descriptor  0500000h,  0ffffh,           DA_DRW

GdtLen equ $ - LABEL_GDT
GdtPtr dw  GdtLen - 1
       dd  0

SelectorCode32  equ  LABEL_DESC_CODE32 - LABEL_GDT
SelectorVideo   equ  LABEL_DESC_VIDEO - LABEL_GDT
Selector5M      equ  LABEL_DESC_5M    - LABEL_GDT

[SECTION .s16]
[BITS 16]
LABEL_BEGIN:
  mov ax, cs
  mov ds, ax
  mov es, ax
  mov ss, ax
  mov sp, 0100h

xor eax, eax
  mov ax,  cs
  shl eax, 4
  add eax, LABEL_SEG_CODE32
  mov word [LABEL_DESC_CODE32 + 2], ax
  shr eax, 16
  mov byte [LABEL_DESC_CODE32 + 4], al
  mov byte [LABEL_DESC_CODE32 + 7], ah

xor eax, eax
  mov ax,  ds
  shl eax, 4
  add eax, LABEL_GDT
  mov dword [GdtPtr + 2], eax
  
  lgdt [GdtPtr]

cli

in al, 92h
  or al, 00000010b
  out 92h, al

mov eax, cr0
  or eax, 1
  mov cr0, eax

jmp dword SelectorCode32: 0

[SECTION .s32]
[BITS 32]
LABEL_SEG_CODE32:
  mov ax, SelectorVideo
  mov gs, ax

mov si, msg
  mov ax, Selector5M
  mov es, ax
  mov edi, 0

write_msg_to_5M:
  cmp byte[si], 0
  je  prepare_to_show_char
  mov al, [si]
  mov [es:edi], al
  add edi, 1
  add si, 1
  jmp write_msg_to_5M

prepare_to_show_char:
  mov ebx,10
  mov ecx, 2
  mov si,  0
  
showChar:
  mov edi, (80*11)
  add edi, ebx
  mov eax, edi
  mul ecx
  mov edi, eax
  mov ah, 0ch
  mov al, [es:si]
  cmp al, 0
  je  end
  add ebx, 1
  add si, 1
  mov [gs:edi], ax
  jmp showChar
end:
  jmp $
msg:
  DB "This string is written to 5M memroy", 0

SegCode32Len equ $ - LABEL_SEG_CODE32

自制操作系统6:寻址5M-天高任鸟飞相关推荐

  1. 海阔凭鱼跃 天高任鸟飞-大上海,人人都向往的城市

    宋·阮阅<诗话总龟前集>卷三十引<古今诗话>谓:唐代大历年间,禅僧元览在竹上题诗:"大海从鱼跃,长空任鸟飞."这句诗表达出禅僧自由自在的广阔胸襟和活泼泼的禅 ...

  2. 保护模式超强的寻址功能:天空任鸟飞

    X86架构下,cpu 的运行模式分两种,一种是实模式,像早期Dos那种黑底白字的命令行操作界面,可以说是实模式最好表现形式,在实模式下也只能产生这种冰冷,呆板,机械的用户体验.后来Intel的CPU进 ...

  3. 天高任鸟飞,在你还苦闷Android出路时,总有人在系统钻研为高级开发做准备,技能提升的重要性不用我说了!

    程序员,你还要迷茫多久? 各位Android程序员小伙伴,今天和大家聊聊关于程序员群体的职业发展和技术升级,如果大家觉得感兴趣,不妨可以加入文末提供的技术交流群中,一起学习. 程序员,一个特殊的群体, ...

  4. 天高任鸟飞,在你还苦闷Android出路时,总有人在系统钻研为高级开发做准备

    **解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack **ND ...

  5. 天高任鸟飞,海阔凭鱼跃

    卓晴 2021-02-07 Sunday 01 02 03 04 05 06 07 08 ▌上周五智慧交通直播获奖名单 奖品 中奖名单 定制U盘(64G) 每天都up的up猪 定制U盘(64G) 燃烧 ...

  6. 海阔凭鱼跃天高任鸟飞

    独角兽    独角兽 独角兽 WWW.CUME.CC

  7. JDK 内置图形界面工具:海阔凭鱼跃,天高任鸟飞

    GUI 图形界面工具,主要是 3 款:JConsole.JVisualVM.JMC.其实这三个产品可以说是 3 代不同的 JVM 分析工具. 这三个工具都支持我们分析本地 JVM 进程,或者通过 JM ...

  8. 海阔凭鱼跃,天高任鸟飞

    形容今天的心情!!!!!!! 写文已记之. Tomorrow is a better day!

  9. 自制操作系统(十) 图像叠加处理

    2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601  欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画, ...

最新文章

  1. Oracle锁表 行级锁 表级锁 行级锁
  2. Maven 的 settings.xml 配置中的mirror节点
  3. MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型)
  4. 16-python基础5-文件读写操作
  5. bzoj5093: [Lydsy1711月赛]图的价值
  6. 计算机专业知识多选题证监会,2019年国家公务员考试中国证监会(计算机类)专业科目考试大纲...
  7. win7 其他用户当前已登录到此计算机,win7旗舰版的电脑如何切换至公共用户?-win7用户,win7账户已被停用按f8没反应...
  8. Pytest之fixture
  9. word敲空格文字不后退_聊聊Word中的几种缩进(中)
  10. java-Servlet编码/异常处理
  11. 使用ensp搭建简单校园网拓扑
  12. vue之解决跨域问题
  13. linux翻页查看,【转载】linux-查看日志
  14. Excel 中超链接转换为相应的 URL
  15. vim中复制整个别的文件内容
  16. 笔试一道honor的嵌入式软件程序编写题目【c语言字符串】
  17. java 解析器_高性能Java解析器实现过程详解
  18. 阿里云崩“出圈”了!保护业务还得加一道同云跨可用区容灾!
  19. 树莓派ASP.NET环境配置
  20. 文档中如何插入计算机剪贴画,在Word 2007文档中插入剪贴画 -电脑资料

热门文章

  1. 改进YOLOv5系列:2.PicoDet结构的修改
  2. gs_fs0文件是什么_“ FS” /“ GS”寄存器的用途是什么?
  3. 数字集成电路设计(五、仿真验证与 Testbench 编写)(一)
  4. 特大整数相加(C实现)
  5. Android kotlin run函数学习
  6. elementUI tab 切换 table表头消失
  7. 麦克风阵列matlab,双通道麦克风阵列方向采集MATLAB代码实现
  8. 互联网时代,你我皆楚门
  9. newman执行测试_Newman的使用讲解
  10. [电路]4-两端电路等效变换、电阻串并联