LENGUAJE ENSAMBLADOR
CON EMU8086
1. LENGUAJE ENSAMBLADOR
2. Software EMU8086
El emu8086 es un emulador del microprocesador 8086 (Intel o AMD compatible) con assembler integrado.
Dado que en un entorno emulado de microprocesador no es posible implementar una interfaz real de
entrada/salida, el emu8086 permite interfacear con dispositivos virtuales y emular una comunicación con el
espacio de E/S.
- Instalación: descarga de EMU806
- Descripción de EMU8086
- Descripción de los REGISTROS:
- Org 100h: Indica al ensamblador que continúe el ensamblador a partir de la dirección dada por el
argumento, en este e caso 100H. Es el inicio de un programa assembler.
- Ret: Instrucción de retorno. Si lo ponemos al final del código, nos retorna al sistema operativo, es decir
finaliza el programa. Si se le pone al final de una función, nos retorna a la línea de código siguiente al
llamado.
- Mov: Su propósito es la transferencia de datos entre registros de procesador o registro de memoria. Mov
tiene ciertas limitaciones. No admite cualquier pareja de operandos
Sintaxis: Mov destino, origen
- Reglas:
o No se puede mover de memoria a memoria
o No se pueden cargar registros de segmento en direccionamiento inmediato
o No se puede mover a CS
o Nota:Tampoco se puede mover un registro de menor tamaño a un registro de mayor tamaño. Si
intentamos mover BL (parte baja de BX, de tamaño 8 bits) en AX (registro de 16 bits), el
ensamblador nos dirá que eso no se puede, y que no existe ningún código de operación para
eso.
Ejercicios:
Programa 01:
Org 100h
Mov ax, bl
Ret
ORG 100H
MOV AX,BL ; BL→ media palabra de BX
RET
Programa 02:
Org 100h
Mov ax, bx
Ret
Programa 03: Vamos a probar cargando valores de los sistemas numéricos, vamos a cargar el valor 27 decimal en
el registro AH.
Org 100h
mov AH, 27 ; mov destino, origen
Ret
Programa 04: Cargar el valor 1101010 en binario en el registro BL .
Org 100h
mov CH, 1101010b ; mov destino, origen
Ret
Programa 05: Cargar el valor 3678 en octal en el registro CH
Org 100h
mov CH, 3678o ; mov destino, origen
Ret
Error
Programa 06: Se quiere cargar el valor CADAh en hexadecimal en elRegistro DX
Org 100h
mov DX, CADAh ; mov destino, origen
Ret
Org 100h
mov DX, 0CADAh ; mov destino, origen
Ret
Programa 07: Se decide c Argar 2 valores → 15 decimal en el registro CH y 1101 en binario en el registro DL
Org 100h
mov CH, 15
mov DL, 1101b
Ret
Programa 08: Se decide cargar a AH el valor 28h, luego usando la interrupción mov copiar el valor AH al registro
CH
Org 100h
mov AH, 28h
mov DH, AH
Ret
CARACTERES ASCII
Programa 09: Colocaremos los simbolos + -
Org 100h
mov AX, “+”
mov BX, “-“
Ret
Programa 10:
Org 100h
mov AX, 16h
mov BX, [101h]
Ret
Nota:
[] → lo que haya en la dirección
Programa 11:
Org 100h
mov AH, 7Ah
mov BL, 99
mov CL, 11001111b
mov DH, [102h]
mov AX, 100
mov BX, “A”
mov CX, 0ABCDh
mov DX, 645o
ret
Programa 12: Sumar los valores 5 y 4
ORG100h
moval,5 ;cargamosalregistroalelvalorde5
movbl,4 ;cargamosalregistroblelvalorde4
addal,bl ;adicionamos=>al=al+bl
ret
Programa 13: Sumar 3 valores, 11100b, C1h y 12 en decimal
org100h
moval,11100b
movbl,0c1h
addal,bl
movbl,12
addal,bl
ret
Programa 12: Utilizando la instrucción ADD, realizar la progresión aritmética siguiente.
1, 5, 9, 13, 11
Se pide que el número 11 este en el registro AL
Programa 14: Correr el programa
org100h
moval,1
addal,al
movbl,2
addbl,bl
movcl,3
addcl,cl
movdl,4
adddl,dl
ret
Restas o diferencias:
Programa 15: Restar 2 de 5
org100h
moval,5
movbl,2
subal,bl
ret
Programa 16: Programa 12: Restar 5 de 2
org100h
moval,2
movbl,5
subal,bl
ret
➔ El resultado es FD ya que 2 – 5 = -253
➔ Operaciones con INC: incremental
Programa 18: Realizar un programa en Assembler donde cargamos el valor de 12 e incrementamos en 1
Org 100h
mov al,12
inc al
ret
Programa 19: Correr el programa
Org 100h
mov ah,12
inc ah
mov al,13
inc al
mov bh,14
inc bh
mov bl,15
inc bl
ret
➔ Operaciones decrementales
Programa 20: Cargamos el valor de 11 y decrementamos en 1
Org 100h
mov CX, 11
dec CX
ret
Programa 21: Correr el programa
Org 100h
Mov ax 101010001b
Dec ah
Mov bx,1131
Dec bh
Mov cx,0BABAh
Dec ch
Ret
MULTIPLICACIÓN Y DIVISIÓN
- Mul
- Div
Mul: la instrucción MUL realiza multiplicación (sin signo) entre AL y otro registro o un número. El resultado se
almacena en AX.
AX = AL*registro
MUL destino
Div: La instrucción DIV realiza la división (sin signo) entre AX y otro registro, quedando el resultado en AL y el módulo
en AH, es decir, el algoritmo es AL=AX/registro, AH=(módulo o residuo).
AL =AX / registro, AH → Módulo o residuo
DIV destino
Programa 22: Realiza un programa para multiplicar los números y 4
Org 100h
Mov dl,2
Mov al,4
Mul dl ; ax = al * dl
Ret
Programa 23: Multiplicar los números AAAA y B
Org 100h
Mov DX 0AAAAh
Mov AX, 0Bh
Mul DX ; AX = AX*DX
; el resultado es 7554Eh
Ret
Programa 24: Realizar la división de 6 entre 2
Org 100h
Mov AL,6
Mov BL,3
Div BL ; AL=02, AH=00
Ret
Programa 25: Realizar la división de 203 entre 4
Mov AX,203
Mov BL,4
Div BL ; AL=32 cociente , AH=3 residuo
Ret
Programa 26: Correr el programa
Org 100h
Mov ah,12
Mov al, 0Fah
Add dl,34o
Add dh, 1101b
Mul dl
Mov dx, 3Ah
Div dll
Ret
OPERADORES LÓGICOS
- NOT
- OR
- AND
- XOR
NOT:
➔ Lleva a cabo la negación bit por bit del operando destino. El resultado se guarda en el mismo operando
destino. Cambia los bits del operando por su complemento.
NOT destino
OR
➔ Or inclusivo lógico, la instrucción OR lleva a cabo, bit por bit, la disyunción inclusiva lógica de los dos
operandos. El resultado lo almacena en el destino.
OR destino,fuente
AND
➔ Operación lógica “and” a nivel de bit entre los operandos. El resultado se almacena en el destino.
AND destino,fuente
XOR
➔ Or exclusivo lógico, la instrucción OR lleva a cabo, bit por bit, la disyunción exclusiva lógica de los dos
operandos. El resultado lo almacena en el destino.
XOR destino,fuente
Programa 27: Correr el programa
org 100h
mov ax,1
not ax
mov bx,2
not bx
mov cx,3
not cx
mov dx,4
not dx
ret
Programa 28: Realizar la tabla de verdad de la compuerta OR
org 100h
mov ah,0
mov al,0
or al,ah
mov bh,0
mov bl,1
or bl,bh
mov ch,1
mov cl,0
or cl,ch
mov dh,1
mov dl,1
or dl,dh
ret
Programa 29: Realizar la tabla de verdad de la compuerta AND
org 100h
mov ah,0
mov al,0
and al,ah
mov bh,0
mov bl,1
and bl,bh
mov ch,1
mov cl,0
and cl,ch
mov dh,1
mov dl,1
and dl,dh
ret
Programa 30: Realizar la tabla de verdad de la compuerta XOR
org 100h
mov ah,0
mov al,0
xor al,ah
mov bh,0
mov bl,1
xor bl,bh
mov ch,1
mov cl,0
xor cl,ch
mov dh,1
mov dl,1
xor dl,dh
ret
Programa 31: Correr el programa
org 100h
mov ah,0
mov al,0
not ah
or al,ah
mov bh,0
mov bl,1
not bh
or bl,bh
mov ch,1
mov al,0
not ch
or cl,ch
mov dh,1
mov dl,1
not dh
or dl,dh
ret
OTROS OPERADORES
- CMP
- NEG
CMP:
➔ Compara dos operandos.
CMP destino,fuente
NEG
➔ Genera el complemento a 2 de un valor
NEG destino
Programa 32: Comparar los números 5 y 5
org 100h
mov al,5
mov bl,5
cmp al,bl
ret
Programa 33: Correr el programa
org 100h
mov al,5
neg al
ret
Programa 34: Correr el programa
org 100h
mov ax,0123h
mov dx,111000100b
cmp ah,dh
neg al
ret
Programa 35: Correr el programa
org 100h
mov al,a
mov bl,b
mov cl,c
mov dl,d
ret
- observar
a db 01h
b db 02h
c db 03h
d db 04h
Programa 36: Correr el programa
org 100h
mov ah,variable1
mov al,variable2
mov bh,variable3
mov bl,variable4
mov cx,variable5
ret
- Observar
-
- variable1 db 017h
- variable2 db 0Ah
- variable3 db 0Dh
- variable4 db 01Ch
- variable5 dw 0Fah
Programa 37: Correr el programa
org 100h
mov al,1
mov bl,2
mov cx,4
suma:
add al,bl
loop suma
ret
Programa 38: Correr el programa
org 100h
mov cx,5
mov bx,1
mov dl,2
comienzo:
mov ax,bx
mul dx
mov bx,ax
loop comienzo
ret
Programa 38: Correr el programa
org 100h
call p1
add ax,1
ret
p1 proc near
mov ax,1234h
ret
endp
Programa 39: Correr el programa
org 100h
call p1
call p2
call p3
ret
p1 proc near
mov ax,0101h
mov cx,3
suma1:
add al,ah
loop suma1
ret
endp
p2 proc near
mov bx,0202h
mov cx,3
suma2:
add bl,bh
loop suma2
ret
endp
p3 proc near
mov dx,0303h
mov cx,3
suma3:
add dl,dh
loop suma3
ret
endp
Programa 39: Correr el programa
org 100h
mov ax,1000
mov cx,3
jmp bucle1
mov ax,2015h
mov bx,2016h
mov cx,2017h
bucle1:
mov ax,100000001b
mov bx,401o
add ah,al
add bh,bl
loop bucle1
ret
ACTIVIDAD 02
Desarrolle 10 ejercicios en ASEMBLER y correrlos en el simulador, realizar el informe en ms Word o PDF.