lunes, 21 de diciembre de 2009

Pilas y Colas De Manera Grafica

A continuación les presento un código, hecho por mí, en el cual intento representar el funcionamiento de las Pilas y Colas estáticas y dinámicas, esperando que sea de ayuda para algunos.

El código esta hecho en Java con NetBeans





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’.

sábado, 25 de abril de 2009

Empilar, Desempilar Y Un Ejemplo

Instrucciones Push (Empilar) y Pop (Desempilar)

La instruccion Push se utiliza para empilar un registro, ya que no se puede empilar un valor de forma directa. Por ejemplo

PUS AX

Nota: Recuerde utilizar registros completos, por ejemplo: AX, BX, CX, DX

Lo mismo sucede a la hora de desmpilar con la instruccion Pop, la cual desempila un registro previamente empilado.

POP AX


Ejemplo con Codigo ASCII.

El siguiente codigo es un ejemplo de manejo de caracteres, el cual imprime todo el codigo ASCII en columnas de 2o caracteres. Espero que el codigo sea lo bastante claro =D

El codigo fue compilado con MASM32.

Title Codigo ASCII
STACKS SEGMENT PARA STACK 'STACK'
;DB 64 DUP (0)
STACKS ENDS

DATA SEGMENT
COLUMNA DB 0 ;SE INICIALIZA LA VARIABLE COLUMNA
FILA DB 0 ;SE INICIALIZA LA VARIABLE FILA
DATA ENDS

CODESG SEGMENT
ASSUME CS:CODESG,DS:DATA,SS:STACKS
MAIN PROC FAR
PUSH DS
MOV AX, DATA
MOV DS, AX

LIMPIAR_PANTALLA:
MOV AX, 0600H ;LIMPIAR PANTALLA
MOV BH, 07H
MOV CX,0000H
MOV DX,184FH
INT 10H

MOV CX,0226
MOV AH,' '

CICLO:
MOV AH,02H ;COLOCA EL CURSOR
MOV BH,0H
MOV DH,FILA
MOV DL,COLUMNA
INT 10H

INC FILA ;SE INCREMENTA LA FILA PARA AUMENTA LA FILA
CMP FILA,20 ;SE COMPARA EL NUM DE FILAS CON 20
JNE MOSTRAR ;SE IMPRIMEN LOS PRIMEROS 20 CARACTERES

MOV FILA, 0 ;SE VUELVE A INICIALIZAR LA FILA EN CERO
ADD COLUMNA,10 ;SE INCREMENTA LA COLUMNA
MOSTRAR:

MOV AH,0EH ;IMPRIMIR 1 SOLO CARACTER
INT 10H
INC AL ;INCREMENTA EN AL PARA EL SIGUIENTE CARACTER
LOOP CICLO
CURSOR:
MOV AH,02
MOV DL,40
MOV BH,40
INT 10H

FIN:
MOV AX, 4CH
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN
END


Codigos de Ensamblador - Captura e Impresión De Texto

Leer carácter con Echo.

La lectura de un carácter con Echo permite que, el carácter es leído es impreso el mismo tiempo.

MOV AH,01H
INT 21H

Nota: El valor del carácter (en hexadecimal) es guardado en el registro AL

Leer carácter Sin Echo.

La lectura de un carácter Sin Echo simplemente captura el carácter pero no lo imprime. Se puede hacer mandando dos valores al registro AH: 07H ó 08H

MOV AH,07H
INT 21H

Nota: El valor del carácter (en hexadecimal) es guardado en el registro AL

Desplegar un carácter.

MOV AH,02H
MOV DL,caracter
INT 21H

Donde:
  • caracter debe de contener el valor en hexadecimal del carácter que se desea imprimir ó bien el mismo carácter encerrado entre apostrofes (ejemplo: MOV DL,'A'... ó MOV DL,41H)
Desplegar un mensaje.

MOV AH,09H
LEA DX,mensaje
INT 21H

Donde:
  • mensaje debe estar previamente declarado en el segmento de datos (mensaje DB 'HoLa MuNdO$'
  • Recuerden que todos los mensajes terminan con un símbolo de pesos ($)

viernes, 24 de abril de 2009

Codigos de Ensamblador - Fecha, Hora y Funciones de Pantalla

Buenas noches a todos.

Como lo dije en la entrada anterior, aquí les dejo unos cuantos códigos para realizar ciertas funciones en Lenguaje Ensamblador. Aquí mostrare algunas funciones de pantalla y entrada de datos (teclado). Esperando que ayude a muchos (^_^)

Obtener la fecha.

MOV AH,2AH
INT 21H

NOTA: La información se guarda en los siguientes registros:
  • AL = Dia de la semana(Domingo=0)
  • CX = Año
  • DH = Mes
  • DL = Día del mes
Obtener la Hora.

MOV AH,2CH
INT 21H

Nota: La información se guarda en los siguientes registros:
  • Hora = CH
  • Minutos = CL
  • Segundos = DH
  • Milisegundos = DL
Limpiar Pantalla.

MOV AX,0600H ;Llamada a la función
MOV BH,07H ;color de fondo y color de letra
MOV CX,0000H ;coordenadas de inicio
MOV DX,184FH ;coordenadas de fin
INT 10H


Donde:

  • Las coordenadas de inicio y de fin son para Fila-Columna, suponiendo que la pantalla esta en un tamaño de 25 filas por 80 columnas.
  • Las coordenadas de inicio y de fin se dan en valor hexadecimal, fila y columna
  • La primera columna es la numero 0 (cero) al igual que la primera fila es 0 (cero).Color de fondo; donde 0 = Negro y 7 = Blanco
Posicionar el Cursor.

MOV AH,02H ;Llamada a la función
MOV BH,00H ;pagina 0
MOV DH,05H ;Fila
MOV DL,10H ;Columna
INT 10H

Donde:
  • Es la pagina donde se va a colocar el cursor
  • El valor de Fila se da en hexadecimal
  • El valor de Columna se da en hexadecimal

Bienvenidos Uno y Todos!!!

Buenas noches a todos...


Esta es la primera entrada que realizo en un blog, hare todo lo posible por subir informacion lo mas seguido posible: codigos, trucos para windows, etc...

Como aviso y entretenimiento para todos, la proxima entrada sera sobre lenguaje emsamblador; codigos para limpiar pantalla, colocar el cursor.

Sin mas por el momento, me despido de uds.

Muchas gracias por la visita

(^_^)\../

ATTE

Mr. Purple