目录

  • 汇编语言
    • ORG指令
    • JMP指令
    • MOV指令
      • 相关寄存器
  • 实验1
  • 实验2
    • 源代码
    • .lst文件分析
    • bin文件写入img文件中
    • 结果

基本配置:
设备:Macbookpro(13-inch,2018)
系统:macOS Monterey
参考书籍:《30天自制操作系统》

汇编语言

ORG指令

该指令会告诉nask 开始执行的时候 将这些机器语言装载到内存中哪个位置
0x00007c00-0x00007dff : 启动区内容的装载地址
因此 org后面跟的是0x7c00

JMP指令

相当于C语言中的goto语句

MOV指令

相关寄存器

AX - accumulator 累加寄存器
CX - counter 计数寄存器
DX - data 数据寄存器
BX - base 基址寄存器
SP - stack pointer 栈指针寄存器
BP - base pointer 基址寄存器
SI - source index 源变址寄存器
DI - destination index 目的变址寄存器
(还有好多 请自行查阅)

实验1

; hello-os
; TAB=4ORG     0x7c00          ; 指明程序的装载地址
; JMP       entryDB     0x90DB      "HELLOIPL"        ; DW        512             ; DB        1               ; DW        1               ; DB        2               ; DW        224             ; DW        2880            ; DB        0xf0            ; DW        9               ; DW        18              ; DW        2               ; DD        0               ; DD        2880            ; DB        0,0,0x29        ; DD        0xffffffff      ; DB        "HELLO-OS   " ; DB        "FAT12   "        ; RESB  18              ;
entry:MOV       AX,0            ; 初始化寄存器MOV     SS,AXMOV        SP,0x7c00MOV        DS,AXMOV        ES,AXMOV        SI,msg          ; 将msg的地址传给SI 而不是msg的命令
putloop:MOV     AL,[SI]         ; 传入(SI)地址下的值给ALADD     SI,1            ; 给SI加1CMP      AL,0            ; AL的值与0进行比较JE      fin             ; if(AL==0){goto fin;}MOV     AH,0x0e         ; 显示一个文字MOV     BX,15           ; 指定字符颜色INT     0x10            ; 调用显卡BIOSJMP       putloop
fin:HLT                     ; 让CPU停止,等待指令JMP     fin             ; 无限循环
msg:DB      0x0a, 0x0a      ; 换行2次DB        "hello, world,My name is SubwayOS"DB      0x0a            ; 换行DB      0RESB    0x1fe-($-$$)DB     0x55, 0xaaDB        0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB  4600DB      0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00RESB  1469432

实验2

源代码

文件 ipl.nas

;hello-os
;TAB=4ORG 0x7c00 ;启动程序的装载地址一般为0x7c00~0x7dffjmp entry
;标准的FAT12格式软盘的必备专用的代码 Stand FAT12 format floppy code,即书写在开头的文件描述系统DB     0x90DB      "HELLOIPL"        ; 启动扇区名称(8字节)DW       512             ; 每个扇区(sector)大小(必须512字节)DB     1               ; 簇(cluster)大小(必须为1个扇区)DW       1               ; FAT起始位置(一般为第一个扇区)DB     2               ; FAT个数(必须为2)DW       224             ; 根目录大小(一般为224项)DW        2880            ; 该磁盘大小(必须为2880扇区1440*1024/512)DB     0xf0            ; 磁盘类型(必须为0xf0)DW     9               ; FAT的长度(必须是9扇区)DW        18              ; 一个磁道(track)有几个扇区(必须为18)DW     2               ; 磁头数(必须是2)DD     0               ; 不使用分区,必须是0DD       2880            ; 重写一次磁盘大小DB        0,0,0x29        ; 意义不明(固定)DD      0xffffffff      ; (可能是)卷标号码DB     "HELLO-OS   " ; 磁盘的名称(必须为11字字节,不足填空格)DB      "FAT12   "        ; 磁盘格式名称(必须8字,不足填空格)RESB   18              ; 先空出18字节
;程序主主体entry:;将启动区的初始段地址(0000)设置给以及将启动扇区的偏移地址(7c00)进行设置到栈和数据段中mov ax,0mov ss,axmov sp,0x7c00mov ds,axmov es,axmov si,msg
;程序启动后我们想要显示的内容putloop:mov al,[si]add si,1   ; 给SI加1,循环打印cmp al,0je fin  ;若数据内存该处的值为零,则该程序终止mov ah,0x0e  ; 显示一个文字,调用0x0e号子中断程序mov bh,0   ;第0页mov bl,11001010B  ; 指定字符颜色int 0x10 ; 设置中断程序。10h号中断代表显示字符串,调用bios的中断jmp putloop fin: HLT ;cpu停止运行,等待指令,节约资源jmp fin ; 无限循环msg:DB      0x0a, 0x0a      ; 换行两次DB        "hello, world"DB      0x0aDB      "OS made by Subway"DB     0x0a            ; 换行DB      0RESB   0x01fe-($-$$)   ; 填写0x00直到0x001feDB     0x55, 0xaa  ;这里标志着有启动程序,因为计算机一般先读最后两字节进行判断是否含启动程序的!!

利用nasm生成 .lst文件和.bin文件

nasm filename.asm -l filename.lst -o filename.bin

.lst文件分析

