Red de conocimiento informático - Conocimiento sistemático - Preguntas sobre programación en lenguaje ensamblador

Preguntas sobre programación en lenguaje ensamblador

Preguntas de simulación de programación en lenguaje ensamblador

1. Complete los espacios en blanco:

1. El registro de puntero de instrucción de la CPU es: , que se usa en conjunto. con el registro para determinar la siguiente dirección física.

2. Si desea colocar todos los datos y el código en un segmento, debe establecer un modelo de almacenamiento.

3. Operandos: ES: TABLE[DI], FEES[EBX*2], MSAK[EAX][EBX] adoptan los modos ,

y direccionamiento respectivamente.

4. Para leer la posición actual del cursor, puede utilizar la llamada de función numérica de BIOS INT 10H como parámetro de salida, el número de fila y el número de columna del cursor se obtendrán del registro.

5. El registro de la CPU se utiliza generalmente para direccionar la dirección del puerto de forma indirecta.

6. Si establece una etiqueta local en el cuerpo de la definición de la macro, debe utilizar una pseudo operación para evitar múltiples definiciones de la etiqueta cuando se expande la macro.

7. Supongamos (CS)=2A31H, (DS)=9300H, (SS)=25F0H, (BP)=0131H, (SI)=0110H, (DI)=0102H, luego ordene MOV AX. , la dirección efectiva del operando de origen de [BP+SI+8] es _______________ y ​​la dirección física es _______________.

8. Supongamos (AX)=1000H, (BX)=2340H, luego de ejecutar el comando CMP AX, BX, el valor del indicador CF es ___________ y ​​el valor del indicador ZF es ______________.

9. Si la CPU responde a la solicitud de interrupción emitida por el periférico, son esenciales dos condiciones, a saber y .

10. Para mostrar una cadena, puede utilizar la función n.º 9 de DOS, que requiere que el último carácter de la cadena mostrada sea .

11. Cuando se produce una interrupción, guarde la escena y almacene el contenido de los registros , y en la pila.

12. El rango de números de tabla de números en complemento a dos de n bits es: .

13. Para superponer segmentos con el mismo nombre en dos módulos diferentes en el segmento más grande de los dos segmentos, se debe utilizar el atributo combinado al definir el segmento.

14. Operandos: ES: STRING[SI], COUNT[ESI*4], MSAK[EBX][ECX] adoptan los modos de direccionamiento , , respectivamente.

15. Para configurar la posición del cursor, puede utilizar la llamada de función numérica de BIOS INT 10H. Como parámetro de entrada, el número de línea y el número de columna del cursor deben almacenarse en el registro.

16. El registro de la CPU se utiliza generalmente para direccionar la dirección del puerto de forma indirecta.

17. Si se hace referencia a los símbolos externos definidos en el módulo 2 en el módulo 1, utilice las directivas

y al principio del módulo 1 y del módulo 2 respectivamente.

18. Supongamos (CS)=25FFH, (DS)=2140H, (SS)=2510H, (BP)=02D0H, (SI)=0010H, (DI)=0206H, luego el comando MOV AX, la dirección efectiva del operando de origen de [BP+SI+2] es _______________ y ​​la dirección física es ____ __________.

19. Algunos datos se definen de la siguiente manera:

V1 DB 4 DUP(2), 2

COUNT EQU 10

V2 DD COUNT DUP(8,5 DUP(?))

Entonces: asigne ____________ bytes de espacio de almacenamiento para la variable V1; asigne ____________ bytes de espacio de almacenamiento para V2

20. Si la solicitud de interrupción emitida por el periférico es respondida por la CPU, dos condiciones son esenciales, a saber y.

21. Hay tres formas de transferir parámetros entre subprogramas: , y.

22. Si el tipo de interrupción es 4AH, la dirección del vector de interrupción es .

23. El registro de puntero de instrucción de la CPU es: , que se utiliza junto con el registro para determinar la dirección física de la siguiente instrucción.

24. Cuando el número de puerto es ≥ 256, cuando se utilizan las instrucciones IN o OUT, el número de puerto se debe colocar primero en el registro.

25. Operandos: ARY[EAX*2], ES:[TABLE+SI], SUM[EBX][EDX] adoptan los modos ,

y direccionamiento respectivamente.

26. Las variables tienen tres atributos, a saber: , , .

