miércoles, 27 de febrero de 2019

Unidad No.1-Programas del video "registro de banderas en ensamblador 8086"


Registro de banderas.- Es un registro de 16 bits, de los cuales nueve sirven para indicar el estado actual de la maquina y el resultado del procesamiento

Programa No.1: 

Ejecución del programa:
Código:

org 100h

.model small
.stack
.data

.code
     mov al,255
     mov bl,1
     add al,bl
     


.exit
end

Nota: La extension maxima del registro al es 255 y al intentar sumarle uno se acciona la bandera indicando que existe un acarreo de 1


Programa No.2:
Ejecución del programa:





Código:

org 100h


.model small
.stack
.data

.code
    
     
     mov al,2
     mov bl,2
     sub al,bl

.exit
end

Nota: Al intentar restar 2 - 2 y dar como resultado el numero cero se acciona la bandera ZF indicando que el resultado fue un cero

Programa No.3 
Ejecución del programa:




Código:

org 100h

org 100h

.model small
.stack
.data

.code
     
     
     mov al,1
     mov bl,4
     sub al,bl

.exit
end

ret

Nota: Al intentar restar dos numeros en el cual el segundo numero es mayor que el primero se acciona la bandera SF, indicando que el resultado es un numero negativo

Documentación de emu8086 inc

emu8086.inc define las siguientes macros :

PUTC char - macro con 1 parámetro, imprime un carácter ASCII en la posición actual del cursor.

GOTOXY col, fila - macro con 2 parámetros, establece la posición del cursor.

PRINT string - macro con 1 parámetro, imprime una cadena.

PRINTN string - macro con 1 parámetro, imprime una cadena. Lo mismo que PRINT pero agrega automáticamente "retorno de carro" al final de la cadena.

CURSOROFF - apaga el cursor de texto.

CURSORON - enciende el cursor de texto.

Para usar cualquiera de las macros anteriores, simplemente escriba su nombre en algún lugar de su código y, si es necesario, los parámetros


emu8086.inc también define los siguientes procedimientos :

PRINT_STRING : procedimiento para imprimir una cadena terminada en nulo en la posición actual del cursor, recibe la dirección de la cadena en el registro DS: SI . Para usarlo declare: DEFINE_PRINT_STRING antes de la directiva END .

PTHIS : procedimiento para imprimir una cadena terminada en nulo en la posición actual del cursor (igual que PRINT_STRING), pero recibe la dirección de la cadena desde la Pila. La cadena TERMINADA A CERO debe definirse justo después de la instrucción CALL. Por ejemplo:

CALL PTHIS
db 'Hello World!', 0

Para usarlo declare: DEFINE_PTHIS antes de la directiva END .

GET_STRING : procedimiento para obtener una cadena terminada en nulo de un usuario, la cadena recibida se escribe en el búfer en DS: DI , el tamaño del búfer debe estar en DX . El procedimiento detiene la entrada cuando se presiona 'Enter'. Para usarlo declare: DEFINE_GET_STRING antes de la directiva END .

CLEAR_SCREEN : procedimiento para borrar la pantalla (que se realiza al desplazar la ventana completa de la pantalla) y establecer la posición del cursor en la parte superior. Para usarlo declare: DEFINE_CLEAR_SCREEN antes de la directiva END .

SCAN_NUM : procedimiento que obtiene el número FIRMADO de varios dígitos del teclado y almacena el resultado en el registro CX . Para usarlo declare: DEFINE_SCAN_NUM antes de la directiva END .

PRINT_NUM : procedimiento que imprime un número firmado en el registro AX . Para usarlo declare: DEFINE_PRINT_NUM y DEFINE_PRINT_NUM_UNS antes de la directiva END .

PRINT_NUM_UNS : procedimiento que imprime un número sin firma en el registro AX . Para usarlo declare: DEFINE_PRINT_NUM_UNS antes de la directiva END .

Para utilizar cualquiera de los procedimientos anteriores, primero debe declarar la función en la parte inferior de su archivo (pero antes de END ), y luego usar la instrucción CALL seguida de un nombre de procedimiento.

domingo, 3 de febrero de 2019

suma y resta de numeros









;suma numero de un solo digito
org 100h       
       
mov ax,8H  ;#h el valor y ax donde lo dirige
mov bx,4H
add ax,bx ;suma
mov bx,5
sub ax,bx ;resta
mov bx,3
inc bx

mov ax,6


hlt ;terminar el proceso

hola mundo version 3





Interrupciones

CONCEPTO DE INTERRUPCIONES

Una interrupción es una situación especial que suspende la ejecución de un programa de modo que el sistema pueda realizar una acción para tratarla. Tal situación se da, por ejemplo, cuando un periférico requiere la atención del procesador para realizar una operación de E/S.

Las interrupciones constituyen quizá el mecanismo más importante para la conexión del microcontrolador con el mundo exterior, sincronizando la ejecución de programas con acontecimientos externos.

PASOS PARA EL PROCESAMIENTO

1. Terminar la ejecución de la instrucción máquina en curso.

2. Salva el valor de contador de programa, IP, en la pila, de manera que en la CPU, al terminar el proceso, pueda seguir ejecutando el programa a partir de la última instrucción.

