Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Emu 8086
Emu 8086
Instalación de EMU8086
INTRODUCCION EMU8086
Este emulador posee una interfaz de usuario muy amistosa que permite familiarizarse con los
fundamentos de la programación en lenguaje ensamblador de forma muy intuitiva, aparte de eso
brinda una serie de recursos para ejecutar y depurar los programas. También tiene algunas
desventajas como el de no soportar algunas de las interrupciones más interesantes que posee el
sistema operativo y tampoco puede acceder a los puertos físicos (reales), sino que los emula
usando otros programas que ya están incluidos en su respectiva carpeta.
Ejercicios Propuestos
Ejecutar el programa hola mundo, y debe cambiar los mensajes de pantalla al español
Código
; The easiest way to print out "Hello, World!"
name "hi"
org 100h
jmp start ; jump over data declaration
msg: db "Hola mundo!", 0Dh,0Ah, 24h
start: mov dx, msg ; load offset of msg into dx.
mov ah, 09h ; print function is 9.
int 21h ; do it!
mov ah, 0
int 16h ; wait for any key....
ret ; return to operating system.
Compilar un programa en EMU8086 que indique lo siguiente: Nombre completo del estudiante,
Universidad, Fecha y materia.
Código
; The easiest way to print out "Hello, World!"
name "hi"
org 100h
jmp start ; jump over data declaration
msg: db "EDISON ALEJANDRO ENRIQUEZ TOBAR PUCESI (19 DE ABRIL DE
2018)COMPILADORES", 0Dh,0Ah, 24h
start: mov dx, msg ; load offset of msg into dx.
mov ah, 09h ; print function is 9.
int 21h ; do it!
mov ah, 0
int 16h ; wait for any key....
ret ; return to operating system.
Compilar un programa que permita comparar 2 números del 0 al 9.
Código
.model small
.stack 64
.data
mayor1 Db 'Es mayor','$'
menor1 Db 'Es menor','$'
igual1 Db 'Son iguales','$'
.code
inicio:
mov ah,01
int 21h
mov bl,al
mov ah,01
int 21h
mov cl,al
cmp bl,cl
ja mayor
jb menor
je igual
mayor:
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset mayor1
int 21h
jmp salir
menor:
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset menor1
int 21h
jmp salir
igual:
mov ax,@data
mov ds,ax
mov ah,09
mov dx,offset igual1
int 21h
jmp salir
salir:
mov ah,4ch
int 21h
end inicio
Compilar un programa que permita sumar 10 valores asignados a un vector
Código
name "calc-sum"
; number of elements:
mov cx, 10
mov al, 0
; bx is an index:
mov bx, 0
; sum elements:
; next byte:
inc bx
; store result in m:
mov m, al
mov bl, m
mov cx, 8
jz zero
shl bl, 1
loop print
int 21h
int 21h
int 21h
mov al, m
call print_al
mov ah, 0
int 16h
ret
; variables:
vector db 1,2,3,4,5,6,7,8,9,10
m db 0
print_al proc
cmp al, 0
jne print_al_r
push ax
int 10h
pop ax
ret
print_al_r:
pusha
mov ah, 0
cmp ax, 0
je pn_done
mov dl, 10
div dl
call print_al_r
mov al, ah
int 10h
jmp pn_done
pn_done:
popa
ret
endp
Compilar un programa sugerido por usted, como propuesta adicional.
Programa que tome tres cadenas, la primera y la tercera representan un número y la
segunda una operación, por ejemplo: “300”, “-“, “100” e imprima el resultado “200”
Código
; DEFINE_SCAN_NUM
; DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
mov si, 0
mov al, 0
cadAnum:
jz seguir
mov bl, 10
mul bl
sub cad1[si], '0'
inc si
loop cadAnum
seguir:
mov aux1, al
mov si, 0
mov al, 0
cadAnum2:
jz seguir2
mov bl, 10
mul bl
inc si
loop cadAnum2
seguir2:
mov bl, al
jz resta
jz suma
jz multi
cmp cad2, "/"
jz divi
resta:
sub al, bl
jmp fin
jmp fin
multi:
mul bl
jmp fin
divi:
div bl
jmp fin
fin:
mov bx, ax
mov ah,09
lea dx,msg
int 21h
mov ax, bx
call PRINT_NUM
ret
cad1 db "300$"
cad2 db "-"
aux2 dw ?