assembly - 如何修复 x86 程序集中中断 0x13 中的“无效命令”错误?(实模式)
问题描述
我最近一直在编写一个小型(实模式)引导代码,并且遇到了一些 int 0x13 的问题。起初我试图使用'int 0x13,ah = 0x02'在引导扇区之后简单地将更多代码加载到RAM中。该输出错误代码 ah=0x01(无效命令),所以我尝试了 'int 0x13, ah= 0x41' 来尝试找出 int 0x13 是否正常工作。我在 qemu、我的戴尔 latitude E7240、我的带有 Intel DQ965GF 主板和 Q6600 CPU 的古老台式机以及各种其他更现代的 x86 计算机上进行了尝试。qemu 当然可以,但唯一可以正常工作的电脑是 DQ965GF 桌面,所有其他电脑都输出错误代码 ah=0x01(无效命令)。任何帮助将不胜感激!谢谢!这是错误的代码:
是的,我确实记得定义了一个分区表和神奇的启动号,是的,我很肯定“printHex”的工作原理。我用它来调试。
[org 0x7c00]
[bits 16]
jmp start
bootDrive db 0
start:
mov [bootDrive], dl ; Stores the drive # in bootDrive
; Inits all relevant registers------------------------------------------
xor si, si
xor di, di
mov ax, 0x7c00
mov bp, ax ; Set bp (base pointer) for our stack
mov sp, ax ; Set sp (stack pointer) equal to the bp
mov ax, 0x0000
mov ss, ax ; Set ss (stack segment) to zero
mov ds, ax ; Set ds (data segment) to zero
mov es, ax
; Inits all relevant registers------------------------------------------
; Boot code goes here---------------------------------------------------
mov ax, 0x0000 ; int 10/ah= 0x00 -> set video mode (clear screen)
int 0x10
mov ah, 0x41
mov dl, [bootDrive]
mov bx, 0x55AA
int 0x13 ; Check extentions present
jc .errMain ; If theres an error
mov dx, cx ; Print Extensions
call printHex
jmp .done
.errMain:
mov dx, ax ; Print Error Code
call printHex
.done:
jmp $
解决方案
推荐阅读
- c# - 如何从以变量为键的 DataTable 生成 JSON
- ms-access - Access 数据库超过 5000 个项目,因此在 SharePoint 中不起作用
- apache-spark - spark-submit --files hdfs://file 缓存在驱动程序的 /tmp 中
- selenium - 在appium中获取数据提供者异常
- spring - Spring 集成 http-inbound-gateway / RequestMappingHandlerMapping
- javascript - 如果其他元素具有该类,如何停止将类添加到元素中?
- javascript - 循环 JSON 对象以检查给定值是否存在
- javascript - 如何从javascript转换维恩图代码