Ensamblador

  0   1   2   3   4   5   6   7   8   9   10

3
  1. 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
  2. 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
  3. 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
  4. 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

www.victorsanchez2.com
victorsanchez2 en gmail.com
victorsanchez2 en jabberes.org
http://www.linkedin.com/in/victorsanchez2
victorsanchez2.asc (Huella digital: 4D05 8831 CB70 5F22 D836 73FF BA0A 5C66 BBB9 AC5A)
Tf: 659 35 74 53

Valid XHTML 1.0 Transitional