自制操作系统6:寻址5M-天高任鸟飞
参考:
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-天高任鸟飞相关推荐
- 海阔凭鱼跃 天高任鸟飞-大上海,人人都向往的城市
宋·阮阅<诗话总龟前集>卷三十引<古今诗话>谓:唐代大历年间,禅僧元览在竹上题诗:"大海从鱼跃,长空任鸟飞."这句诗表达出禅僧自由自在的广阔胸襟和活泼泼的禅 ...
- 保护模式超强的寻址功能:天空任鸟飞
X86架构下,cpu 的运行模式分两种,一种是实模式,像早期Dos那种黑底白字的命令行操作界面,可以说是实模式最好表现形式,在实模式下也只能产生这种冰冷,呆板,机械的用户体验.后来Intel的CPU进 ...
- 天高任鸟飞,在你还苦闷Android出路时,总有人在系统钻研为高级开发做准备,技能提升的重要性不用我说了!
程序员,你还要迷茫多久? 各位Android程序员小伙伴,今天和大家聊聊关于程序员群体的职业发展和技术升级,如果大家觉得感兴趣,不妨可以加入文末提供的技术交流群中,一起学习. 程序员,一个特殊的群体, ...
- 天高任鸟飞,在你还苦闷Android出路时,总有人在系统钻研为高级开发做准备
**解读开源框架设计思想:**热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack **ND ...
- 天高任鸟飞,海阔凭鱼跃
卓晴 2021-02-07 Sunday 01 02 03 04 05 06 07 08 ▌上周五智慧交通直播获奖名单 奖品 中奖名单 定制U盘(64G) 每天都up的up猪 定制U盘(64G) 燃烧 ...
- 海阔凭鱼跃天高任鸟飞
独角兽 独角兽 独角兽 WWW.CUME.CC
- JDK 内置图形界面工具:海阔凭鱼跃,天高任鸟飞
GUI 图形界面工具,主要是 3 款:JConsole.JVisualVM.JMC.其实这三个产品可以说是 3 代不同的 JVM 分析工具. 这三个工具都支持我们分析本地 JVM 进程,或者通过 JM ...
- 海阔凭鱼跃,天高任鸟飞
形容今天的心情!!!!!!! 写文已记之. Tomorrow is a better day!
- 自制操作系统(十) 图像叠加处理
2016.07.12 参考书籍:<30天自制操作系统>.<自己动手写操作系统> qq:992591601 欢迎交流 图像叠加处理的原理很简单,就是给图像分层,从低下往上面画, ...
最新文章
- Oracle锁表 行级锁 表级锁 行级锁
- Maven 的 settings.xml 配置中的mirror节点
- MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型)
- 16-python基础5-文件读写操作
- bzoj5093: [Lydsy1711月赛]图的价值
- 计算机专业知识多选题证监会,2019年国家公务员考试中国证监会(计算机类)专业科目考试大纲...
- win7 其他用户当前已登录到此计算机,win7旗舰版的电脑如何切换至公共用户?-win7用户,win7账户已被停用按f8没反应...
- Pytest之fixture
- word敲空格文字不后退_聊聊Word中的几种缩进(中)
- java-Servlet编码/异常处理
- 使用ensp搭建简单校园网拓扑
- vue之解决跨域问题
- linux翻页查看,【转载】linux-查看日志
- Excel 中超链接转换为相应的 URL
- vim中复制整个别的文件内容
- 笔试一道honor的嵌入式软件程序编写题目【c语言字符串】
- java 解析器_高性能Java解析器实现过程详解
- 阿里云崩“出圈”了!保护业务还得加一道同云跨可用区容灾!
- 树莓派ASP.NET环境配置
- 文档中如何插入计算机剪贴画,在Word 2007文档中插入剪贴画 -电脑资料
热门文章
- 改进YOLOv5系列:2.PicoDet结构的修改
- gs_fs0文件是什么_“ FS” /“ GS”寄存器的用途是什么?
- 数字集成电路设计(五、仿真验证与 Testbench 编写)(一)
- 特大整数相加(C实现)
- Android kotlin run函数学习
- elementUI tab 切换 table表头消失
- 麦克风阵列matlab,双通道麦克风阵列方向采集MATLAB代码实现
- 互联网时代,你我皆楚门
- newman执行测试_Newman的使用讲解
- [电路]4-两端电路等效变换、电阻串并联