我正在尝试一种新方法来处理 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)读取,还尝试对具有相同结果的结构进行 4 字节对齐(CF 1 AH 0x01),存在扩展。