Título: Por que esta instrucción no es válida? Publicado por: .:UND3R:. en 18 Noviembre 2011, 17:46 pm 1)He aquí la instrucción:
Código
2)Otra cosa, un programa en modo protegido mov puede tener como destino registros de segmento exceptuando a CS? Saludos EDIT: 3) movzx var2,al ; es válida??? var2 WORD 1000h (yo creo que sí) Título: Re: Por que esta instrucción no es válida? Publicado por: _Enko en 19 Noviembre 2011, 13:32 pm esa seria la forma correcta de hacerlo en modo real.
Código: mov al, 1000h 3) NO Código: 0F B6 / r MOVZX r16, r/m8 Move byte to word with zero-extension saludos. Título: Re: Por que esta instrucción no es válida? Publicado por: .:UND3R:. en 20 Noviembre 2011, 15:40 pm Hola, en cuando a la pregunta dos, me refería a mov no ha movxz jeje
Saludos Título: Re: Por que esta instrucción no es válida? Publicado por: _Enko en 20 Noviembre 2011, 16:24 pm Mi respuesta era a la pregunta 1 y 3. La 2 no la vi.
2) Sacado de AMD_INSTRUCTION_SET Citar Copies an immediate value or the value in a general-purpose register, segment register, or memory location (second operand) to a general-purpose register, segment register, or memory location. The source and destination must be the same size (byte, word, doubleword, or quadword) and cannot both be memory locations Citar When reading segment-registers with a 32-bit operand size, the processor zero-extends the 16-bit selector results to 32 bits. When reading segment-registers with a 64-bit operand size, the processor zero-extends the 16-bit selector to 64 bits. If the destination operand specifies a segment register (DS, ES, FS, GS, or SS), the source operand must be a valid segment selector Citar Attempting to use the MOV instruction to load the CS register generates an invalid opcode exception (#UD). Use the far JMP, CALL, or RET instructions to load the CS registe Como destino se puede tener DS, FS, GS, SS y ES (en modo KERNEL, RING0. Si lo haces en modo usuario, el programa muere) Para modificar CS, lo que se hace es un far jump. Me imagino que habras visto varias veces algo asi: Código: mov eax, [fs:0x0] Lo que guardan es un Indice a una tabla. Y en esa tabla si se guarda la direccion. (gdt). Se los suele llamar "selectores" en vez de "segmento" ya que son eso, un indicde selector. CodeSelector, DataSelector etc... Para modificar el CS lo que hay que hacer es un far jump indicando que "indice"/selector de esa tabla hay que usar. Código
Saludos Título: Re: Por que esta instrucción no es válida? Publicado por: .:UND3R:. en 21 Noviembre 2011, 04:18 am Me haz aclarado bastantes dudas, gracias _Enko
Saludos |