189
правок
Изменения
Нет описания правки
ecx +stdcall
f(a, b, c); a -> f(b, c);
push c push b push a call f
либо
push a push buff call f ret esp, 4
f: mov ecx, [exp + 5] mov [ecx], ... mov eax ecx ret 4
;;-------------------------------------------------------
if (eax < 5) ...1 else ...2
то же самое, что и:
;;-------------------------------------------------------
if (eax < 5 && ebx) ...1 else ...2
то же самое, что и:
;;--------------------------------------------------------
Если ebx заменить на [ebx] то все может полететь, надо быть на готовесделаем теперь такое:
то же самое, что и:
заметим, что компилятор очень часто именно так и переводит
код нуля '0' представляется в виде 0x30
...
код девятки '9' представляется как 0x39
char нам знаковость не гарантирует, поэтому с ним аккуратнее(его не с амортизировали)
;;----------------------------------------------------------
то же самое, что и:
;;-------------------------------------------------------------
5) MOV eax, 1 2) xoc eax, eax 1) inc eax,
;;=============================================================
;!! SWITCH !!
switch(eax) { case 1: ...1 break; case 3: case 4: ...2 default ...3 }
реализуется так:
table dd l3, l1, l3, l2, l2 ;находится в сегменте данных для чтения CMP eax, 4 JA l3 JMP dword [table + eax + 4] ;dword = double word l1: ...1 JMP l4 l2: ...2 l3: ...3 l4: ...4
;;=======================================================================
задачка - реализовать while (eax > 3) ...;
l1: cmp eax, 3 JBE l2 ;jump belong to equal ...1 JMP l1 l2: ...2
;;------------------------------------------------------------------
задачка - реализовать do ... while (eax > 3)
l1: ...1 cmp eax, 3 JA l1
заметим, что во втором случае, у нас и конструкция легче, и кода меньше(проще)
как модифицировать while, чтоьы по эффективности он догнал do...while?
;;=============================================================================
;!! FOR !!
for (uint eax = 0; eax < 5; eax++) ;uint = unsigned integer {...}
;;----------------------------------------------------------------------------
for (uint eax = 4; eax >= 0; eax--) {...}