Tutorial EMU8086
Tutorial EMU8086
Tutorial EMU8086
Al interior de la CPU
Registros de segmento
Intel usa 4 registros de segmento
CS: Segmento de cdigo, apunta al
segmento del programa actual.
DS: Segmento de datos, donde estn
las variables del porgrama.
SS: segmento de stack, donde est el
stack
ES: segmento extra, normalmente
usado para extender el rea de
datos.
Uso de registros de
segmento
Los registros de segmento trabajan en
conjunto con los registros de uso general
para acceder las direcciones de memoria,
es decir, en conjunto definen la direccin
efectiva de un acceso a memoria.
Por ejemplo, si se desea acceder al a
direccin 12345h de memoria, se puede
asignar DS=1230h y SI=0045h
La direccin efectiva se calcula segn
Dir efectiva DS*10h+SI=12345h
Puntero de instrucciones
IP es el instruction pointer, que en otras
arquitecturas se conoce como contador de
programa. Trabaja en conjunto con el
segmento de cdigo CS, para definir la
direccin de la prxima instruccin a
ejecutar, inicindose el programa desde
una direccin de origen conocida,
normalmente:
Org 100h
La direccin efectiva es : CS*10h+IP
Rango de direcciones
En una organizacin de 16 bits, las
direcciones disponibles son
216=65.536 bytes o 64Kbytes.
La multiplicacin por 10h (16) del
registro de segmento permite
alcanzar hasta 220=1.048.576 o
1Mbyte.
A inicios de la dcada de 1980 esa
capacidad de memoria RAM era
considerada infinita.
O: overflow
Direccin: datos desde o hacia memoria
Interrupt: Habilitacin de interrupciones
Trace: paso a paso por instrucciones
Sign: bit de signo
Zero: resultado 0
Aux Carry: carry de 8 bits
Parity: bit de paridad
Carry: carry de 16 bits.
[SI + d8]
[DI + d8]
[BP + d8]
[BX + d8]
[BX + DI + d8]
[BP + SI + d8]
[BP + DI + d8]
[SI + d16]
[DI + d16]
[BP + d16]
[BX + d16]
Ejemplos de direcciones
efectivas
Sea DS=100, BX=30, SI=70
La direccin efectiva de
[BX+SI]+25 es:
100*16+30+70+25=1725
Ntese que son datos decimales.
Sea DS=0F400h, DI=00A1h
[DI]+0E1h=F4000+A1+E1=F4812
El desplazamiento puede ser positivo o
negativo.
Regla general de
direcciones
BX SI
BP DI
desp
Tipos de datos
El lenguaje assembler acepta tipos
de datos asociados a los tipos
nativos de la mquina.
Cuando son direcciones son
punteros.
Byte ptr [BX] puntero a 8 bits
Word ptr [BX], puntero a 16 bits.
b reemplaza a byte ptr
w reemplaza a word ptr.
Instruccin MOV
Copia el segundo operando (origen) en el primero (destino)
MOV REG, memory
MOV memory, REG
MOV REG, REG
MOV memory, immediate
MOV REG, immediate
REG:AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI,
BP, SP.
memory: [BX], [BX+SI+7], variable, etc...
immediate: 5, -24, 3Fh, 10001101b, etc...
MOV y registros de
segmento
MOV SREG, memory
MOV memory, SREG
MOV REG, SREG
MOV SREG, REG
SREG: DS, ES, SS, and only as second
operand: CS.
REG:AX, BX, CX, DX, AH, AL, BL, BH, CH, CL,
DH, DL, DI, SI, BP, SP.
memory: [BX], [BX+SI+7], variable, etc...
La instruccin MOV no modifica CS
Explicacin ejemplo
Este programa escribe el caracter A, con
fondo rojo en la direccin de memoria
B815E, que corresponde al buffer de
memoria de video.
En la direccin B851E queda la letra A:
41(ASCII)
En la direccin B851F, queda el atributo de
video en este caso color.
Ntese que la representacin es big
endian.
Uso de variables
El ensamblador permite definir
directamente variables en memoria.
El nombre se asocia a una direccin,
el tipo puede ser byte o word y el
contenido se puede defoinir segn el
tipo asociado. Si no se define el
contenido, la variable slo ocupa el
espacio de memoria.
Nombre DB valor --- DB: define Byte
Nombre DW valor --- DW define Word
ORG 100h
MOV AL, VAR1
MOV BX, VAR2
RET
VAR1 DB 7
VAR2 DW 1234H
Arreglos
Los arreglos son cadenas de variables, a
partir de una direccin de origen.
Una string es un arreglo de bytes donde
cada elemento est representado por su
cdigo ASCII
Saludo1 db 48h,65h, 6Ch, 6Fh, 00h
Saludo2 db Hello,0
Saludo1 y saludo2 son idnticos.
Saludo1[0]=48, Saludo1[1]=65,
.,Saludo1[5]=0