Principios y tecnología de los microcontroladores Respuestas de Michael Chou a los ejercicios extraescolares
1.1 ¿Cuál es la diferencia entre un microprocesador, una microcomputadora y un sistema de microcomputadora?
Explicación:
La CPU (calculadora y controlador) se fabrica en un chip utilizando tecnología de circuito integrado a gran escala, es decir, microprocesador.
. Un microprocesador más una cierta cantidad de memoria y dispositivos externos (o interfaces a dispositivos externos) constituyen una microcomputadora. Cuando una microcomputadora se combina con hardware y software para administración, mantenimiento y soporte de aplicaciones, se convierte en un sistema de microcomputadora.
1.2. ¿Cuáles son los componentes internos de la CPU y cuáles son las funciones principales de la CPU?
Explicación:
La CPU se compone de muchos registros, como la unidad lógica aritmética como unidad aritmética, el registro de instrucciones como controlador, el decodificador de instrucciones, la matriz lógica programable y registros de banderas. Su función principal es realizar operaciones aritméticas y lógicas y controlar la computadora para que se ejecute automáticamente de acuerdo con el programa.
1.3 ¿Cuáles son las ventajas de utilizar una estructura de bus para microcomputadoras?
Solución:
El uso de la estructura de bus aumenta la flexibilidad de la transmisión de datos y reduce el número de cables. Además, el autobús se puede estandarizar
para facilitar la compatibilidad y la producción industrial.
1.4 ¿Cuál es la diferencia estructural entre el bus de datos y el bus de direcciones? Si los datos y la dirección de un sistema se combinan en un bus o parte de un bus, ¿cuál es la diferencia entre dirección y datos?
Solución:
El bus de datos es bidireccional (los datos se pueden leer o escribir), mientras que el bus de direcciones es unidireccional.
Para reducir el número de pines en el chip, el 8086CPU adopta el método de multiplexación de líneas de datos y líneas de direcciones, que sirve como bus de datos y
bus de direcciones. . Se distinguen principalmente por la sincronización de las señales. Por lo general, al leer o escribir datos, siempre envíe primero la dirección
(especifique la unidad para leer o escribir datos) y luego lea o escriba los datos después de un período de tiempo.
1.8 En el modelo dado, escriba un programa para implementar 15×15 usando un acumulador.
Solución:
LD A, 0
LD H, 15
BUCLE: AÑADIR A, 15
DEC H
JP NZ, LOOP
HALT
Hoja de respuestas de tareas del Capítulo 2
2.1 Microprocesador de arquitectura IA-32 para Pentillm4 So hasta ahora cuales hay?
Solución:
80386, 30486, Pentium, Pentium Pro, Peruium II, PentiumIII, Pentium4.
2.6 ¿Cuáles son los modos de trabajo de los microprocesadores de arquitectura IA-32?
Respuesta:
La arquitectura IA-32 admite tres modos de funcionamiento: modo de protección, modo de dirección de campo y modo de gestión del sistema. El modo de funcionamiento
determina a qué instrucciones y características estructurales se puede acceder.
2.8 ¿Cómo se forma el espacio de direcciones del microprocesador de arquitectura IA-32?
Solución:
La dirección base del segmento determinada por el registro de segmento y la dirección efectiva determinada por varios modos de direccionamiento se suman para formar una dirección lineal. Si la paginación no está habilitada, la dirección lineal es la dirección física; si la paginación está habilitada, la dirección lineal se convierte en una dirección física.
2.15. ¿De qué partes se compone la parte de interfaz de bus del microprocesador 8086?
Solución:
La Unidad de Interfaz de Bus (BIU) en el microprocesador 8086 es responsable de transmitir información entre la CPU y la memoria
.
Específicamente, la BIU es responsable de eliminar instrucciones de una parte designada de la memoria y organizarlas en una cola de instrucciones (la cola de instrucciones del 8086 tiene 6 bytes, mientras que la cola de instrucciones del 8088 tiene solo 4 bytes) y transferir los operandos necesarios para ejecutar
una instrucción. Una unidad de ejecución (UE) es responsable de realizar las operaciones especificadas en la instrucción.
2.16 Registro de segmento CS=120OH, registro de puntero de instrucción IP=FFOOH, ¿cuál es la dirección física de la instrucción en este momento?
¿Qué es?
Solución:
La dirección física de la instrucción = 12000H FFOOH = 21FOOH
Respuestas de la tarea del Capítulo 3
3.1 Señale cuál de las siguientes instrucciones Modo de direccionamiento para operandos de origen y destino.
(1)MOV SI, 30O
(2)MOV CX, DATOS[DI]
(3)AÑADIR AX, [BX][SI]
(4)AND AX, CX
(5)MOV [BP], AX
(6)PUSHF
Solución: /p>
(l) El operando de origen se direcciona inmediatamente y se direcciona el registro del operando de destino.
(2) El operando de origen es el registro de índice más el direccionamiento de desplazamiento, y el operando de destino es el direccionamiento de registro.
(3) El operando de origen es la dirección base más el direccionamiento de índice, y el operando de destino es el direccionamiento de registro.
(4) Tanto el operando de origen como el de destino tienen direcciones de registro.
(5) El operando de origen es el direccionamiento de registro y el operando de destino es el direccionamiento indirecto.
(6) Operación de apilamiento.
3.2 Explique la diferencia entre las instrucciones MOV AX, 2000H y MOV AX, DSz[2000H].
Solución: La instrucción anterior es direccionamiento inmediato, es decir, se transfiere el valor inmediato 2000H al registro AX. La última instrucción
es direccionamiento directo, es decir, el contenido del segmento de datos (DS) en la unidad de dirección 200OH se transfiere al registro AX.
3.3 Escribe la dirección del operando de memoria en la siguiente instrucción.
(1) MOV AL, [BX 10]
(2) MOV [BP 10], AX
(3) INC BYTE PTR [SI TEN Cinco]
(4) MOV DL, ES: [BX SI]
(5) MOV BX, [BP DI 2]
Solución: p> p>
(1) Segmento de datos BX 10 unidades.
(2) Segmento de pila BP de 10 celdas.
(3) Segmento de datos Unidad SI de 5 bytes.
(4) Segmento de datos adicional (segmento de datos ES) Unidad BX SI.
(5) Segmento de pila BP DI 2 unidades.
3.4 Determinar si las siguientes instrucciones están escritas correctamente.
(1) MOV AL, BX
(2) MOV AL, CL
(3) INC [BX]
( 4) MOV 5, AL
(5) MOV [BX], [SI]
(6) M0V BL, OF5H
(7) MOV DX , 2000H
(8) POP CS
(9) PUSH CS
Solución:
(l) Incorrecto, AL Los datos El ancho es diferente al de BX.
(2) es correcta.
(3) es incorrecto porque no está claro si incrementar bytes o palabras.
(4) Incorrecto, los datos inmediatos no se pueden utilizar como operando de destino.
(5) es incorrecto porque no está claro si se están transfiriendo bytes o palabras.
(6) Correcto.
(7) Correcto.
(8) Incorrecto, CS no se puede utilizar como operando de la instrucción :pop.
(9) Incorrecto, CS no se puede utilizar como operando de una instrucción PUSH.
3.5 Supongamos que el valor inicial del puntero de moneda del montón SP es 1000H, AX=2000H, BX=3000H Pregunta:
(1) ¿Cuál es el valor de SP después de ejecutar? ¿La instrucción PUSH AX?
(2) Después de ejecutar las instrucciones PUSH BX y POP AX, ¿cuáles son los valores de SP, AX y BX respectivamente?
Solución:
(1) SP=OFFEH.
(2) SP=OFFEH AX=3000H, BX=3000H.
3.6 Para completar la operación de envío de [3000H] a [2000H], utilice el comando:
MOM [200OH], [300OH]
¿Es correcto? Si no, ¿qué método debería utilizarse para lograrlo?
Solución: Incorrecta.
El método correcto es:
MOV AL, [300OH]
MOV [2000H], AL
3.7 Si desea comience desde 200 Reste el contenido de AL y use SUB 200. ¿AL es correcto? Si no, ¿qué método debería utilizarse
?
Solución: Incorrecta.
El método correcto es:
MOV BL, 200
SUB BL, AL
3.8 Pruebe dos métodos para escribir el puerto esclavo Instrucción 8OH para leer información. Luego use dos métodos para escribir instrucciones para generar
10OH desde el puerto 4OH.
Solución:
(1) EN AL, 80H
(2) MOV DX, 8OH
IN AL, DX p> p>
(3) MOV, AL, lOOH
SALIDA 40H, AL
(4) MOV AL, 10OH
MOV DX. 4OH
OUT DX, AL
3.9Si: AL=20H, BL=1OH, luego de ejecutar CMP AL, BL, pregunte:
(1) AL , BL El contenido son dos números sin signo ¿Cuál es el resultado de la comparación? ¿Qué bandera se ve afectada?
(2) El contenido de AL y BL son dos números con signo. ¿Cuál es el resultado de la comparación y qué bit de bandera se ve afectado?
Solución:
(l) AL=2OH, BL=1OH, O=0, S=0, Z=0, A=0, P=0, C=0 .
(2) Debido a que ambos son números positivos con signo, el resultado es el mismo que (l).
3.10 Para encontrar AL × 10, ¿intenta escribir el segmento de programa correspondiente?
Solución:
(1) Usar instrucciones de multiplicación:
MOV BL, 10
MUL BI,
(2) Utilice instrucciones de cambio:
SHL AL, 1
MOV BL, AL
SHL AL, 2
ADD AL , BL<
(3) Utilice instrucciones de suma:
AÑADIR AL, AL
MOV BL, AL
AÑADIR AL, AL
AÑADIR AL, AL
AÑADIR AL, AL
AÑADIR AL, BL
3.11 ¿Cuáles son las instrucciones en lenguaje ensamblador 8086? ¿modo? ¿Qué método de direccionamiento ejecuta las instrucciones más rápido?
Solución: Los modos de direccionamiento se dividen en direccionamiento de datos inmediato, direccionamiento de operando de registro y direccionamiento de operando de memoria
. Entre ellos, el direccionamiento de operandos de registro es la forma más rápida de ejecutar instrucciones.
3.12 En el direccionamiento directo, solo se representa la dirección de desplazamiento del operando, entonces, ¿cómo se determina la dirección del segmento? Si se utiliza un registro de segmento para representar la dirección del segmento, ¿cómo debería representarse en la instrucción?
Solución:
Acceso a datos predeterminado, el operando se encuentra en el segmento DS; la operación de pila se encuentra en el segmento SS; el operando fuente (SI) de la operación se encuentra en el DS; segmento, y el operando de destino (DI) se encuentra en el segmento ES usando BP como puntero se encuentra en el segmento SS; Si desea especificar la dirección del segmento explícitamente, especifique el registro del segmento en el operando. Por ejemplo:
MOV AX, ES: (BX 10H)
3.13 En el modo de direccionamiento indirecto de registro, si el registro de segmento no se especifica en la instrucción, cómo determinar la dirección del segmento ?
Solución:
En el direccionamiento indirecto de registro, si el registro de segmento no se especifica en la instrucción, la dirección del segmento
se acuerda implícitamente, es decir, implícitamente Seleccionar registro de segmento. Si el tipo de operación es una instrucción, especifique el registro de segmento de código CS,
Si el tipo de operación es una operación de pila, especifique el registro de segmento de búsqueda de pila SS,..., como se muestra en la Tabla 3-1 .
Cuando es necesario exceder el acuerdo, generalmente se agregan dos puntos ":" antes del reemplazo del segmento de código para indicar la anulación del segmento de código, lo que permite al programador desviarse de cualquier código acordado. segmento.
Por ejemplo:
MOV ES: [BX], AX
En este momento, los datos se transferirán desde el registro EAX a la unidad de almacenamiento direccionada. por EBX en el segmento adicional, en lugar de transmitir
al segmento de datos.
3.14 ¿Cuáles son las funciones de BX, BP, SI y DI cuando se utiliza el direccionamiento de registro indirecto? Cuando estos cuatro registros se combinan para el direccionamiento indirecto, ¿cómo se calcula la dirección? Por favor dé un ejemplo.
Respuesta: En el direccionamiento de registros indirecto, BX y BP se utilizan como registros entre direcciones, mientras que SI y DI se utilizan como
registros de índice. A excepción del direccionamiento entre BP, que de forma predeterminada es el segmento de pila, otros registros utilizan de forma predeterminada el segmento de datos.
Todos se pueden utilizar individualmente, desplazados o combinados.
Por ejemplo:
[BX n]
LBP n]
[SI n]
[DI n]
[BX SI n]
[BX DI n]
[BP SI n]
[BP DI n]
3.15 Configure DS=2100H, SS=5200H, BX=1400H, BP=6200H y describa las operaciones específicas de las dos instrucciones siguientes:
MOV BYTE PTR[BP], 200
MOV WORD PTR[BX], 2000
Solución: La instrucción anterior transfiere el valor inmediato (debe ser un byte) a (debe ser un byte) 200 al segmento de la pila (segmento predeterminado de BP)
La unidad de bytes especificada por BP, la dirección es: 52000H+620OH=58200H
La segunda instrucción es transferir el valor inmediato .2000 al segmento de datos (el segmento predeterminado de BX ), el desplazamiento lo especifica BX. La dirección es: 21000H + 1400H = 58200H 1400H = 22400H 3.16 ¿A qué se debe prestar atención al utilizar instrucciones de operación de moneda del montón? ¿Intercambiar instrucciones?
Solución: la instrucción de la pila puede usar la unidad de memoria como operando (de memoria a memoria, pero la instrucción MOV no puede). transferir datos entre unidades de memoria La instrucción XCHG debe ser un registro
3.17 ¿Cuál de las siguientes instrucciones es correcta? Si es incorrecta, explique por qué
(1)XCHG. CS, AX
(2)MOV [BX], [1000]
( 3)XCHG BX, IP
(4)PUSH CS
(5)POP CS
(6)IN BX, DX
(7)MOV BYTE[BX], 100O
(8) MOV CS, [1000]
Solución:
(1) Error, no se puede intercambiar CS
(2) Error, la instrucción MOV no se puede transferir entre. memorias
(3) Error, IP no se puede intercambiar
(4) Error, CS se puede utilizar como operando de la instrucción PUSH. >(5) Error, CS se puede utilizar como operando de la instrucción POP
(6) Error, la operación objetivo de la instrucción IN Los números son acumuladores.
(7) Error, el operando de destino está en bytes.
(8) Error, CS no se puede utilizar como operando de destino de la instrucción MOV.
3.18 La siguiente es la tabla de codificación del código Gray:
O 0000
1 0001
2 0011
3 0010
4 0110
5 0111
6 0101
7 0100
8 1100
Diseñe un segmento de programa que utilice conversión de código y otras instrucciones para convertir código Gray a código ASCII.
Solución:
MOV BX, TABLA
MOV SI, ASCII_TAB
MOV AL, 0
MOV CX, 10
TRAN: TABLA XLAT
MOV DL, AL
AÑADIR DL, 30H
MOV [SI], DL
INC AL
LOOP TRAN
3.19 ¿Por qué necesitamos usar la instrucción de multiplicación para determinar si es una instrucción de multiplicación con o sin signo?
Solución: Porque las operaciones de multiplicación de números con y sin signo son las mismas. Pero el signo del resultado depende de los signos de los dos operandos.
3.20 ¿Cuáles son los usos generales de las instrucciones de extensión de bytes y de las instrucciones de extensión de palabras? Por favor dé un ejemplo.
Solución: Se utiliza principalmente para expandir el dividendo al doble del ancho del operando antes de la división de bytes y de palabras.
3.21. ¿Qué es el código BCD? ¿Qué es un código BCD combinado? ¿Qué es un código BCD no combinado? ¿Cuál es el método para sumar, restar, multiplicar y dividir códigos BCD en lenguaje ensamblador 8086?
Respuesta: El código BCD es un número binario codificado en decimal. El código BCD combinado son dos BCD en un byte, con el más alto en los 4 bits superiores. El código BCD no combinado son los 4 bits inferiores de un número BCD en un byte, y los 4 bits superiores son 0. 8086 utiliza la instrucción de ajuste BCD para ajustar el resultado al número BCD correcto después de realizar sumas, restas y operaciones en BCD. operaciones de multiplicacion. Utilice la instrucción de ajuste BCD para realizar la operación de división antes de realizar la operación de división BCD.
3.22 ¿Por qué es necesario el ajuste decimal cuando se utilizan instrucciones aritméticas ordinarias para realizar operaciones BCD? Específicamente, ¿en qué parte del segmento del programa se debe agregar una instrucción de ajuste decimal al realizar operaciones de suma, resta, multiplicación y división en código BCD?
Solución: Debido a que la instrucción 8086 trata los operandos como números binarios para operaciones binarias, es necesario realizar ajustes para obtener el resultado BCD correcto. Las instrucciones de ajuste BCD se agregan después de las instrucciones de suma, resta y multiplicación, mientras que las instrucciones de ajuste BCD se usan antes de las instrucciones de división.
Respuestas a la Tarea del Capítulo 4
4.1 Luego de ejecutar el siguiente programa, complete los registros y unidades de almacenamiento correspondientes con los resultados:
MOV AL, 1OH
MOV CX, 100OH
MOV BX, 2000H
MOV [CX], AL
XCHG CX, BX
MOV DH, [BX]
MOV DL, 01H
XCHG CX, BX
MOV [BX], DL
HLT
SOLUCIÓN: El contenido del registro y unidad de almacenamiento es el siguiente:
AL = 1OH
BL = OOH
BH = 2OH
p>CL = OOH
CH = 1OH
DH = 1OH
(10O0H) = lOH
(200OH) = 0lH
2. Los requisitos son los mismos que en la pregunta 4.
1. El procedimiento es el siguiente:
MOV AL, 50H
MOV BP, 100OH
MOV BX, 200OH
MOV [ BP], AL
MOV DH, 20H
MOV [BX], DH
MOV DL, OlH
MOV DL, [ BX]
MOV DL, [BX]
MOV CX, 300OH
HLT
Solución: Los registros y unidades de almacenamiento son como siguiente:
AL = 5OH
BL = OOH
BH = 20H
CL = OOH
CH = 30H
DL = 20H
DH = 2OH
BP = 100OH
(10OOH) = 5OH
(20OOH) = 20H
4.3 Hay un bloque de datos de 100 cuentas a partir de la unidad 1000H. Si desea transferirlo al área de almacenamiento a partir de la unidad 200OH, la transferencia del bloque de datos debe realizarse mediante. los siguientes tres métodos. Un programa que prepara bloques de datos para su transmisión.
(1) Transmitir instrucciones sin bloques de datos
(2) Transmitir instrucciones con bloques de datos individuales
(3) Transmitir instrucciones con instrucciones de bloques de datos agrupados.
Solución:
(1) LEA SI, 1OOOH
LEA DI, 200OH
MOV CX, 100
L1: MOV AX, [SI]
MOV [DI], AX
BUCLE Ll
HLT
(2 ) LEA SI, 100OH
LEA DI, 2000H
MOV CX, 100
CLD
L1: MOVSB
BUCLE L1
HLT
(3) LEA SI, 100OH
LEA DI, 200OH
MOV CX, 100
p>CLD
REP MOVSB
HLT
4.4 Escriba un programa para transferir 100 números comenzando en la ubicación 1000H usando registros de direcciones variables a la memoria área a partir de 1070H
.
Solución:
LEA SI, 100OH
LEA DI, 1070H
MOV CX, 100
CLD
REP MOVSB
HLT
4.5 Los requisitos son los mismos que los de la pregunta 4.4, la dirección de origen es 2050H, la dirección de destino es 2000H y la longitud del bloque es 50.
Solución:
LEA SI, 205OH
LEA DI, 200OH
MOV CX, 50
CLD
REP MOVSB
HLT
4.6 Escribe un programa para convertir 100 números a partir de la celda 100OH en 100 números. Convierta 100 números que comienzan en la celda 100OH a un rango de almacenamiento que comienza en 105OH
(Nota: hay superposición en los rangos de datos).
Solución:
LEA SI, 100OH
LEA DI, 1050H
AÑADIR SI, 63H
AÑADIR DI, 63H
MOV CX, 100
STD
REP MOVSB
HLT
4.7. p>
4.7.p>
Transfiera 100 números desde la posición inicial de la unidad 100 al área de almacenamiento a partir de 105OH
(Nota: las áreas de datos se superponen). p>
4.7 En la celda 0500H, hay 100 números. Debe transferirse al área de almacenamiento a partir de las 1000 H,
Pero el valor del número debe verificarse durante el proceso de transferencia. Cuando se encuentre el primer 0, la transferencia se detendrá.
Solución:
LEA SI, 050OH
LEA DI, 10OOH
MOV CX, 100
N1 : MOV AL, [SI]
CMP AL, 0
JZ N2
MOV [DI], AL
INC SI
INC DI
LOOP N1
N2: HLT
4.14 Si hay un número en la celda 0500H
(1)Utilice la instrucción de suma para multiplicarlo por 2 y enviarlo de regreso a la unidad de almacenamiento original (suponiendo que X×2 sigue siendo un byte);
(2)X×4;
(3)X×10 (asumiendo X×l0≤255).
Solución:
(1) LEA BX, 050OH
MOV AL, [BX]
AÑADIR AL, AL
MOV [BX], AL
(2) LEA BX, 0500H
MOV AL, [BX]
AÑADIR AL, AL p> p>
(3)X×10 (asumiendo X×l0≤255). AL
AÑADIR AL, AL
MOV [BX], AL
(3) LEA BX, 050OH
MOV AL, [ BX]
AÑADIR AL, AL
MOV DL, AL
AÑADIR AL, AL
AÑADIR AL, AL
AÑADIR AL, AL
AÑADIR AL, AL.AL
AÑADIR AL, DL
MOV [BX], AL
Capítulo 5 Respuestas a la tarea
5.1 ¿Cuál es el significado de las bicicletas de autobús? ¿De cuántos relojes consta el ciclo de bus básico de una CPU 8086/8088? Si la CPU tiene una frecuencia de 8 MHz, ¿cuál es uno de sus ciclos de reloj? ¿Qué es una bicicleta de autobús básica? Si la frecuencia principal es de 5MHz, ¿cómo calcularla?
Respuesta: El tiempo necesario para que CPLI acceda al bus (lectura/escritura de bytes o palabras de la memoria interna o del puerto E/S) se denomina ciclo de bus. El ciclo de bus básico de una CPU 8086/8088 consta de 4 relojes.
Si la frecuencia de reloj de la CPU es 8 (5) MHz, el ciclo de reloj es 1/8 MHz = 125 (1/5 MHz = 2O) ns y el ciclo de bus básico es 4 × 125 (200) ns = 500 (800) ns
5.2 ¿Qué operaciones realiza la CPU en los estados TI, T2, T3 y T4 del ciclo del bus? ¿Cuándo es necesario insertar
estado de espera Tw? ¿Dónde se inserta Tw? ¿Cómo insertar?
Respuesta: El siguiente es un ejemplo de lectura de memoria.
En el ciclo Tl: señales de dirección de salida, señales de habilitación de pestillo de dirección, señales de control de acceso a puerto de E/S o memoria;
En el ciclo T2: CPIJ comienza a realizar operaciones de transferencia de datos En este momento, el interruptor multiplexor dentro del 8086CPU cambia a las líneas de dirección/datos AD15 ~ AD0, cancela la dirección y cambia al bus de datos para prepararse para leer y escribir datos. El controlador de bus 8288 envía información al controlador de bus de datos. La señal de habilitación del bus de datos y la señal de control del transceptor de datos DT/R enviada por el controlador del bus 8288 permiten que el transceptor de datos funcione, conecta el bus de datos a la línea de datos de la CPU 8086 y controla la dirección de transmisión de datos. De manera similar, las líneas de dirección/estado A19/S6~A16/S3 se conmutan a información de estado relacionada con el ciclo del bus, indicando algunas condiciones relacionadas con el ciclo.
En el flanco descendente del reloj al comienzo del ciclo T3, la CPU 8086 muestrea la línea READY. Si la señal READY está activa (alta), se ingresa al estado TA al final del estado T3. En el flanco descendente del reloj al comienzo del estado T4, los datos del bus de datos se leen en la CPU o se escriben en la unidad de selección de direcciones.
En estado T4: fin del ciclo del autobús. Si se accede a una memoria lenta o a una interfaz periférica, la señal LISTO debe reducirse inmediatamente después de emitir la dirección en el estado Tl y decodificar la unidad o dispositivo seleccionado. Cuando la señal READY muestreada por la CPU 8086 en el estado T3 no es válida, se insertará un período de espera Tw. En el estado Tw, la CPU continúa muestreando la señal READY y no entrará en el estado T4 hasta que sea válida. completar el ciclo del bus de datos. En el estado T4, la transferencia de datos se completa y finaliza el ciclo del bus. En el estado T4, la CPU 8086 completa la transmisión de datos y la señal de estado cambia a un estado de transición sin operación. Durante este período, la CPU 8086 finaliza el ciclo del bus, restaura el estado inicial de cada línea de señal y se prepara para el siguiente ciclo del bus.
Respuestas del Capítulo 6
6.1 Si hay una computadora de placa única con 8 bloques de 2114 4KBRAM, el cableado es como se muestra en la figura.
¿Cuáles son las direcciones base de cada uno de los 4 grupos de 1 KB de RAM? ¿Hay áreas superpuestas en las direcciones? ¿Cuál es el rango de direcciones para cada grupo?
Respuesta: La dirección básica de la RAM es:
Grupo 1 OOOOH ~ 03FFH
Grupo 2 4000H ~ 43FFH
Grupo 3 8000H ~ 83FFH
Grupo 4 COOOH ~ C3FFH
Estas direcciones tienen áreas superpuestas. El rango de direcciones de cada grupo es OOOH ~ 3FFH (1024 bytes).
6.4 Si desea expandir 1 KB de RAM (2114 segmentos) y especificar la dirección 8000H ~ 83FFH, ¿cómo se deben conectar las líneas de dirección?
Solución: expanda lKB RAM a la dirección especificada 8000H ~ 83FFH, conecte los 10 bits inferiores de la línea de dirección al chip y los 6 bits superiores de la dirección (Al5 ~ A10 = 100000) generen un señal de selección de grupo.
Clave de respuestas del Capítulo 7
7.1 ¿Por qué los dispositivos externos están conectados al sistema host a través de circuitos de interfaz?
Respuesta: Debido a que existen muchos tipos de dispositivos externos, la información de entrada puede ser digital, analógica o de conmutación, y la velocidad, el nivel y la potencia de entrada son muy diferentes a los de la CPU. Por lo tanto, normalmente se conecta al sistema anfitrión a través de un circuito de interfaz.
7.4 ¿Qué tipos de información se transfieren entre la CPU y los dispositivos de entrada/salida?
Solución: Hay tres tipos principales de información transmitida entre la CPU y los dispositivos de entrada/salida.
(l) Datos
En las microcomputadoras, los datos suelen ser de 8, 16 o 32 bits.
(2) Información de estado
Al ingresar, hay información sobre si el dispositivo de entrada está listo; al emitir, hay información sobre si el dispositivo de salida está inactivo y si la salida; el dispositivo está emitiendo una indicación de ocupado, etc.
(3) Información de control
Por ejemplo, controlar los dispositivos de entrada y salida para iniciar o detener.
7.9 Supongamos que la dirección del puerto de entrada de una interfaz es 0100H, la dirección del puerto de estado es 0104H y el quinto bit en el puerto de estado es 1, lo que significa que un determinado byte en el búfer de entrada está listo para aporte. Diseñar un programa específico para implementar consultas de tipo
entrada.
Solución: El segmento del programa de entrada de consulta es:
POLl: IN AL, 0104H
AND AL, 20H
JZ POLl
IN AL, 0100H
Capítulo 8 Respuestas a las tareas
8.1 Durante el proceso de respuesta a la interrupción, la CPU 8086 envía dos R al 8259A. ¿Cuáles son las funciones de las dos señales RT enviadas por la CPU 8086 al 8259A durante el proceso de respuesta a la interrupción?
Solución: El primer pulso enviado por la CPU le dice al circuito externo que su solicitud de interrupción ha sido respondida y
debe prepararse para enviar el número de tipo a la CPU. Después de que el 8259A recibe este pulso, establece la solicitud de interrupción de mayor prioridad en el Registro de estado de interrupción (ISR) y restablece el bit correspondiente en el IRR (Registro de solicitud de interrupción).
El segundo pulso de la CPU le indica al circuito externo que coloque el número del tipo de interrupción en el bus de datos.
8.2 ¿Cuántos tipos de interrupciones puede tener como máximo la CPU 8086? ¿Cuáles son las dos categorías según el método de generación de interrupciones?
Solución: La CPU 8086 puede tener hasta 256 tipos de interrupciones. Dependiendo del método de generación de interrupciones, se pueden dividir en dos categorías: interrupciones internas (interrupciones de software) y externas (interrupciones de hardware).
8.9 Al escribir una subrutina de manejo de interrupciones, ¿por qué necesitamos proteger muchos registros en la subrutina?
Solución: porque al ejecutar el programa de usuario, habrá resultados intermedios en los registros, y cuando estos registros se vayan a utilizar en la rutina del servicio de interrupción, el contenido de estos registros se enviará a la pila. para almacenamiento (llamado Para proteger el sitio). Cuando el programa de usuario regresa de la rutina del servicio de interrupción, el contenido de estos registros se restaura desde la pila a los registros (llamado sitio de restauración).
8.12 Si hay cinco fuentes de interrupción en el sistema, sus prioridades son: 1, 2, 3, 4, 5, 6, 7, 8: 1, 2, 3, 4, 5, La entrada La dirección del programa de servicio de interrupción es respectivamente. Escriba un programa. Cuando una interrupción solicita a la CPU que responda, puede consultar la fuente del programa de servicio de interrupción de la interrupción de mayor prioridad.
Programa.
Solución: si las solicitudes de interrupción de cinco fuentes de interrupción se colocan en un registro de estado de interrupción, colóquelas en los bits de estado 7 (prioridad más alta) a 3 en orden de prioridad.
El segmento del programa del método de consulta es:
IN AL, STATUS
CMP AL, 80H
JNE N1
JMP 3000H
N1: EN AL, ESTADO
CMP AL, 40H
JNE N2
JMP 3020H
N2: EN AL , ESTADO
CMP AL, 20H
JNE N3
JMP 3050H
N3: EN AL, ESTADO
CMP AL, 10H
JNE N4
JMP 3080H
N4: EN AL, ESTADO
CMP AL, 08H
JNE N5
JMP 30A0H
N5: RET
HOJA DE RESPUESTAS DE ASIGNACIONES DEL CAPÍTULO 9
9.3 En un sistema de aplicación, la dirección del contador/temporizador 8253 es 340H~343H, el tiempo se usa como divisor de frecuencia (N es el coeficiente de división de frecuencia), el temporizador 2 se usa como contador de eventos externo, ¿cómo escribir el programa de inicialización?
Solución:
Se utiliza el temporizador 0 como divisor de frecuencia, el modo de trabajo es 2 y su programa de inicialización es:
MOV AL, 34H p >
SALIDA 343H, AL
MOV AL, N1
SALIDA 342H, AL
MOV AL, N2
SALIDA 342H, AL
El temporizador 2 se utiliza como contador de eventos externo y el modo de trabajo es 0. El programa de inicialización es:
MOV AL, 0B0H
OUT 343H, AL
MOV AL, N1
OUT 342H, AL
MOV AL, N2
OUT 342H, AL
9.4 Si ya tienes un generador de frecuencia con una frecuencia de 1 MHZ, entonces si quieres pasar el El contador/temporizador 8253 oscila, el punto clave es generar una señal cada segundo, ¿cómo debo conectar el 8253? Por favor escriba un programa de inicialización.
Solución:
Para que la señal de 1MHZ se convierta en una vez por segundo, es necesario dividirla por 106. El recuento de un canal es de 16 bits y el valor máximo es 65536, por lo que necesitamos dos canales en cascada y luego cada canal cuenta 1000. Utilice el canal 0 y el canal 1 para conectar en cascada, ambos trabajando en modo 2, el procedimiento de inicialización es el siguiente:
MOV AL, 34H
OUT 343H, AL
MOV AL, 0E8H
SALIDA 342H, AL
MOV AL, 03
SALIDA 342H, AL
MOV AL, 74H
SALIDA 343H, AL
MOV AL, 0E8H
SALIDA 342H, AL
MOV AL, 03
SALIDA 342H , AL
SALIDA 342H, AL
MOV AL, 04
MOV AL, 03