Вот решил сварганить что-нибудь на падобии того, о чем писали в соседнем топике http://www.wasm.ru/forum/viewtopic.php?id=8642 Вообщем эта вм понимает только одну команду csub dest, src, которая действует следующим образом: if overflow_flag = 0 overflow_flag = dest < src dest = dest-src else overflow_flag = 0 end if Есть только один регистр ip в него можно писать(но команды csub ip,ip нету). При вызове vm в качестве параметров передаются: entry (указатель с которого начнуться интерпретироваться команды), base (относительно неё ведутся операции с памятью) и tail(команды выполняются пока ip < tail). Каждая из трех видов команды кодируется как байт операции и параметры(размером в слово). Соответственно имеем: syntax: csub [a], bin: db 010b, dw b, dw a syntax: csub ip,[a] bin: db 110b, dw a syntx: csub [a],ip bin: db 000b, dw a А вот исходник и макросы для поддержки: Код (Text): macro parse_operand operand { match [cell], operand \{ if cell > vm_tail-vm_base dw cell-vm_base else dw cell shl 2 end if \} } macro csub op0, op1 { if op0 eq ip db 110b parse_operand op1 else if op1 eq ip db 000b parse_operand op0 else db 010b parse_operand op1 parse_operand op0 end if } vm_execute: push ebx esi edi mov esi,[esp+10h] mov ebx,[esp+14h] mov edi,[esp+18h] xor eax,eax process_instrux: lods byte [esi] shr eax,1 lods word [esi] jo clear_flag mov edx,esi jz reg_to_mem mov edx,[ebx+eax] jp mem_to_reg mem_to_mem: lods word [esi] reg_to_mem: sub [ebx+eax],edx jmp finalize mem_to_reg: sub esi,edx jmp finalize clear_flag: jnp finalize lods word [esi] finalize: sbb eax,eax cmp edi,esi ja process_instrux pop edi esi ebx ret А вот маленький пример использования: Код (Text): start: ccall vm_execute, vm_entry, vm_base, vm_tail invoke MessageBox, HWND_DESKTOP, vm_base, NULL, MB_OK ret vm_base: a dd ? b dd ? t dd ? vm_entry: macro zero op0 { csub op0,op0 csub op0,op0 } macro move op0, op1 { local value zero op0 csub op0,[value] db 010b value dd -op1 } ; a = 0x41+0x20 move [a],0x41 move [b],0x20 csub [t],[t] csub [t],[b] csub [t],[t] csub [a],[t] vm_tail: