首页
社区
课程
招聘
汇编的一道算法题
发表于: 2006-9-8 01:31 4060

汇编的一道算法题

2006-9-8 01:31
4060
(y >> 2)*4 + (y AND 3)=x
代码如下:
  SHR ECX,2
  REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
  MOV ECX,EBX
  AND ECX,3
  REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]

x是串的实际字节(BYTE)数,假如知道了x=20,怎样通过x算出y来,
并写出汇编代码。
小弟新手,希望高手能指点一下。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 622
活跃值: (294)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
2
针对(y >> 2)*4 + (y AND 3)=x

y>>2等效于y/4,再*4=y。但是会产生将y的最后2个二进制位清零的效果。
y and 3,由于3=11(二进制),相当于保留y的二进制最后2位。

所以结论是这个式子等价于y=x

PS:不过楼主啊,看你给出的代码片段好象不足以得出(y >> 2)*4 + (y AND 3)=x这个式子饿~
2006-9-8 02:37
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
这个算法好,颇受启发,以后可以利用一下
2006-9-8 09:01
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
4
根据这个算法的结构
似乎在
  SHR ECX,2
  REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
  MOV ECX,EBX
  AND ECX,3
  REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
前应该还有一句
  MOV EBX, ECX
2006-9-8 09:02
0
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
5
最初由 无聊的菜鸟 发布
针对(y >> 2)*4 + (y AND 3)=x

y>>2等效于y/4,再*4=y。但是会产生将y的最后2个二进制位清零的效果。
y and 3,由于3=11(二进制),相当于保留y的二进制最后2位。

........

讲得好!
2006-9-9 00:22
0
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
最初由 shoooo 发布
根据这个算法的结构
似乎在
SHR ECX,2
REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
MOV ECX,EBX
........


嘿嘿,有点象memcpy函数似的
2006-9-9 11:53
0
游客
登录 | 注册 方可回帖
返回
//