Programación en ensamblador
Este programa está compilado y se ejecuta correctamente
Segmento de código
Supongamos CS:Code,DS:Code
; ------------------------------------------------ de de 2011 Cadena de dirección (Str_Addr)
; Entrada:
; Str_Addr=Dirección de cadena (requerida para estar en el segmento de datos)
; p>
; Ejemplo de uso: Salida PromptStr
Salida MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
FinM
; ------------------------------ ------------ ---------
; Función: Salida de retorno de carro y avance de línea
Enter_CTLF proc Near
empujar hacha
empujar dx
mov ah,02h
mov dl,0dh
int 21h
mov dl,0ah
int 21h
pop dx
pop ax
ret
Enter_CTLF endp
; ------ ----------------------------------- ----------------------- de letras minúsculas Número
Entrada: SI=Dirección de cadena
; Salir: BL=Número de letras minúsculas
Stitics proc Near
push cx
push ax
lodsb ;Leer el número real de caracteres ingresados
mov cl,al
xor ch,ch
xor bl,bl ;Borrar contador
@@Stitics: lodsb ;Leer un carácter
cmp al,'a'
jb $+8
cmp al,'z'
ja $+4
inc bl ; es una letra minúscula, contando
loop @@Stitics
pop ax
pop cx p>
ret
Stitics Endp
------------------------- ---------------------- de El número binario sin signo en AX se convierte en código ASCII decimal explícito y se envía a la pantalla
; Entrada: AX=número binario
; Salida: Se muestra en la posición actual del cursor Número de código ASCII convertido
Dec_ASCII Proc Near
push dx
empujar bx
empujar di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
d
ec di
cld
@@Dividir: xor dx,dx
div bx
o dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di p>
p>
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 dup(?)
Dec_ASCII FinP
;------------------------------------- -——
Prompt_Str1 db 'Ingrese la primera cadena: $'
Prompt_Str2 db 'Ingrese la segunda cadena: $'
Yes_nO db 'yes.$no .$' p>
String_Equ db 7,7,7,'Dos cadenas iguales: $'
DownCases db 'Los alfabetos en minúsculas: $'
DB más largo 'Cuanto más largo: $ '
Inicio: push cs
pop ds
push cs
pop es ; segmento adicional y segmento de código el mismo segmento
Salida Prompt_Str1; Solicitud para ingresar la primera cadena
lea dx,String1
mov ah,0ah
int 21h
call Enter_CTLF; genera un retorno de carro y un avance de línea
genera Prompt_Str2; p>
mov ah,0ah
int 21h
call Enter_CTLF; Genera un retorno de carro y avance de línea
call Enter_CTLF; salto de línea
cld
Salida String_Equ; pregunta si las cadenas son iguales
lea si,String1[1]; string
lodsb ;Lee este número
lea di,String2[1] ;El número real de caracteres ingresados en la segunda cadena
cmp al,[di ] ;¿Son iguales los números de caracteres?
jnz No_Equal1 ; Si el número de caracteres no es igual, entonces no es igual y la pantalla es: no.
mov cl,al
xor ch,ch
inc di
repe cmpsb ;El número de caracteres es igual, verifique si cada carácter es igual
jz $+12; son iguales, verifique el número de letras minúsculas en inglés en las dos cadenas
¿Son iguales?
No_Equal1: Salida Yes_nO[5]; Las dos cadenas no son iguales, muestra: no.
jmp $+10
Salida Yes_nO ;Ambas cadenas son iguales, muestra: sí.
call Enter_CTLF; genera un retorno de carro y un salto de línea
genera DownCases pregunta si el número de letras minúsculas es igual
lea si,String1[1] ;El número real de caracteres de entrada en la primera cadena
call Stitics ;Cuenta el número de letras minúsculas
mov bh,bl ;Temporalmente almacene las letras minúsculas de String1 Number
lea si,String2[1]; el número real de caracteres ingresados en la segunda cadena
llame a Stitics; cuente el número de letras minúsculas p>
cmp bh ,bl ;¿El número de letras minúsculas es igual?
jz $+12 ;Igual, muestra: sí.
Salida Yes_nO[5] ;Dos cadenas no son iguales, muestra: no.
jmp $ +10
Salida Yes_nO ;Dos cadenas son iguales, muestra: sí.
call Enter_CTLF ;Emite un retorno de carro y avance de línea
Salida más larga ;Solicita el número de caracteres en la cadena más larga
mov al,String1[1] ;El número real de caracteres ingresados en la primera cadena
cmp al,String2[1] ;La segunda cadena El número real de caracteres de entrada en una cadena
jae $+5 ;La cadena es más larga, muestra la longitud de la cadena
mov al,String2[1] ;La longitud del archivo cargado la cadena es más larga Más grande
xor ah,ah
call Dec_ASCII; Convierte el número binario sin signo en AX en código ASCII decimal explícito y envíalo a la pantalla de visualización
Exit_Proc: mov ah,4ch ;Finalizar programa
int 21h
Cadena1 db 50,?,50 dup(?)
Cadena2 db 50 p >
Código FINALIZA
FINALIZAR Inicio ;La compilación termina aquí