[084][汇编语言]编程:实现从软盘启动进入自己写的超迷你“操作系统”: 显示 hello world!

编程:实现从软盘启动进入自己写的超迷你“操作系统”

  • 超迷你“操作系统”,功能:在屏幕中间显示 hello world!
    hello world!.png
从软盘启动操作系统.png

运行:编译、连接、调试源代码

  进入 虚拟机XP
  打开 CMD.EXE
  确认软驱插入软盘
  将软盘格式化
[插入 软盘 具体步骤参考本文最下方测试部分的图解]
1 开机 遇到提示请插入软盘 向虚拟机XP插入软盘.png
2 软盘使用之前需要进行格式化.png

※※※※※※※※※※※※※※※※※※※※※※※※※※
 编译、连接、运行 【引导程序】

masm bootcode.asm
link bootcode.obj
(直接运行)bootcode.exe
(调试模式)debug bootcode.exe 

完成后这个步骤后,软盘A: 0面 0道 1扇区,被写入 [操作系统引导程序 boot ];

※※※※※※※※※※※※※※※※※※※※※※※※※※

 编译、连接、运行 【任务程序】
masm taskcode.asm
link taskcode.obj
(直接运行)taskcode.exe
(调试模式)debug taskcode.exe 

完成这个步骤后,软盘A: 0面 0道 2扇区,被写入[任务程序 task];

※※※※※※※※※※※※※※※※※※※※※※※※※※
 关机
 关机状态下 设置 虚拟机XP 从 [软盘] 启动
[设置 从软盘启动 具体步骤参考本文最下方测试部分的图解]
3 关机 对软盘 勾选 启动时连接 虚拟机XP将从软盘启动操作系统.png
4 勾选好 软盘 启动时连接后,再开机,点击开启此虚拟机.png

※※※※※※※※※※※※※※※※※※※※※※※※※※
  开机

※※※※※※※※※※※※※※※※※※※※※※※※※※
 以下都是自动发生的,不需要人的操作了 

 CPU 自动 
  将 软盘A: 0面 0道 1扇区 的 [引导程序 boot ] 
  读到 内存 0000:7C00H ,
  并且设置CS:IP = 0000:7C00H,立刻跳转,
  相当于 自动 开始执行 [引导程序 boot ] 

[引导程序 boot ]
0、它知道  [task] 就放在 0面0道2扇区;
1、会将[任务程序 task ] 放到内存 0000:7E00H 开始;
2、然后 将CS:IP设置为 0000:7E00H,使得CPU在读扇区工作结束之后,
  立刻跳转到 CS:IP = 0000:7E00h 开始执行[任务程序]。

[任务程序 task]
完成 hello world! 在屏幕上的显示。

备注:
1个扇区有512个字节(KB),
十进制 512D = 十六进制 200H ,
因此,
    0000:7C00H ~ 0000:7DFFH ,这个512个内存单元用来放 boot,
    0000:7E00H 开始的内存单元 放 task .

完整源码

引导程序 boot

  • 引导程序 bootcode.asm,包括 :引导程序boot 本体 以及 将其安装到软盘的安装步骤
  • 安装步骤,是先将 boot本体 的机器码 全部复制到 开辟的内存空间data段 中,然后调用 BIOS int 13h 中断完成 写扇区
assume cs:code
data segment
    db 512 dup (0)
data ends
code segment
    start:  mov ax,cs
            mov ds,ax
            mov si, offset boot
            
            mov ax,data
            mov es,ax
            mov di,0
            mov cx,offset bootend - offset boot
            cld
            rep movsb
            
            jmp short write
    boot:   jmp short bootstart
            db 10 dup(0)
    
    
    ; 引导程序 boot 将被安装到内存data开始 
    ; 引导程序的功能:  1.读扇区 将 任务程序task 0面0道2扇区 写到内存 0000:7E00H;
    ;                   2.将CS:IP指向 0000:7E00H
    bootstart:
            mov ax,cs
            mov ss,ax
            mov sp,10
            
            mov ax,0
            mov es,ax
            mov bx,7E00H
            
            mov al,1
            mov ch,0
            mov cl,2
            mov dl,0
            mov dh,0
            mov ah,2
            
            int 13h
            
            mov bx,0
            push bx
            mov bx,7E00H
            push bx
            retf    

    bootend:    nop
    
    write:
    
    ;   利用 int 13H 中断 
    ;   将内存 data 处的引导程序 boot
    ;   写入 软盘A 0面 0道 1扇区
            mov ax,data
            mov es,ax
            mov bx,0
            
            mov al,1
            mov ch,0
            mov cl,1
            mov dl,0
            mov dh,0
            mov ah,3
            
            int 13h
            
            mov ax,4c00H
            int 21H
   
    code ends
    end start

任务程序 task

  • 任务程序 taskcode.asm,包括 :任务程序task 本体 以及 将其安装到软盘的安装步骤
  • 安装步骤,是先将 task本体 的机器码 全部复制到 开辟的内存空间data段 中,然后调用 BIOS int 13h 中断完成 写扇区
assume cs:code
data segment
    db 512 dup (0)
data ends
code segment
    start: 
    
            mov ax,cs
            mov ds,ax
            mov si, offset task
            
            mov ax,data
            mov es,ax
            mov di,0
            mov cx,offset taskend - offset task
            cld
            rep movsb
            jmp short write
    
    task:       jmp short taskstart
                db "hello world!"
    taskstart:  mov ax,cs
                mov ds,ax
                mov si,7E02h
                
                mov ax,0b800H
                mov es,ax
                mov di,160*12+40*2
                
                mov cx,12
                mov ah,02H
    hellos:     mov al,[si]
                mov es:[di],al
                mov es:[di+1],ah
                inc si
                add di,2
                loop hellos
                    
    taskend:    nop
    
    
    

    write:
    ;   利用 int 13H 中断 
    ;   将内存 data 处的任务程序
    ;   写入 软盘A 0面 0道 2扇区        
            mov ax,data
            mov es,ax
            mov bx,0
            
            mov al,1
            mov ch,0
            mov cl,2
            mov dl,0
            mov dh,0
            mov ah,3
            
            int 13h
   
            mov ax,4c00h
            int 21H

code ends
end start

测试:从软盘启动操作系统(图解)

  • 结合 运行:编译、连接、调试源代码部分的说明来看
1 开机 遇到提示请插入软盘 向虚拟机XP插入软盘.png
2 软盘使用之前需要进行格式化.png
3 关机 对软盘 勾选 启动时连接 虚拟机XP将从软盘启动操作系统.png
4 勾选好 软盘 启动时连接后,再开机,点击开启此虚拟机.png
5 再次开机后 进入我们自己写的操作系统.png
6 如何回到虚拟机XP.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,649评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,039评论 25 707
  • 前段时间给同事们讲了《狂人日记》这篇小说,不觉间反而让自己深陷了进去,为鲁迅先生的这种反思精神所折服。原因有三,其...
    二月寒雪阅读 924评论 0 2
  • “生病了才知道谁最爱你,喝醉了才知道你最爱谁”,如果按照这句话来讲,阿七想她是喜欢沈涛的。 算一算,阿七和沈涛相识...
    七淑阅读 149评论 0 0