c语言中asm怎么用?使其在TC2.0中编译通过。
#include<stdio.h>#include<dos.h>intmain(){voidiowrite(shortintport1,unsignedlongintva...
#include<stdio.h>
#include<dos.h>
int main()
{
void iowrite(short int port1,unsigned long int value);
unsigned long int ioread(short int port);
short int Config_Add=0xcf8;
short int Config_Dat=0xcfc;
int bus=00,dev=00,fun=00,offset=00;
unsigned long int dat;
iowrite(Config_Add,(0x80000000 |(bus<<16) |(dev<<11) |(fun<<8) |(offset<<2)));
dat=ioread(Config_Dat);
printf("%x",dat);
return 0;
}
void iowrite(short int port1,unsigned long int value)
{
__asm{
mov dx,port1
mov eax,value
out dx,eax
}
}
unsigned long int ioread(short int port)
{
__asm{
mov dx,port
in eax,dx
}
}
是有什么头文件么,还是。。怎么用?谢谢各位啦! 展开
#include<dos.h>
int main()
{
void iowrite(short int port1,unsigned long int value);
unsigned long int ioread(short int port);
short int Config_Add=0xcf8;
short int Config_Dat=0xcfc;
int bus=00,dev=00,fun=00,offset=00;
unsigned long int dat;
iowrite(Config_Add,(0x80000000 |(bus<<16) |(dev<<11) |(fun<<8) |(offset<<2)));
dat=ioread(Config_Dat);
printf("%x",dat);
return 0;
}
void iowrite(short int port1,unsigned long int value)
{
__asm{
mov dx,port1
mov eax,value
out dx,eax
}
}
unsigned long int ioread(short int port)
{
__asm{
mov dx,port
in eax,dx
}
}
是有什么头文件么,还是。。怎么用?谢谢各位啦! 展开
3个回答
展开全部
更多追问追答
追问
但是报错说在iowrite和ioread中不允许内联汇编,是什么原因呢?能过一定给分哈,谢谢啦!
追答
用Turbo C 2.0编译,只能生产16位的代码。所以汇编代码修改如下
unsigned long int ioread(short int port)
{
asm mov dx, port
asm in ax, dx
return _AX;
}
void iowrite(short int port1,unsigned long int value)
{
asm mov dx, port1
asm mov ax, value
out dx, ax
}
展开全部
Turbo C 2.0 中,可以用asm关键字实现在源程序中嵌入汇编语句。
在TC2中,使用asm关键字的格式为:
asm {
汇编程序语句块
}
注意这个是在一个段以内的程序,就是总程序在64K以内
在TC2中,使用asm关键字的格式为:
asm {
汇编程序语句块
}
注意这个是在一个段以内的程序,就是总程序在64K以内
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
TC中好像是用预处理伪指令的:
void iowrite(short int port1,unsigned long int value)
{
#asm
mov dx,port1
mov eax,value
out dx,eax
#endasm
}
unsigned long int ioread(short int port)
{
#asm
mov dx,port
in eax,dx
#endasm
}
void iowrite(short int port1,unsigned long int value)
{
#asm
mov dx,port1
mov eax,value
out dx,eax
#endasm
}
unsigned long int ioread(short int port)
{
#asm
mov dx,port
in eax,dx
#endasm
}
追问
但是在报错中说:iowrite和ioread中不允许内联汇编,是怎么回事呢?(能编译过一定给分哦)
追答
在命令行方式下通过tcc命令试试,格式是:tcc 你的c文件.c
如果还不行,是TC安装目录下缺少TASM.EXE这个文件。可以网上下载一个。
如果只是要对端口输入输出的话,可以直接用inport(..)和inportb(..),outport(..)和outportb(..),不用自己编写
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询