Qual é o tamanho de cada instrução asm?

Qual é o tamanho de cada instrução asm? Toda instrução leva quantos bytes? 8 bytes? Quatro para o opcode e quatro para o argumento? O que acontece quando você tem um opcode e 2 argumentos, em mov, por exemplo? Eles têm um tamanho fixo na memória ou eles variam? O EIP tem alguma coisa a ver com isso, seu valor é sempre incrementado por um, sendo totalmente independente de que tipo de instrução ele está passando?

Eu pergunto isso quando estava lendohttp://en.wikibooks.org/wiki/X86_Disassembly/Functions_and_Stack_Frames Eu me deparei com o fato de que parece que uma instrução de chamada é equivalente a uma instrução push e jmp.

call MYFUNCTION
mov my_var, eax

sendo o mesmo que

push [eip + 2];
jmp MYFUNCTION;
mov my_var, eax

Quando estamos empurrando [eip + 2] na pilha, a que valor estamos apontando então? Para a linha ao lado de "jmp MYFUNCTION", mov my_var eax, certo?

ps: MSVC ++ sinaliza um erro na primeira linha, como diz que o eip é indefinido. Ele funciona para eax, esp, ebp, etc. O que estou fazendo errado?

questionAnswers(2)

yourAnswerToTheQuestion