从左到右,分别对应:行号/汇编地址/机器指令/汇编代码

     1                                  ; hello-os2                                  ; TAB=43                                  4                                        ORG     0x7c00          ..(中间省略)..59                                  60 00007DFE 55AA                          DB      0x55, 0xaa

bin文件写入img文件中

输入如下命令,来制作软盘镜像文件diska.img

dd if=/dev/zero of=diska.img bs=512 count=2880

显示读入读出,然后在输入如下的命令,将bin文件复制到image

dd if=ipl.bin of=hello.img bs=512 count=1

然后 复制diska.img中从第512字节往后的内容添加到boot.img中

dd if=diska.img of=hello.img skip=1 seek=1 bs=512 count=2879

结果

《30天自制操作系统》-day2(MAC)相关推荐

  1. 30天自制操作系统(Mac版)读书笔记(day10)

    集成窗口管理 窗口的创建与管理,我们这里直接从这里拿到,这里面有几个函数,我们注意一下这几个函数的意义就行了. 有两个东西,一个是sheet contoller,这里充当了sheet的全局管理的类,一 ...

  2. 《30天自制操作系统》-day0(MAC)

    目录 所需要的装备 Qemu 原因 功能 安装 使用 二进制编译器 万能vim nasm 基本配置: 设备:Macbookpro(13-inch,2018) 系统:macOS Monterey 参考书 ...

  3. 《30天自制操作系统》-day3(MAC)

    第3天 进入32位模式并导入C语言 基本配置 汇编语言内容 文件 hanbote.nas ipl.nas Makefile 原因 用法 基本配置 设备:Macbookpro(13-inch,2018) ...

  4. 30天自制操作系统:第一天

    30天自制操作系统:第一天 趁着双十一采购了一大堆书,准备消化一下,不然就太浪费了. 书上推荐的二进制编辑器是bz ,界面和版本有点古老,还只有日语和英语版本. 不过直到最近一年还一直在维护,最新的版 ...

  5. 30天自制操作系统——第二天

    30天自制操作系统--第二天 今天是该系列的第二天,继续昨天的开发,今天的任务主要有以下几项: 1.进一步的加工一下汇编程序(去除昨天的二进制代码) 2.对启动区进行制作 3.利用makefile简化 ...

  6. 30天自制操作系统——第2天

    操作系统实验日志 实验日期 2018/9/29 实验项目 第2天:汇编语言学习与Makefile入门 一.实验主要内容 (一)汇编 1.关键代码 运行结果: 2.相关汇编指令的解释 指令 格式 含义 ...

  7. 为什么《30天自制操作系统》封面中的猫是两只尾巴

    刚刚在一社区,发了一贴,被指出一问题,询一高人,得一答案.这便是我没有关注到的封面上的那只猫,我想这也是很多读者没有关注到的.因为在我微博的200转发贴中,并没有人提到封面中的猫为何有两只尾巴.于是咨 ...

  8. 发布在《30天自制操作系统》之前的帮助阅读贴

    说明:这是8月15日即将上市的一本新书,本文的摘选也可以命名为<30天自制操作系统>上市之前必读.本书幽默,有趣,可以说是技术书里的幽默书,让您读起来绝对不会感到乏味.在本书上市之前,您一 ...

  9. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...

  10. 写在《30天自制操作系统》上市之前

       这本<30天自制操作系统>马上就要在各大书店和网上商城全面上架了,作为本书的4位译者之一,我负责翻译了本书约三分之二的内容.这是我参与翻译的第一本译著,我感到很激动也很紧张,因为我知 ...

最新文章

  1. 回溯算法——算法总结(四)
  2. Confluence 6 推荐的更新通知设置和禁用
  3. python3.7.4安装教程-Python3.7.4图文安装教程
  4. vue created 调用方法_深入解析 Vue 的热更新原理,偷学尤大的秘籍?
  5. elementUI-添加自定义图标
  6. 何为真正的 FaaS ?阿里舜天平台做了四大创新
  7. 逆波兰式与表达式求值
  8. Android 性能优化工具
  9. python安装的模块在pycharm中能用吗_pycharm安装python模块
  10. Qt学习之路(51): QByteArray和QVariant
  11. centos6.0的gnome桌面的一个大bug
  12. 04.electron-(使用remove模块及安全策略)
  13. 【 Ubuntu 】谷歌输入法——繁体简体切换
  14. 免费云真机测试 | 让您的应用完美适配 Android Oreo
  15. linux静态路由表无故消失,探究几种静态路由的行为及自动删除行为
  16. 使用 ChatterBot 做简单的机器人
  17. opencv-python数字图像处理学习7:提取一副彩色图像中红色,用HIS模型处理,RGB模型对比显示
  18. Java,微信交流学习群
  19. python移动均线SMA及双均线策略
  20. 社会群体及分层问题研究类毕业论文文献都有哪些?

热门文章

  1. Java FTP下载文件
  2. 正则匹配以XXX开头的,XXX结束的
  3. 程序员必备Java API和类搜索辅助工具-Jadeite和Apatite
  4. 基于BP神经网络的PID智能控制
  5. 基于51单片机的电烤箱微波炉数码管显示proteus仿真
  6. 【Scikit-Learn 中文文档】处理文本数据 - scikit-learn 教程 | ApacheCN
  7. cf950f Curfew
  8. selenium 定位一组元素
  9. 新手建模学习哪一个软件比较好
  10. 有关win10的C:/ProgramFiles\WindowsApps\文件系统错误(12007)问题