En este post veremos una serie de instrucciones útiles que podemos usar en Assembler
|
Image tomada de http://profile.ak.fbcdn.net |
Modo Video
Para tener un modo video en ASM debemos utilizar la interrupción 10h que nos dará un tamaño de 320x200 = 13h
mov ax,0013h
int 10h
Para salir del modo dos
mov ax,4c00h
int 21h
Leer Teclado
Instrucción que sirve para leer una tecla presionada y después de soltar la tecla el caracter se escribe en pantalla
mov ah,01h
int 21h
El valor (caracter) lo guarda en el registro
al
La siguiente instrucción es útilizada para leer una tecla presionada pero no escribe nada en pantalla
mov ah,07h
int 21h
El valor (caracter) lo guarda en el registro
al
Esta instrucción verifica si se presiona una tecla o no, solo sirve para eso XD y guarda el valor en el registro al
mov ah,0bh
int 21h
Para comprobar que si se presionó uno tecla se verifica con cmp y el número 255
cmp al,255
Escribir en pantalla
Para escribir un texto en pantalla
mov ah,02 ;Sirve para posicionarse
mov bh,00
mov dh,05h ;Posicion en y
mov dl,05h ;Posicion en x
int 10h
mov ah,09
mov dx,texto ;Escribe el texto
int 21h
Donde texto es una variable de la siguiente manera:
texto db “Mugre practica XD$”
El
$ siempre se tiene que colocar al final, ¿por qué?, eso si no se XD.
Para escribir un caracter, solo se tiene que colocar el código ascii en este caso el 55 el cual es el número 7
mov dl,55
mov ah,02h
int 21h
Pintar en pantalla un pixel
mov ah,0ch ;Escribir en pantalla
mov al,02 ;Color 0-15
mov bh,0 ;Pagina (0 por default en esta aplicación)
mov cx,15 ;Posicion X
mov dx,16 ;Posicion Y
int 10h
Los macros son parecidos a los métodos
Ejemplo sintaxis:
macro <nombre> <parametro>,<parametro>,....<parametro> {
;<codigo>
;. . .
;. . .
;<codigo>
}
Macros
Si se quiere tener etiquetas dentro de los macros se debe declara de la siguiente manera dentro del macro:
local <nombre_etiqueta>
Si esto no se hace y si se llama dos veces al mismo macro entonces lanza un error en el cual indicará que la etiqueta esta repetida.
Ejemplo de macro
macro imprime_caracter {
local et
xor si,si ;limpia el registro si
et:
mov dx,si
add dx,48
mov ah,02h
int 21h
inc si
cmp si,10
jne et ;si no es igual a 10 entonces regresa al ciclo
}
Para llamar un macro solo se coloca
imprime_caracter
Y si el macro tiene parametros:
imprime_caracter val,val2
Se puede pasar por parámetro variables como
texto db “parametro $”
También literales como 19, 20, 05h, a2h e incluso registros bx,dx,ax etc.
Colocó dos ejemplos uno sin macros y el otro con macros:
Sin Macros:
Con Macros:
Resultado del ejemplo -Compilado con FASM-
Espero que te sea útil :D. Dios te bendiga.