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
}
}
是有什么头文件么,还是。。怎么用?谢谢各位啦!
展开
 我来答
freeeeeewind
2013-10-30 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1342万
展开全部
Turbo C 2.0 中,利用asm关键字实现在源程序中嵌入汇编语句。
在TC2中,asm是一个关键字(key word)用来在程序中嵌入汇编语言。使用asm关键字的格式为:
asm {
汇编程序语句块
}
因为asm是TC2的关键字,所以用asm嵌入汇编程序不需要特殊的头文件

在你的程序中,函数iowrite 和 ioread是利用嵌入汇编程序实现的。按常规方法向函数传入参数,调用,获取返回值。也就是说,用汇编实现的函数与常规函数没有什么差异。
更多追问追答
追问
但是报错说在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
}
anan640925
2015-10-10 · TA获得超过5421个赞
知道大有可为答主
回答量:4868
采纳率:51%
帮助的人:1096万
展开全部
Turbo C 2.0 中,可以用asm关键字实现在源程序中嵌入汇编语句。
在TC2中,使用asm关键字的格式为:
asm {
汇编程序语句块
}
注意这个是在一个段以内的程序,就是总程序在64K以内
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Arthurzss
2013-10-30 · TA获得超过1661个赞
知道小有建树答主
回答量:496
采纳率:100%
帮助的人:240万
展开全部
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
}
追问
但是在报错中说:iowrite和ioread中不允许内联汇编,是怎么回事呢?(能编译过一定给分哦)
追答
在命令行方式下通过tcc命令试试,格式是:tcc 你的c文件.c
如果还不行,是TC安装目录下缺少TASM.EXE这个文件。可以网上下载一个。

如果只是要对端口输入输出的话,可以直接用inport(..)和inportb(..),outport(..)和outportb(..),不用自己编写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式