day1-2 笔记:《30天自制操作系统》/《自己动手写操作系统》

pc执行机器码,不管用什么写,只要生成能执行的机器码即可。看如下方式:
方式1: 直接 使用二进制编辑器直接编写机器码(TAT只要你知道机器码咋写就行),然后裸机就可以直接跑
               机器码
                |
                \/
                二进制文件
方式2: 通过汇编指令,经过编译,把二进制数据写入二进制文件,看上去数据依旧是那么令人爆炸,事实也确实是这样把,也有些爆炸(和方式1一样,只不过是通过汇编写机器码)
            
                   汇编(指令+机器码)
                   |
                   |
                                                                   |  编译(本质也是写二进制文件)
                   |
                  \/
                   二进制文件
    PS: db指令是“data byte"的缩写,也就是往文件里直接写入1个字节的指令,大小写不敏感。(可以说,就是把二进制数据写到一个二进制文件中,只不过是通过汇编语言而已)
方式1和方式2的执行结果都是一样的:

把方式2进行一些优化:
    其实就是使用一些别的汇编指令: resb指令是”reserve byte“的略写,如果想要从现在的地址开始空出10个字节来,就可以写成resb 10,意思是我们预约了这10个字节(大家可以想象成在对号入座的火车里,预定了10个连号座位的情形)。而且nasm不仅仅是把指定的地址空出来,它还 会在空出来的地址上自动填写0x00,所以我们这次就可以用这个指令就可以输出很多0x00,省的我们在写那么多0.
    所以在这里,我们需要预约446个字节,16*4+446+2 = 512个字节,修改后的汇编程序如下截图:
执行结果,也是相同的。
方式3:
PS: DB(data byte)指令 ,新用法
DW(data word) :汇编中,word是16位,2个字节    
DD (data double word): 汇编中是 32位,4个字节
RESB 0x1fe-$: 0x1fe是16进制510, $ 是到当前行已经占用了多少个字节了。这里需要用($-$$)替换掉$
代码挨个比较:
声明: 二进制数据默认以16进制形式读写,都是ASCII码
nas:  db     eb      4e     90  
bin:         eb      4e     90      

nas:     db   "H    E      L     L     O    I      P     L"        note: 各个字母之间没有空格,加空格这样做是为了看着和理解方便
bin:          48   45     4c     4c   4f   49     50,   4c

nas:    dw  512                                   note: 2个字节,写512,512的16进制:200,汇编应该是先写低字节00,再写高字节02
bin:        00 02

nas:    db  1
bin:       01

nas:    dw  1
bin:      01 00

nas:    db  2
bin:        02

nas:    dw  224                     note: 224二进制 e0,e0就是低字节能表达的,所以写出来是e0 00
bin:       e0 00

nas:    dw  2880
bin:        40 0b

nas:    db  0xf0
bin:         f0

nas:    dw  9
bin:      09 00

nas:    dw  18
bin:       12 00

nas:    dw  2
bin:      02 00

nas:    dd  0
bin:     00 00 00 00

nas:    dd 2280
bin:      40 0b 00 00

nas:    db 0, 0, 0x29
bin:       00 00  29

nas:    dd 0xffffffff
bin:       ff ff ff ff

nas:    db  "H    E      L     L     O    -      O    S                      "    note: S字符后面有3个空格,ASCII码是 20
bin:        48   45     4c    4c    4f   2d     4f    53   20   20   20

nas:    db  "F     A     T     1     2                  "                       note: 2字符后面有3个空格,ASII码是 20
bin:        46     41    54    31    32  20   20   20

nas:    resb  18
bin:       00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
;程序主体都是db,所以这里略过解释了
;信息显示部分,也就很简单了,略过
;一直到最后,都很简单了,哈哈哈
看下运行结果把:
            
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cd C:\Program Files\FlightGear fgfs --fg-root=C:\Program Files\FlightGear\data --aircraft=ufo --in-air --fdm=null --telnet=5501 --telnet=5502 --telnet=5503 --disable-ai-traffic --disable-real-weather-fetch --disable-random-objects --disable-terrasync --disable-clouds --disable-sound --disable-panel --disable-hud --disable-specular-highlight --timeofday=noon --prop:/sim/rendering/multi-sample-buffers=1 --prop:/sim/rendering/multi-samples=2 --prop:/sim/rendering/draw-mask-clouds=false --prop:/sim/rendering/draw-mask-terrain=true --prop:/sim/rendering/draw-mask-objects=true --prop:/sim/rendering/draw-mask-lights=true --prop:/sim/rendering/draw-mask-internal=true --prop:/sim/rendering/draw-mask-cockpit=true --prop:/sim/rendering/draw-mask-effects=true --prop:/sim/rendering/draw-mask-overlay=true --prop:/sim/rendering/draw-mask-world=true --prop:/sim/rendering/draw-mask-panel=true --prop:/sim/rendering/draw-mask-vr=true --prop:/sim/rendering/draw-mask-2d=true --prop:/sim/rendering/draw-mask-3d=true --prop:/sim/rendering/draw-mask-sky=true --prop:/sim/rendering/draw-mask-shadows=true --prop:/sim/rendering/draw-mask-cabin=true --prop:/sim/rendering/draw-mask-weather=true --prop:/sim/rendering/draw-mask-stereo=true --prop:/sim/rendering/draw-mask-internal-cockpit=true --prop:/sim/rendering/draw-mask-internal-windows=true --prop:/sim/rendering/draw-mask-internal-instruments=true --prop:/sim/rendering/draw-mask-internal-overlay=true --prop:/sim/rendering/draw-mask-internal-effects=true --prop:/sim/rendering/draw-mask-internal-lights=true --prop:/sim/rendering/draw-mask-internal-world=true --prop:/sim/rendering/draw-mask-internal-panel=true --prop:/sim/rendering/draw-mask-internal-3d=true --prop:/sim/rendering/draw-mask-internal-sky=true --prop:/sim/rendering/draw-mask-internal-cabin=true --prop:/sim/rendering/draw-mask-internal-weather=true --prop:/sim/rendering/draw-mask-internal-stereo=true --prop:/sim/rendering/draw-mask-internal-shadow=true --prop:/sim/rendering/draw-mask-internal-stall=true --prop:/sim/rendering/draw-mask-internal-aoa=true --prop:/sim/rendering/draw-mask-internal-thermal=false --prop:/sim/rendering/draw-mask-internal-ice=false --prop:/sim/rendering/draw-mask-internal-glass=true --prop:/sim/rendering/draw-mask-internal-dead=true --prop:/sim/rendering/draw-mask-internal-reflection=true程序显示错误unknown command-line option: enable-hud-2d怎么解决
05-10

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值