Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Problema con el lenguaje ensamblador

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Problema con el lenguaje ensamblador Responder citando

Necesito insertar el valor de una zona de memoria en una celda de una tabla. El problema es que lo realizo en ensamblador y me da un problema al compilar. El código es el siguiente:
mov ebp,0x1000
mov eax,[ebp]
En esta última linea me da un error de violación de memoria. No se porque ocurre ésto, porque la zona elegida no tiene referencia. Cuando miro el código en la opción CPU, este direccionamiento esta permitido. Si sabes alguna solución, te agradecería me lo indicases, gracias.
Volver arriba
Mensaje    Asunto: Problema con el lenguaje ensamblador Responder citando

No se si tienes un conocimiento de la
arquitectura 32 bits, modo protegido, etc,
En el caso de que SI, perdona la explicación
y si quieres ponte en contacto en mi email
para detallarme mejor el problema. dbarcena@teleline.es

En los entornos de 32 bits, para que los programas se protegan unos de otros y el sistema operativo de los programas, existe la proteccion de memoria.

Cuando ejecutas un programa del builder, veras que el codigo te lo coloca en una dirección 40000 por ejemplo, y los datos por encima de esta dirección, y al final la pila. (no tiene por que estar en este orden)
por lo que cualquier acceso a una dirección fuera de lo asignado te dara dicha excepción.

por ejemplo:

push ebp
mov ebp,0400h
mov eax,[ebp]
pop ebp

dara una excepción,

ya que 0400 esta en una zona de memoria fuera
de la asignada al programa,

En los programas de Win32, se definen 2 selectores, principalmente:

en CS <- el selector de codigo (con el atributo de solo lectura y ejecucion)

y en DS, SS, <- apunta al selector de datos,
con atributo de lectura/escritura.

en otros compiladores, por ejemplo el watcom
para codigo 32bit/msdos, te añade otro
selector que apunta a toda la memoria fisica del ordenador, para dar acceso a las variables de la BIOS, zona de memoria, etc,
entonces si seria valido este ejemplo:

push ebp
mov ebp,0400h
mov eax,fs:[ebp] <- Ya no es una llamada near
pop ebp

O bien te permite utilizar DPMI, que es un
API que da un soporte para este tipo de cosas, reservar memoria por debajo del 1.
mega fisico, etc...

Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.