Documentos de Académico
Documentos de Profesional
Documentos de Cultura
4 registros variables: AX, BX, CX, DX cada uno de 2 bytes (word) de 0-65535,
65536 posibles valores distintos, podemos acceder al byte alto (h) o bajo (l) de
cada registro, reemplazando la X.
Por ejemplo AL puede tener un valor de 0-255. Estos registros almacenan datos
intermedios y su acceso es muy rapido, mas que accediendo a la memoria.
A
B
C
D
(Acumulador)
(Base)
(Contador)
(Dato)
15
8 7
0
------------------|
AH
|
AL
|
------------------|
BH
|
BL
|
------------------|
CH
|
CL
|
------------------|
DH
|
DL
|
-------------------
AX
BX
CX
DX
micros 8086: cada registro era de 16 bits (2 bytes), entonces 2^16 = 65536
posiciones posibles para direccionar. Para acceder a un Megabyte de memoria,
Intel junto mediante segmentos y offset 20 bits, entonces 2^20 = 1048576
posiciones posibles a direccionar, o sea un Megabyte.
Ahora 32 bits (familia 80x86): entonces tenemos 2^32 = 4 Gigabytes
aproximadamente, pero para esto, debemos trabajar en modo protegido. MS DOS
trabaja solo en modo real (registros de 16 bits). Para trabajar en modo protegido
PMODE, podemos usar los manejadores dos32, dos4gw, watcom. etc.
Trabajamos en el sistema hexadecimal, y en C lo notamos con un 0x delante del
numero hexadecimal, por ejemplo 0xFF.
La memoria de video comienza en 0xA000:0x0000, lo primero es la direccion
del segmento y lo segundo es el offset (es el puntero de donde estamos parados
dentro del segmento).
Modo Texto : comienza en el segmento 0xB800 y cada 2 bytes hace un caracter,
entonces 80x25x2 = 4000 bytes.
INTERRUPCION 0x10 : maneja la entrada y salida de pantalla, el registro AX
determina el modo , algunas placas tambien usan el BX.
ejemplo : Setear el modo 320x200x256 MCGA
AX = 0x0013
INT(0x10)
CORRIMIENTOS (SHIFT)
supongamos que tenemos:
00110101 = 2^5 + 2^4 + 2^2 + 2^0 = 32 +16 +4 +1 = 53
corrimiento hacia la izquierda (agregar ceros desde la derecha,
MODO 320X200X256
Vamos a ver como podemos optimizar los Putpixel, tal que podamos ver algo en
tiempo real.
ax,[Y];
bx,320;
bx
;
ax,[X];
di,ax ;
en ax va la coordenada Y
en bx va la ctte. 320
multiplicamos y*320 y se guarda el resultado en ax
suma X + ax
en di se guarda el resultado
Un codigo corto en ASM no quiere decir que sea rapido, esta forma de colocar un
pixel en la memoria de video es muy lenta, debido al uso del 'mul', son algo asi
como 133 ciclos de reloj. Debemos usar corrimientos.
Al usar corrimiento hacia la izquierda :
1 lugar
--> multiplico por 2
2 lugares --> multiplico por 4
3 lugares --> multiplico por 8
,,
,,
bx,[X];
dx,[Y];
bx
;
bx,dx ;
dh, dl;
;
;
dl,dl ;
bx,6 ;
;
dx,bx ;
bx
;
bx,dx ;
di,bx ;