EMU8086

LENGUAJE DE BAJO NIVEL

By Jhonny Vera Cervantes

DEFINICIÓN

El emu8086 es un emulador del microprocesador 8086 (Intel o AMD compatible) con assembler integrado. A diferencia del entorno de programación en assembler utilizado anteriormente en la cátedra (MASM), este entorno corre sobre Windows y cuenta con una interfaz gráfica muy amigable e intuitiva que facilita el aprendizaje el lenguaje de programación en assembler.

REGISTRO

La CPU x86 tiene 14 registros internos y básicos. Algunos son realmente de 32 bits pero por ahora se utilizará el modo real que es compatible con el procesador 8086 (igualmente accesibles a la parte alta de éstos registros, inclusive en el modo real). Los registros son los siguientes (estos registros son de 16 bits nombrados de la siguiente manera, a excepción del registro de banderas).

REGISTROS

  • REGISTROS DE USO GENERAL

    AX: Acumulador (AL:AH)

    BX: Registro base (BL:BH)

    CX: Registro contador (CL:CH)

    DX: Registro de datos (DL:DH)

  • REGISTROS DE SEGMENTO (SOLO SE PUEDEN USAR PARA LOS USOS MENCIONADOS A EXCEPCIÓN DE ES)

    DS: Registro del segmento de datos

    ES: Registro del segmento extra

    SS: Registro del segmento de pila

    CS: Registro del segmento de código

  • REGISTROS PUNTEROS (TAMBIÉN PUEDEN TENER USO GENERAL)

    BP: Registro de apuntadores base

    SI: Registro índice fuente

    DI: Registro índice destino

  • REGISTROS ESPECIALES (SOLO SE PUEDEN USAR PARA LOS USOS MENCIONADOS)

    SP: Registro apuntador de la pila

    IP: Registro apuntador de la siguiente instrucción

    F: Registro de banderas (8 bits)

  • BITS DEL REGISTRO DE BANDERAS OVERFLOW

    NV (Apagado): No hay desbordamiento

    OV (Encendido): Si lo hay

  • DIRECTION

    UP: Hacia adelante

    DN: Hacia atras

  • INTERRUPTS

    DI: Desactivadas

    EI: Activadas

  • SIGN

    PL: Positivo

    NG: Negativo

  • ZERO

    NZ: No es cero

    ZR: Si lo es

  • AUXILARY CARRY

    NA: No hay acarreo auxiliar

    AC: Hay acarreo auxiliar

  • PARITY

    PO: Impar

    PE: Paridad par

  • CARRY

    NC: No hay acarreo

    CY: Si lo hay

  • DIRECCIONAMIENTOS

    Dado que es necesario transferir datos, existen los siguientes tipos de direccionamiento:.

    • Valor de un registro

      MOV AX, DX

    • CONSTANTE

      MOV BX, 1AB

    • VApuntado por un registro de segmento y uno de offset (Solo puede ser BX, BP, DI o SI)

      MOV CX, ES:[DI]

    • Apuntado por DS y la suma de BX con una constante o apuntado por SS y la suma de BP con una constante

      MOV DX, DS:[BP+1000]

    • Apuntado por DS y la suma de DI o SI con una constante

      MOV BX, DS:[SI+6F9]

    • Apuntado por DS y la suma de BX y SI o BX y DI con una constante o apuntado por SS y la suma de BP y SI o BP y DI con una constante

    • EJEMPLOS

      MOV AX, DS:[BX][SI]+1FB9

      MOV DX, SS:[BP][DI]+C9F8]

EMU8086

ENLACE DE DESCARGA

PARA PODER DESCARGAR EL PROGRAMA BE A ESTE LINK:emu8086

PASOS

1. Clic derecho

2. Instalar

3. Next

4. Siguiente

5. Siguiente hasta que se instale

SEGUIMOS

UNA VEZ YA INSTALADO, INGRESAMOS AL PROGRAMA.

INGRESAMOS LO SIGUIENTE

Nos va a pedir que ingresemos una cuenta ( esta es de prueba)

Licensee Name:

Craked-By-Team-AgressioN!!

Registration Key:

KDLSR2ERKRG4U8PDP4UA

Clic en “OK” Una vez ingresados, comenzamos a programar.

CODIGOS

AQUI LES DEJARE DOS CODIGOS PARA QUE COMIENZEN A PROGRAMAR DE LA MEJOR MANERA

OPERACIONES BASICAS

.model small

.stack 64

.data

Num1 db 0

Num2 db 0

Suma db 0

Resta db 0

Multiplicacion db 0

Division db 0

Solicitud1 db 13,10,'Ingrese Primer Numero',13,10,'$'

Solicitud2 db 13,10,'Ingrese Segundo Numero',13,10,'$'

Msuma db 13,10 , 'La Suma de los numeros es: $'

Mresta db 13,10 , 'La Restae los numeros es: $'

Mmultiplicacion db 13,10 , 'La Multiplicacion de los numeros es: $'

Mdivision db 13,10 , 'La Division de los numeros es: $'

.code

inicio:

mov ax, @data

mov ds, ax

mov ah, 9

lea dx, Solicitud1

int 21h

mov ah, 1

int 21h

sub al, 30h

mov Num1, al

mov ah, 9

lea dx, Solicitud2

int 21h

mov ah, 1

int 21h

sub al, 30h

mov Num2, al

;Iniciar con las Operaciones

mov al, Num1

add al, Num2

mov Suma, al

mov al, Num1

sub al, Num2

mov Resta,al

mov al,Num1

mul Num2

mov Multiplicacion, al

mov al, Num1

div Num2

mov Division, al

mov ah,9

lea dx, Msuma

int 21h

mov dl, Suma

add dl, 30h

mov ah, 2

int 21h

mov ah,9

lea dx, Mresta

int 21h

mov dl, Resta

add dl, 30h

mov ah, 2

int 21h

mov ah,9

lea dx, Mmultiplicacion

int 21h

mov dl, Multiplicacion

add dl, 30h

mov ah, 2

int 21h

mov ah,9

lea dx, Mdivision

int 21h

mov dl, Division

add dl, 30h

mov ah, 2

int 21h

.exit

ret

HOLA MUNDO

.model small

.data

saludo db "HOLA MUNDO CARLOS","$"

.code

programa:

mov ax,seg saludo

mov ds,ax

mov ah,09h

lea dx,saludo

int 21h

mov ax,4c00h

int 21h

end programa