鱼C论坛

 找回密码
 立即注册
查看: 4872|回复: 4

关于X86_64Linux环境下suffix or operands invalid for ‘mov’问题的探讨

[复制链接]
发表于 2011-10-19 17:24:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 琦天娃娃 于 2011-10-19 17:26 编辑

今天帮助朋友调试运行某一linux下的文件加密驱动程序,遇到如下问题:
同样一份c代码分别在32位和64位的CentOS6.0下编译运行,32位系统能够运行正常,而64位系统报suffix or operands invalid for ‘mov’的错误。
出错语句为:

asm volatile ("movl %%eax, %%cr0"::"a"(cr0));
错误经研究后找到产生原因,主要是由于操作系统的系统结构发生了变化,在x86-64中,所有通用寄存器(GPRs)都从32位扩充到了64位,名字也发生了变化。8个通用寄存器(eax, ebx, ecx, edx, ebp, esp, esi, edi)在新的结构中被命名为rax, rbx, rcx, rdx, rbp, rsp, rsi, rdi。movl命令也需相应改成movq。将上列代码改成

asm volatile ("movq %%rax, %%cr0"::"a"(cr0));
编译通过。

PS:不过运行后又爆出了segmentation fault core dump 错误,看来革命尚未成功同志还需努力……

                               
登录/注册后可看大图



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-24 11:44:14 | 显示全部楼层
本帖最后由 琦天娃娃 于 2011-10-24 11:44 编辑

后续进展:segmentation fault core dump问题已解决

主要是写的测试程序工作在应用层,没有访问权限,把程序用驱动模式载入问题解决。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-24 14:03:51 | 显示全部楼层
希望小甲鱼能出64汇编,毕竟现在基本都开始往64迁移了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-24 16:41:54 | 显示全部楼层
wajmjjj 发表于 2011-10-24 14:03
希望小甲鱼能出64汇编,毕竟现在基本都开始往64迁移了

小甲鱼只有一个人,他没有办法照顾所有的学科,我觉得与其期待别人不如自己开始动手实践~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-24 23:01:10 | 显示全部楼层
琦天娃娃 发表于 2011-10-24 16:41
小甲鱼只有一个人,他没有办法照顾所有的学科,我觉得与其期待别人不如自己开始动手实践~

额,有心无力啊,最近比较忙,实在没时间搞,我连32位的汇编都只是略懂,惭愧啊惭愧。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 21:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表