3. La CPU salta a la dirección donde está almacenada la rutina de servicio de interrupción (ISR, Interrupt Service Routine) y ejecuta esa rutina que tiene como objetivo atender al dispositivo que generó la interrupción.

4. Una vez que la rutina de la interrupción termina, el procesador restaura el estado que había guardado en la pila en el paso 2 y retorna al programa que se estaba usando anteriormente.

LISTADO DE INTERRUPCIONES

Emuladores online


1.assembler online
https://schweigi.github.io/assembler-simulator/

2.assembler online
https://www.tutorialspoint.com/compile_assembly_online.php

3.simulador assembler
http://rextester.com/l/nasm_online_compiler

Tipos de lenguajes ensambladores

El lenguaje es la manera que utlizamos los seres humanos para comunicarnos, por medio de sonidos, expresiones, simbolos, etc. de igual manera la computadora necesita de un lenguaje para que pueda funcionar y nosotros como desarrolladores debemos entender. la computadora utiliza el conocido lenguaje ensamblador, que es un lenguaje de alto nivel y al hablar de lenguajes de alto nivel debemos comprender que trabaja por medio de codigo binario.
Existen varios tipos de lnguaje ensamblador, aunque finalmente todos realizan las mismas tareas.

ENSAMBLADORES CRUZADOS: permiten el soporte de medios fisicos como pantallas, impresoras, teclado, etc. y la programacion que ofrecen maquinas potentes que luego seran ejecutados en sistemas especializados.

ENSAMBLADORES RESIDENTES: permanecen en la memoria de la computadora, y cargan para su ejecucion al programa objeto producido. es el indicado para el desarrollo de pequeños sistemas de control.

MACROENSAMBLADORES: permiten el uso de macroinstrucciones, son programas grandes que no permanecen en memoria una ves que se a genereado el codigo objeto, normalmete son programas complejos y residentes.

MICROENSAMBLADORES: Indica al interprete las instrucciones de como debe actuar la CPU.

ENSAMBLADORES DE UNA FASE: leen una linea de programa fuente y la traducen directamente para producir una instruccion en lenguaje maquina, estos ensambladores son sencillos, baratos y coupan poco espacio.

ENSAMBLADORES DE DOS FASES: se llaman asi por que realizan la traduccion en dos etapas, en la primera fase revisan el codigo fuente y lo construyen en una tabla de simbolos, en la segunda fase vuelven a leer el programa fuente y pueden tradirlo por completo. estos ensabladores son los mas utilizados en la actualidad.

Hola mundo 2 con emu8086





Hola mundo 1 con emu8086





1.1-Importancia del lenguaje ensamblador

El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de microprocesador.

La importancia del lenguaje ensamblador es principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria.

• El único lenguaje que entienden los microcontroladores es el código máquina formado por ceros y unos del sistema binario.

• El lenguaje ensamblador expresa las instrucciones de una forma más natural al hombre a la vez que muy cercana al microcontrolador, ya que cada una de esas instrucciones se corresponde con otra en código máquina.

Imagen relacionada

• El lenguaje ensamblador trabaja con nemónicos, que son grupos de caracteres alfanuméricos que simbolizan las órdenes o tareas a realizar.

•La traducción de los nemónicos a código máquina entendible por el microcontrolador la lleva a cabo un programa ensamblador.

• El programa escrito en lenguaje ensamblador se denomina código fuente (*.asm). El programa ensamblador proporciona a partir de este fichero el correspondiente código máquina, que suele tener la extensión *.hex.


Ventajas y desventajas del lenguaje ensamblador 

Ventajas

1. Como trabaja directamente con el microprocesador al ejecutar un programa, pues como este lenguaje es el mas cercano a la máquina la computadora lo procesa mas rápido.


2. Eficiencia de tamaño .- Un programa en ensamblador no ocupa mucho espacio en memoria porque no tiene que cargan librerías y demás como son los lenguajes de alto nivel


3. Flexibilidad .- Es flexible porque todo lo que puede hacerse con una máquina, puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel tienen en una u otra forma limitantes para explotar al máximo los recursos de la máquina. O sea que en lenguaje ensamblador se pueden hacer tareas especificas que en un lenguaje de alto nivel no se pueden llevar acabo porque tienen ciertas limitantes que no se lo permite

Desventajas

Tiempo de programación .

- Como es un lenguaje de bajo nivel requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen más fuertemente en la ejecución.


Programas fuente grandes .

- Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente requerimos más instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores.


Peligro de afectar recursos inesperadamente .

- Que todo error que podamos cometer, o todo riesgo que podamos tener, podemos afectar los recursos de la maquina, programar en este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicialize. Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel.


Falta de portabilidad.

- Porque para cada máquina existe un lenguaje ensamblador; por ello, evidentemente no es una selección apropiada de lenguaje cuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras.

Instalación de Emu8086-Unidad.1

Que es es emu8086:
Emu8086 es el emulador 8086 (Intel y AMD compatibles) del microprocesador y del ensamblador integrado con las clases particulares para los principiantes. El emulador funciona programas como el microprocesador verdadero en modo paso a paso. Demuestra los registros, memoria, el apilado, variables y banderas. Todos los valores de la memoria se pueden investigar y corregir por un tecleo doble. Las instrucciones pueden ser ejecutadas detrás y remitir.