Ensamblador
3
- Realizar un programa que muestre la tabla de caracteres ASCII por pantalla:
;------------------------------------------------------------------------------
; Programa que muestra la tabla de caracteres ASCII por pantalla
;------------------------------------------------------------------------------
PANTALLA equ 0B800h
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h dup(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume CS:code, SS:pila
START:
mov ax,PANTALLA
mov ds,ax
xor bx,bx
xor al,al
mov cx,256 ;Numero de caracteres que contiene la tabla ASCII
mostrar_ascii:
mov [bx],al ;Escribirlo en la coordenada de la pantalla
inc bx ;
inc bx ;Pasar a la siguiente coordenada
inc al ;Pasar al siguiente caracter
loop mostrar_ascii
mov ax,4C00h ;
int 21h ;Terminar el programa
CODE ENDS
END START
- Este programa se encarga de dibujar un cuadrado en la pantalla, ponerlo con fondo blanco
y rellenarlo con caracteres 'V':
PANTALLA equ 0B800h
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h dup(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume CS:code, SS:pila
START:
mov ax,PANTALLA
mov ds,ax
mov dl,0 ;Primera linea en la que empezaremos a pintar
mov cx,10 ;Numero de lineas que vamos a tener
BucleLineas:
push cx
mov dh,0 ;Primera columna
mov cx,20 ;Numero de columnas
BucleColumnas:
mov al,80*2 ;Bytes por linea
mul dl ;Por el numero de linea
mov bx,ax
mov al,2 ;2 bytes por columna
mul dh ;Por el numero de columna
add bx,ax
mov word ptr [bx],7056h ;Fondo blanco y letra 'V'
inc dh ;Siguiente columna
loop BucleColumnas
pop cx ;Recuperamos el contador de las lineas
inc dl ;Pasar a la siguiente linea
loop BucleLineas
mov ax,4C00h
int 21h
CODE ENDS
END START
- Este programa le pregunta al usuario si desea continuar o no hasta que
se pulse la tecla 'N' o 'n':
cr equ 13 ;retorno de carro
lf equ 10 ;alimentacion de linea
;------------------------------------------------------------------------------
;Definicion del segmento de datos
;------------------------------------------------------------------------------
DATOS SEGMENT
DeseaContinuar db cr,lf,'Desea continuar? S/N: '
db'$'
continuando db ' Continuando...',cr,lf
db'$'
LetraErronea db ' La tecla pulsada es incorrecta.',cr,lf
db'$'
DATOS ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h dup(?)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume CS:code, DS:datos, SS:pila
START:
mov ax,datos
mov ds,ax
jmp continuar ;Saltamos a la etiqueta CONTINUAR
INICIO:
lea dx,continuando ;
mov ah,9 ;
int 21h ;Mensaje de que seguimos en el programa
jmp continuar ;Salto para preguntar si se desea continuar
ERROR:
lea dx,LetraErronea ;
mov ah,9 ;Mensaje de que la letra introducida
int 21h ;no es correcta
CONTINUAR:
lea dx,DeseaContinuar ;
mov ah,9 ;
int 21h ;Mostrar pregunta para ver si desea continuar
mov ah,1 ;Esperar a que se pulse una tecla
int 21h ;y mostrarla por pantalla
cmp al, 'S' ;
je inicio ;
cmp al, 's' ;
je inicio ;Desea continuar
cmp al, 'N' ;
je salir ;
cmp al, 'n' ;
je salir ;No desea continuar, terminamos
jmp error ;La tecla pulsada no es 'S', 's', 'N' ni 'n'
;Se va a mostrar un mensaje de error. Saltamos
;a la etiqueta ERROR
salir:
mov ax, 4C00h
int 21h
CODE ENDS
END START
- Realizar un programa que cambie todas las letras de la pantalla a minusculas:
PANTALLA equ 0B800h
;------------------------------------------------------------------------------
;Definicion del segmento de pila
;------------------------------------------------------------------------------
PILA SEGMENT STACK "STACK"
db 40h dup(0)
PILA ENDS
;------------------------------------------------------------------------------
;Definicion del segmento de codigo
;------------------------------------------------------------------------------
CODE SEGMENT
assume CS:code, SS:pila
START:
mov ax,pantalla ;
mov ds,ax ;DS apunta a la direccion de la pantalla
xor bx,bx
mov cx,2000 ;80 filas x 25 columnas
cambia_minus:
mov al,ds:[bx] ;Obtenemos el caracter que hay en la pantalla
;en la coordenada indicada
cmp al,byte ptr 'A' ;Comprobar que este entre la letra 'A'
jb siguiente ;
cmp al,byte ptr 'Z' ;y la letra 'Z'
ja siguiente ;Si no es asi pasamos al siguiente caracter
add al,32 ;Para pasar de mayusculas a minusculas
;hay que sumar 32 para movernos en la
;tabla ASCII de las mayusculas a las minusculas
mov ds:[bx],al ;Escribimos en la pantalla el caracter cambiado
;a minusculas
siguiente:
inc bx ;
inc bx ;Pasamos a la siguiente coordenada
loop cambia_minus
mov ax,4C00h ;
int 21h ;Terminamos el programa
CODE ENDS
END START
|
|