2011年5月12日

第四章调试问题。用bochs调试boot.asm

摘要: 第四章的调试开始有点困难,没有摸到门道。后来陡然有了感觉,发现bochs用a.img启动时,停在了bios的开始的f000:fff0这个地方,有一句代码:jmp far f000:e05bs 后发现 xor ax,ax| out 0x0d,al 等等都是对硬件操作的代码,其中会把软驱中引导扇区的代码,拷贝到0000:7c00h所以灵感乍现,何不用bochs在0000:7c00h处下个断点看看呢、赶紧下了一个断点:vb 0x0000:0x7c00c过去,发现代码是mov ax,cs 哈哈终于看到boot.asm的代码了,可以用bochs调试boot.asm代码了。好高兴啊。u /100 查看并找 阅读全文

posted @ 2011-05-12 22:17 wanghj_dz 阅读(686) 评论(0) 推荐(1) 编辑

第四章:LABEL_FILENAME_FOUND,LABEL_GOON_LOADING_FILE,GetFATEntry ,ReadSector四段代码一起详细解释

摘要: LABEL_FILENAME_FOUND:; 找到 LOADER.BIN 后便来到这里继续movax, RootDirSectors ;mov ax,14anddi, 0FFE0h; di -> 当前条目的开始adddi, 01Ah; di -> 首 Sectormovcx, word [es:di] ;mov cx,3 通过bochs调试本例中是3pushcx; 保存此 Sector 在 FAT 中的序号addcx, ax ; 3+14addcx, DeltaSectorNo; cx <- LOADER.BIN的起始扇区号3+14+17=34,34是loader.bin的起 阅读全文

posted @ 2011-05-12 21:51 wanghj_dz 阅读(388) 评论(0) 推荐(0) 编辑

详细注释GetFATEntry(转载)

摘要: 转载与http://daikof622.wordpress.com/2009/12/18/%E6%B3%A8%E9%87%8Agetfatentry/花了将近两天的时间,反复比对书上的概念和网上前辈们的总结,总算把这段代码给搞清楚了。(这里使用的是FAT12软盘结构)函数GetFATEntry。参数存放在ax寄存器中,表示一个簇号。输出结果是该簇号在FAT表中的FATENTRY,它的内容仍然是一个簇号,表示文件下一部分所在簇的簇号。这里要仔细地体会“簇号”和“簇”之间的差别,否则在看代码的时候,很容易就会迷失。“簇”表示一个或多个扇区的集合。FAT12中,一个簇就是一个扇区,512字节。簇号, 阅读全文

posted @ 2011-05-12 14:55 wanghj_dz 阅读(660) 评论(0) 推荐(0) 编辑

汇编cld ,std语句

摘要: 清除方向标志,在字符串的比较,赋值,读取等一系列和rep连用的操作中,di或si是可以自动增减的而不需要人来加减它的值cld即告诉程序si,di向前移动std指令为设置方向,告诉程序si,di向后移动 阅读全文

posted @ 2011-05-12 13:18 wanghj_dz 阅读(2709) 评论(0) 推荐(0) 编辑

为什么dos下的com文件都要org 0100h呢?为什么系统启动时要org 07c00h呢

摘要: 这是因为.com 载入内存后的起始偏址就是100h. 前面的100h字节是该程序的PSP 部分. 所以,为了程序中对地址引用的正确, 必需加上org 100h语句。-------------------------------------------------------------------------------------------------------------------------------------------------FFFF0h与07C00h,这两个都是机器启动后默认访问的内存地址。曾经让我一度很晕,搞不清他们之间的关系。现在终于搞明白了,写到博客司上与大家分 阅读全文

posted @ 2011-05-12 10:02 wanghj_dz 阅读(2313) 评论(1) 推荐(0) 编辑

导航