Programación General => ASM (Ensamblador) => Mensaje iniciado por: mansonet en Jueves 1 de Septiembre de 2005, 06:53
Título: Asm En C++
Publicado por: mansonet en Jueves 1 de Septiembre de 2005, 06:53
Tengo la siguiente funcion a la cual llamo para extraer informacion de un modo en Vesa Donde "info" es un puntero a la estructura de modos de vesa
Código: Text
void GetVesaModeInfo(int* modo,vesamodes* info)
{
asm{
mov ax,0x4f01
mov di,info
mov cx,modo
int 0x10
};
};
No logro que en el registro cx me guarde el contenido de "modo", me guarda la direccion de memoria a la cual apunta... Alguien podria darme alguna solucion... o algunos conceptos que creo q me faltan para hacer que funcione... Desde ya gracias
Título: Re: Asm En C++
Publicado por: Eternal Idol en Jueves 1 de Septiembre de 2005, 09:50
El modo no tiene ningun contenido, en info tenes las informacion sobre ese modo si la funcion te devuelve 0 en AH, si te devuelve 1 es porque hubo un error. Todo eso teniendo en cuenta que VESA esta soportado y en AL te devuelve 4Fh.
Si todo va bien en ES:DI vas a tener los datos sobre el modo, que podes ver en este pagina http://www.opferman.net/Text/svga.txt (http://www.opferman.net/Text/svga.txt) son algo asi:
/* VESA Mode Information Structure */ typedef struct vesa_type { short ModeAttrib; char WindowA_Attrib, WindowB_Attrib; short WinGran, WinSize, SegWinA, SegWinB; long WindowPointer; short Bits_Per_Scanline, HorzRes, VertRes;
Tambien aca podes encontrar informacion al respecto: http://www.ctyme.com/intr/rb-0274.htm (http://www.ctyme.com/intr/rb-0274.htm)
Probablemente tu problema sea que no estas configurando bien el registro ES, ¿tu programa es un EXE?
Si lo que queres es obtener el modo actual aca tenes como hacerlo: http://www.ctyme.com/intr/rb-0276.htm (http://www.ctyme.com/intr/rb-0276.htm)
:smartass: :devil: :comp: :ph34r:
Título: Re: Asm En C++
Publicado por: mansonet en Jueves 1 de Septiembre de 2005, 17:23
La idea era poder pasarle a la funcion GetVesaModeInfo por medio del puntero "modo" el modo del video que quiero sacar la informacion que se guarda en "info".... El problema es que "modo" apunta a FFFE por poner algo, que en esa parte de memoria esta guardado el primer modo de Vesa que soporta, pero al meterlo en el registro CX en vez de guardarse 101h o algun otro modo se guarda FFFE....
Gracias por la data Eternal Idol me tengo que poner a leer a ver como lo resuelvo.....
Título: Re: Asm En C++
Publicado por: Amilius en Jueves 1 de Septiembre de 2005, 17:51
Es que precisamente le dices que guarde FFFE.
Por ejemplo si quisieras guardar en edx 2 bytes apuntados por esi tendrías que usar: