首页
社区
课程
招聘
[求助]汇编中MUL的问题
发表于: 2006-10-16 15:15 4976

[求助]汇编中MUL的问题

2006-10-16 15:15
4976
我是超菜菜,刚刚才学习汇编
在书上遇到个问题不知道怎么解决,如下:
1的平方加上2的平方一直加到小于等1000的时候就不加了
这个应该要用MUL吧?
感觉要分低高八和低八寄存器来用
可怎么都写不出来
会不会用堆栈啊?
可不可以麻烦大家帮帮忙啊
谢谢了。。。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
用C语言写,再把汇编扣出来
2006-10-16 15:56
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
00401000             33C0                xor eax,eax
00401002             33C9                xor ecx,ecx
00401004             40                  inc eax
00401005             8BD0                mov edx,eax
00401007             0FAFD0              imul edx,eax
0040100A             03CA                add ecx,edx
0040100C             81F9 E8030000       cmp ecx,3E8
00401012           ^ 7E F0               jle short aaa.00401004
00401014             C3                  retn
2006-10-16 16:01
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
4
也可以用地址乘

LEA edx,[eax*edx]

把楼上那位大大的imul edx,eax换成上面那条指令就可以了
2006-10-16 18:09
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
最初由 笨笨雄 发布
也可以用地址乘

LEA edx,[eax*edx]

把楼上那位大大的imul edx,eax换成上面那条指令就可以了

不可以的
只能乘2, 4, 8等等
这个乘法是通过简单的移位操作来进行的
2006-10-16 20:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
imul edx,eax
乘法不是单操作数吗?
怎么可以这样啊?
而且乘的结果不是高的放DX中低的放AX中吗?
是不是我理解错了?
还看到有人用SHL来把数变平方也可以实现吗?
好迷惑啊~~
还是请教下大家咯
谢谢哈……
2006-10-16 20:41
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
7
楼主你看的是旧汇编教程拉。。
那些是16位的CPU
寄存器是16位的
所以需要扩展到32位的时候就变成高16位在DX低16位在AX
很早以前CPU就从16位的变成32位

现在都64位CPU了。。

关于位移

十进制:

对于数字1。向左移1位相当于1 * 10的1次方,如此类推。

推广到向右,也是一样的

再推广到二进制,就是向左移X位相当于乘2的X次方,向右移X位相当于乘2的负X次方

下面是INTEL的64/32位软件开发手册,有提供PDF下载,很详细,一条指令就用1页以上来解释,可惜是E文。

http://www.intel.com/design/pentium4/manuals/index_new.htm

楼主问问题的帖,变成我知道自己不足了。。。我得去认真看看寻址方式了。。
2006-10-17 02:14
0
游客
登录 | 注册 方可回帖
返回
//