Story Transcript
Electrónica Industrial, 4º ETSII
8.4. El software en los μprocesadores • Ejemplo de comandos de la CPU: – Tarea: • Sumar dos números A y B. • Suponer los datos A y B almacenados en las posiciones 10002 y 10102 respectivamente. • El resultado debe almacenarse InC: en C (posición 11002). main(){ ……. C = A + B; }
• Nota: “C” No es un lenguaje binario! • ¿ Como lo entiende la máquina ? – Es convertido a binario por dos programas: • El COMPILADOR (“cc”) y el ENSAMBLADOR (“as”).
ULPGC
Introducción al Lenguaje Ensamblador
1
8.4.1. Ensamblador: Principales características • Sabemos que la máquina entiende los siguientes comandos, denominados instrucciones. • 000000002 Sumar el contenido de dos registros (Add). • 000000102 Sumar el contenido del acumulador con el contenido de una posición de memoria (Add). • 000001012 Idem pero restando los operandos (Substract) (Load Acumulator). • 001000112 Cargar un registro desde memoria (Store Acumulator). • 001010112 Almacenar un registro en memoria Estas codificaciones Estas codificaciones corresponden a los “OpCodes”. corresponden a los Nemónicos.
• Algunas características comunes: – La mayoría de las instrucciones poseen 1, 2 ó 3 operandos. – Los registros son elementos internos de almacenamiento temporal. – Las instrucciones que trabajan con registros llevan menos tiempo de ejecución. ULPGC
®«Valentín de Armas»
Introducción al Lenguaje Ensamblador
2
1
Electrónica Industrial, 4º ETSII
8.4.1. Ensamblador: Ensamblado de un programa Instrucciones en Lenguaje Máquina 00100011 00000000 00010000 00000010 00010000 00010000 00101011 00000000 00010001
Comentarios Cargar el acumulador con el dato (0010H). Sumar el cont. del acumulador con el dato (1010H). Almacenar el cont. del acumulador en la pos. 0011H.
• ¿ Qué es más fácil de entender, el lenguaje máquina o los comentarios?. Los comentarios!. – Utilización de un lenguaje intermedio que se asemeja a los comentarios, denominado Lenguaje Ensamblador.
Programa fuente LDA 1000H ADD 1010H STA 1100H
Programa Ensamblador
Lenguaje Ensamblador
Programa Traductor
ULPGC
Programa objeto 00100011 00000000 00010000 00000010 00010000 00010000 00101011 00000000 00010001 Lenguaje Máquina
Introducción al Lenguaje Ensamblador
3
8.4.1. Ensamblador: Programas ensambladores • Programa ensamblador: – Realiza el ensamblado línea a línea del programa fuente editado. – Guarda una estrecha relación con la estructura de la máquina. – Todo programa ensamblador está asociado a un lenguaje ensamblador propio. – Da la posibilidad de utilizar etiquetas, pseudoinstrucciones y directivas, con la finalidad de facilitar la fase de programación. • Etiquetas: Es un nombre simbólico que se puede utilizar en sustitución de la dirección que le corresponde. • Pseudoinstrucciones: Información para el programa ensamblador que éste entiende, pero que no se traducen por una instrucción de máquina. • Directivas: Son órdenes para el ensamblador cuyo vestigio desaparece totalmente en el programa traducido.
ULPGC
®«Valentín de Armas»
Introducción al Lenguaje Ensamblador
4
2
Electrónica Industrial, 4º ETSII
8.4.1. Ensamblador: Ensambladores y lenguaje ensamblador • Ejemplo de programa en ensamblador: Programa fuente en ensamblador ORG $100 FIN EQU 35H JMP INICIO CONTADOR FCB 50H INICIO LDA CONTADOR CMPA FIN END
Dirección
Programa Objeto en lenguaje máquina
0100: 0103: 0104: 0107:
00100100 00000100 00000001 01010000 00100011 00000011 00000001 00100101 00110101
• Lenguaje ensamblador: – – – –
Es propio de cada máquina. No tiene paralelismo con el lenguaje convencional. Producen programas objetos más depurados, menos extensos. Sintaxis típica de un lenguaje ensamblador: –
ULPGC
Etiqueta
Código de Operación
Operando
Comentario
Introducción al Lenguaje Ensamblador
5
8.4.2. Juego de Instrucciones I • Es el conjunto de operaciones básicas que un microprocesador es capaz de realizar. • Cada operación básica corresponde a una instrucción y, por consiguiente, a un código binario (combinación de 1s y 0s) almacenado en la memoria de programa. • El juego de instrucciones es propio de cada microprocesador y depende, en buena parte, de su arquitectura interna (operadores y registros de la unidad de proceso), siendo un reflejo de esta. • La potencia de un microprocesador se mide, en buena parte, por su juego de instrucciones. • La codificación del juego de instrucciones es propia de cada microprocesador.
ULPGC
®«Valentín de Armas»
Introducción al Lenguaje Ensamblador
6
3
Electrónica Industrial, 4º ETSII
8.4.2. Juego de Instrucciones II • Una instrucción puede ocupar una o varias posiciones de memoria. • La primera de estas posiciones de memoria contiene el campo de operación, cuyo contenido binario identifica la operación a realizar y el número de posiciones de memoria adicionales de la instrucción. También puede contener otros campos con información sobre los operandos a utilizar en la operación. • Las restantes posiciones de memoria, caso de existir, contienen información adicional sobre los operandos a utilizar en la operación. • Se llama operando fuente al que se utiliza como dato de entrada en una operación. • Se llama operando destino al que se utiliza como destinatario del resultado de una operación. • Normalmente sólo hay un operando destino. • El operando destino suele ser uno de los operandos fuente en las instrucciones en las que interviene más de un operando fuente.
ULPGC
Introducción al Lenguaje Ensamblador
7
8.4.2. Juego de Instrucciones: Directivas • Directivas más comunes: – ORG (Origin): Establece el lugar de memoria donde se alojará el programa o datos. • Ejemplo: ORG $100 Æ Indica que el programa se almacenará a partir de la dirección de memoria 0100H.
– EQU (Equal): Asigna un valor a una etiqueta. • Ejemplo: RADIO EQU $23
– END : Indica al ensamblador el final del código a ensamblar.
ULPGC
®«Valentín de Armas»
Introducción al Lenguaje Ensamblador
8
4
Electrónica Industrial, 4º ETSII
8.4.2. Juego de instrucciones: Pseudoinstrucciones • Pseudoinstrucciones más comunes: – FCB (Form Constant Byte): Guarda un byte en una posición de memoria. • Ejemplo: FCB 3, 7, $3A -> Guarda en memoria tres bytes inicializados con los valores mencionados.
– FDB (Form Double Constant Byte): Guarda dos bytes en memoria. • Ejemplo: FDB $0345, 100
– FCC (Form Constant Character String): Guarda en memoria los valores de los caracteres ASCII de una string. • Ejemplo: FCC “HOLA”
– RMB num (Rserve Memory Byte): Reserva la cantidad num de bytes en memoria. • Ejemplo: RMB 10 Introducción al Lenguaje Ensamblador
ULPGC
9
8.4.2. Juego de instrucciones: aritméticas y lógicas •
Aritméticas: Todas aquellas instrucciones que ejecutan operaciones aritméticas. Suma, Resta, Incremento, Decremento, etc … – Ejemplos:
• •
C V Z N H
* acarreo * overflow * cero * negativo * acarreo intermedio
Lógicas: Efectúan operaciones lógicas, tales como AND, OR, XOR, NAND, etc… – Ejemplos:
ULPGC
®«Valentín de Armas»
* suma binaria * resta binaria * incrementa el acumulador * incrementa el acumulador
Normalmente se refieren al acumulador, si no debería llevar el registro que afecta: ADDX Estas intrucciones afectan a los señalizadores del registro de estado. Los más importantes son: – – – – –
•
ADD SUB INC DEC
AND ORA
* AND de todos los bits * OR de todos los bits Introducción al Lenguaje Ensamblador
10
5
Electrónica Industrial, 4º ETSII
8.4.2. Juego de instrucciones: movimientos y comparaciones • De transferencia: de datos entre la CPU, Memoria y/o dispositivos de E/S. – Ejemplos: LDAA #DATO STAA MEM MOV MEM, #DATO
* carga el acumulador * Pasa el dato del acumulador a MEM * Pasa DATO a MEM
• De desplazamiento y rotación: Desplazan o rotan n veces el operando. – Ejemplos: LSR MEM_POS
A0
0
RCR MEM_PAL
A0
• De comparación: compara datos o registros con el acumulador y entre si. – Ejemplo: CMPA CMPX CBA
#DATO * compara un dato con el contenido del acumulador #DATO * compara el registro X con el acumulador * compara los acumuladores A y B
ULPGC
Introducción al Lenguaje Ensamblador
11
8.4.2. Juego de instrucciones: saltos y control • De salto: Afectan a la ejecución secuencial de las instrucciones del programa. Incluyen fundamentalmente instrucciones de salto y bifurcación, y de llamadas y retornos a subrutinas. Pueden ser condicionales o no. – Ejemplos: JMP ETIQUETA BEQ ETIQUETA BNQ ETIQUETA BGT ETIQUETA BGE ETIQUETA BLT ETIQUETA BGE ETIQUETA CALL PROC1 RET
* salto incondicional * salto si Z=1 * salto si Z=0 * salto si > 0 * salto si ≥ 0 * salto si < 0 * salto si ≤ 0
• De control: Engloban las instrucciones de petición de interrupción, para sincronización con elementos externos (coprocesador matemático), de activación de los señalizadores (flags). En general es el grupo más particular de la máquina. ULPGC
®«Valentín de Armas»
Introducción al Lenguaje Ensamblador
12
6
Electrónica Industrial, 4º ETSII
Instrucciones de salto • Instrucciones de salto (o de ruptura de secuencia): – El uso de subrutinas es una técnica muy importante en el diseño de software para sistemas con μprocesadores. – Ejemplo de programa: 0100H 0103H ...... 0120H 0123H ...... INICIO: 013AH 013DH ...... 0152H 0155H ......
...... LDA 3200H ...... ...... JMP INICIO ...... ...... STA 1000H ...... ...... CALL MULX ...... ......
1
0210H ...... MULX: 021AH 021BH 021CH ...... 0234H 0235H 0236H ......
...... ...... PUSH A ROL A ...... ...... POP A RET ...... ......
Valores del CP:
3
1
(CP)