Red de conocimiento informático - Conocimiento sistemático - Programación en ensamblador

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)

;

; 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

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>

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 .$'

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

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

Código FINALIZA

FINALIZAR Inicio ;La compilación termina aquí