阅读:1287回复:4
0X1A ??
调用INT 0X1A 的B101功能,判断是否支持PCI
#include.... main() { asm(\"mov $0x0,%edi\\n //..0 mov $0xb1,%ah\\n //..1 mov $0x01,%al\"); //..2 asm(\"int $0x1a\"); //..3 } 仍就单步执行到3时报:segmentation fault! why? 3kx!!!!!!!!!!!!!!1 :cool: |
|
沙发#
发布于:2002-05-12 13:57
我想是堆栈段设置的问题。要求1024BYTE以上的堆栈。我做了一个汇编的测试程序,在我的机器上测试通过了。源码和可执行文件已发到你的邮箱。收到后请回信或留言确认。
|
|
|
板凳#
发布于:2002-05-12 15:36
您好,感谢您的热心帮助!
您的code及exe已收到,在Windows下,能够执行。 可是在linux下不行。 我的pci卡在dos、windows下的驱动是有的,只少linux下的。不知您做过没有! |
|
地板#
发布于:2002-05-13 10:34
int1a与PCI有关的调用是基于BIOS的,与操作系统无关。我给你的程序是在DOS下编译的,可执行文件是DOS头,LINUX不能执行。你将我的源码的头描述按照LINUX规范修改一下,并将MAIN:之后的前两句改掉,然后在LINUX下编译试试。另外B101是基于PCI BIOS 2.0的,
PCI BIOS 2.0以上版本可调用B181。 |
|
|
地下室#
发布于:2002-05-13 11:13
LINUX下好象没有汇编工具。我的那个EXE文件在打开DOS BOX之后是可以运行的。但若是做驱动,恐怕不能用这种方式。LINUX下应采用保护模式,对内存的管理与实模式不同。建议你看看保护模式下关于内存管理的内容。再你的C代码中将内存设置以下试试。我这里没有LINUX开发环境,这一点上恐怕帮不了什么忙。不过我开始对这个问题感兴趣了。暑假里我会建一个LINUX环境试试,那时我们再交流交流吧。
[编辑 - 5/13/02 by syeagle] |
|
|