Для эмулятора asm, который я пытаюсь написать, чтобы преобразовать код ASM в эквивалентный рабочий код, просто работающий ... лучший код - это тот, который может быть выполнен в одну строку или две-три чаще, все равноо скорости.
Из моего понимания.MOVZX будет таким же, как MOV .. если это будет сделано в C ++.
MOV
преобразование.
MOV ESI,DWORD PTR [ESP+8]
будет похоже на
regs.d.esi = *(unsigned int *)(regs.d.esp+0x00000008);
MOVZX
преобразование.
MOVZX EAX,BYTE PTR DS:[EDI]
было бы похоже на
regs.d.eax = *(unsigned char *)(regs.d.edi);
почти то же самое, без изменений, что когда-либо.
Теперь MOVSX
У меня проблемы с преобразованием впростой код на Си ... кажется таким же, как и два выше ... за исключением того, что он пытается добавить как можно больше полностью установленных бит перед перемещенным значением, как это возможно .. как
000000C7
становится FFFFFFC7