Привет всем!)
Если кто знает, в чём тут особенность -- объясните мне, пожалуйста.
Я открыл дизассемблированный бинарный код нескольких модулей. Во всех модулях есть странная комбинация ассемблерных команд, по пересылке значения из ячейки памяти в регистр ЕАХ и обратно из регистра ЕАХ в ячейку памяти.
Ниже пример такого дизассемблированного бинарного кода.
Код:
PROCEDURE $$
00000000H:   55    push  ebp
00000001H:   8B EC    mov  ebp, esp
00000003H:   57    push  edi
00000004H:   56    push  esi
00000005H:   66|A1 00 00 00 64   mov  ax, [1677721600] (* 1 *)
0000000BH:   66|A3 00 00 00 64   mov  [1677721600], ax (* вот это зачем? *)
00000011H:   66|A1 00 00 00 64   mov  ax, [1677721600] (* повтор 1 *)
00000017H:   66|A3 00 00 00 64   mov  [1677721600], ax (* повтор 1 непонятно зачем *)
0000001DH:   50    push  eax
0000001EH:   66|A1 0D 00 00 64   mov  ax, [1677721613]
00000024H:   50    push  eax
00000025H:   68 00 00 00 64   push  1677721600
0000002AH:   68 00 00 00 64   push  1677721600
0000002FH:   FF 15 00 00 00 64    call  [1677721600]
00000035H:   66|A1 00 00 00 64   mov  ax, [1677721600]
0000003BH:   66|A3 20 00 00 64   mov  [1677721632], ax
00000041H:   66|A1 00 00 00 64   mov  ax, [1677721600] (* вот это зачем??? *)
00000047H:   66|A3 19 00 00 64   mov  [1677721625], ax
0000004DH:   50    push  eax
0000004EH:   66|A1 3D 00 00 64   mov  ax, [1677721661]
00000054H:   50    push  eax
00000055H:   68 00 00 00 64   push  1677721600
0000005AH:   68 00 00 00 64   push  1677721600
0000005FH:   FF 15 00 00 00 64    call  [1677721600]
00000065H:   C6 05 00 00 00 64 00    mov  [1677721600], 0
0000006CH:   66|A1 00 00 00 64   mov  ax, [1677721600] (* так регистр не обнуляется! ax -- младшая половина обнулена, а что со старшей? *)
00000072H:   66|A3 50 00 00 64   mov  [1677721680], ax
00000078H:   66|A1 00 00 00 64   mov  ax, [1677721600] (* вот это опять зачем?? *)
0000007EH:   66|A3 49 00 00 64   mov  [1677721673], ax
00000084H:   50    push  eax
00000085H:   66|A1 74 00 00 64   mov  ax, [1677721716]
0000008BH:   50    push  eax
0000008CH:   68 26 00 00 64   push  1677721638
00000091H:   68 00 00 00 64   push  1677721600
00000096H:   FF 15 31 00 00 64    call  [1677721649]
0000009CH:   66|A1 00 00 00 64   mov  ax, [1677721600]
000000A2H:   66|A3 87 00 00 64   mov  [1677721735], ax
000000A8H:   66|A1 00 00 00 64   mov  ax, [1677721600] (* вот этот повтор опять зачем? *)
000000AEH:   66|A3 80 00 00 64   mov  [1677721728], ax
000000B4H:   50    push  eax
000000B5H:   66|A1 A4 00 00 64   mov  ax, [1677721764]
000000BBH:   50    push  eax
000000BCH:   68 56 00 00 64   push  1677721686
000000C1H:   68 00 00 00 64   push  1677721600
000000C6H:   FF 15 61 00 00 64    call  [1677721697]
000000CCH:   C6 05 00 00 00 64 00    mov  [1677721600], 0
000000D3H:   5E    pop  esi
000000D4H:   5F    pop  edi
000000D5H:   8B E5    mov  esp, ebp
000000D7H:   5D    pop  ebp
000000D8H:   C3    ret 
Кроме того, что отмечено в коде, поправьте, если я не прав: в Паскаль-стиле вызывающая сторона очищает стек, 
восстанавливает регистры (или я ошибаюсь?)