Dpto. Física y Arquitectura de Computadores Universidad Miguel Hernandez
Es el lenguaje de más bajo nivel que admite una máquina. El ensamblador hace que el código binario(máquina sea transparente al usuario) 2
Repertorio 3
Nomenclatura r1 y r2: Hacen referencia a uno de los registros A,B,C,D,E Dir: Expresa una dirección de memoria comprendida entre 0000 16 y FFFF 16 (64Kb) #n: es un número de interrupción o de puerto según la instrucción Dato: representa un valor de 8 bits, excepto para la instrucción MVI dato que son 16 bits 4
Longitud instrucción En MaNoTas podemos encontrar instrucciones de 1,2 ó 3 bytes. Para saber cuantos bytes ocupa una instrucción: Instrucción sin operandos -> 1 byte Instrucción tipo nominstruccion r1,r2 -> 1 byte Instrucción tipo nominstruccion dato,r1 -> 2 bytes (Mvi-> 3 bytes) Instrucción tipo nominstruccion #n -> 2 bytes Instrucción tipo nominstruccion dir -> 3 bytes 5
INSTRUCCIONES DE TRANSFERENCIA 6
Movimiento, carga, almacenamiento de datos: Tenemos 5 registros en MaNoTas de 8 bits sólo el registro A (Acumulador) es inmediato a operaciones de y transferencia de datos. No usaremos los registros para almacenar datos definitivos de un programa, sólo para almacenar datos temporales. 7
MOV r1, r2 (Mover) Nos permite mover contenido del registro r1 al registro r2 donde r1 y r2 pueden ser cualquiera de los 5 registros del MaNoTas. MVI dato, r1 (Mover Inmediato) Mueve un dato directamente a un registro. Aquí r1 también puede ser el registro especial de pila (SP (16 bits)) Ojo, con los tamaños de los datos y los registros. it 8
LDA dir (Cargar en A) Mueve el dato contenido en la dirección de memoria dir, al registro A STA dir (Almacenar desde A) Salva en la dirección de memoria especificada por dir, el dato contenido en A. 9
LDAX (Cargar en A desde posición exclusiva D-E) Ensamblador Mueve el contenido de memoria de la dirección especificada por la combinación de los registros D-E a A. La combinación consiste en: El byte de mayor peso de la dirección será el de D, y el byte de menor peso el de E STAX (Almacenar exclusiva) Almacena el contenido de A, en la dirección especificada por D-E 10
Empleo de la PILA Los conjuntos de datos se almacenan siempre en Memoria Estos datos se organizan de diferentes formas dependiendo de su disposición y modo de acceso. FIFO: First in First out LIFO: Last in First out (Pilas) Añadir un elemento (apilar o Push) Quitar un elemento (desapilar o Pop) Registro SP es un puntero a una Pila Cuando apilamos, se incrementa el contador de SP Cuando desapilamos se decrementa 11
PUSH r1 (Apilar) Salva en la dirección especificada por el registro SP el contenido de r1; posteriormente se incrementa SP POP r1 (Extraer) Primero decrementa SP, y copia el contenido de la memoria en r1 12
PUSHF (Apilar registro ) Similar a PUSH, pero apilamos el registro de FLAGS POPF (Desapilar FLAGS) Similar a POP, pero el dato lo metemos en el registro de FLAGS 13
del registro de Estado Ensamblador El RE es un registro especial de 8 bits, en el que se encuentran los estados de flag Z (cero), C (acarreo), O (desbordamiento) e I (interrupción) Su contenido es modificado automáticamente por la al realizar operaciones Para trabajar con este registro necesitamos instrucciones especiales. 14
LFA (Cargar el registro en A) CopiaelcontenidodeREenel de en registro A (Acumulador) SFA (Almacenar desde A) Copia el contenido de A en el registro de (RE) 15
INSTRUCCIONES 16
de la Las instrucciones aritméticas están enfocadas al cálculo aritmetico entre números. Cada vez que la realiza una operación, devuelve el resutado al Acumulador y modifica el Registro de Estado La soporta operaciones como Suma, Resta, incremento, decremento 17
ADD r1 (suma) Suma el contenido del registro A y el contenido del registro r1, llevando el resultado al registro A ADI dato (Suma con inmediato) Suma el contenido del registro A y el valor especificado en dato. El dato debe estar comprendido entre 0 y 255, ya que se trata de 8 bits 18
SUB r1 (Resta) Resta al contenido del registro A y el contenido del registro r1, llevando el resultado al registro A SUI dato (Resta con inmediato) Resta al contenido del registro A y el valor especificado en dato. El dato debe estar comprendido entre 0 y 255, ya que se trata de 8 bits 19
INR r1 (Incrementar) Incrementa el contenido el registro r1 en una unidad. DEC r1 (Decrementar) Decrementa el contenido de r1 en una unidad. 20
CMP r1 (Comparar) Realiza la resta entre A y r1, sin almacenar el resultado, de manera que si la diferencia es 0 significa que ambos registros son iguales, actualizando el Flag Z= 1 Si no son iguales, si la diferencia produjo acarreo significará que el dato de A era menor que el de r1, poniendo el Flag C=1 21
CPI dato (Comparar inmediato) Igual que COMP, pero ahora comparamos con el dato directamente. ANA r1 (And) : Operaciones lógicas Realiza el producto lógico entre A y r1, llevando el resultado a A ANI dato (And inmediato) : Operaciones logicas Realiza el producto lógico entre A y el dato especificado, llevando el resultado a A 22
ORA r1 (Operación Or) Realiza la suma exclusiva entre el contenido de A y el dato especificado, llevando el resultado al registro A. ORI dato (Or inmediato) : Operaciones lógicas Igual que ORA, pero la suma lógica se hace entre A y el dato especificado. XRA r1 (Xor) : Operaciones lógicas Realiza la suma exclusiva entre A y el contenido de r1, modificando A con el resultado. 23
XRI dato (Xor inmediato) Igual que XRA, pero ahora comparamos con el dato directamente. CMA (Complementario) : Operaciones lógicas Realiza el Complementario del contenido del registro A, guardando el resultado en A (NOT A) 24
ESTUDIAR: Ensamblador : Repasar tema 2 libro Desde 2.1 hasta 2.4 incluido Memorias Repasar Tema 5 libro Desde 5.1 hasta 5.5 incluido 25
Problema: Realizar un programa que compruebe si los números contenidos en las posiciones de memoria de la 500 16 a la 504 16 suman 100 26
Solución: ;Cargar datos LDA 500h MOV A,B LDA 501h MOV A,C LDA 502h MOV A,D LDA 503h MOV A,E LDA 504h ADD B ADD C ADD D ADD E CPI 100 JZ [1000h]; si es 100 salta a otro lugar JMP [FFFFh]; salta fin 27