27. Si establece una etiqueta local en el cuerpo de la definición de la macro, debe utilizar pseudooperaciones para evitar múltiples definiciones de la etiqueta cuando se expande la macro.

28. La definición de macro debe comenzar con la pseudoinstrucción y terminar con la pseudoinstrucción.

29. Supongamos (CS)=9896H, (DS)=9100H, (SS)=25F0H, (BX)=0111H, (SI)=0810H, (DI)=0102H, luego el comando MOV [BX+SI+8], la dirección efectiva del operando de destino de CX es ___ ________ y ​​la dirección física es ____ _________.

30. Para leer la posición actual del cursor, puede utilizar la llamada de función numérica de BIOS INT 10H como parámetro de salida, el número de fila y el número de columna del cursor se obtendrán del registro.

31. Cuando se produce una interrupción, guarde la escena y almacene el contenido de los registros, y en la pila.

32. Si: FEES DW 10 DUP (10, 5 DUP (?)), entonces el comando: MOV CX, LENGTH Después de ejecutar FEES, (CX) = .

2. Preguntas de opción múltiple

1. Entre los siguientes registros, ( ) se puede utilizar como registro de dirección base.

A, AX B, BX C, CX D, DX

2 En la siguiente secuencia de instrucciones, el comando para borrar la solicitud de interrupción actual (EOI) es: ( )<. /p>

A, MOV AL, 20H B, MOV AL, 20H C, MOV AL, 21H D, MOV AL, 21H

SALIDA 20H, AL ENTRADA AL, 20H SALIDA AL, 21H ENTRADA AL, 21H

3. Al definir un segmento, utilice el tipo de posicionamiento ( ), luego el segmento debe comenzar desde el límite del segmento pequeño.

A, BYTE B, WORD C, DWORD D, PARA

4 Si: (BX)=4336H, (CX)=0136H comando: SUB BX, CX Después de la ejecución, Los signos SF, ZF, OF y CF son respectivamente ( )

A, 0, 0, 0, 0 B, 0, 1, 0, 0 C, 1, 0, 0, 0 D, 0, 0, 0, 1

5. Si: FEES DW 10 DUP(100,?)

Instrucción: MOV CX, LENGTH Después de ejecutar FEES, el contenido de CX es : ( )

A, 1000 B, 1 C, 10 D, 2000

6. El registro ( ) sirve como contador en la instrucción de bucle.

A, AX B, BX C, CX D, DX

7 Al ejecutar la instrucción de división, si el divisor es cero, se generará una interrupción de tipo número ( ). .

A, 0 B, 1 C, 3 D, 4

8. Al definir un segmento, utilice el tipo de posicionamiento ( ), luego el segmento debe comenzar desde el límite de la palabra.

A, PARA B, WORD C, DWORD D, BYTE

9 Si: (BX)=4336H, (CX)=0136 comando: SUB BX, CX Después de la ejecución, Los signos SF, ZF, OF y CF son: ( )

A, 0, 0, 0, 1 B, 0, 1, 0, 0 C, 1, 0, 0, 0 D, 0, 0, 0, 0

10. Si: FEES DW 100 DUP(?),

Entonces el comando: MOV CX, LENGTH Después de ejecutar FEES, el contenido de CX es: ( )

A, 100 B, 1 C, 10 D, 0

11. Entre los siguientes registros, ( ) no se puede utilizar como registro de índice.

A, EAX B, EBP C, ECX D, ESP

12 Entre las siguientes secuencias de instrucciones, ¿qué instrucción tiene el mismo efecto que SUB AX y AX? ( )

A, AND AX, AX B, OR AX, AX C. Para un segmento grande, se deben utilizar atributos combinados ( ).

A, PÚBLICO B, COMÚN C, PRIVADO D, MEMORIA

14 Si: (AX)=0F365H, (CX)=0E024H comando: AGREGAR AX, después de ejecutar CX. , Los signos SF, ZF, CF y OF son respectivamente: ( ).

A, 1, 0, 1, 0 B, 0, 1, 0, 0 C, 0, 0, 0, 0 D, 0, 0, 0, 1

15 Para mostrar una cadena, puede usar la función DOS No. 9, que requiere que el último carácter de la cadena mostrada sea ( ).

A. & B, $ C, % D, @

