操作系统boot的3中不同表现
Type1 十六进制
Type2 汇编
DB 0xeb, 0x4e, 0x90, 0x48, 0x45, 0x4c, 0x4c, 0x4f
DB 0x49, 0x50, 0x4c, 0x00, 0x02, 0x01, 0x01, 0x00
DB 0x02, 0xe0, 0x00, 0x40, 0x0b, 0xf0, 0x09, 0x00
DB 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00
DB 0x40, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff
DB 0xff, 0xff, 0xff, 0x48, 0x45, 0x4c, 0x4c, 0x4f
DB 0x2d, 0x4f, 0x53, 0x20, 0x20, 0x20, 0x46, 0x41
DB 0x54, 0x31, 0x32, 0x20, 0x20, 0x20, 0x00, 0x00
RESB 16
DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB 0xee, 0xf4, 0xeb, 0xfd, 0x0a, 0x0a, 0x68, 0x65
DB 0x6c, 0x6c, 0x6f, 0x2c, 0x20, 0x77, 0x6f, 0x72
DB 0x6c, 0x64, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 368
DB 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xaa
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432
Type3 伪指令汇编语言
; hello-os
; TAB=4
; 以下这段是FAT12格式软盘专用代码
DB 0xeb, 0x4e, 0x90
DB "HELLOIPL" ; 启动盘可以是任意的字符串(8字节)
DW 512 ; 磁盘扇区(sector)字节数
DB 1 ; 磁盘每簇扇区数
DW 1 ; 保留区扇区数
DB 2 ; FAT(文件分配表)数量
DW 224 ; 根目录下的文件最大数量
DW 2880 ; 文件系统扇区总数, 2880个扇区为1.44Mb,
; 扇区数若超过65535,则此处为0, [32,35]偏移处为文件系统扇区总数。
DB 0xf0 ; 文件系统所在存储介质类型, 0xf0表示可移动介质
DW 9 ; 一个FAT所占扇区数
DW 18 ; 每磁道(track)扇区数
DW 2 ; 磁头数(必须为2)
DD 0 ; 无隐藏扇区(若有则在保留区域前)
DD 2880 ; 重写一次磁盘大小/文件系统所占扇区数
DB 0,0,0x29 ; BIOS int 13h磁盘号; 保留未使用; 0x29表示下一个值才表示卷数
DD 0xffffffff ; 卷数(卷序列号)
DB "HELLO-OS " ; 用作卷标, 磁盘名称
DB "FAT12 " ; 用作文件系统类型标签
RESB 18 ; 在描述FAT12文件系统概样之后填充18字节0(之后便从80字节处开始)
; 程序主体
DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB 0xee, 0xf4, 0xeb, 0xfd
; 信息显示部分
DB 0x0a, 0x0a ; 2个换行
DB "hello, world"
DB 0x0a ; 换行
DB 0
RESB 0x1fe-$ ; 填写0x00直到0x001fe
DB 0x55, 0xaa
; 启动盘以外部分的输出
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432
对比这三个一个程序的三种不同表现形式,我们可以看到对于我们程序员,汇编其实已经很棒了,不过复杂的指令集任然让我们不能完成更多更好的工作,所以才有了C,python,Java
汇编的注意点
db(define byte):定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1
dw(Data Warehouse):定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2
dd(DoubleWord):定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4
RESB(reservebyte):想要从现在的地址开始空出10个字节来,就可以写成RESB10,意思是我们预约了这10个字节
ESB0x1fe- 就是132。因此nask先用0x1fe减去132,得出378这一结果,然后连续输出378个字节的0x00
其他信息:
CPU的本质
最早人们发明CPU只是为了处理电信号,那个时候没有人能想到它后来会成为这么有用的机器。后来,我们发现只要给每个文字都编上号(即文字编码),就可以建立一个文字与数字的对应关系,从而就可以把文字也转换成电信号,让CPU来处理文章(比如进行文字输入或者字词检索等)。依此类推,人们接着又找到了将图像、音乐等等转换成电信号的方法,使CPU的应用范围越来越广。不过CPU还是一如既往,只能处理电信号。
对于现在的计算机可到达的众多效果,似乎真的难以想象竟然是电信号的跳跃
转载:https://blog.csdn.net/weixin_43485772/article/details/105927459
查看评论