- UID
- 28290
注册时间2007-2-21
阅读权限8
最后登录1970-1-1
初入江湖
该用户从未签到
|
书中有一段代码是这样的- 004013D8 /$ 33C0 xor eax,eax ; 清零
- 004013DA |. 33FF xor edi,edi ; 清零
- 004013DC |. 33DB xor ebx,ebx ; 清零
- 004013DE |. 8B7424 04 mov esi,dword ptr ss:[esp+4] ; 指向序列号
- 004013E2 |> B0 0A /mov al,0A ; al=10
- 004013E4 |. 8A1E |mov bl,byte ptr ds:[esi] ; 取序列号到bl
- 004013E6 |. 84DB |test bl,bl ; 是否取完
- 004013E8 |. 74 0B |je short serial.004013F5 ; 取完结束
- 004013EA |. 80EB 30 |sub bl,30 ; ebx=ebx-30h
- 004013ED |. 0FAFF8 |imul edi,eax ; edi=edi*10,实际上是左移一位
- 004013F0 |. 03FB |add edi,ebx ; edi=edi+ebx=edi+[code(i)-30h]
- 004013F2 |. 46 |inc esi ; 下一位
- 004013F3 |.^ EB ED \jmp short serial.004013E2
- 004013F5 |> 81F7 34120000 xor edi,1234
- 004013FB |. 8BDF mov ebx,edi
- 004013FD \. C3 retn
复制代码 我不明白的是004013ED一行,书中为什么说edi*10实际上是左移一位。。左移一位不是相当于乘2吗?希望有人解答一下。。说实话,对左移右移不是太了解。。。 |
|