Red de conocimiento informático - Conocimiento sistemático - Programación en lenguaje ensamblador, recibir caracteres ingresados ​​desde el teclado, terminar con CTR C, convertir las letras minúsculas en mayúsculas y luego mostrarlas en la pantalla.

Programación en lenguaje ensamblador, recibir caracteres ingresados ​​desde el teclado, terminar con CTR C, convertir las letras minúsculas en mayúsculas y luego mostrarlas en la pantalla.

Hay muchos problemas:

1. En primer lugar, hay un problema con el título. Es imposible "recibir caracteres ingresados ​​desde el teclado y terminar con CTR C". . Para el símbolo del sistema, al presionar CTRL C se saldrá forzosamente del programa, por lo que es imposible finalizar con CTRL C. Debe presionar Enter para finalizar la entrada.

2. Hay signos de puntuación chinos en DATOS.

3. Después de ingresar caracteres, presione Entrar. Cuando se ejecuta en lenguaje C, ajustará la línea automáticamente, pero no en ensamblaje, por lo que deberá ajustar la línea usted mismo.

4. Utilice MOV AH, 0AH; INT 21H para interrumpir la entrada. El número de caracteres válidos ingresados ​​se almacena en la unidad BUF1, por lo que al realizar el bucle, CX debe configurarse en el valor de la unidad BUF1, no en COUNT.

5. Los caracteres válidos ingresados ​​se almacenan a partir de la unidad BUF2, por lo que al realizar la conversión de casos, debe comenzar desde la unidad BUF2 en lugar de la unidad BUF 61H y 7AH. ambas letras minúsculas, por lo que no debería haber E en la instrucción de salto. Al mismo tiempo, no mezcle firmado y sin firmar, por lo que JBE se cambia a JB y JGE se cambia a JA.

7. Al ingresar caracteres, termina con un carácter de retorno de carro; al generar caracteres, termina con '$', por lo que para los caracteres de entrada, debe convertir el último carácter de retorno de carro a '$. '.

El programa modificado es el siguiente:

SEGMENTO DE DATOS

MESS1 DB 'INPUT:', 13, 10, '$'

NEWLINEDB 13, 10, '$'; Esta línea se usa especialmente para saltos de línea

MESS2 DB 'OUTPUT:', 13, 10, '$'

BUF DB 20

p>

BUF1 DB ?

BUF2 DB 20 DUP(?)

COUNT EQU $-BUF

FIN DE DATOS

SEGMENTO DE CÓDIGO

ASUMIR CS: CÓDIGO, DS: DATOS

INICIO: MOV AX, DATOS

MOV DS, AX

MOV SI , 0

LEA DX, MESS1

MOV AH, 09H

INT 21H

MOV DX, OFFSET BUF

MOV AH, 0AH

INT 21H

LEA DX, NEWLINE

MOV AH, 9

INT 21H

MOV CL, BUF1

MOV CH, 0; el número de caracteres de entrada válidos almacenados en la unidad BUF1

LOOP1: MOV AL , BUF2[SI] ; Los caracteres válidos comienzan desde la unidad BUF2

CMP AL, 61H

JB NEXT ; /p>

JA NEXT; JGE se cambia a JA

SUB AL, 20H

MOV BUF2[SI], AL solo los caracteres válidos comienzan desde la unidad BUF2

SIGUIENTE: INC SI

LOOP LOOP1

MOV BUF2[SI], '$' termina el bucle, cambia el carácter actual a '$'

LEA DX, MESS2

MOV AH, 09H

INT 21H

MOV DX, OFFSET BUF2 solo los caracteres válidos comienzan desde la unidad BUF2

MOV AH, 09H

INT 21H

MOV AH, 4CH

INT 21H

CÓDIGO FINALIZA

FINALIZAR INICIO