《30天自制操作系统》-day2(MAC)
目录
- 汇编语言
- 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)相关推荐
- 30天自制操作系统(Mac版)读书笔记(day10)
集成窗口管理 窗口的创建与管理,我们这里直接从这里拿到,这里面有几个函数,我们注意一下这几个函数的意义就行了. 有两个东西,一个是sheet contoller,这里充当了sheet的全局管理的类,一 ...
- 《30天自制操作系统》-day0(MAC)
目录 所需要的装备 Qemu 原因 功能 安装 使用 二进制编译器 万能vim nasm 基本配置: 设备:Macbookpro(13-inch,2018) 系统:macOS Monterey 参考书 ...
- 《30天自制操作系统》-day3(MAC)
第3天 进入32位模式并导入C语言 基本配置 汇编语言内容 文件 hanbote.nas ipl.nas Makefile 原因 用法 基本配置 设备:Macbookpro(13-inch,2018) ...
- 30天自制操作系统:第一天
30天自制操作系统:第一天 趁着双十一采购了一大堆书,准备消化一下,不然就太浪费了. 书上推荐的二进制编辑器是bz ,界面和版本有点古老,还只有日语和英语版本. 不过直到最近一年还一直在维护,最新的版 ...
- 30天自制操作系统——第二天
30天自制操作系统--第二天 今天是该系列的第二天,继续昨天的开发,今天的任务主要有以下几项: 1.进一步的加工一下汇编程序(去除昨天的二进制代码) 2.对启动区进行制作 3.利用makefile简化 ...
- 30天自制操作系统——第2天
操作系统实验日志 实验日期 2018/9/29 实验项目 第2天:汇编语言学习与Makefile入门 一.实验主要内容 (一)汇编 1.关键代码 运行结果: 2.相关汇编指令的解释 指令 格式 含义 ...
- 为什么《30天自制操作系统》封面中的猫是两只尾巴
刚刚在一社区,发了一贴,被指出一问题,询一高人,得一答案.这便是我没有关注到的封面上的那只猫,我想这也是很多读者没有关注到的.因为在我微博的200转发贴中,并没有人提到封面中的猫为何有两只尾巴.于是咨 ...
- 发布在《30天自制操作系统》之前的帮助阅读贴
说明:这是8月15日即将上市的一本新书,本文的摘选也可以命名为<30天自制操作系统>上市之前必读.本书幽默,有趣,可以说是技术书里的幽默书,让您读起来绝对不会感到乏味.在本书上市之前,您一 ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
<30天自制操作系统>笔记(01)--hello bitzhuwei's OS! 最初的OS代码 1 ; hello-os 2 ; TAB=4 3 4 ORG 0x7c00 ; 指明程序的 ...
- 写在《30天自制操作系统》上市之前
这本<30天自制操作系统>马上就要在各大书店和网上商城全面上架了,作为本书的4位译者之一,我负责翻译了本书约三分之二的内容.这是我参与翻译的第一本译著,我感到很激动也很紧张,因为我知 ...
最新文章
- 回溯算法——算法总结(四)
- Confluence 6 推荐的更新通知设置和禁用
- python3.7.4安装教程-Python3.7.4图文安装教程
- vue created 调用方法_深入解析 Vue 的热更新原理,偷学尤大的秘籍?
- elementUI-添加自定义图标
- 何为真正的 FaaS ?阿里舜天平台做了四大创新
- 逆波兰式与表达式求值
- Android 性能优化工具
- python安装的模块在pycharm中能用吗_pycharm安装python模块
- Qt学习之路(51): QByteArray和QVariant
- centos6.0的gnome桌面的一个大bug
- 04.electron-(使用remove模块及安全策略)
- 【 Ubuntu 】谷歌输入法——繁体简体切换
- 免费云真机测试 | 让您的应用完美适配 Android Oreo
- linux静态路由表无故消失,探究几种静态路由的行为及自动删除行为
- 使用 ChatterBot 做简单的机器人
- opencv-python数字图像处理学习7:提取一副彩色图像中红色,用HIS模型处理,RGB模型对比显示
- Java,微信交流学习群
- python移动均线SMA及双均线策略
- 社会群体及分层问题研究类毕业论文文献都有哪些?