Problemas con el lenguaje ensamblador

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

;Fuente del título:/question/question/127760427.html

;Descripción del programa:

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

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

; 3. Suena según diferentes letras y horas;

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

; El programa fue compilado y depurado en el entorno integrado de MASMPlus 1.2 y se ejecutó correctamente.

Segmento de código

Asumir CS: Código, DS: Código

-

; ( Str_Addr)

; Entrada:

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

; Uso: Dirección de cadena de salida

; Ejemplo de uso: Salida PromptStr

Dirección de cadena de macro de salida

lead dx, Str_address

mov ah, 9

int 21h

EndM

; -

; Función: generar un carácter.

;Entrada: dl=Carácter a mostrar

Cerca de Output_Chr proc

Hacha de empuje

mov ah, 02h

int 21h

Barril explosivo

Remojado en agua para suavizar

Output_Chr endp

;-

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

Enfoque Output_CTLF

Empujar hacha

Empujar dx

mov ah, 02h

mov dl, 0dh

int 21h

mov dl, 0ah

int 21h

Dx popular

Barril explosivo

Remojado en agua para suavizarlo

Output_CTLF endp

-

; El número binario sin signo se convierte en código ASCII decimal explícito y se envía a la pantalla para su visualización.

; Entrada: AX=número binario

; Salir: Muestra el código ASCII convertido en la posición actual del cursor.

Cerca de Dec_ASCII Proc

Push ds

Push cs

Cámara digital popular

Push cs

Elementos populares

Push dx

Push bx

Push di

mov bx, 10

lea di, @@Temp_Save[6]

mov byte pointer[di], '$'

2 de diciembre

cld

@@Dividir: xor dx, dx

División bx

o dl, 30h

mov [di], dl

Diciembre 2

Prueba ax, 0ffffh

jnz @ @except

Empresa di

Recomendar di

pop dx

mov ah, 9

int 21h

pop di

pop bx

Popular dx

Cámara digital popular

Remojada en agua para suavizarla

@@Temp_Save db 7 dup(?)

Dec_ASCII EndP

-

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

; parámetro de entrada: AL=letra especificada.

Static_letter adelante acercándose

Pulsar cx

Pulsar bx

mov bx, Aparece Letter_Table, letras y su hora y dirección.

mov cx, letras; el número de letras diferentes que aparecen.

jcxz@@primera vez

@@Find_Letter: cmp al,[bx]

jnz $7

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

jmp @ @ Se encuentra, cuenta 1 vez y regresa.

Compañía bx

Compañía bx

bucle @@Find_Letter

@@First_Time: mov [bx], al; , agregando estadísticas.

mov byte ptr [bx][1], 1; cuenta 1 vez

inc letras; el número de letras diferentes que aparecen 1

@@Encontrado: pop bx

pop cx

remojado en agua para suavizar

static_letterEndp

;-

; : Retrasa los tics del reloj especificado.

Entrada:

Didas = tics del reloj (18,2 tics en 1 segundo, 182 tics en 10 segundos.

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

El retraso hacia adelante está cerca

Empuje dx

Empuje cx

XOR ax, ax

int 1ah

Película cs: @@Times, dx

mov cs: @@Times[2], cx

Read_Time: XOR ax, ax

int 1ah

Subdx, cs: @@times

sbb cx, cs: @@Times[ 2 ]

cmp dx, Didas

jb tiempo de lectura

Popular cx

Popular dx

Empapado suave

@@Times dw 0, 0

final retrasado

; -

didas = 3 reloj corriendo

Forma_letra dw? ;Las cartas tal como aparecieron, junto con su hora y dirección.

Letra dw 0; el número de letras diferentes que aparecen.

Prompt_Str db 'Ingrese una cadena:',13,10,'$'

"Presione db 7,13,10,13,10", se quejó el demandante. Presione cualquier tecla para salir...$'

;-

Inicio: presione cs

Cámara digital popular

Presione cs< / p>

Elementos populares

Mensaje de salida _ Str Mensaje del artículo en inglés

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

Ah, 0ah

int 21h

Salida de llamada _ CTLF; retorno de carro de salida y caracteres de avance de línea

lea si, Buffer[1]; dirección

cld

lodsb lee este número

mov di, si

Movie cl, al

XOR ch , ch

Agrega di, cx

inc letras di y su hora y dirección.

mov letter_table, di; guarda esta dirección

Traducción: lodsb lee un carácter

mov ah, al

O ah, 20h se procesa con letras minúsculas

cmp, ' a '

jb Siguiente _ Uno no es una letra, no hay conversión.

cmp ah, 'z'

ja Siguiente _ Uno no es una letra, no hay conversión.

Llame a Statics_Letter para averiguar si aparece la letra especificada y cuente el número de apariciones.

xor al, descripción de la clave 20h: minúscula a mayúscula, mayúscula a minúscula

mov [si-1], al; escribir de nuevo en la posición original

Siguiente: Traducción en bucle

mov byte ptr[si], ' $ '; reemplace el retorno de carro con ' $ '

mov cx, número de letras diferentes que aparecen.

mov si, Carta_Tabla aparece en la carta con su hora y dirección.

disp_Letter: lodsw; lee una palabra

mov dl, al; la letra que aparece

Llama a Output_Chr para mostrar un carácter

Move dl, ':'

Llamar Output_Chr

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

Llamar Output_Chr

Operación XOR

p>

xchg al, ah; AX = el número de veces que aparece la letra.

Llame a Dec_ASCII para 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.

Retraso de llamada; retraso de un sexto de segundo

Salida de llamada_CTLF

Visualización de letras en bucle

Salida de llamada_CTLF

p>

Búfer de salida[2]; genera el artículo convertido.

;-

Exit_Proc: La salida Press_Key indica que la operación se completó, presione cualquier tecla para finalizar el programa.

mov ah, 1

int 21h

mov ah, 4ch fin del programa

int 21h

Buffer Base de datos 255; búfer en libras esterlinas.

Fin del código

El fin comienza; este es el final de la compilación