Lenguaje Asembler En Emu8086
Enviado por humbertunam • 15 de Septiembre de 2014 • 1.226 Palabras (5 Páginas) • 567 Visitas
CONVERTIR CADENA DE MINUSCULA A MAYUSCULA
; Convertir minusculas a MAYUSCULAS
stacksg segment para STACK 'stack'
stacksg ends
datasg segment
PALABRA DB 64H DUP (?) ;SE DECLARA LA VARIABLE "PALABRA" DE TAMAÑO 100 (64H)
datasg ends
codesg segment
assume cs:codesg, ds:datasg, ss:stacksg
main proc far
prologo:
push ds
xor ax,ax
push ax
mov ax,datasg
mov ds,ax
LEA SI,PALABRA ; SE CARGA LA VARIBALE "PALABRA" EN 'SI'
INICIO:
MOV AH,01H ;SE CAPTURA EL CARACTER
INT 21H
CMP AL,0DH ;SE COMPARA CON ENTER
JE FINPALABRA ;SI ES IGUAL SALTA A 'FINPALABRA'
CMP AL,20H ;SE COMPARA CON EL ESAPACIO
JE ESPACIO ;SI ES IGUAL SALTA A ESPACIO
CMP AL,61H ;SE COMPARA CON a (MINUSCULA)
JB INICIO ;SI ES MENOR REGRESA A LA ETIQUETA INICIO
CMP AL,7AH ;SE COMAPRA CON z (MINUSCULA)
JA INICIO ;SI ES MAYOR SALTA A INICIO
;SI LA TECLA PRESIONADA ESTA ENTRE EL RAGO 61H Y 7AH
SUB AL,20H ;SE RESTA 20H A EL CARACTER ALMACENADO EN 'AL'
MOV [SI],AL ;SE MUEVE 'AL' A LA PRIMERA POSISION DE 'SI'
INC SI ;SE INCREMENTA 'SI'
JMP INICIO ;SE REGRESA A INCIO HASTA QUE SE PRESIONE ENTER
;SI SE PRECIONA UN ESPACIO
;SOLO SE INCREMENTE EL VALOR DE 'SI'
;Y SE REGRESA A INICIO
ESPACIO:
INC SI
JMP INICIO
FINPALABRA:
;PARA COMPROBAR SI LA CADENA ESTA VACIA
;SE HACE LO SIGUIENTE
MOV CX,0000H
CMP SI,CX ;SE COMPARA 'SI' CON 0 (CERO)
JE INICIO ;SI ES IGUAL REGRESA A INICIO
;SINO ESTA VACIA...
INC SI ;SE INCREMENTA 'SI'
MOV AL,'$' ;SE ASIGNA EL CARACTER DEL FIN DE LA CADENA A 'AL'
MOV [SI],AL ;SE CARGA EN 'SI'
;AQUI SOLO SE DESPLIEGA LA CADENA
;YA CONVERTIRDA EN MAYUSCULAS
MOV AH,09H
LEA DX,PALABRA
INT 21H
finalizar:
mov ah,4ch
int 21h
main endp
codesg ends
end main
end
COMPARAR DOS CADENAS
.model small
.stack 64
.data
;Simples mensajes
msj1 db 0ah,0dh, 'Cadena 1: ', '$'
msj2 db 0ah,0dh, 'Cadena 2: ', '$'
msj3 db 0ah,0dh, 'Son iguales ', '$'
msj4 db 0ah,0dh, 'Son diferentes ', '$'
vec db 50 dup(' '), '$' ;Vector 1
vec2 db 50 dup(' '), '$' ;Vector 2
.code
inicio:
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj1 ;Imprimimos el msj1
int 21h
lea si,vec ;Cargamos en el registro si al primer vector
pedir1:
mov ah,01h ;Pedimos un carácter
int 21h
mov [si],al ;Se guarda en el registro indexado al vector
inc si
cmp al,0dh ;Se cicla hasta que se digite un Enter
ja pedir1
jb pedir1
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj2 ;Imprime mensaje 2
int 21h
lea si,vec2 ; Se carga en SI el vector2
pedir2: ;Mismo procedimiento que pedir1
mov ah,01h
int 21h
mov [si],al
inc si
cmp al,0dh
ja pedir2
jb pedir2
mov cx,50 ;Determinamos la cantidad de datos a leer/comparar
mov AX,DS ;mueve el segmento datos a AX
mov ES,AX ;Mueve los datos al segmento extra
compara:
lea si,vec ;cargamos en si la cadena que contiene vec
lea di,vec2 ;cargamos en di la cadena que contiene vec2
repe cmpsb ;compara las dos cadenas
Jne diferente ;si no fueron igual
je iguales ;Si fueron iguales
iguales:
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj3 ;Imprime que son iguales y finaliza el programa.
int 21h
mov ah,04ch
int 21h
diferente:
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset msj4 ; Imprime que son diferentes y finaliza el programa.
int 21h
mov ah,04ch
int 21h
end
UNA CADENA ESTA CONTENIDO DENTRO DE OTRA CADENA
org 100h
mov si, 0 ;ponemos si en 0
comienzo:
mov al, msg2[0] ;copiar la primera letra de la palabra
...