28/09/2011 1 Contenido 2 Conjunto de instrucciones Tipos de instrucciones Modos de direccionamiento El ensamblador del Z80 El simulador AVOCET Implementación de un sistema basado en el Z80 UNIDAD 5 EL LENGUAJE DE ENSAMBLADOR DEL Z80 Otoño 2011 Microprocesadores Conjunto de Instrucciones 3 Formato de la Instrucción 4 El conjunto de instrucciones de un microprocesador determina la capacidad de su operación y el poder de su manipulación de datos y su facilidad de programación. Una instrucción es un comando al microprocesador para que desempeñe una tarea dada sobre un dato especifico y esta formada por: Código Operacional Operando Formato de la Instrucción 5 El tamaño de las instrucciones en el Z80 van de 1 a 4 bytes El opcode determina cual es la operación que se va a realizar y esta incluido en el primer byte de la instrucción. Algunos opcode especializados se encuentran en dos bytes Instrucciones de 1 byte 6 El operando puede ser especificado de varias formas: Datos de 8 bits Datos de 16 bits Registros Par de registros Dirección de I/O Dirección de Memoria Las instrucciones son clasificadas en 4 grupos de acuerdo a su longitud El opcode y los operandos son especificados en el mismo byte Opcode Operandos Codigo Binario LD A, B 01 111 000 (78H) Tarea Copiar el contenido del registro B en el Acumulador El código operacional es especificado en los primeros dos bits 01 El registro A es representado por el código 111 El registro B es representado por el código 000 1 28/09/2011 Instrucciones de 2 bytes Instrucciones de 3 bytes 7 8 En una instrucción de 2 bytes, el primer byte especifica el opcode y el segundo byte el operando Opcode Operandos Codigo Binario LD B, 32H 0000 0110 (06H) Tarea Copiar el numero 32H en el registro B 0011 0010 (32H) El primer byte corresponde al opcode Los siguientes 2 bytes corresponden a una dirección o dato de 16 bits en orden inverso El primer byte corresponde a la parte baja del numero El segundo byte corresponde a la parte alta del numero Opcode Operandos Codigo Binario LD BC, 2080H 0000 0001 (01H) 1000 0000 (80H) El opcode para LD B es 06H 0010 0000 (20H) Instrucciones de 4 bytes Tarea Copiar el numero 2080H en el registro BC Conjunto de instrucciones 9 10 Las instrucciones anteriores son compatibles con el 8085 (244 opcodes) Para incluir una mayor funcionalidad se diseñaron instrucciones especiales con opcodes de 2 bytes Estas instrucciones son generalmente asociadas a los registros índice Opcode Operandos Codigo Binario LD IX, 2000H 1101 1101 (DDH) 0010 0001 (21H) 0000 0000 (00H) El conjunto de instrucciones se clasifican en 6 categorías Transferencia de Datos Aritméticas Operaciones Lógicas Manipulación de bits Operaciones de Decisión Operaciones de Control de Maquina Operaciones Tarea Copiar la dirección 2000H en el registro índice IX 0010 0000 (20H) Transferencia de datos Transferencia de datos 11 12 Estas instrucciones copian los datos de una locación llamada fuente hacia otra llamada destino Operaciones Ejemplos • Transfiere datos de un registro hacia otro registro • Transfiere un byte hacia un registro o una localidad LD B,32H de memoria • Transfiere datos de 16 bits hacia un par de registros • Transfiere datos de una localidad de memoria hacia un registro o viceversa Operaciones • • LD A,B • Transfiere datos de un puerto de entrada hacia el acumulador Transfiere datos del acumulador hacia el puerto de salida Transfiere datos de los registros del MPU hacia el STACK y viceversa Ejemplos IN A,(01H) OUT (01H),A PUSH BC POP BC LD HL,2050H LD A,(2080H) • Intercambio de contenido de los registros de propósito general BC, DE, HL con los registros alternativos EXX LD (2080H),A 2 28/09/2011 Transferencia de datos 13 Operaciones Aritméticas 14 La instrucción de transferencia de datos el destino es especificado primero y después la fuente. LD destino, fuente Las direcciones de memoria o dispositivos de entrada y salida se especifican entre paréntesis En algunas operaciones los operandos son implícitos como en el caso de EXX Las instrucciones de transferencia de datos no afectan las banderas Suma Resta Incremento/Decremento Complemento a 1’s y a 2’s Suma Resta 15 16 Esta operación se realiza usando el acumulador como uno de los operandos, el otro operando puede ser: Cualquier número de 8 bits El contenido de un registro El contenido de una localidad de memoria Los siguientes operandos pueden ser restados del contenido del acumulador Numero Contenido de 8 bits SUB 95H de un registro SUB C Contenido de una localidad de memoria SUB (HL) Las banderas son modificadas de acuerdo al resultado de la operación ADD A,B ADD A,97H ADD A,(HL) Incremento/Decremento 17 La resta se realiza en complemento a 2’s y el resultado se almacena en el acumulador El resultado afecta las banderas El acumulador es un operando implícito Complemento a 1’s y a 2’s 18 El contenido de un registro de 8 bits o localidad de memoria es incrementada o decrementada por uno El contenido de un registro de 16 bits puede ser incrementado o decrementado por uno Solo la operación de 8 bits afecta las banderas Ejemplo INC B DEC BC El contenido del acumulador puede ser complementado y el resultado almacenado en el acumulador Estas instrucciones asumen que el operando es el acumulador Estas instrucciones afectan algunas banderas Tarea CPL Complementa el contenido del acumulador (Complemento a 1) NEG Resta el contenido del acumulador de cero (Complemento a 2) 3 28/09/2011 Ejemplo Operaciones Logicas 19 20 LD A,53H LD B,F5H ADD A,B 53H + F5H 1 48H A 53H F X B X C X A 53H F X B F5H C X A 48H F C=1, Z=0 B F5H C X Funciones lógicas Shift y Rotaciones 01010011 + 11110101 1 01001000 Comparaciones Funciones Lógicas Shift y Rotación 21 22 Los operandos para estas funciones pueden ser un numero de 8 bits, el contenido de un registro o locación de memoria Tarea AND B Aplicar la operación AND a cada bit del registro B con los bits del acumulador OR 32H Aplicar la operación OR a cada bit del numero 32H con los bits del acumulador XOR (HL) Aplicar la operación XOR a cada bit del numero contenido en la localidad apuntada por HL con los bits del acumulador RLCA: Rota el acumulador a la izquierda. El carry es afectado por D7 C D7 D6 D5 D4 D3 D2 D1 D0 RLA: Rota el acumulador a la izquierda a través del carry C D7 D6 D5 D4 D3 D2 D1 D0 RRCA: Rota el acumulador a la derecha. El carry es afectado por D0 C D7 D6 D5 D4 D3 D2 D1 D0 RRA: Rota el acumulador a la derecha a través del carry C D7 D6 D5 D4 D3 D2 D1 D0 Shift y Rotación Shift y Rotación 23 24 Opcode SLA: Recorre los bits del registro hacia la izquierda a través del carry. Introduce ceros en el bit D0 SRL: Recorre los bits del registro hacia la derecha a través del carry. Introduce ceros en el bit D7 C D7 C D6 D7 D5 D6 D4 D5 D3 D4 D2 D3 D1 D2 0 D0 D1 D0 Operando Descripción RLC Reg o Memoria Rota a la izquierda los bits del registro o memoria RL Reg o Memoria RRC Reg o Memoria Rota a la derecha los bits del registro o memoria RR Reg o Memoria SLA Recorre los bits del registro o memoria a la Reg o Memoria izquierda a través del carry e inserta 0 en la posición D0 SRL Recorre los bits del registro o memoria a la Reg o Memoria derecha a través del carry e inserta 0 en la posición D7 0 Rota a la izquierda los bits del registro o memoria a través del carry. Rota a la derecha los bits del registro o memoria a través del carry. 4 28/09/2011 Comparaciones Comparaciones 25 26 El contenido del acumulador es comparado con Un numero Contenido de un registro Contenido de una localidad de memoria CP 97H CP B CP (HL) Cuando el operando es una localidad de memoria se especifica por medio El resultado de la comparación se indica con la bandera adecuada Esta instrucción realiza la comparación por medio de substraer el operando del acumulador Prueba por menor que, igual y mayor que El contenido de un registro Usando un registro índice mas un offset CP (IX + 02H) Manipulación de bits Condición A < operando A = operando A > operando Banderas Carry Cero 1 0 0 1 0 0 Comprobación de bits 27 28 Comprobación de bits Cualquiera de los 8 bits de un registro, acumulador o localidad de memoria puede ser verificada La bandera Z se modificara de acuerdo al valor del bit que se desea verificar Ejemplo Verifique Bit set/Reset BIT Set y Reset el bit 7 del registro B 7,B Decisión 29 30 Cualquiera de los 8 bits de un registro, acumulador o localidad de memoria puede ser puesto a uno o cero Ejemplo Antes de la operación B = 00110111 B = 11110000 Operacion SET 7,B RESET 5,B Después de la operación B = 10110111 B = 11010000 Este grupo de instrucciones pueden alterar la secuencia de ejecución del programa de forma Condicional Incondicional Saltos Llamada a subrutina Reinicio 5 28/09/2011 Saltos Llamada a subrutina 31 32 Existen saltos condicionales e incondicionales Si el salto es condicional, entonces el procesador verifica las banderas especificadas y si la condición es verdadera, la secuencia de instrucciones es alterada La locación destino puede ser especificada directamente o relativa al PC Ejemplo JP Estas instrucciones alteran la secuencia del programa por Llamado Regreso CALL Reinicio CALL RET El regreso o llamado condicional de subrutina verifica las banderas adecuadas Ejemplo CALL C,2050H a subrutina de una subrutina 2050H Z,2050H Control de Maquina 33 34 Esta instrucción cambia la secuencia del programa a una de 8 locaciones de reinicio localizadas en la pagina 00. Esta instrucción generalmente se usa con las interrupciones Ejemplo RST 28H Deshabilitar las interrupciones poniendo a cero los flip-flops que habilitan las interrupciones DI La dirección de reinicio es 0028H Modos de Direccionamiento 35 Suspender la ejecución de la instrucción HALT Estas instrucciones controla la operación del microcontrolador, tales como Modos de Direccionamiento 36 Modo Explicación Inmediato El byte que sigue después del opcode LD B,97H es el operando Ejemplo Modo Explicación Ejemplo Registro Indirecto Este modo se usa para transferir datos entre el MPU y la memoria. El registro se utiliza como un apuntador a la memoria Inmediato Extendido Los 2 siguientes bytes después del opcode son el operando LD B,(HL) Registro El registro que se usa como operando LD B,A esta incluido en el opcode Extendido JP 2080H El opcode contiene el operando de forma implícita. Algunas operaciones aritméticas y lógicas usan el acumulador como un operando implícito Los dos bytes seguidos del opcode indican un salto a la locación de memoria especificada Implicito Relativo JR 14H El segundo byte indica el valor del Salta 20 locaciones desplazamiento en complemento a 2’s después de la para una locación de salto siguiente instrucción LD BC,8045H AND B 6 28/09/2011 Modos de Direccionamiento 37 Programa Ilustrativo 38 Modo Explicación Indexado El byte después del opcode especifica el valor de desplazamiento INC (IX+10H) que se suma al registro índice para indicar una locación de memoria Bit Este modo es usado para la manipulación de bits. En este modo se SET 7,B indica un bit de un registro o una locación de memoria Se incluyen 8 posibles direcciones de reinicio en la pagina cero. En este modo se especifica la parte baja de la dirección de memoria y la parte alta se asume que es 00H Pagina Cero Ejemplo RST 28H Sección de definiciones PORT1 Punto de inicio START: ORG 1800H ; La dirección de inicio del programa es 1800H EQU 01H ; Dirección del puerto de salida LD B,32H ;Copia 32H en el registro B LD C,0A2H ;Carga el segundo byte a ser sumado LD A,C ; Copia uno de los operandos al acumulador ADD A,B ;Despliega el resultado OUT (PORT1),A ;Despliega el resultado Detenemos la ejecución HALT Fin del programa Programa Ilustrativo 39 Suma dos números hexadecimales y despliega el resultado END ;Fin del programa ; Fin del ensamblador Estructura de un programa 40 ORG indica la dirección en la cual se va a almacenar el programa EQU directiva al compilador para definir constantes PORT1 MAX Declaración de Constantes y definiciones Rutina de Inicio EQU 01H EQU 10H Subrutinas de Reinicio Etiquetas Cuerpo del programa principal Se utilizan para marcar puntos en el programa para ser usados en los saltos y llamados a subrutinas Subrutinas END marca el fin del programa en ensamblador Transferencia de datos 41 Transferencia de datos 42 Instrucción Bytes Descripción LD (HL), R 1 El registro HL es usado como un apuntador a la memoria. El contenido del registro es copiado a la locacion de memoria apuntada por HL LD (HL), 8-bit 2 El numero de 8 bit es copiado a la locacion de memoria apuntada por HL LD A, (RP) 1 LD (RP), A 1 LD A,(16-bits) 3 LD (16-bits),A 3 El contenido del registro de propósito general es transferido al acumulador. El apuntador a memoria puede ser el registro BC o DE. La transferencia de datos empleando estos registros solo puede ser realizada al acumulador La dirección de memoria se especifica como el operando de 16 bits, y solo se puede hacer la transferencia de datos hacia o desde el acumulador. Las banderas no son afectadas por esta instrucción Las instrucciones relacionadas a la memoria son identificadas por los paréntesis El registro HL es un apuntador a memoria versátil que puede ser usado para transferir datos de memoria hacia cualquier registro de propósito general Los registros BC, DE y el direccionamiento inmediato solo pueden ser usados con el acumulador 7 28/09/2011 Transferencia de Datos Transferencia de datos 43 44 Ejemplo locación de memoria 2050H contiene el byte 37H Usando los diferentes modos de direccionamiento, transfiere el byte 37H al registro B Direccionamiento Extendido La Código Instrucción 3A 50 Direccionamiento Indirecto usando HL 21 A LD HL,2050H 50 20 46 LD 20 47 Código Instrucción B C E 20H LD B,A A B 37H 37H F C D E H L 2050H 37 H F 37H D H B,(HL) LD A,(2050H) 50H 2050H 37 H L Ejercicio Solucion 45 46 La localidad de memoria 2040H contiene el dato F2H Transfiere el dato hacia la localidad 2070H Limpia la localidad de memoria 2040H al terminar la transferencia Escribe el programa que realice las operaciones anteriormente descritas HEX 21 OPCODE Operando Comentario LD HL,2040H ; Coloca el apuntador HL a la dirección fuente LD BC,2070H ;Coloca el apuntador BC a la dirección destino 40 20 01 70 20 7E LD A,(HL) ;Transfiere el dato hacia el acumulador 02 LD (BC),A ;Copia el dato en la dirección destino 36 LD (HL),00 ;Limpia la locación de memoria 2040H 00 76 47 Transferencia de datos hacia dispositivos I/O Instrucción Bytes Ejemplo A,(8-bits) 2 IN A,(01H) OUT A,(8-bits) 2 OUT (01H),A IN HALT ;Detiene la ejecución del programa Ejemplo 48 Descripción Lee datos del puerto de entrada y los almacena en el acumulador Escribe datos a un puerto de salida del acumulador Las banderas no son afectadas por la ejecución de estas instrucciones Las direcciones de los puertos de entrada y salida están compuestas por 8 bits y deben estar escritas entre paréntesis. 8 28/09/2011 Ejemplo Operaciones Aritméticas 49 50 Lee los switches conectados al puerto 01H Despliega la lectura en los leds conectados al puerto 07H. Almacena la lectura en la direccion 2060H OPCODE OPERANDO COMENTARIO IN A,(01H) ; Lee los switches de entrada OUT (07H),A ; Despliega la lectura de los switches en el puerto de salida (2060H),A ; Almacena la lectura en memoria LD La suma y resta comparten las siguientes características Asumen que uno de los operandos es el acumulador todas las banderas de acuerdo al resultado de la operación El resultado es almacenado en el acumulador No afectan el contenido del operando, solo del acumulador. Modifican HALT Operaciones Aritméticas 51 Operaciones Aritméticas 52 OPCODE OPERANDO BYTES DESCRIPCION ADD A, r 1 Suma el contenido del registro r al acumulador y el resultado es almacenado en el acumulador ADD A, 8-bit 2 Suma el dato de 8 bits al contenido del acumulador ADD A, (HL) 1 Suma el contenido de la locación de memoria apuntada por HL al contenido del acumulador SUB R 1 Resta el contenido del registro r del acumulador y el resultado es almacenado en el acumulador SUB 8-bit 2 Resta el dato de 8 bits del contenido del acumulador SUB (HL) 1 Resta el contenido de la locación de memoria apuntada por HL del contenido del acumulador El operando puede ser un registro, un numero de 8-bits o un dirección de memoria Si el operando es de 8-bits, el resultado de estas operaciones afecta todas las banderas excepto la del carry Si el operando es de 16-bits, ninguna bandera es afectada. Esto es importante tomarlo en cuenta cuando se usan como contadores de 16-bits El resultado es almacenado en mismo operando Operaciones Aritméticas 53 El incremento y decremento comparten las siguientes características Operaciones Aritméticas 54 OPCODE OPERANDO BYTES DESCRIPCION El acumulador es el operando implicito para los complemento a 1’s y a 2’s El resultado es almacenado en el acumulador INC r 1 Incrementa el contenido del registro r INC (HL) 1 Incrementa el contenido de la localidad de memoria apuntada por el registro HL INC rp 1 Incrementa el contenido del par de registros. El par de registros puede ser BC, DE, HL y SP OPCODE OPERANDO DEC r 1 Decrementa el contenido del registro r DEC (HL) 1 Decrementa el contenido de la localidad de memoria apuntada por el registro HL DEC rp 1 Decrementa el contenido del par de registros. El par de registros puede ser BC, DE, HL y SP BYTES DESCRIPCION CPL 1 Invierte cada bit del acumulador. Esta operación equivale a la función NOT. Solo las banderas H y N son afectadas NEG 1 Substrae el contenido del acumulador de 00. Esto es equivalente a realizar el complemento a 2’s del contenido del acumulador. Esta operación afecta todas las banderas 9 28/09/2011 Ejercicio 55 Cargue el numero F2H y 68H en los registros B y C respectivamente Almacene A2H en la locación de memoria 2065H Reste el 68H de F2H Complemente a 1’s el resultado Sume A2H desde la memoria Almacene la repuesta final en la locación de memoria 2066H Determine el estado del signo (S), cero (Z) y el Carry (C) 10