EJEMPLOS Y EJERCICIOS RESUELTOS Ejemplo: el siguiente código borra la pantalla (estableciendo el color 0 a todos los pixels): MOV MOV AX,0A000H ES,AX MOV CX,320*200 ; ESTA OPERACIÓN LA REALIZA EL ENSAMBLADOR XOR DI,DI CLD REP STOSB o podemos escribir cada línea de su propio color: CLD XOR DI,DI MOV AX,0A000H MOV ES,AX MOV AX,0FF00H BUCLE: MOV CX,320 REP STOSB INC AX JNZ BUCLE Nótese que asignando a AX el valor ff00h nos ahorramos una comparación en cada bucle, ya que el propio INC actualiza los flags. Ejemplo: title programa que imprime si es mayor de edad o no edad db 15 mayor db 'ERES MAYOR DE EDAD...','$' menor db 'ERES MENOR DE EDAD...','$'
cmp edad,18 jae b20 lea dx,menor ;carga la direccion de la indicacion ;llama al dos jmp b21 ;salta a la etiqueta b21 para salir lea dx,mayor ;carga la direccion de la indicacion ;llama al dos title programa que imprime si es mayor de edad o no edad db 15 mayor db 'ERES MAYOR DE EDAD...','$' menor db 'ERES MENOR DE EDAD...','$' cmp edad,18 jae b20 lea dx,menor ;carga la direccion de la indicacion ;llama al dos jmp b21 ;salta a la etiqueta b21 para salir lea dx,mayor ;carga la direccion de la indicacion ;llama al dos
Ejercicio 1. Desarrolle un programa en ensamblador que pase el contenido de una variable a otra. page 60,132 title prog02 Operaciones de movimiento pilasg segment para stack 'stack' dw 32 dup(0) pilasg ends datossg segment para 'data' cad1 db 'itslv' cad2 db 5 dup(?) datossg ends codigosg segment para 'code' inicio proc far assume ss:pilasg,ds:datossg,cs:codigosg mov ax,datossg lea bx,cad1 lea di,cad2 mov [di],al ;mover la letra i mov [di],al ;mover la letra t mov [di],al ;mover la letra s mov [di],al ;mover la letra l mov [di],al ;mover la letra v Ejercicio 2. Desarrolle un programa en ensamblador que tenga una variable para guardar el nombre de una persona, otra variable para guardar los apellidos de la persona y una ultima variable donde guardaremos todo el nombre completo. El programa deberá pasar el contenido de la variable que tiene el nombre a la variable donde se guardara el nombre completo y posteriormente pasar el contenido de la variable que tiene los apellidos a la misma variable donde se tendrá el nombre completo.
page 60,132 title p03asm (EXE) Operaciones de movimiento extendidos nom db 'FAUSTINO','$' ape db 'VAZQUEZ','$' nomcom db 'ABCDEFGHIJKLMNO','$' mov cx,08 lea si,nom lea di,nomcom mov al,[si] mov [di],al inc si dec cx jnz b20 mov cx,07 lea si,ape mov al,[si] mov [di],al inc si dec cx jnz b21 lea dx,nomcom ;carga la direccion de la indicacion ;llama al dos
page 60,132 title programa que imprime un marco car db '*','$' col db 0 ren db 0 ;limpiar pantalla mov ax,0600h mov bh,71h mov cx,0000h mov dx,184fh ;imprimir lineas horizontales mov cx,80 a10: ;colocar cursor mov ah,02h mov bh,00 mov dh,0 ;renglon 0 mov dl,col ;columna ;imprimir * mov ah,09h lea dx,car ;colocar cursor mov ah,02h mov bh,00 mov dh,22 mov dl,col ;imprimir * mov ah,09h lea dx,car inc col loop a10 ;imprimir lineas verticales mov cx,23 a20: ;colocar cursor mov ah,02h mov bh,00 mov dh,ren mov dl,0 ;imprimir mov ah,09h
lea dx,car ;colocar cursor mov ah,02h mov bh,00 mov dh,ren mov dl,79 ;imprimir mov ah,09h lea dx,car inc ren loop a20 title programa que imprime si es mayor de edad o no edad db 15 mayor db 'ERES MAYOR DE EDAD...','$' menor db 'ERES MENOR DE EDAD...','$' cmp edad,18 jae b20 lea dx,menor ;carga la direccion de la indicacion ;llama al dos jmp b21 ;salta a la etiqueta b21 para salir lea dx,mayor ;carga la direccion de la indicacion ;llama al dos
Ejercicios Propuestos: Ejercicio 1: 1. Calcule la sucesión de Fibonacci para los 10 primeros términos de la serie, utilizando para ello un ciclo controlado por la instrucción Loop. La sucesión está formada por números, de modo tal que cada número es la suma de los dos anteriores- Ejemplo: 1,1,2,3,5,8,13,21,34,55. RESPUESTA AL EJERCICIO PROPUESTO: Programa: Loop.ASM Descripción:.COMMENT * *.MODEL tiny. CODE Inicio: ; Punto de entrada al programa Mov AX,0; AX=0 Mov BX,1; BX=1 Estos son los dos primeros elementos 0+1=1 Mov CX,10 ; Repetir 10 veces Repite: Mov DX,AX ; DX=AX Add DX,BX ; DX=AX+BX Mov AX,BX ; Avanzar AX Mov BX,DX ; Avanzar BX Loop Repite ; siguiente número Mov AX,4C00h ; Terminar programa y salir al DOS Int 21h ; Ejercicio 2. Desarrolle un programa en ensamblador que pase el contenido de una variable a otra. RESPUESTA AL EJERCICIO PROPUESTO: title prog02 Operaciones de movimiento pilasg segment para stack 'stack' dw 32 dup(0) pilasg ends datossg segment para 'data' cad1 db 'itslv' cad2 db 5 dup(?) datossg ends codigosg segment para 'code' inicio proc far assume ss:pilasg,ds:datossg,cs:codigosg mov ax,datossg lea bx,cad1 lea di,cad2 mov [di],al ;mover la letra i mov [di],al ;mover la letra t
mov [di],al ;mover la letra s mov [di],al ;mover la letra l mov [di],al ;mover la letra v Ejercicio 3. Desarrolle un programa en ensamblador que tenga una variable para guardar el nombre de una persona, otra variable para guardar los apellidos de la persona y una ultima variable donde guardaremos todo el nombre completo. El programa deberá pasar el contenido de la variable que tiene el nombre a la variable donde se guardara el nombre completo y posteriormente pasar el contenido de la variable que tiene los apellidos a la misma variable donde se tendrá el nombre completo. RESPUESTA AL EJERCICIO PROPUESTO: title p03asm (EXE) Operaciones de movimiento extendidos nom db 'FAUSTINO','$' ape db 'VAZQUEZ','$' nomcom db 'ABCDEFGHIJKLMNO','$' mov cx,08 lea si,nom lea di,nomcom mov al,[si] mov [di],al inc si dec cx jnz b20 mov cx,07 lea si,ape mov al,[si] mov [di],al inc si dec cx jnz b21 lea dx,nomcom ;carga la direccion de la indicacion ;llama al dos