Hola, ¿Cómo están todos? (espero que bien ), yo por mi parte me encuentro muy bien y sigo estudiando distintas rutinas de ensamblador orientadas a la programación gráfica.
En realidad el código que estoy estudiando en un Assembly inline, ósea que esta embebido en Turbo Pascal, pero igual me funciona muy bien a la hora de optimizar ciertos códigos.
Les escribo por que quería consultarles sobre una determinada rutina, la cual creo haber entendido en su mayoría:
Rutina de borrado.
La rutina de borrado lo que hace es rellenar un segmento de la memoria con un byte especificado (del 0 - 255), si rellenamos con el byte 0 y este representa el color negro 'borraremos' la pantalla con el color 0, si borramos con el byte 25 y este representa el color naranja, 'borraremos' la pantalla con el color naranja. Esta rutina también debe estar optimizada al máximo ya que se realiza muchas veces por ciclo. También se usan registros de 32 bits:
-rutina de borrado en ensamblador:
PROCEDURE Fill64k (Where:word;Col : Byte); assembler;
asm
push es
mov cx, 16000;
mov es,[where]
xor di,di
mov al,[col]
mov ah,al
mov dx, ax
db $66, $C1, $E0, $10 {shl eax, 16}
mov ax, dx
db $F3, $66, $AB {rep stosd}
pop es
End;
Lo que quiero preguntar es:
1)Por qué en la linea 11
db $66, $C1, $E0, $10 {shl eax, 16}
No coloca directamente shl eax, 16 ¿Es por que esas instrucciones no existen en el Assembly Inline de Turbo Pascal y tiene que usar los prefijos para que el procesador lo entienda?
2)En las lineas 10 y 12:
mov dx, ax
mov ax, dx
No comprendo que trabajo realizan, ¿Para que sirven?
Bueno eso es todo, muchas gracias por leer mi mensaje.
Les dejo estos sitios de interes:
geocities.com/SiliconValley/code/2632/ Programación de videojuegos en Turbo Pascal
ftp.lanet.lv/ftp/mirror/x2ftp/msdos/programming/source/00index.html Un excelente sitio con mucho código fuente