Сборка Преобразование MOV / MOVZX и MOVSX в код C (без встроенного asm)

Для эмулятора 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 У меня проблемы с преобразованием в простой код C ... похоже, такой же, как и два выше ... за исключением того, что он пытается добавить столько же полностью установленных битов перед значением перемещен по мере возможности .. например,

000000C7 становится FFFFFFC7

6
задан SSpoke 14 October 2011 в 01:28
поделиться