注册 登录
编程论坛 汇编论坛

[求助]我用汇编写了一个DOS程序,要调用中断的,在32位WINDOWS中又该怎么调用中断呢?

曼菲士 发布于 2010-09-17 14:42, 2439 次点击
我写了一个程序是这样的

mov ax,4f00h ;VBE功能调用,获取VESA信息
mov di,offset buffer ;保存数据区
int 10h       ;调用中断

在32位WINDOWS程序中是不能直接调用中断的,听说可以通过开V86任务来实现,但这方面的例子很多都是从实模式进入V86模式,从WIN32程序进入V86的例子没找到过,希望有相关经验的朋友麻烦指点一二,万分感谢。

[ 本帖最后由 曼菲士 于 2010-9-21 12:25 编辑 ]
8 回复
#2
zklhp2010-09-17 19:45
这个问题 如果要在win32环境下实现同样的功能肯定需要用windows提供的API

那 你这程序啥功能啊 呵呵 俺不知道 也不知道怎么用win32实现
#3
东海一鱼2010-09-17 22:01
其实在V86模式下,int10的非独占功能还是可以直接使用的。
给个例子:
只有本站会员才能查看附件,请 登录

windows提供了一个类似于int10直接写屏幕缓冲区的功能,他现在是一个函数组,名曰:DrictX。你有兴趣的话,可以看看这方面的教材。

btw:
还可以通过写虚拟驱动的方式,再WINDOWS内核中直接操作BIOS 中断调用。愿意啃铁豆腐的话,也不妨试试。
#4
Alar302010-09-18 11:05
来膜拜下LS的兄弟
#5
zklhp2010-09-18 23:17
以下是引用东海一鱼在2010-9-17 22:01:00的发言:

其实在V86模式下,int10的非独占功能还是可以直接使用的。
给个例子:

windows提供了一个类似于int10直接写屏幕缓冲区的功能,他现在是一个函数组,名曰:DrictX。你有兴趣的话,可以看看这方面的教材。

btw:
还可以通过写虚拟驱动的方式,再WINDOWS内核中直接操作BIOS 中断调用。愿意啃铁豆腐的话,也不妨试试。


#6
绝对的菜2010-09-20 22:21
32位汇编和16位是不同的,需要专门学习的。。
#7
曼菲士2010-09-21 12:19
我的这个功能主要是针对Windows PE系统不能运行这段代码问题,这是获取VESA信息的代码,和Windows API无关。
#8
东海一鱼2010-09-21 14:51
以下是引用曼菲士在2010-9-21 12:19:17的发言:

我的这个功能主要是针对Windows PE系统不能运行这段代码问题,这是获取VESA信息的代码,和Windows API无关。
   写16位代码,跑V86模式。32位PE只能上驱动。
#9
曼菲士2010-09-25 15:49
最终还是考虑写个VXD可能行。
1