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