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