assembly 从中断调用2F/AX= 4A 10 h/BX= 0000 h获取MS-DOS SMARTDrive版本

gupuwyp2  于 2023-04-06  发布在  其他
关注(0)|答案(1)|浏览(115)

我尝试编写一个汇编程序,以在给定系统上获取SMARTDrive版本。检测SMARTDrive是否加载的代码工作正常,但我似乎无法从Base Pointer(BP)寄存器获取版本。我的编译器Digital Mars似乎不支持DOS. H的REGS结构中的BP寄存器,因此我无法使用regs. x. bp。
我使用Ralph Brown的中断列表作为指南,位于:http://www.ctyme.com/intr/rb-4822.htm
下面是我使用的代码:

.MODEL Large, C
PUBLIC _get_smartdrive_version

_get_smartdrive_version proc
    cli
    mov ax, 4A10h
    mov bx, 0000h
    mov cx, 0EBABh
    int 2Fh
    cmp ax, 0BABEh          ; verify SMARTDrive signature
    jne no_smartdrv
    xor ax, ax              ; probably not needed
    mov ax, dword ptr [bp]  ; (note also tried without dword ptr, and with es:[bp])
    jmp done
no_smartdrv:
    mov ax, 0
done:
    sti
    ret
_get_smartdrive_version endp

end

这个应该返回AX寄存器中的版本,但是当我运行这个代码时,它挂起了我的系统。我真的不知道如何在不锁定系统的情况下访问BP寄存器中的数据。有人有经验如何正确地做到这一点吗?有没有更好的方法来实现这一点?任何帮助都非常感谢!

0g0grzrc

0g0grzrc1#

切换线路:

mov ax, dword ptr [bp]

收件人:

mov ax, bp

奏效了。

相关问题