【发布时间】:2011-03-05 04:45:14
【问题描述】:
我正在尝试一种新方法来处理 int 0x13(只是为了了解有关系统工作方式的更多信息):使用堆栈创建 DAP..
假设DL包含磁盘号,AX包含PT中可引导项的地址,DS更新到正确的段并正确设置堆栈,这是代码:
推送 DWORD 0x00000000 添加斧头,0x0008 mov si, ax 推 DWORD [ds:(si)] 推送 DWORD 0x00007c00 推 WORD 0x0001 推 WORD 0x0010 推 ss 流行音乐 mov si, sp mov sp, bp 移动啊,0x42 整数 0x13如您所见:我将 dap 结构压入堆栈,更新 DS:SI 以指向它,DL 已设置,然后将 AX 设置为 0x42 并调用 int 0x13
结果是 AH 中的错误 0x01 和明显的 CF 设置。没有扇区被转移。 我没完没了地检查堆栈跟踪,没关系,分区表也没问题..我不知道我错过了什么......
这是磁盘地址包的堆栈跟踪部分:
0x000079ea: 10 00 adc %al,(%bx,%si) 0x000079ec: 01 00 添加 %ax,(%bx,%si) 0x000079ee: 00 7c 00 添加 %bh,0x0(%si) 0x000079f1: 00 00 添加%al,(%bx,%si) 0x000079f3: 08 00 或 %al,(%bx,%si) 0x000079f5: 00 00 添加%al,(%bx,%si) 0x000079f7: 00 00 添加%al,(%bx,%si) 0x000079f9: 00 a0 07 添加 %ah,-0x41f9(%bx,%si)我正在使用 qemu 最新版本并尝试从硬盘驱动器 (0x80) 读取,还尝试对具有相同结果 (CF 1 AH 0x01) 的结构进行 4 字节对齐,扩展存在。
【问题讨论】:
标签: assembly x86 interrupt bootloader mbr