3 Determine si las siguientes instrucciones y pseudoinstrucciones son correctas (marque "√" o "×" entre paréntesis):

1.DIV 20H ( )

2. XCHG BX, ES ( )

3. >

4. EN AL, DX ( )

5. MOV BYTE PTR[BX], 25H ( )

6.

7. RET 8 ( )

8. TABLA LEA, BX ( )

9.

ACL1 ENDM

10. NUEVO PROC ( )

NUEVOP ENDP

11. MUL 20H ( )

12. MOV BX, [SI][DI] ( )

13. CMP [BX], TABLA[SI] ( )

14. FUERA DX, AL ( )

15 MOV [DX], 25H ( )

16.

18 , TABLA LEA, BX ( )

19 MOVER EQU MOV ( )

20. MACRO DE ALIMENTACIÓN X, Y, Z ( )

FEED ENDM

21 AGREGAR ES:BX, 20H ( )

22.

23. CMP [BX ], TABLA[SI] ( )

24, SALIDA DX, AL ( )

25, RET 8

( )

26. DATA1 DB DATA0 ( )

27. MOVE EQU MOV ( )

4. p >1. Transfiera la cadena STRING1 (longitud N) en el segmento de datos al búfer con BUFF como primera dirección en el segmento adicional:

MOV SI,

p>

MOV DI,

MOV CX, N

CLD

REP

2. Utilice una declaración para implementar la siguientes instrucciones Función

(1) El puntero de dirección almacenado en la variable AYD se envía a ES y SI

(2) El contenido de AX se incrementa en 1, lo cual es necesario para no afecta CF

CODE

MAIN PROC FAR

MOV AX,@DATA

MOV DS, AX1, establece el vector de interrupción ( la rutina de interrupción es INTERHAND, el número de tipo de sección media es N)

MOV AX,SEG INTERHAND

MOV DS,AX

MOV DX,

MOV AL,N

INT 21H

ENTREMANO:

IRET

3. Borrar pantalla completa

MOV AX,

MOV BH,7

MOV CX,

MOV DX,

INT 10H

4. Utilice una declaración para implementar la funciones especificadas a continuación

(1) El puntero de dirección almacenado en la palabra variable LIST se envía a ES y DI

(2) Agregue 1 al contenido de AX, que es requerido. para no afectar a CF

(3) Cambiar el contenido de BX Los 4 bits altos se establecen en 1 y los bits restantes permanecen sin cambios

(4) Almacena el contenido de. la unidad de palabras señalada por SI en la pila

(5) Compare dos números con signo, si el primero ≥El segundo, luego pase a SIGUIENTE

5. mitad de la pantalla:

MOV AX,

MOV BH,7

MOV CX,0

MOV DX,

INT 10H

6 , MOV CL, 8

SHL AX, CL

SHR BX, CL

AGREGAR AX, BX

MOV WORD PTR DATA1, AX

Pregunta: ¿Cuál es la función de la secuencia de comandos anterior?

7. ┆

MOV AL, N

MOV AH, 35H

INT 21H

PUSH ES

PUSH BX

PUSH DS

MOV AX, SEG INTERHAND

MOV DS, OFFSET INTERHAND

MOV AL, N

MOV AH, 25H

INT 21H

POP DS

P: El arriba ¿Cuál es la función de la secuencia de instrucciones?

8. Utilice una declaración para implementar las siguientes funciones especificadas:

① El contenido superior de la pila aparece y envía la palabra variable MG1. El atributo de tipo de la variable MG2 se envía AH

③ Agregue 1 al contenido de AX, lo cual es necesario para no afectar a CF

④ Invierta los 4 bits inferiores de EBX.

⑤ Si (CX) =0, pase al SIGUIENTE

5. Preguntas de análisis y cálculo:

1. Supongamos (AX)=201BH, (BX)=110CH, (DI)=0001H, (DS)=4000H, (4110CH)=0AH, (4110DH)=81H, (4110EH)=70H;

Luego: ① MOV AX, después de ejecutar la instrucción [BX], (AX) = ;

② MOV BH, BYTE PTR[BX+DI+1], después de ejecutar la instrucción, (BX) = .

p>

2.

MOV AX, 6540H

MOV DX, 3210H

MOV CL, 04

SHL AX, CL

MOV BL, AH

O DL, BL

Después de ejecutar el segmento de programa anterior,

