Programación General > ASM (Ensamblador)
Asm En C++
(1/1)
mansonet:
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
Eternal Idol:
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 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;
char Width, Height, MemPlanes,
BPP, NumBanks, MemType,
SizeBank, NumberPages, Reserved,
RedMaskSize, RedFieldPos, GreenMaskSize,
GreenFieldSize, BlueMaskSize, BlueFieldSize,
ReservedMaskSize, ReservedMaskPos,
DirectColorModeInfo, ReservedBlock[216];
} VesaInfo, *VesaInfoPtr;
Tambien aca podes encontrar informacion al respecto:
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
:smartass: :devil: :comp: :ph34r:
mansonet:
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.....
Amilius:
Es que precisamente le dices que guarde FFFE.
Por ejemplo si quisieras guardar en edx 2 bytes apuntados por esi tendrías que usar:
movzx edx, word ptr [esi]
Navegación
Ir a la versión completa