[Ayuda] Problemas con las direcciones en la pila

Iniciado por x64core, 19 Noviembre 2011, 23:12 PM

0 Miembros y 1 Visitante están viendo este tema.

x64core

hola!
tengo problemas con las direcciones de la pila y el contenido tambien  :-\
nose en que estoy fallando estoy haciendo unas pruebas para comprender
la pila tengo esto:
16 bits:

Código (asm) [Seleccionar]
   push 33h
   push 0h
   push 0h
   push 0h
   push 0h
   mov ax,ss:sp+8h


el push lo hago para despues obtener la direccion del valor 33h sumandole un desplazamiento al SP
cada push pesa 2bytes no? :P y quiero pasar el contenido ( 33h ) a AX :/
en que fallo ? :P


e intentado asi:

mov ax,[ss:sp+8h]

mov ax,[sp+8h]

pero tampoco :/

_Enko

#1
En modo real el direccionamiento de momoria funciona asi:

[BX + val]
[SI + val]
[DI + val]
[BP + val]
[BX + SI + val]
[BX + DI + val]
[BP + SI + val]
[BP + DI + val]
[address]


Cualquier otra combinacion no es valida.
Por ende, te toca hacer por ejemplo:

mov bp, sp
mov ax, [bp+8]


Los registros no son de uso general. No son AX, BX, CX, DX por ABCD...
Sino Acomulator, Base, Counder, Data

Saludos.

x64core

 ;-) gracias _Enko
esto me quiere decir y pienso que el SP no se puede modificar no? :P
y no se aun que es modo real xD
me imagino que en ese modo se pueden modificar de todas formas por lo que veo :P
y es interesante eso que dices de los registros ;D
no se si estoy ocupando el registro correcto :P
pero lo pondre a practica , gracias :)

_Enko

Holas, el registro SP si se puede modificar. Lo que no puedes hacer es usarlo como Inidice cuando Indicas  un bloque de memoria.

Ejemplo:
Código (asm) [Seleccionar]

mov sp, 100h ;valido
mov [sp], 5; INVALIDO
mov [sp + 2], 5 ;INVALIDO.


O sea, justamente el registro SP es lo que puedes modificar. Lo que no puedes hacer es usarlo como indicador "puntero".

x64core

#4
aqui lo use como destino y no me ensamblo :P

   push 0
   push 0
   push 0
   push 0
   push sp
   pop  dx
   mov sp,dx+04h


perdon la insistencia :P pero estaba viendo las situaciones en las que si se puede para aprender :)

lo e resuelto de esta forma:

Código (asm) [Seleccionar]

   push 30h
   push 0
   push 0
   push 0
   mov dx,sp
   add dx,06
   mov sp,dx


que quiere decir esto :P que al usar mov el operador fuente no se puede sumarse un valor? ( mov sp,dx+06 ; ilegal )
porque creo que esa es la instruccion ilegal pero no entiendo porque :P

_Enko

Hola, tenes que leer mi post anterior de nuevo. [DX+Val] no es una forma de direccionar la memoria valida. Lee de nuevo la lista, dx no esta alli. Saludos