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 p>
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; p>
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; p>
MOV AH, 09H
INT 21H
MOV AH, 4CH
INT 21H
CÓDIGO FINALIZA
FINALIZAR INICIO