la máquina + (m+) - blog uclmblog.uclm.es/inocentesanchez/files/2018/07/m.pdf · 2019-03-14 ·...
TRANSCRIPT
1
La Máquina + (M+)(complemento al tema 3)
2
Características
• Memoria de 64Kx8
• Direccionamientos directo, inmediato, por registro y por
pareja de registros
•Repertorio de 25 instrucciones agrupadas en los
siguientes tipos:
• Transferencia
• Aritméticas
• Lógicas
• Salto
• Manejo de flag
3
Arquitectura
4
Registros
•Acumulador de 8 bits a la entrada de la
ALU
•Registros B, C, D y E de 8 bits
•Se pueden encadenar los registros D y E
para formar uno de 16 bits
5
Memoria y direccionamiento
•Bus de direcciones, 16 bits (PC 16 bits)
o registro de direcciones concatenado
(dirH+dirL)
•Bus de datos e instrucciones , 8 bits
•Tipos de Formato de instrucción:• De 1 byte (sólo COP)
• De 2 bytes (COP e inmediato, 1 byte)
• De 3 bytes (COP y dirección, 2 bytes)
6
Repertorio de instrucciones
•Transferencia (6):• LDA, STA, LDAX, STAX, MOV, MVI
•Aritméticas (7):• ADD, ADI, INC, SUB, SUI, CMP, CPI
•Lógicas (7):• ANA, ANI, ORA, ORI, XRA, XRI, CMA
•Salto (3):• JMP, BEQ, BC
•Manejo de flag (2):• LFA, SFA
7
Repertorio detallado de instrucciones de TRANSFERENCIA
• Instrucción: LDA dir
• COP (hex): 70
• Número de bytes: 3
• Significado: carga el acumulador (AC) con el
contenido de la dirección de memoria dir
• Ejemplo: LDA 1000H
• Significado del ejemplo: carga el acumulador
con el contenido de la dirección de memoria
1000 H
8
• Instrucción: STA dir
• COP (hex): 71
• Número de bytes: 3
• Significado: almacena el contenido del AC en
la dirección de memoria dir
• Ejemplo: STA 1001H
• Significado del ejemplo: almacena el
contenido del AC en la dirección de
memoria 1001H
Repertorio detallado de instrucciones de TRANSFERENCIA
9
• Instrucción: LDAX
• COP (hex): B0
• Número de bytes: 1
• Significado: carga el acumulador con el
contenido de la dirección de 16 bits del
registro contatenado D-E
• Ejemplo: LDAX, suponiendo que D=35H y
E=87H
• Significado del ejemplo: carga el acumulador
con el contenido de la dirección 3587H
Repertorio detallado de instrucciones de TRANSFERENCIA
10
• Instrucción: STAX
• COP (hex): 90
• Número de bytes: 1
• Significado: almacena el contenido del
acumulador en la dirección de 16 bits del
registro contatenado D-E
• Ejemplo: STAX, suponiendo que D=58H y
E=ABH
• Significado del ejemplo: almacena el
contenido del AC en la dirección 58ABH
Repertorio detallado de instrucciones de TRANSFERENCIA
11
• Instrucción: MOV r1,r2
• COP (hex): De 00 a 13
• Número de bytes: 1
• Significado: mueve el contenido de un registro
r1(B,C,D,E) a otro registro r2(B,C,D,E)
• Ejemplo: MOV E,C (COP=07)
• Significado del ejemplo: mueve el contenido
del registro E al registro C
Repertorio detallado de instrucciones de TRANSFERENCIA
12
• Instrucción: MOV AC,r1
• COP (hex): De 40 a 44
• Número de bytes: 1
• Significado: mueve el contenido del AC a un
registro r1(B,C,D,E)
• Ejemplo: MOV AC,D (COP 42)
• Significado del ejemplo: mueve el contenido
del AC al registro D
Repertorio detallado de instrucciones de TRANSFERENCIA
13
• Instrucción: MVI inm,r1
• COP (hex): De 60 a 64
• Número de bytes: 2
• Significado: mueve la constante inm a un
registro r1(B,C,D,E)
• Si el destino es AC el COP es 64
• Ejemplo: MVI 4EH,D (COP 62)
• Significado del ejemplo: mueve la constante
4EH al registro D
Repertorio detallado de instrucciones de TRANSFERENCIA
14
• Instrucción: ADD r1
• COP (hex): De 30 a 33
• Número de bytes: 1
• Significado: suma el contenido del AC y el
contenido de un registro r1(B,C,D,E), dejando
el resultado en el AC
• Ejemplo: ADD C (COP 31)
• Significado del ejemplo: suma el contenido del
AC y el contenido de un registro C dejando el
resultado en el AC
Repertorio detallado de instrucciones ARITMÉTICAS
15
• Instrucción: ADI inm
• COP (hex): 65
• Número de bytes: 2
• Significado: suma el contenido del AC y la
constante inm, dejando el resultado en el AC
• Ejemplo: ADI 37H
• Significado del ejemplo: suma el contenido del
AC y la constante 37H, dejando el resultado
en el AC
Repertorio detallado de instrucciones ARITMÉTICAS
16
• Instrucción: INC r1
• COP (hex): De 2C a 2F
• Número de bytes: 1
• Significado: incrementa en una unidad el
registro r1(B,C,D,E)
• Ejemplo: INC D
• Significado del ejemplo: incrementa en una
unidad el registro D
Repertorio detallado de instrucciones ARITMÉTICAS
17
• Instrucción: INC AC
• COP (hex): 4B
• Número de bytes: 1
• Significado: incrementa en una unidad el AC
• Ejemplo: INC AC
• Significado del ejemplo: si el AC tenía
almacenado el valor 49H, pasa a valer 4AH
Repertorio detallado de instrucciones ARITMÉTICAS
18
• Instrucción: SUB r1
• COP (hex): De 18 a 1B
• Número de bytes: 1
• Significado: resta al AC el contenido del
registro r1 (B,C,D,E) dejando el resultado en
el AC
• Ejemplo: SUB B
• Significado del ejemplo: (AC)-(B) se
almacena en el AC
Repertorio detallado de instrucciones ARITMÉTICAS
19
• Instrucción: SUB AC
• COP (hex): 46
• Número de bytes: 1
• Significado: resta al AC el contenido del AC,
dejando el resultado, que es 0, en el AC
• Ejemplo: SUB AC
• Significado del ejemplo: (AC)-(AC)=0 se
almacena en el AC, poniendo FZ=1
Repertorio detallado de instrucciones ARITMÉTICAS
20
• Instrucción: SUI inm
• COP (hex): 66
• Número de bytes: 2
• Significado: resta al AC la constante inm,
dejando el resultado en el AC
• Ejemplo: SUI 43H
• Significado del ejemplo: (AC) - 43 se
almacena en el AC
Repertorio detallado de instrucciones ARITMÉTICAS
21
• Instrucción: CMP r1
• COP (hex): De 1C a 1F
• Número de bytes: 1
• Significado: compara el AC con el contenido
del registro r1 (B,C,D,E), actuando sobre FZ
• Ejemplo: CMP E
• Significado del ejemplo: si el AC y el registro
E almacenaban el mismo contenido, FZ=1. En
caso contrario FZ=0
Repertorio detallado de instrucciones ARITMÉTICAS
22
• Instrucción: CMP AC
• COP (hex): 47
• Número de bytes: 1
• Significado: compara el AC consigo mismo,
poniendo FZ=1
• Ejemplo: CMP AC
• Significado del ejemplo: obviamente fuerza
FZ=1
Repertorio detallado de instrucciones ARITMÉTICAS
23
• Instrucción: CPI inm
• COP (hex): 67
• Número de bytes: 2
• Significado: compara el AC con la constante
inm, poniendo FZ=1 si son iguales
• Ejemplo: CPI 2DH
• Significado del ejemplo: si el AC tenía
almacenado el valor 2DH, FZ=1. En caso
contrario FZ=0
Repertorio detallado de instrucciones ARITMÉTICAS
24
• Instrucción: ANA r1
• COP (hex): De 20 a 23
• Número de bytes: 1
• Significado: realiza la AND lógica, bit a bit,
entre el AC y el registro r1(B,C,D,E), dejando
el resultado en el AC
• Ejemplo: ANA B
• Significado del ejemplo: si AC=3AH y
B=24H, tras ejecutar la instrucción, AC=20H
Repertorio detallado de instrucciones LÓGICAS
25
• Instrucción: ANA AC
• COP (hex): 48
• Número de bytes: 1
• Significado: realiza la AND lógica, bit a bit,
entre el AC y el propio AC, dejando el
resultado en el AC. El AC no varía
• Ejemplo: ANA AC
• Significado del ejemplo: si AC=3AH, tras
ejecutar la instrucción, AC=3AH
Repertorio detallado de instrucciones LÓGICAS
26
• Instrucción: ANI inm
• COP (hex): 68
• Número de bytes: 2
• Significado: realiza la AND lógica, bit a bit,
entre el AC y la constante inm, dejando el
resultado en el AC.
• Ejemplo: ANI 3FH
• Significado del ejemplo: si AC=6AH, tras
ejecutar la instrucción, AC=2AH
Repertorio detallado de instrucciones LÓGICAS
27
• Instrucción: ORA r1
• COP (hex): De 24 a 27
• Número de bytes: 1
• Significado: realiza la OR lógica, bit a bit,
entre el AC y el registro r1(B,C,D,E), dejando
el resultado en el AC
• Ejemplo: ORA D
• Significado del ejemplo: si AC=38H y
D=24H, tras ejecutar la instrucción, AC=3CH
Repertorio detallado de instrucciones LÓGICAS
28
• Instrucción: ORA AC
• COP (hex): 49
• Número de bytes: 1
• Significado: realiza la OR lógica, bit a bit,
entre el AC y el propio AC, dejando el
resultado en el AC. El AC no varía
• Ejemplo: ORA AC
• Significado del ejemplo: si AC=F0H, tras
ejecutar la instrucción, AC=F0H
Repertorio detallado de instrucciones LÓGICAS
29
• Instrucción: ORI inm
• COP (hex): 69
• Número de bytes: 2
• Significado: realiza la OR lógica, bit a bit,
entre el AC y la constante inm, dejando el
resultado en el AC.
• Ejemplo: ORI 48H
• Significado del ejemplo: si AC=20H, tras
ejecutar la instrucción, AC=68H
Repertorio detallado de instrucciones LÓGICAS
30
• Instrucción: XRA r1
• COP (hex): De 28 a 2B
• Número de bytes: 1
• Significado: realiza la OR exclusiva, bit a bit,
entre el AC y el registro r1(B,C,D,E), dejando
el resultado en el AC
• Ejemplo: XRA E
• Significado del ejemplo: si AC=56H y E=48H,
tras ejecutar la instrucción, AC=1EH
Repertorio detallado de instrucciones LÓGICAS
31
• Instrucción: XRA AC
• COP (hex): 4A
• Número de bytes: 1
• Significado: realiza la OR exclusiva, bit a bit,
entre el AC y el propio AC, dejando el
resultado en el AC. El AC se pone a 0 y FZ=1
• Ejemplo: XRA AC
• Significado del ejemplo: sea cual sea el AC,
tras ejecutar la instrucción, AC=00H y FZ=1
Repertorio detallado de instrucciones LÓGICAS
32
• Instrucción: XRI inm
• COP (hex): 6A
• Número de bytes: 2
• Significado: realiza la OR exclusiva, bit a bit,
entre el AC y la constante inm, dejando el
resultado en el AC.
• Ejemplo: XRI 29H
• Significado del ejemplo: si AC=F3H, tras
ejecutar la instrucción, AC=DAH
Repertorio detallado de instrucciones LÓGICAS
33
• Instrucción: JMP dir
• COP (hex): 74
• Número de bytes: 3
• Significado: realiza el salto incondicional a la
dirección dir, poniendo dicho valor en el PC.
• Ejemplo: JMP 73A8H
• Significado del ejemplo: tras ejecutar la
instrucción, PC=73A8H, independientemente
del valor que tuviera antes
Repertorio detallado de instrucciones de SALTO
34
• Instrucción: BEQ dir
• COP (hex): 72
• Número de bytes: 3
• Significado: realiza el salto a la dirección dir,
poniendo dicho valor en el PC, sólo si FZ=1. Se
ignora en caso de que FZ=0
• Ejemplo: BEQ 31F9H
• Significado del ejemplo: si FZ=1, tras ejecutar
la instrucción, PC=31F9H, independientemente
del valor que tuviera antes
Repertorio detallado de instrucciones de SALTO
35
• Instrucción: BC dir
• COP (hex): 73
• Número de bytes: 3
• Significado: realiza el salto a la dirección dir,
poniendo dicho valor en el PC, sólo si FC=1. Se
ignora en caso de que FC=0
• Ejemplo: BC 9251H
• Significado del ejemplo: si FC=1, tras ejecutar
la instrucción, PC=9251H, independientemente
del valor que tuviera antes
Repertorio detallado de instrucciones de SALTO
36
• Instrucción: LFA
• COP (hex): 81
• Número de bytes: 1
• Significado: carga el flag FZ en la posición
más significativa del AC y el flag FC en la
posición menos significativa del AC. Los 6
bits intermedios quedan sin significado
• Ejemplo: LFA , siendo FZ=1 y FC=0
• Significado del ejemplo: el AC queda con el
contenido 1XXXXXX0 (ESCRIBE EN AC)
Repertorio detallado de instrucciones de MANEJO DE FLAGS
37
• Instrucción: SFA
• COP (hex): 82
• Número de bytes: 1
• Significado: carga el bit más significativo del
AC en el flag FZ y el bit menos significativo
del AC en el flag FC.
• Ejemplo: SFA , siendo AC=01101111
• Significado del ejemplo: se fuerza FZ=0 y
FC=1 (LEE DEL ACUMULADOR)
Repertorio detallado de instrucciones de MANEJO DE FLAGS
38
• Realizar un programa en ensamblador de la M+ que
sume el contenido de los registros D y E.
• En caso de que se produzca acarreo en dicha suma, se
debe escribir el valor hexadecimal AA en la posición
de memoria 2500 H. Después se debe poner a 0 el
flag de acarreo y volver a iniciar el programa.
• En caso de no haber acarreo, se almacena el valor
hexadecimal EE en la dirección de memoria 3500 H,
y, posteriormente, se inicia el programa.
• Se supone que los registros D y E están cargados con
el valor correspondiente
EJEMPLO
39
Etiq. Direc Bytes Ensamb. Comentarios
INICIO 1000 H 1 MOV .D,AC ; ACD
1001 H 1 ADD .E ; ACAC+E
1002 H 3 BC 'ACARREO' ; salto condicional si FC=1
1005 H 2 MVI #EE,AC ; AC EEH
1007 H 3 STA /3500 ; M(3500)AC
100A H 3 JMP 'INICIO' ; vuelta a empezar
ACARREO 100D H 2 MVI #AA,AC ; ACAAH
100F H 3 STA /2500 ; M(2500)AC
1012 H 2 MVI #00,AC ; AC0XXXXXX0 B
1014 H 1 SFA ; FC=0
1015 H 3 JMP 'INICIO' ; vuelta a empezar
1018 H …………………………………….
SOLUCIÓN: ensamblador
40
SOLUCIÓN: contenido memoria
Dirección mem (hex.) Cód. Ensam. Contenido mem (hex.) Contenido men (bin.)1000 MOV .D,AC 42 0100 0010
1001 ADD .E 33 0011 0011
1002 BC /100D 73 0111 0011
1003 10 0001 0000
1004 0D 0000 1101
1005 MVI #EE,AC 64 0110 0100
1006 EE 1110 1110
1007 STA /3500 71 0111 0001
1008 35 0011 0101
1009 00 0000 0000
100A JMP /1000 74 0111 0100
100B 10 0001 0000
100C 00 0000 0000
100D MVI #AA,AC 64 0110 0100
100E AA 1010 1010
100F STA /2500 71 0111 0001
1010 25 0010 0101
1011 00 0000 0000
1012 MVI #00,AC 64 0110 0100
1013 00 0000 0000
1014 SFA 82 1000 0010
1015 JMP /1000 74 0111 0100
1016 10 0001 0000
1017 00 0000 0000
1018 --------------------------------------------------------