Red de conocimiento del abogados - Respuesta jurídica de la empresa - Urgente~Urgente~Urgente~Preguntas sobre programación en lenguaje ensamblador

Urgente~Urgente~Urgente~Preguntas sobre programación en lenguaje ensamblador

; Categoría de pregunta: convierta letras mayúsculas y minúsculas en un artículo en inglés a mayúsculas y minúsculas; cuente el número de apariciones de cada letra, muéstrela en la pantalla y emita un pitido por cada letra mostrada.

p>

; Fuente de la pregunta: /question/127760427.html

; Instrucciones del programa:

1. Solicite ingresar un artículo en inglés de no más de 254 caracteres; /p >

; 2. Cuente el número de apariciones de cada letra, trate las letras mayúsculas y minúsculas de manera diferente como letras diferentes (los caracteres no alfabéticos no se cuentan) y, al mismo tiempo, convierta las letras mayúsculas y minúsculas en entre sí

; 3. Muestra diferentes letras y el número de veces que aparecen, y suena una vez

; 4. Muestra el artículo en inglés convertido

; Este programa está compilado en el entorno integrado MASMPlus 1.2. Después de la depuración, se ejecuta correctamente.

Segmento de código

Supongamos CS:Code,DS:Code

-------- ----------; -----------

; Función: Mostrar la cadena de la dirección especificada (Str_Addr)

; Entrada:

p>;

; Str_Addr=Dirección de cadena (debe estar en el segmento de datos)

Uso: Salida Str_Addr

; Ejemplo de uso: Salida PromptStr

Salida MACRO Str_Addr

lea dx,Str_Addr

mov ah,9

int 21h

EndM

- -------------------------------------------------- ------ de un carácter /p>

; Entrada: dl=Carácter a mostrar

Output_Chr proc Cerca

empujar hacha

mov ah,02h

int 21h

pop ax

ret

Output_Chr endp

--- --------- ----------------------------

Función: Salida de retorno de carro; y avance de línea

Output_CTLF proc Near

empujar hacha

empujar dx

mov ah,02h

mov dl,0dh

int 21h

p>

mov dl,0ah

int 21h

pop dx

pop ax

ret

Output_CTLF endp

-----------------------; --------

Función: Convertir el número binario sin signo en AX en código ASCII decimal explícito y enviarlo a la pantalla para su visualización

; =número binario

; Salir: muestra el número de código ASCII convertido en la posición actual del cursor

Dec_ASCII Proc Near

push ds

empujar cs

pop ds

empujar cs

pop es

empujar dx

empujar bx

push di

mov bx,10

lea di,@@Temp_Save[6]

mov BYTE ptr [di],'$'

dec di

cld

@@Dividir: xor dx,dx

div bx

o dl ,30h

mov [di],dl

dec di

prueba ax,0ffffh

jnz @@Divide

inc di

push di

pop dx

mov ah,9

int 21h

pop di

pop bx

pop dx

pop ds

ret

@@Temp_Save db 7 dup(?)

Dec_ASCII EndP

---------------------------------; - -----

Función: Encuentra si aparece la letra especificada y cuenta el número de apariciones

Parámetro de entrada: AL=letra especificada

; Statics_Letter proc Near

push cx

push bx

mov bx,Letter_Table ;Direcciones de letras que han aparecido y su número de veces

mov cx,Cartas ;Apariencia Número de letras diferentes pasadas

jcxz @@First_Time

@@Find_Letter: cmp al,[bx]

jnz $+ 7

inc BYTE ptr [bx][1] ;Cuenta 1 vez

jmp @@Finded ;Ocurre, regresa después de contar 1 vez

inc bx

inc bx

loop @@Find_Letter

@@First_Time: mov [bx],al ;primera aparición, agregar a la tabla de estadísticas

mov BYTE ptr [bx][1],1 ;Contar 1 vez

inc Letras ;Número de letras diferentes que han aparecido +1

@@Encontrado: pop bx

pop cx

ret

Statics_Letter Endp

------------------; -- -----------------

Función: Retrasar el número especificado de tics de reloj

;

; Didas = número de tics del reloj (aproximadamente 18,2 tics en 1 segundo, 182 tics en 10 segundos).

Si el retraso no es 10 veces segundos, el error es ligeramente mayor)

Delay Proc Near

push dx

push cx

xor ax,ax

int 1ah

mov cs:@@Times,dx

mov cs:@@Times[2],cx

Read_Time: xor ax,ax

int 1ah

sub dx,cs:@@Times

sbb cx,cs:@@Times[ 2]

cmp dx,Didas

jb Read_Time

pop cx

pop dx

ret p>

@@Times dw 0,0

Retraso finalP

-------------------; --------------------

Didas = 3; Número de ticks del reloj

Letter_Table dw?; y su número de veces Dirección

Letras dw 0 ;El número de letras diferentes que han aparecido

Prompt_Str db 'Por favor ingrese una cadena:',13,10,'$'

Press_Key db 7,13,10,13,10,'El archivo completo presiona cualquier tecla para salir...$'

-------- -- -------------------

Inicio: push cs

pop ds

push cs

pop es

Salida Prompt_Str ;Solicitar artículo en inglés

lea dx,Buffer ;Dirección del búfer de cadena de artículo en inglés

mov ah, 0ah

int 21h

call Output_CTLF ;Emite un retorno de carro y un salto de línea

lea si,Buffer[1] ;Dirección del número de carácter de entrada real

cld

lodsb ;Lee este número

mov di,si

mov cl,al

xor ch, ch

add di,cx

inc di ;Dirección de las letras que han aparecido y su número de veces

mov Letter_Table,di ;Guardar esta dirección

Traducir: lodsb ;Leer un carácter

mov ah,al

o ah,20h ;Procesarlo como letras minúsculas

cmp ah,'a'

jb Next_One ;No es una letra, no convertir

cmp ah,'z'

ja Next_One ;No es una letra, no convertir

llame a Statics_Letter; busque si aparece la letra especificada y cuente el número de apariciones

xor al,20h; instrucciones clave: convierta minúsculas a mayúsculas, convierta mayúsculas a minúsculas

mov [si-1],al

;Vuelve a escribir en la posición original

Next_One: bucle Traducir

mov BYTE ptr [si],'$' ;Reemplaza el retorno de carro con '$'

mov cx,Letras;El número de letras diferentes que han aparecido

mov si,Letter_Table;Las direcciones de las letras y sus tiempos

Disp_Letter: lodsw;Leer una palabra

mov dl,al ;letras aparecidas

llamar a Output_Chr ;mostrar un carácter

mov dl,':'

llamar a Output_Chr

mov dl,7 ;código de carácter de timbre

llamada Output_Chr

xor al,al

xchg al,ah ;AX= donde aparecen las letras Número de veces

call Dec_ASCII; convierte el número binario sin signo en AX en código ASCII decimal explícito y lo envía a la pantalla de visualización

call Delay un sexto de segundo

call Output_CTLF

loop Disp_Letter

call Output_CTLF

Output Buffer[2]; genera el artículo convertido

;--- ----------------------------------------- of of Press_Key ;Solicita que la operación sea completado, presione cualquier tecla para finalizar el programa

mov ah,1

int 21h

mov ah,4ch ;Finalizar el programa

int 21h

Buffer db 255;String buffer

Código FINALIZA

FIN Inicio;La compilación termina aquí