《自己动手写操作系统》,软盘没有,用U盘引导,大白菜MBR Boot启动512字节反汇编代码!
来源:互联网 发布:淘宝主营怎么修改 编辑:程序博客网 时间:2024/06/06 00:08
初始化部分
初始化寄存器环境
00007C60 31DB xor bx,bx
00007C62 8EDB mov ds,bx
00007C64 89DD mov bp,bx
00007C66 8ED3 mov ss,bx
00007C68 BC007C mov sp,0x7c00
00007C6B 06 push es
00007C6C 57 push di
读取扇区测试部分(最核心代码!!加载MBR使用,主要就是寄存器dl的设置,尽量不要对dl赋值)
各项寄存器设置可参考(INT13中断详解:功能02H)即可明白!!,然后你想读取U盘的哪块数据都
可以,默认将U盘当成硬盘操作,采用LBA硬盘读取模式!!
读取启动扇区(即1扇区)
00007C6D B80002 mov ax,0x200
00007C70 8EC0 mov es,ax
00007C72 40 inc ax
00007C73 B90100 mov cx,0x1
00007C76 89CE mov si,cx
00007C78 30F6 xor dh,dh
00007C7A E81A01 call word 0x7d97
附:INT13中断详解:功能02H
功能描述:读扇区
入口参数:AH=02H
AL=扇区数
CH=柱面
CL=扇区
DH=磁头
DL=驱动器,00H~7FH:软盘;80H~0FFH:硬盘
ES:BX=缓冲区的地址
出口参数:CF=0——操作成功,AH=00H,AL=传输的扇区数,否则,AH=状态代码,参见功能号01H中的说明
读取扇区测试
验证启动扇区的字符是否0x4246
00007C7D E86E00 call word 0x7cee
00007C80 8B3EAE21 mov di,[0x21ae]
00007C84 60 pushaw
00007C85 682002 push word 0x220
00007C88 803EAD2180 cmp byte [0x21ad],0x80
00007C8D 731F jnc 0x7cae
00007C8F B441 mov ah,0x41
00007C91 BBAA55 mov bx,0x55aa
00007C94 CD13 int 0x13
00007C96 7216 jc 0x7cae
00007C98 81EB55AA sub bx,0xaa55
00007C9C 7510 jnz 0x7cae
00007C9E F6C101 test cl,0x1
00007CA1 740B jz 0x7cae
00007CA3 58 pop ax
00007CA4 8EC0 mov es,ax
00007CA6 E87A00 call word 0x7d23
00007CA9 61 popaw
00007CAA FECE dec dh
00007CAC EB1E jmp short 0x7ccc
00007CAE 07 pop es
00007CAF 61 popaw
00007CB0 FEC6 inc dh
00007CB2 E8E200 call word 0x7d97
00007CB5 50 push ax
00007CB6 E82400 call word 0x7cdd
00007CB9 A2B021 mov [0x21b0],al
00007CBC 58 pop ax
00007CBD 86EE xchg ch,dh
00007CBF E8D500 call word 0x7d97
00007CC2 E81800 call word 0x7cdd
00007CC5 F636B021 div byte [0x21b0]
00007CC9 A2B121 mov [0x21b1],al
00007CCC C60609213C mov byte [0x2109],0x3c
00007CD1 A1B221 mov ax,[0x21b2]
00007CD4 40 inc ax
00007CD5 E84100 call word 0x7d19
00007CD8 EA9E230000 jmp word 0x0:0x239e
00007CDD A1FE23 mov ax,[0x23fe] ;0x7cdd
00007CE0 3D55AA cmp ax,0xaa55
00007CE3 7506 jnz 0x7ceb
00007CE5 E80600 call word 0x7cee
00007CE8 A1AE23 mov ax,[0x23ae]
00007CEB 29F8 sub ax,di
00007CED C3 ret ;
验证启动扇区的字符是否是0x4246
00007CEE 26813EB4014642 cmp word[es:0x1b4],0x4246 ;0x7cee
00007CF5 754F jnz 0x7d46
00007CF7 C3 ret ;
00007CF8 60 pushaw ;
00007CF9 31C0 xor ax,ax
00007CFB CD13 int 0x13
00007CFD 61 popaw
00007CFE 3C07 cmp al,0x7
00007D00 7604 jna 0x7d06
00007D02 B007 mov al,0x7
00007D04 EB06 jmp short 0x7d0c
00007D06 3C01 cmp al,0x1
00007D08 76A5 jna 0x7caf
00007D0A B001 mov al,0x1
00007D0C 80FEFF cmp dh,0xff
00007D0F 7503 jnz 0x7d14
00007D11 884402 mov [si+0x2],al
00007D14 A2AD21 mov [0x21ad],al
00007D17 EB6D jmp short 0x7d86
00007D19 29F8 sub ax,di
00007D1B 83DD00 sbb bp,byte +0x0
00007D1E 80FEFF cmp dh,0xff
00007D21 7526 jnz 0x7d49
00007D23 89C1 mov cx,ax ;0x7d23 start
00007D25 56 push si
00007D26 31C0 xor ax,ax
00007D28 50 push ax
00007D29 50 push ax
00007D2A 55 push bp
00007D2B 51 push cx
00007D2C 06 push es
00007D2D 53 push bx
00007D2E A0AD21 mov al,[0x21ad]
00007D31 39F0 cmp ax,si
00007D33 7602 jna 0x7d37
00007D35 89F0 mov ax,si
00007D37 50 push ax
00007D38 6A10 push byte +0x10
00007D3A 89E6 mov si,sp
00007D3C B442 mov ah,0x42
00007D3E E84500 call word 0x7d86
00007D41 83C410 add sp,byte +0x10
00007D44 5E pop si
00007D45 C3 ret ;0x7d23 end
扇区读取测试失败跳转部分
00007D46 F4 hlt ;待机
00007D47 EBFD jmp short 0x7d46
00007D49 52 push dx
00007D4A 89EA mov dx,bp
00007D4C 89C1 mov cx,ax
00007D4E A0B021 mov al,[0x21b0]
00007D51 F626B121 mul byte [0x21b1]
00007D55 91 xchg ax,cx
00007D56 F7F1 div cx
00007D58 89C1 mov cx,ax
00007D5A 89D0 mov ax,dx
00007D5C F636B021 div byte [0x21b0]
00007D60 5A pop dx
00007D61 88C6 mov dh,al
00007D63 C0E506 shl ch,0x6
00007D66 08E5 or ch,ah
00007D68 86CD xchg cl,ch
00007D6A 0FB606B021 movzx ax,[0x21b0]
00007D6F 28C8 sub al,cl
00007D71 243F and al,0x3f
00007D73 3A06AD21 cmp al,[0x21ad]
00007D77 7603 jna 0x7d7c
00007D79 A0AD21 mov al,[0x21ad]
00007D7C 39F0 cmp ax,si
00007D7E 7602 jna 0x7d82
00007D80 89F0 mov ax,si
00007D82 B402 mov ah,0x2 ;****
00007D84 FEC1 inc cl
00007D86 E80700 call word 0x7d90
00007D89 0F826BFF jc word 0x7cf8
00007D8D 30E4 xor ah,ah
00007D8F C3 ret ; ..
扇区读取子程序
00007D90 60 pushaw ;0x7d90
00007D91 F9 stc
00007D92 CD13 int 0x13
00007D94 FB sti
00007D95 61 popaw
00007D96 C3 ret ;
调用读取扇区子程序部分
00007D97 E8F6FF call word0x7d90 ;0x7D97
00007D9A 72AA jc 0x7d46
00007D9C C3 ret ;
00007D9D 0000 add [bx+si],al
00007D9F 0000 add [bx+si],al
00007DA1 0000 add [bx+si],al
00007DA3 0000 add [bx+si],al
00007DA5 0000 add [bx+si],al
00007DA7 0000 add [bx+si],al
00007DA9 0000 add [bx+si],al
00007DAB 0000 add [bx+si],al
00007DAD 3F aas
00007DAE 0000 add [bx+si],al
00007DB0 3F aas
00007DB1 FF db 0xff
00007DB2 3F aas
00007DB3 004642 add [bp+0x42],al
00007DB6 42 inc dx
00007DB7 46 inc si
00007DB8 0000 add [bx+si],al
00007DBA 0000 add [bx+si],al
00007DBC 0000 add [bx+si],al
00007DBE 80FE0C cmp dh,0xc
00007DC1 330C xor cx,[si]
00007DC3 50 push ax
00007DC4 65EB00 gs jmp short 0x7dc7
00007DC7 BF0C00 mov di,0xc
00007DCA 00B16B00 add [bx+di+0x6b],dh
00007DCE 0000 add [bx+si],al
00007DD0 0000 add [bx+si],al
00007DD2 0000 add [bx+si],al
00007DD4 0000 add [bx+si],al
00007DD6 0000 add [bx+si],al
00007DD8 0000 add [bx+si],al
00007DDA 0000 add [bx+si],al
00007DDC 0000 add [bx+si],al
00007DDE 0000 add [bx+si],al
00007DE0 0000 add [bx+si],al
00007DE2 0000 add [bx+si],al
00007DE4 0000 add [bx+si],al
00007DE6 0000 add [bx+si],al
00007DE8 0000 add [bx+si],al
00007DEA 0000 add [bx+si],al
00007DEC 0000 add [bx+si],al
00007DEE 0000 add [bx+si],al
00007DF0 0000 add [bx+si],al
00007DF2 0000 add [bx+si],al
00007DF4 0000 add [bx+si],al
00007DF6 0000 add [bx+si],al
00007DF8 0000 add [bx+si],al
00007DFA 0000 add [bx+si],al
00007DFC 0000 add [bx+si],al
00007DFE 55 push bp
00007DFF AA stosb
- 《自己动手写操作系统》,软盘没有,用U盘引导,大白菜MBR Boot启动512字节反汇编代码!
- 用汇编写软盘引导程序
- 《自己动手写操作系统》Boot Sector U盘实现
- MBR引导代码反汇编分析(XP系统)
- 汇编代码写软盘boot loader(包括安装程序)
- 汇编代码创建从软盘启动的boot loader
- 自己动手写操作系统——(1)将引导写入U盘
- U盘实现《自己动手写操作系统》
- 大白菜U盘启动 V201203
- Orange's 自己动手写操作系统 第一章 十分钟完成的操作系统 U盘启动 全记录
- 操作系统实现---boot启动并读软盘
- 反汇编u-boot.bin
- 用大白菜制作U盘启动工具,装WIN7
- 从软盘引导操作系统
- 《自己动手写操作系统》第四章——摆脱dos引导:boot &&Loader
- 硬盘主引导分区表(MBR)反汇编分析
- MBR(主引导记录)的反汇编+注释
- 主引导记录(MBR)的反汇编分析
- Nmap 使用技巧汇总
- 【常用排序算法】归并排序(Java实现)
- 在select中,载入时默认select为空白,选项内不显示空白项
- CCF计算机软件能力认证试题练习201312-2-ISBN号码
- Linux 抓包
- 《自己动手写操作系统》,软盘没有,用U盘引导,大白菜MBR Boot启动512字节反汇编代码!
- node-easymock, 在nodejs中,一个简单但强大的模拟服务器
- 1013. 数素数 (20)
- ghrabber, 从Github抓取匹配搜索规范的文件
- mybatis 中应用二级缓存(使用框架本身实现的缓存机制)
- 安装boost库
- NASA
- glide 出现OutOfMemoryError
- jquery-datalink, jQuery的数据链接插件