miércoles, 6 de mayo de 2009

Ensamblador - Convertir Minusculas a Mayusculas

Buenas noches...

El siguiente programa hace una conversion de minusculas a MAYUSCULAS. Utilizando varibales. Este programa fue conpilado con MASM32 utilizando DOSBox, el cual es un emuldor de MS-DOS.

Codigo:

Title 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

martes, 5 de mayo de 2009

Ensamblador - Manejo de Variables

Manejo de Variables

Las variables son identificadores que hacen referencia a una posición de memoria donde se guarda algún valor útil para el programa y que puede ser modificado durante la ejecución de éste.

Las varibales se declaran en la segcion de datos (data segment).

Declaracion:

VARIABLE DB TAMAÑO DUP (VALOR)


Donde:

VARIABLE.- Es el nombre de la variable.
DB.- Significa que es de tipo byte.
TAMAÑO.- Es la longitud de la variable.
DUP (VALOR).- Es el valor por defecto para cada uno de los bytes de la variable.

Ejemplos de Declaración:

CADENA1 DB 14H DUP (?)

Crea una variable llamada CADENA1 de tipo byte con 20 posiciones
decimales y cada posición con cualquier valor.


CADENA2 DB 14H DUP (‘0’)

Crea una variable llamada CADENA2 de tipo byte con 20 posiciones
decimales y cada posición con el carácter ‘0’.