自制操作系统(第三天)

                                                     harib00a

本次添加的代码

MOV  AX, 0x0820          ;往ax内输入数字0820
MOV  ES,AX               ;往es输入0820
MOV  CH,0                ;柱面0
MOV  DH,0               ;磁头0
MOV  CL,2               ;扇区2

MOV AH,0x02             ;AH=0x02读盘
MOV AL,1                 ;1个扇区
MOV BX,0                ;
MOV DL,0x00             ;A驱动器
INT  0x13                ;调用磁盘BIOS
JC   error

 jc指令意思是有进位就跳转

                                                  harib00b

软盘不可靠,读5次之后还没法读出数据就认为出错

本次添加的代码

;读取磁盘
MOV  AX,ox0820
mov  es,ax
mov  ch,0
mov  dh,0
mov  cl,2

mov  si, 0;记录失败的次数

retry:
mov  ah 0x02
mov  al ,1
mov  bx,0
mov  dl,0x00
int  0x13
jnc  fin
add  si,1
cmp  si,5
jae  error
mov  ah,0x00
mov  dl,0x00
int  0x13
jmp  retry

jae小于等于跳转,,jnc进位标志为0跳转

                                             harib00c

;都磁盘
mov  ax,0x0820
mov  es,ax
mov  ch,0
mov  dh,0
mov  cl,2

readloop:

mov si,0

retry:
同上

next:
mov ax,es
add ax,0x0020
mov  es,ax
add cl,1
cmp cl,18
jbe readloop


问题:为什么是0820??

7c00+512==8112-------数据段es就是0820*16=8200+dx就是数据段的大小

                                                harib00d

首先还是说说新出现的指令JB。这也是条件跳转指令,是“jump if below”的缩写。翻译过来就是:“如果小于的话,就跳转。”还有一个新指令,就是在程序开头使用的EQU指令。这相当于C语言的#define命令,用来声明常数。“CYLS EQU 10”意思是“CYLS = 10”。EQU是“equal”的缩写。只将它定义成常数是因为以后我们可能修改这个数字。现在我们先随意定义成10个柱面,以后再对它进行调整(CYLS代表cylinders)由于想把操作系统汉化,后面会加入字体大约500kb使得文件超过文章所提的10个柱面把10个柱面改成80个柱面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值