我尝试编写一个汇编程序,以在给定系统上获取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寄存器中的数据。有人有经验如何正确地做到这一点吗?有没有更好的方法来实现这一点?任何帮助都非常感谢!
1条答案
按热度按时间0g0grzrc1#
切换线路:
收件人:
奏效了。