(AX) =

(BL )=

(DX)=

3,

DATOS1 DW 1000H

DATOS2 DW 2000H

PUSH DATA1

PUSH DATA2

POP DATA1

POP DATA2

Pregunta: ①El segmento del programa anterior Después de la ejecución, (DATA1) =, (DATA2) =

② Supongamos que antes de la ejecución (SP) = 200H, después de la ejecución (SP) = .

4. 6, '56',?

ARRAY DW 0, 67H, 7

BASUB EQU ARRAY-BUFF

P: ¿Cuál es el valor de BASUB? ¿Qué significa?

5.

MOV CL,3

MOV BX,0B7H

ROL BX,1

ROR. BX,CL

Pregunta: Después de ejecutar el programa anterior, ¿cuál es el contenido del registro BX?

6.

.DATA

STRING1 DB 50,?,50 DUP(?)

SIGUIENTE:

LEA DX,STRING1

MOV AX,0AH

INT 21H

CMP STRING1+2,0DH

SALIDA JE

JMP PTR CORTO SIGUIENTE

SALIDA:

MOV AX,4C00H

INT 21H

MAIN ENDP

END MAIN

Describe la función de la secuencia de comandos anterior.

7. Supongamos (AX)=9A6CH, (BX)=710BH, (DI)=0002H, (DS)=6000H, (6710BH)=09H, (6710CH)=87H

(6710EH)=5EH;

Entonces: ① Después de ejecutar MOV AX, [BX], (AX) =

② MOV BL, BYTE PTR [BX+DI+1], después de la instrucción se ejecuta, (BX) = .

8. OPER1 DB 1,2

OPER2 DW 1234H,5678H

Luego: Después de ejecutar la instrucción ① MOV AX,WORD PTR OPER1+1, (AX) = .

② Después de MOV AL, se ejecuta BYTE PTR OPER2, (AL) = .

③ Después de MOV AH, se ejecuta TAMAÑO OPER2, (AH) = .

Seis: Pregunta narrativa:

¿Cuáles son los principales métodos de transferencia de parámetros entre programas y subprogramas que llaman? ¿Cuáles son sus características respectivas?

Describa brevemente el proceso de respuesta a interrupciones del 8086CPU.

Describe brevemente la diferencia entre llamada a subrutina y llamada a macro.

Siete: Programación:

1. Suponga que X, Y, Z y W son direcciones de unidades numéricas con signo de 16 bits y escriba una subrutina para realizar los siguientes cálculos.

Z=│X+Y-W│

2. Escriba el programa fuente en lenguaje ensamblador: pruebe la cadena de código ASCII en la unidad variable de bytes ALPHA y realice las siguientes operaciones:

(1) Si es un carácter numérico, envíelo a la unidad NUM bytes y establezca el indicador FLAG en 0

(2) Si es un carácter alfabético en mayúscula, envíelo al; unidad de bytes BICCHR y configúrelo en 0. El indicador FLAG es 0;

(3) Si es un carácter alfabético en minúscula, envíelo a la unidad de bytes SMLCHR y establezca el indicador FLAG en

(4) De lo contrario, establezca el indicador FLAG en 1.

(Los caracteres ASCII 0, 9, A, Z, a y z son 30H, 39H, 41H, 5AH, 61H, 7AH respectivamente)

3. , Z es una dirección de unidad numérica con signo de 16 bits. Escriba la subrutina para realizar los siguientes cálculos.

X+Z,X≥Z

Y=

X-Z,X

4. palabras Los enteros de sección a1, a2, a3,...,a256 se almacenan en el área de datos con la dirección encabezada por NÚMERO. Escriba un programa para eliminar los números negativos y restaurar los números positivos restantes en el área de datos que comienza con PLUS.

5. Escribir segmentos de programa. Utilice instrucciones de procesamiento de cadenas para comparar dos variables de cadena de 10 caracteres CHR1 y CHR2. Si ambas son diferentes, ejecute la subrutina OTHER. De lo contrario, ejecútelas secuencialmente.

6. Escriba un programa fuente en lenguaje ensamblador: suponga que hay tres números almacenados en las unidades de palabras A, B y C. Si los tres números no son 0, calcule la suma de los tres números y guárdelo en el Si una de las unidades D es 0, las otras dos unidades también se borrarán.