能力值:
(RANK:650 )
|
-
-
2 楼
用C语言写,再把汇编扣出来
|
能力值:
(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
|
能力值:
(RANK:570 )
|
-
-
4 楼
也可以用地址乘
LEA edx,[eax*edx]
把楼上那位大大的imul edx,eax换成上面那条指令就可以了
|
能力值:
( LV12,RANK:210 )
|
-
-
5 楼
最初由 笨笨雄 发布 也可以用地址乘
LEA edx,[eax*edx]
把楼上那位大大的imul edx,eax换成上面那条指令就可以了
不可以的
只能乘2, 4, 8等等
这个乘法是通过简单的移位操作来进行的
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
imul edx,eax
乘法不是单操作数吗?
怎么可以这样啊?
而且乘的结果不是高的放DX中低的放AX中吗?
是不是我理解错了?
还看到有人用SHL来把数变平方也可以实现吗?
好迷惑啊~~
还是请教下大家咯
谢谢哈……
|
能力值:
(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
楼主问问题的帖,变成我知道自己不足了。。。我得去认真看看寻址方式了。。
|
|
|