找回密码
 新注册用户
搜索
查看: 9823|回复: 12

[求助]调试程序时汇编语句发生operand size conflict

[复制链接]
发表于 2006-6-15 13:34:12 | 显示全部楼层 |阅读模式
今天正在调3x+1的源程序,用VC++6,结果在以下汇编语句中出现operand size conflict:

   __asm add si, di

求汇编达人~~~

[ Last edited by fwjmath on 2006-6-15 at 14:29 ]
回复

使用道具 举报

发表于 2006-6-15 15:02:07 | 显示全部楼层
n年前学的汇编,已经不知道si,di指的什么了...

但这个错误好像是说si和di的size不同,需要转换一下先
回复

使用道具 举报

 楼主| 发表于 2006-6-15 15:11:55 | 显示全部楼层
但是si和di都是16bit的~~~应该不存在所谓的size问题~~~
回复

使用道具 举报

发表于 2006-6-15 16:48:38 | 显示全部楼层
vc++可是32位的编译器
回复

使用道具 举报

 楼主| 发表于 2006-6-15 17:03:19 | 显示全部楼层
这是寄存器~~~只受CPU影响的~~~di和si在32位CPU总是16bit的~~~
回复

使用道具 举报

发表于 2006-6-16 11:37:45 | 显示全部楼层
int main(int argc, char* argv[])
{
        __asm add si,di
        return 0;
}

在我这没有任何错误,VC6
回复

使用道具 举报

 楼主| 发表于 2006-6-16 11:40:43 | 显示全部楼层
啊,我还是把整个文件放出来比较好~~~这是3x+1的源代码,我把它部分C++化了~~~

下载后,改后缀名为 .c
回复

使用道具 举报

发表于 2006-6-16 18:22:57 | 显示全部楼层
出错的是mov n0, ax
应该为mov word ptr n0, ax
回复

使用道具 举报

 楼主| 发表于 2006-6-16 20:58:12 | 显示全部楼层
谢谢~~~谢谢啊~~~
看来我明天要去买本书补补课~~~
回复

使用道具 举报

 楼主| 发表于 2006-6-16 21:24:31 | 显示全部楼层
还是不行~~~在乱出数据~~~我用三思的介绍文章里边的纪录来测试,结果数据喷了一阵就死循环了~~~真郁闷~~~
还是不麻烦各位了~~~我自己学了SSE2之后再来编一个优化的~~~
回复

使用道具 举报

发表于 2006-6-17 00:02:13 | 显示全部楼层
引用 fwjmath 在 2006-6-16 08:58 PM 时的帖子:
谢谢~~~谢谢啊~~~
看来我明天要去买本书补补课~~~

不客气

我最近还算比较不忙,有问题就贴出来吧,一起讨论


PS
我觉得3x+1用SSE2优化不一定合适,因为要决定是/2还是*3+1,有分支

问一下,3x+1最大高度到过多少?
回复

使用道具 举报

 楼主| 发表于 2006-6-17 07:23:19 | 显示全部楼层
1,980976,057694,848447
到了64,024667,322193,133530,165877,294264,738020

SSE2还是先想想而已~~~
回复

使用道具 举报

 楼主| 发表于 2006-6-24 22:54:36 | 显示全部楼层
现在想到的唯一方法就是用MMX来代替cd16byte里边的几个long~~~
可是调试出了很多问题~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~
欢迎大家多多支持基金会~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-10-6 03:15

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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