Red de conocimiento de divisas - Apertura de cuenta en divisas - 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 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: Código, DS: Código

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

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

; Entrada:

p>

; Str_Addr = dirección de cadena (se requiere que esté en el segmento de datos)

; Uso: Salida Str_Addr

; : Salida PromptStr

Salida MACRO Str_Addr

lea dx, Str_Addr

mov ah, 9

int 21h

FinM

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

; Función: Generar un carácter

Entrada: dl=Carácter a mostrar

Output_Chr proc Cerca de

empujar hacha

mov ah, 02h

int 21h

pop hacha

ret

Output_Chr endp

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

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

Output_CTLF proc Near

push ax

push 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 de visualización para su visualización

Entrada: AX=número binario

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

Dec_ASCII Proc Cerca de

push ds

push cs

pop ds

push cs

pop es

empujar dx

empujar bx

empujar di

mov bx, 10

lea di, @@Temp_Save[ 6]

mov BYTE ptr [di], '$'

dec di

cld

@@Divide: xor dx, dx

div bx

o dl, 30h

p>

mov [di], dl

dec di

test ax, 0ffffh

jnz @@Divide

inc di

push di

pop dx

mov ah, 9

int 21h

pop di

p>

pop bx

pop dx

pop ds

ret

@@Temp_Save db 7 dup(?)

Dec_ASCII EndP

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

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

Parámetro de entrada: AL=letra especificada

Statics_Letter proc Near;

Statics_Letter proc Near

p>

push cx

push bx

mov bx, Letter_Table direcciones de letras que han aparecido y sus; número de veces

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

jcxz @@First_Time

@@Find_Letter: cmp al, [bx]

jnz $ 7

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

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

inc bx

inc bx

bucle @@Find_Letter

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

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

inc 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

; Entrada:

; Didas=clock Número de ticks (aproximadamente 18,2 ticks en 1 segundo, 182 ticks 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

Fin retrasadoP

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

Didas = 3; número de ticks del reloj

Letter_Table dw? ; letras que han aparecido 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 compulated. Presione cualquier tecla para salir...$'

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

Inicio: push cs

pop ds

push cs

pop es

Salida Prompt_Str; Solicitud para ingresar el artículo en inglés

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

mov ah, 0ah

int 21h

call Output_CTLF; Genera un retorno de carro y un avance de línea

lea si, Buffer[1]; dirección

cld

lodsb; leer 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; dirección

Traducir: lodsb; leer un carácter

mov ah, al

o ah, 20h procesar como letras minúsculas

cmp; ah, 'a'

jb Next_One; No es una letra, no convertida

cmp ah, 'z'

ja Next_One;

cal

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

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

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

Next_One: loop Translate

mov BYTE ptr [si], '$' reemplaza el carácter de retorno de carro con '$'<; /p>

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

mov si, Letter_Table; las direcciones de las letras y sus horas de aparición

Disp_Letter: lodsw; leer una palabra

mov dl, al; letras que han aparecido

llamar a Output_Chr; mostrar un carácter

mov dl, ':'

llamar a Output_Chr

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

llamar a Output_Chr

xor al, al

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

llame a Dec_ASCII; Convierta el número binario sin signo en AX en código ASCII decimal explícito y envíelo a la pantalla para su visualización

call Delay; retardo de un sexto de segundo

call Output_CTLF

loop Disp_Letter

call Output_CTLF

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

; - of ; indica que la operación se completó, presione cualquier tecla para finalizar el programa

mov ah, 1

int 21h

mov ah, 4ch End; el programa

int 21h

Buffer db 255; String buffer

Código FINALIZA

FIN Inicio La compilación termina aquí

上篇: ¿Cuánto cuesta comprar una casa en Chengdu con un pago mensual de alrededor de 18.000? 下篇: ¿Qué significa cuando finaliza la revisión preliminar del crédito hipotecario y queda pendiente la entrevista?
Artículos populares