关于MMX指令:64位读写PCI端口的问题。

goodboyyxh 2004-08-11 04:27:47
本人在C语言下使用如下代码进行64bit写:
BOOL WRITE_REGISTER_U64(PULONG pAddr, PULONG pData)
{
_asm{
push ecx
mov ecx, DWORD PTR pData
movq mm0, byte ptr [ecx]
mov ecx, DWORD PTR pAddr
movq byte ptr [ecx], mm0
emms
pop ecx
}
return TRUE;
}
在一台机器上跑的很好,而另一台上跑个5分钟就蓝屏了。
请问我这段代码有什么问题吗?
...全文
187 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Areslee 2004-09-09
  • 打赏
  • 举报
回复
那估计是因为主板对64位的支持不够
PS:大数据量传输最好用DMA,象这样兼容性会有影响
goodboyyxh 2004-09-09
  • 打赏
  • 举报
回复
shinesi:我那段代码确实是在用64bit写,事实证明比2*32bit/4*16bit/8*8bit都要快,这些操作的速度在一般应用上没有要求,当与外设大规模交互时要求高。一次写快几纳秒,整个系统的性能就上升多多啊。至于为什么死机,想不通。
goodboyyxh 2004-09-09
  • 打赏
  • 举报
回复
Areslee:两个32bit写比一个64bit写要慢,对于PCI端口的操作来说差别更明显。你看不出跟PCI有什么关系的原因是,PCI的端口用memory映射后操作与内存操作相同,如果非要说有差别,还未研究。
Areslee 2004-08-17
  • 打赏
  • 举报
回复
晕,DOS下的BC、GCC
WINDOWS下的VC都可以啊
angi_2004 2004-08-17
  • 打赏
  • 举报
回复
在c中嵌入汇编你们用的是什么编译器啊
我现在还找不到一个能嵌入32位汇编的c编译器,帮帮我吧
Areslee 2004-08-17
  • 打赏
  • 举报
回复
C中对变量的访问是通过EBP来的,PUSH/POP不会对变量访问造成不良影响
shinesi 2004-08-17
  • 打赏
  • 举报
回复

BOOL WRITE_REGISTER_U64(PULONG pAddr, PULONG pData)
{
_asm{
push ecx //这里最好不要,因为push之后esp被修改,
//那么 mov ecx,dword ptr pData 可能不对了
mov ecx, DWORD PTR pData
movq mm0, byte ptr [ecx] //你这里只是要读1个字节????
mov ecx, DWORD PTR pAddr
movq byte ptr [ecx], mm0
emms
pop ecx
}
return TRUE;
}


//试一下下面的代码
BOOL WRITE_REGISTER_U64(PULONG pAddr, PULONG pData)
{
_asm{
mov esi, pData
mov edi, pAddr
movq mm0,[esi] //1次读8byte
movq [edi],mm0
emms
}
return TRUE;
}

//另外:你这段代码根本没必要用MMX(速度没什么提升),因为emms切换也要是要费时间的


Areslee 2004-08-17
  • 打赏
  • 举报
回复
非要用这种方法写吗?
用两个双字MOV不行?
还有,我看不出这段代码和PCI端口有什么关系
goodboyyxh 2004-08-12
  • 打赏
  • 举报
回复
朋友,不可能一步步执行到蓝屏吧?蓝屏也没有可用的提示信息,苦啊。可能有些机器64位支持真的不够?
大熊猫侯佩 2004-08-11
  • 打赏
  • 举报
回复
在一台上可以,另一台上不行,而且两台都支持 mmx
代码不一定错,你用调试程序在两台上分别逐句调试一下
see see 出错在哪里
goodboyyxh 2004-08-11
  • 打赏
  • 举报
回复
配置不一样,但是两台都用指令对CPU进行过检测,发现都支持MMX技术。请各位帮忙啊。。。
大熊猫侯佩 2004-08-11
  • 打赏
  • 举报
回复
两台配置一样么?
今年Altera推出最新的10代FPGA和SoC系列产品之一MAX 10(MAX 10数据手册)FPGA,小外形封装、低成本和瞬时接通可编程逻辑器件中采用了先进的工艺,是革命性的非易失FPGA。而Altera推出的评估套件MAX10M08可以作为工业和汽车等很多市场领域和应用提供通用开发平台,也可以把 10M08 评估电路板作为开始 MAX 10 FPGA 设计的高性价比起点。 那么下面就两个方面带着大家开启MAX 10体验之旅。 一、MAX 10 FPGA特性 Altera MAX 10 FPGA是集成了闪存、ADC、RAM和DSP功能的革命性可编程器件,是单芯片、双配置的最佳解决方案。继承了前一代 MAX 器件系列的单芯片特性,使用单核或者双核电压供电,其密度范围在 2K 至 50KLE 之间。MAX 10 FPGA 系列提供先进的小圆晶片级封装 (3mmx3mm),以及有大量 I/O 引脚封装的产品。 片上资源: 50,000 个逻辑单元 (LE) 500 个 用户I/O 管脚 非易失、瞬时接通体系结构 单芯片 嵌入式 SRAM DSP 模块 高性能锁相环 (PLL) 和低偏移全局时钟 外部存储器接口 (DDR3 SDRAM、DDR3L SDRAM、DDR2 SDRAM、LPDDR2) Nios:registered: II 软核嵌入式处理器支持 支持3.3 V、LVDS、PCI 等 30多个 I/O 标准 嵌入式ADCs – 12 位,1 Msps -18 路模拟输入通道 -温度传感器 可供选择的单核或者双核供电模式 嵌入式闪存 内部振荡器 低功耗特性 -休眠模式下,动态功耗降低了95% -输入缓冲关断 128 位高级加密标准 (AES) 和其他设计安全特性 RoHS6 封装 二、MAX 10-10M08评估板 MAX 10-10M08是一款基于Altera MAX 10系列FPGA的入门级评估板,核心FPGA芯片为10M08SAE144C8G。 评估板硬件框图: 评估板硬件资源: 通过该评估板,可以学到: —面向10M08SAE144C8G,144-EQFP FPGA开发设计,103个通用IO口 —测量FPGA功耗(内核电压和IO端口电压) —实现不同I/O电压之间的桥接 —对FPGA的NOR闪存进行读写操作 —使用FPGA的模数转换器模块测量输入的模拟信号 —通过 Arduino UNO R3 连接器或者直通过孔实现与外部功能和器件的链接 该款评估板已经在Altera官网出售,价格为$49.95,有需要的可以到官网购买。 附件中我们提供MAX 10评估板相关硬件、软件支持和产品文档,现在就可以马上开始MAX 10 FPGA设计。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