sdbzlh 2008-8-10 22:46
【求助】关于int 13(2)
我是汇编初学者,遇到一个问题,向大家请教:
以下代码用于实现从软盘的第二个扇区读取数据到0x3000处: (nasm)
在实模式下:
%define Init32SectionBaseAddr 003000h;
;---------------------------------------------------------------------------
; 将相关内容加载到内存中去:内容放到后面几个扇区中,这里先加载第二个扇区
mov ax,Init32SectionBaseAddr; 先将扇区01的数据存放的缓冲段地址传递给AX
mov es,ax; 通过AX,再缓冲段地址传递给ES
mov bx, 0; 缓冲偏移地址为0
mov dl, 0; 要读取的驱动器号为0h,为A软驱
mov dh, 0; 要读取的磁头号为0
mov ch, 0; 要读取的磁道号为0
mov cl, 2; 要读取的扇区号为2(1~17)
mov al, 1; 要读取的扇区数为1,暂时为一(1~128)
mov ah, 2; 调用int 13 的一种
int 13h
;---------------------------------------------------------------------------
用winhex看软盘映像如图,可以看到第二个扇区(200h处开始)至少是有代码的。
执行完上述代码后bochs调试结果如图,从ax数值可以看出此次读扇区成功了,读了一个扇区。
图:[url=http://forum.byr.edu.cn/wForum/bbscon.php?bid=46&id=28879&ap=1259][color=#800080]http://forum.byr.edu.cn/wForum/bbscon.php?bid=46&id=28879&ap=1259[/color][/url]
但是用bochs看内存如图,0x3000处全是0.程序执行到这一部分也出现错误(必然的,呵呵)。
图:[url=http://forum.byr.edu.cn/wForum/bbscon.php?bid=46&id=28879&ap=1524632][color=#800080]http://forum.byr.edu.cn/wForum/bbscon.php?bid=46&id=28879&ap=1524632[/color][/url]
我想请教大家这是为什么?谢谢!