免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1214 | 回复: 2
打印 上一主题 下一主题

光盘的读问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-13 23:04 |只看该作者 |倒序浏览
我用虚拟机(bochs)试验了一把光盘启动,虽然成功启动,但当要导入其他文件时,却未能将文件读至指定的地方。具体过程是:
1、系统启动,对第17个扇区(这里由bios完成)
2、在第17个扇区里,我放了boot.bin,里面的内容是提示已进入boot.bin,且将load文件读入0x900:0处
3、这里我取巧了一下,用ultraedit分析了一下光盘的内容,发现load文件在第0x5a扇区处(这样调试变得相对简单)

调试时发现,可以成功打印boot.bin里的信息,但jmp到0x900:0处时,发现里面没有对应的代码。且在执行int 0x13读光盘扇区时,曾报“int13_cdrom: function 42, ELDL out of range ef”错误。

具体代码如下:
  1.         org        0x7c00

  2.         jmp short START               
  3.         nop       

  4. ;===============================================
  5. dap:        dw        0x10                ; [ 0] Packet size in bytes.
  6.         dw        0x4                ; [ 2] Nr of blocks to transfer.
  7.         dw        0                ; [ 4] Offset
  8.         dw        0x900                ; [ 6] Segment
  9.         dd        0x5a                ; [ 8] start sector number in iso.
  10.         dd        0                ; [12] Block number
  11. ;===============================================
  12.                

  13. START:
  14.         mov        ax, cs
  15.         mov        ds, ax
  16.         mov        es, ax

  17.         call        clr_sc
  18.         call        disp_msg
  19.         call        read_sect_main

  20.         ;jmp        $
  21.         jmp        0x900:0

  22. disp_msg:
  23.         mov        ax, mesg
  24.         mov        bp, ax
  25.         mov        cx, 13
  26.         mov        ax, 0x1301
  27.         mov        bx, 0x7
  28.         mov        dl, 0
  29.         int        0x10       
  30.         ret

  31. clr_sc:
  32.         mov        ax, 0x600               
  33.         mov        bx, 0x700               
  34.         mov        cx, 0                       
  35.         mov        dx, 0x184f               
  36.         int        0x10                       
  37.         ret

  38. read_sect_main:

  39.         mov           bx, 0x900               ; Reading to segment 0x900
  40.            mov           es, bx
  41.            xor           bx, bx                  ; Offset 0

  42.               call    read_sector
  43.         ret

  44. read_sector:
  45.               mov           dl, 0xef
  46.         mov           ah, 0x42

  47.               mov        si, dap
  48.               int           0x13   

  49.               ret

  50. ;==========================================
  51. mesg:                db        "Hello World!"
复制代码

论坛徽章:
0
2 [报告]
发表于 2012-03-13 23:08 |只看该作者
ding

论坛徽章:
0
3 [报告]
发表于 2012-03-14 12:16 |只看该作者
回复 2# landker

有人知道吗
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP