EC2721 - Nivel ISA - HC08
Transcription
EC2721 - Nivel ISA - HC08
Nivel ISA Agenda • Solución de ejercicios propuestos (Nivel ISA) • HC08 – Características del CPU – Registros – Conjunto de instrucciones – Herramientas de desarrollo • Próxima clase Solución de ejercicios NIVEL ISA Ejercicios • Teniendo el conjunto de instrucciones ISA (adjunto) responda: – ¿Cuáles son los registros (nivel ISA) que se pueden usar? – ¿Se puede decir algo acerca de la memoria? • Tamaño (bytes) • Palabras (bits) • Lectura, escritura – Dé una traducción (a nivel ISA) de los siguientes enunciados i = 0; do{ i++; } while(i < 100); i = 0; j = 0; for(i=0;i<100;i++) j++; i = 99; while(i < 0) i--; Teniendo el conjunto de instrucciones ISA: Mathematical Operations CLRA Clear A CLRX Clear X CLRH Clear H COMA 1's Complement A COMX 1's Complement X DAA Decimal Adjust A DECA Decrement A DECX Decrement X INCA Increment A INCX Increment X NEGA 2's Complement A NEGX 2's Complement X NSA Nibble Swap A TSTA Test A TSTX Test X Memory-Accumulator Operations ADC Add with Carry to A ADD Add Memory to A AND AND A with Memory BIT Bit Test A with Memory CMP Compare A with Memory CPHXCompare H:X with 16 bits in Memory CPX Compare X with Memory EOR Exclusive OR A with Memory LDA Load Accumulator A with Memory LDHXLoad Index Register H:X with 16 bits LDX Load Index Register X with 8 bits ORA OR Accumulator A SBC Subtract with Carry from A STA Store Accumulator A STHX Store H:X to Memory STX Store Index Register X SUB Subtract Memory from A Compare and Branch if Equal CBEQA #imm,rel Branch if A = imm CBEQX #imm,rel Branch if X = imm CBEQ dir,rel Branch if A = byte at direct location CBEQ X+,rel Branch if A = byte at H:X, post increment H:X CBEQ disp,X+,rel Branch if A = byte at (H:X + disp), post increment H:X CBEQ disp,SP,rel Branch if A = byte at (SP + disp) Memory-Only Operations ASL Arithmetic Shift Left ASR Arithmetic Shift Right CLR Clear Memory COM 1's Complement DEC Decrement Memory INC Increment Memory LSL Logical Shift Left (same as ASL) LSR Logical Shift Right MOV Move from Memory to Memory NEG 2's Complement ROL Rotate Left ROR Rotate Right TST Test for zero or minus Branching - Unsigned Arithmetic BHI Branch if Higher BHS Branch if Higher or Same (same as BCC) BLO Branch if Lower (same as BCS) BLS Branch if Lower or Same Branching - 2's Complement Signed Arithmetic BGE Branch if Greater than or Equal to zero BGT Branch if Greater Than zero BLE Branch if Less than or Equal to zero BLT Branch if Less Than zero ¿Cuáles son los registros (nivel ISA) que se pueden usar? Mathematical Operations CLRA Clear A CLRX Clear X CLRH Clear H COMA 1's Complement A COMX 1's Complement X DAA Decimal Adjust A DECA Decrement A DECX Decrement X INCA Increment A INCX Increment X NEGA 2's Complement A NEGX 2's Complement X NSA Nibble Swap A TSTA Test A TSTX Test X Memory-Accumulator Operations ADC Add with Carry to A ADD Add Memory to A AND AND A with Memory BIT Bit Test A with Memory CMP Compare A with Memory CPHXCompare H:X with 16 bits in Memory CPX Compare X with Memory EOR Exclusive OR A with Memory LDA Load Accumulator A with Memory LDHXLoad Index Register H:X with 16 bits LDX Load Index Register X with 8 bits ORA OR Accumulator A SBC Subtract with Carry from A STA Store Accumulator A STHX Store H:X to Memory STX Store Index Register X SUB Subtract Memory from A Compare and Branch if Equal CBEQA #imm,rel Branch if A = imm CBEQX #imm,rel Branch if X = imm CBEQ dir,rel Branch if A = byte at direct location CBEQ X+,rel Branch if A = byte at H:X, post increment H:X CBEQ disp,X+,rel Branch if A = byte at (H:X + disp), post increment H:X CBEQ disp,SP,rel Branch if A = byte at (SP + disp) Memory-Only Operations ASL Arithmetic Shift Left ASR Arithmetic Shift Right CLR Clear Memory COM 1's Complement DEC Decrement Memory INC Increment Memory LSL Logical Shift Left (same as ASL) LSR Logical Shift Right MOV Move from Memory to Memory NEG 2's Complement ROL Rotate Left ROR Rotate Right TST Test for zero or minus Branching - Unsigned Arithmetic BHI Branch if Higher BHS Branch if Higher or Same (same as BCC) BLO Branch if Lower (same as BCS) BLS Branch if Lower or Same Branching - 2's Complement Signed Arithmetic BGE Branch if Greater than or Equal to zero BGT Branch if Greater Than zero BLE Branch if Less than or Equal to zero BLT Branch if Less Than zero ¿Se puede decir algo acerca de la memoria? (tamaño, palabras, lectura, escritura) Mathematical Operations CLRA Clear A CLRX Clear X CLRH Clear H COMA 1's Complement A COMX 1's Complement X DAA Decimal Adjust A DECA Decrement A DECX Decrement X INCA Increment A INCX Increment X NEGA 2's Complement A NEGX 2's Complement X NSA Nibble Swap A TSTA Test A TSTX Test X Memory-Accumulator Operations ADC Add with Carry to A ADD Add Memory to A AND AND A with Memory BIT Bit Test A with Memory CMP Compare A with Memory CPHXCompare H:X with 16 bits in Memory CPX Compare X with Memory EOR Exclusive OR A with Memory LDA Load Accumulator A with Memory LDHXLoad Index Register H:X with 16 bits LDX Load Index Register X with 8 bits ORA OR Accumulator A SBC Subtract with Carry from A STA Store Accumulator A STHX Store H:X to Memory STX Store Index Register X SUB Subtract Memory from A Compare and Branch if Equal CBEQA #imm,rel Branch if A = imm CBEQX #imm,rel Branch if X = imm CBEQ dir,rel Branch if A = byte at direct location CBEQ X+,rel Branch if A = byte at H:X, post increment H:X CBEQ disp,X+,rel Branch if A = byte at (H:X + disp), post increment H:X CBEQ disp,SP,rel Branch if A = byte at (SP + disp) Memory-Only Operations ASL Arithmetic Shift Left ASR Arithmetic Shift Right CLR Clear Memory COM 1's Complement DEC Decrement Memory INC Increment Memory LSL Logical Shift Left (same as ASL) LSR Logical Shift Right MOV Move from Memory to Memory NEG 2's Complement ROL Rotate Left ROR Rotate Right TST Test for zero or minus Branching - Unsigned Arithmetic BHI Branch if Higher BHS Branch if Higher or Same (same as BCC) BLO Branch if Lower (same as BCS) BLS Branch if Lower or Same Branching - 2's Complement Signed Arithmetic BGE Branch if Greater than or Equal to zero BGT Branch if Greater Than zero BLE Branch if Less than or Equal to zero BLT Branch if Less Than zero Dé una traducción (a nivel ISA) de los siguientes enunciados i = 0; do{ i++; } while(i< 100); i = 0; j = 0; for(i=0;i<100;i++) j++; Compilador Compilador CLR i do: INC i LDA i CBEQA #100, do CLR i CLR j CLR i for: INC j LDA i CBEQA #100, for Descompilador i = 0; do{ i++; } while(i == 100); i = 0; Descompilador j = 0; for(i=0;i==100;i++) j++; i = 99; while(i < 0) i--; Compilador ¿cargar valor en i? while: CBEQA #0, end DEC i LDA i ¿ir a while? end: Descompilador Caso de uso 1 Descompilador [1] CLR j CLR i for: INC j LDA i CBEQA #100, for [1] http://es.wikipedia.org/wiki/Descompilador Animación Flash (SWF) Caso de uso 2 Decompiler Editor Flash (FLA) CPU, Características principales, Registros, Conjunto de instrucciones • Compatible con la familia HC05 • Apuntador de pila de 16bit con instrucciones para su manipulación • Registro de índice de 16 bits con instrucciones para su manipulación • Frecuencia interna de 8 MHz • Espacio de memoria de 64KBytes (programa y datos) • 16 modos de direccionamiento • Movimientos de memoria a memoria sin usar registros adicionales • Multiplicación y división (8 por 8 bits y 16 entre 8 bits respectivamente SP [0, 15] H:X [0, 15] … … … … Reloj 8MHz 64KB Características del CPU Registros del CPU 7 0 Acumulador (A) 8 7 0 Índice (H:X) 15 0 Apuntador a la pila (SP) 15 0 Apuntador de programa (PC) V 1 1 H I N Z C Código de condiciones (CCR) 15 Llevar/prestar Cero Negativo Interrupción Medio llevar Desbordamiento complemento a dos Banderas 7 0 Acumulador (A) • Registro de propósito general • Almacena operandos y resultados de la ULA (similar al registro H en Mic1) Camino de datos Mic1 15 8 7 0 • Permite acceder 64KB de memoria • Puede servir como un registro de almacenamiento temporal Índice (H:X) … … … … 0xFFFF … 0x0000 15 0 Apuntador a la pila (SP) • Contiene la dirección de la próxima palabra en la pila • Al reiniciar se modifica a 0x00FF • Decrementa cuando se meten SP [0,SP+1 15] palabras e incrementa cuando SP-1 se sacan • Solo puede apuntar a las direcciones entre 0x0000 y 0x00FF … … … … 0x00FF … … … … … 0x0000 15 0 Apuntador de programa (PC) • Contiene la dirección de la próxima instrucción u operando • Normalmente incrementa cuando se obtiene un nuevo código de operación u operando • Al reiniciar se modifica con el valor de la memoria en la dirección 0xFFFF:0xFFFE PC+1 PC … … … … 0xFFFF … 0x0000 V 1 1 H I N Z C Código de condiciones (CCR) • Contiene – Mascara de interrupción – 5 banderas que indican el resultado de la ultima instrucción V Desbordamiento al calcular el complemento a dos H Desbordamiento en los bits 3 y 4 al realizar sumas (BCD: binary-code decimal) I Mascara de interrupciones (permite habilitar/deshabilitar interrupciones) N Cuando una operación aritmética, lógica o manipulación de datos da negativo Z Cuando una operación aritmética, lógica o manipulación de datos resulta cero C Desbordamiento en el bit 7 con sumas o prestamos con una resta Set de instrucciones [1] V1 1H I NZC [1] CPU08 Central Processor Unit • • • • • • • • • • • Inherente Inmediato Directo Extendido Indexado, no offset Indexado, 8-bit de offset Indexado, 16-bit offset Apuntador de pila, 8-bit de offset Apuntador de pila, 16-bit de offset Relativo Memoria a memoria (cuatro modos): – – – – • • Inmediato a directo Directo a directo Indexado a directo con post incremento Directo a indexado con post incremento Indexado con post incremento Indexado, 8-bit de offset con post incremento SP [0, 15] H:X [0, 15] … … … … 64KB Modos de direccionamiento Detalles de los ciclos d duplicado del ciclo anterior p, r, o s. d siempre es un ciclo de lectura. sd es una escritura a la pila seguido de una lectura apuntada por el nuevo valor del SP p búsqueda del programa r lectura de operando de 8-bits s mete (escribe) una palabra de 8 bits en la pila u saca (lee) una palabra en la pila v lee un vector desde 0xFFXX (byte alto primero) w escritura de operando de 8-bits Laboratorio PRÓXIMA CLASE Laboratorio • Herramientas para HC08 – Edición – Ensamblaje – Compilación – Simulación • Modos de direccionamiento CodeWarrior Freescale Herramientas HC08 WinIDE Pemicro Otras CodeWarrior HC08, Ensamblador, Simulador, Compilador CodeWarrior for Microcontrollers (RS08/HC(S)08/ColdFire V1) Fuente (marzo 2010): http://www.freescale.com/webapp/sps/site/prod_summary.jsp?code=CWMICROCONTROLLERS&tid=CWH Características de la versión gratuita #include <stdio.h> main() { for(;;) { printf ("Hello World!\n"); } } … bset mov ldx lda sta … BIT0,track #TOE+$30+PRESCLR,TSC #TSC0+CHOFFSET #CHIE+MOD+EDG+TOV ,x Nivel ISA Limitado Ilimitado Instalador (32 bits) WinIDE Simulador, Ensamblador, Programador PE micro Fuente (marzo 2010): http://www.pemicro.com/support/downloads_find.cfm Descargas GP32 en PE micro Registro para descargar Instalador (32 bits) Mas información acerca de HC08