Unidad I Introducción Al Lenguaje Ensamblador
Unidad I Introducción Al Lenguaje Ensamblador
Unidad I Introducción Al Lenguaje Ensamblador
Ing. en Sistemas
Computacionales
Lenguajes de Interfaz
Unidad I: Introduccin al Lenguaje Ensamblador
Introduccin al Lenguaje
Ensamblador
Importancia de la programacin en lenguaje
ensamblador.
El procesador y sus registros internos
La memoria principal (RAM)
El concepto de interrupciones
Llamadas a servicios del sistema
Modos de direccionamiento
Proceso de ensamblado y ligado
Desplegado de mensajes en el monitor
Introduccin al Lenguaje
Ensamblador
Importancia de la Programacin
en Lenguaje Ensamblador
Lenguaje ensamblador es un lenguaje de programacin de
computadoras, considerado de bajo nivel, y constituye la
representacin ms directa del cdigo mquina especfico
para cada arquitectura de computadoras, que es legible para
un programador.
Fue usado principalmente en los inicios del desarrollo de
software, cuando aun no se contaba con los potentes
lenguajes de alto nivel. Actualmente se utiliza con frecuencia
en ambientes acadmicos y de investigacin, especialmente
cuando se requiere la manipulacin directa de hardware, se
pretenden altos rendimientos o un uso de recursos controlado
y reducido.
Definicin de Lenguaje
Ensamblador
Muchos
dispositivos
programables
(como
los
microcontroladores) aun
cuentan con el lenguaje
ensamblador como la nica manera de ser manipulados.
Caractersticas
El cdigo escrito en lenguaje ensamblador posee una cierta
dificultad de ser entendido directamente por un ser humano
ya que su estructura se acerca mas bien al lenguaje mquina,
es decir, lenguaje de bajo nivel.
Caractersticas
Los programas hechos en lenguaje ensamblador son
generalmente ms rpidos y consumen menos recursos del
sistema (memoria RAM y ROM). Al programar cuidadosamente
en lenguaje ensamblador se pueden crear programas que se
ejecutan ms rpidamente y ocupan menos espacio que con
lenguajes de alto nivel.
Ensamblador
Un ensamblador (assembler en ingls) es un programa que
crea cdigo objeto traduciendo instrucciones nemnicas de un
programa fuente escrito en lenguaje ensamblador a cdigos
ejecutables e interpretando los nombres simblicos para
direcciones de memoria y otras entidades (ensamblado).
El uso de referencias simblicas es una caracterstica bsica
del lenguaje ensamblador, evitando tediosos clculos y
direccionamiento manual despus de cada modificacin del
programa. La mayora de los ensambladores tambin incluyen
facilidades para crear macros, a fin de generar series de
instrucciones cortas que se ejecutan en tiempo real, en lugar
de utilizar subrutinas.
Ensamblador
Lenguaje Ensamblador
Un programa escrito en lenguaje ensamblador consiste en una
serie de instrucciones que corresponden al flujo de rdenes
ejecutables que pueden ser cargadas en la memoria de un
sistema basado en microprocesador.
Por ejemplo, un procesador x86 puede ejecutar la siguiente
instruccin binaria como se expresa en cdigo de mquina:
Binario: 10110000 01100001 (Hexadecimal: 0xb061)
Lenguaje Ensamblador
La representacin equivalente en lenguaje ensamblador es
ms fcil de recordar:
MOV al, 061h
Esta instruccin significa:
Asigna el valor hexadecimal 61 (97 decimal) al registro "al".
Lenguaje Ensamblador
El mnemnico "mov" es un cdigo de operacin u opcode",
elegido por los diseadores de la coleccin de instrucciones
para abreviar "move" (mover, pero en el sentido de copiar
valores de un sitio a otro). El opcode es seguido por una lista
de argumentos o parmetros, completando una instruccin de
ensamblador tpica.
Lenguaje Ensamblador
A diferencia de los lenguajes de alto nivel, aqu hay
usualmente una correspondencia 1 a 1 entre las instrucciones
simples del ensamblador y el lenguaje de mquina.
Sin embargo, en algunos casos, un ensamblador puede
proveer "pseudo instrucciones" que se expanden en un cdigo
de mquina ms extenso a fin de proveer la funcionalidad
necesaria.
Por ejemplo, para un cdigo mquina condicional como "si X
mayor o igual que" , un ensamblador puede utilizar una
pseudoinstruccin al grupo "haga si menor que" , y "si = 0"
sobre el resultado de la condicin anterior.
Lenguaje Ensamblador
Los Ensambladores ms completos tambin proveen un rico
lenguaje de macros que se utiliza para generar cdigo ms
complejo y secuencias de datos.
Lenguaje Ensamblador
Cada arquitectura de microprocesadores tiene su propio
lenguaje de mquina, y en consecuencia su propio lenguaje
ensamblador ya que este se encuentra muy ligado al la
estructura del hardware para el cual se programa.
Los microprocesadores difieren en el tipo y nmero de
operaciones que soportan; tambin pueden tener diferente
cantidad de registros, y distinta representacin de los tipos de
datos en memoria.
Aunque la mayora de los microprocesadores son capaces de
cumplir esencialmente las mismas funciones, la forma en que
lo hacen difiere y los respectivos lenguajes ensamblador
reflejan tal diferencia.
Lenguaje Ensamblador
Pueden existir mltiples conjuntos de mnemnicos o sintxis
de lenguaje ensamblador para un mismo conjunto de
instrucciones,
instanciados
tpicamente
en
diferentes
programas en ensamblador.
En estos casos, la alternativa ms popular es la provista por
los fabricantes, y usada en los manuales del programa.
Usos y Aplicaciones
La mayora de las aplicaciones que se ejecutan en una
computadora han sido desarrolladas empleando algn
lenguaje de alto nivel, de los cuales hay infinidad, tales como:
C, C++, Pascal, COBOL, Java, PHP, C#, Visual Basic, Perl,
Python y un largo etctera ms.
En una gran parte de estos desarrollos la eleccin de un
lenguaje u otro es casi una preferencia personal, puesto que
en general comparten una funcionalidad, e incluso una
sintaxis, muy similar.
Usos y Aplicaciones
En contraposicin, el lenguaje ensamblador se dirige a tipos
de proyectos y situaciones muchos ms concretos y
especficos. En muchos casos este lenguaje se utiliza no para
desarrollar una aplicacin completa, sino para mejorar la
velocidad de ciertas partes de un programa o bien realizar
operaciones que, desde el lenguaje de alto nivel, no estn
accesibles de otra forma.
En dispositivos con poca capacidad de memoria y potencia
limitada, como los antes mencionados, s que suele recurrirse
al ensamblador como recurso principal para definir su
programacin.
Usos y Aplicaciones
Asimismo la programacin en lenguaje ensamblador es un
recurso, un medio ms que un fin, utilizado en la mayora de
las carreras relacionadas con la informtica para acercar al
estudiante a las interioridades de los microprocesadores,
facilitndole el conocimiento de su arquitectura as como su
funcionamiento.
En este sentido la escritura de programas en ensamblador
fortalece el pensamiento analtico del programador, ya que se
ve forzado a dividir el problema a resolver en una multitud de
operaciones ms sencillas, repitiendo el proceso hasta poder
expresar esas operaciones mediante los cdigos de operacin
con que cuente el microprocesador.
Usos y Aplicaciones
En cualquier caso, el aprendizaje de un lenguaje como el
ensamblador, tanto si en el futuro se utiliza all donde resulte
adecuado como si no, es un proceso que le aportar una gran
cantidad de conocimientos tiles que van desde saber cmo
se almacenan ciertos tipos de datos en la memoria hasta
aprender a utilizar los servicios de la BIOS que incorpora toda
computadora.
Tipos de Ensambladores
Nos referimos a las caractersticas de los traductores de
lenguaje ensamblador a cdigo mquina.
Una clasificacin simple de los tipos de ensambladores sera
la siguiente:
Tipos de Ensambladores
Tipos de Ensambladores
Macroensambladores:
Son ensambladores que
permiten el uso de macroinstrucciones (macros). Debido
a su potencial, normalmente son programas robustos
que no permanecen en memoria una vez generado el
programa objeto.
Tipos de Ensambladores
Introduccin al Lenguaje
Ensamblador
El microprocesador
El 8086 es un microprocesador de 16 bits, tanto en lo que se
refiere a su estructura como en sus conexiones externas,
mientras que el 8088 es un procesador de 8 bits que
internamente es casi idntico al 8086.
La nica diferencia entre ambos es el tamao del bus de datos
externo. Intel trata esta igualdad interna y desigualdad
externa dividiendo cada procesador 8086 y 8088 en dos subprocesadores. O sea, cada uno consta de una unidad de
ejecucin (EU: Execution Unit) y una unidad de interfaz del
bus (BIU: Bus Interface Unit).
El microprocesador
La unidad de ejecucin es la encargada de realizar todas las
operaciones mientras que la unidad de interfaz del bus es la
encargada de acceder a datos e instrucciones del mundo
exterior.
Las unidades de ejecucin son idnticas en ambos
microprocesadores, pero las unidades de interfaz del bus son
diferentes en varias cuestiones, como se desprende del
siguiente diagrama en bloques:
El microprocesador
Registros de propsito
general
Los registros de propsito general, como su nombre lo indica,
se utilizan en la forma en que lo desee el programador. Cada
uno de estos registros se puede direccionar como un registro
de 16 bits (AX, BX, CX, DX) o como un registro de 8 bits (AH,
AL, BH, BL, CH, CL, DH, DL). Cada uno de los registros de 16
bits est formado por la concatenacin de dos registros de 8
bits: AX = AH:AL, BX = BH:BL, CX = CH:CL y DX = DH:DL,
donde el bit 0 del registro AH es el bit 8 del registro AX, etc.
Adicionalmente,
algunas
de
las
instrucciones
del
microprocesador emplean los registros de propsito general
para tareas especficas. Por esta razn, a cada uno se le da su
nombre (Acumulador, Base, Contador y Datos). Las funciones
primarias de los registros de propsito general incluyen:
Registros de propsito
general
AX, AH, AL (Acumulador): Se utiliza como registro principal
para la realizacin de operaciones aritmticas o lgicas.
BX, BH, BL (Base): Se utiliza para guardar la direccin base
de listas de datos en la memoria.
CX, CH, CL (Contador): Contiene el conteo para ciertas
instrucciones de corrimientos y rotaciones, de iteraciones en el
ciclo LOOP y operaciones repetidas de cadenas.
DX, DH, DL (Datos): Se utiliza como registro de datos en las
operaciones de entrada/salida de datos, adems contiene la
parte ms significativa de un producto despus de una
multiplicacin; la parte ms significativa del dividendo antes de
la divisin.
Registros de segmento
Los registros de segmentos se utilizan para formar la direccin
efectiva o real de una localidad de memoria. Los registros de
segmentos contienen la direccin de segmento de un dato o
una instruccin. El cdigo y los datos de un programa en
ejecucin se encuentran cada uno en uno o ms segmentos
de memoria. La pila del programa ocupa otro segmento. Los
registros de segmento son:
Registros de segmento
CS (Cdigo): Tiene la direccin lgica del segmento en que se
encuentra el cdigo de un programa. Si el cdigo ocupa ms de un
segmento, contiene la direccin lgica de uno de los segmentos.
DS (Datos): Tiene la direccin lgica del segmento en que se
encuentran los datos estticos de un programa. Si los datos ocupan ms
de un segmento, contiene la direccin lgica de uno de los segmentos.
ES (Extra): Este registro tambin tiene la direccin lgica de uno de los
segmentos en que se encuentran los datos estticos de un programa.
Este registro se utiliza en ciertas operaciones del microprocesador para
el manejo de cadenas.
SS (Pila): Tiene la direccin lgica del segmento en que se encuentran
la pila del sistema. La pila no puede ser mayor a un segmento.
Registros varios
IP (Apuntador de instrucciones): Contiene siempre el
desplazamiento con respecto al segmento de cdigo de la
localidad de memoria que contiene la siguiente instruccin
que va a ejecutar el microprocesador.
FLAGS (Banderas): Cada bandera es un bit en el registro
de banderas, tambin llamado registro de cdigo de
condiciones. En la siguiente figurase ilustra el registro de
banderas del microprocesador 8086. Aunque el registro de
banderas es de 16 bits slo hay nueve banderas: O, D, I, T,
S, Z, A, P, C. Los otros 7 bits no son usados.
Banderas de estado
C (Acarreo): Indica un acarreo despus de una suma o un
prstamo despus de una resta. La bandera de acarreo
tambin indica condiciones de error en ciertos programas y
procedimientos.
P (Paridad): Es un cero para una paridad impar y un 1 para
una paridad par. La paridad es un conteo de unos expresada
como un nmero par e impar.
A (Acarreo auxiliar): Indica un acarreo despus de una suma
o un prstamo despus de una resta del bit 3 al bit 4 en el
resultado. Esta bandera slo se utiliza en las operaciones DAA y
DAS para ajustar el valor de AL despus de una suma o resta
BCD.
Banderas de estado
Z (Cero): Indica que el resultado de una operacin aritmtica o
lgica es cero. Si Z = 1, el resultado es cero y si Z = 0, el resultado
no es cero.
S (Signo): Indica el signo aritmtico del resultado despus de una
suma o una resta. Si S = 1, el resultado es negativo. Si S = 0, el
resultado es positivo. Se debe tener en cuenta que el valor del bit
ms significativo aparece en el bit de signo en cualquier instruccin
que afecte las banderas.
O (Sobreflujo): Es una condicin que ocurre cuando se suman o se
restan nmeros con signo. Un sobreflujo indica que el resultado ha
excedido la capacidad de la mquina. Por ejemplo si se suma 7FH +
01H (127 + 1) el resultado es 80H (-128). Este resultado representa
una situacin de sobreflujo sealado por la bandera para la suma con
signo. Para operaciones sin signo esta bandera se ignora.
Banderas de control
T (Trampa): Activa, si se pone a 1, o desactiva, si se pone a 0, el
modo de ejecucin paso a paso. Este modo es utilizado por los
depuradores para ejecutar las instrucciones una a la vez y permitir
observar el efecto de la instruccin sobre los registros y la memoria.
I (Interrupcin): Habilita, si se pone a 1, o deshabilita, si se pone a
0, las interrupciones al microprocesador. El estado de esta bandera
se controla con las instrucciones STI (habilitar interrupciones) y CLI
(desactivar las interrupciones).
D (Direccin): Controla la seleccin de autoincremento o
autodecremento de los registros DI o SI durante las instrucciones de
cadenas y arreglos. Si D = 1 hay autodecremento en los registros y si
D = 0 hay autoincremento. El estado de esta bandera se controla con
las instrucciones STD (habilitar direccin) y CLD (desactivar
direccin).
Registros de 32 y 64 Bits
Registros de 32 y 64 Bits
Tarea:
Requisitos:
Manuscrita
Equipo de 2 integrantes
Introduccin al Lenguaje
Ensamblador
Memoria Principal
La memoria es un conjunto o arreglo de celdas binarias de
longitud definida (8, 16, 32 o 64 bits), en las cuales se puede
almacenar instrucciones codificadas y datos.
Cada uno de estos celdas se caracteriza por tener una
direccin nica, por lo que generalmente cada una de estas
localidades se identifica por su direccin la cual es la posicin
que le toca a esa celda dentro del arreglo.
Las direcciones se expresan siempre en hexadecimal.
Modos de operacin
Modo protegido El modo protegido es el estado nativo del procesador, en el que estn
disponibles todas las instrucciones y caractersticas. Los programas reciben reas separadas de
memoria llamadas segmentos, y el procesador evita que los programas hagan referencia a la
memoria que se encuentra fuera de sus segmentos asignados.
Modo 8086 virtual Mientras se encuentra en modo protegido, el procesador puede ejecutar en
forma directa el software para modo de direccionamiento real, como los programas de MS-DOS,
en un entorno multitarea seguro. En otras palabras, si un programa de MS-DOS falla o trata de
escribir datos en el rea de memoria del sistema, no afectar a los otros programas que se
ejecuten al mismo tiempo. Windows XP puede ejecutar varias sesiones separadas en modo
8086 a la vez.
Administracin de
memoria
Administracin de
memoria
Por ejemplo, Windows NT y 2000 crean una mquina 8086 virtual cuando
abrimos una ventana de Comandos. Puede ejecutar muchas de esas
ventanas al mismo tiempo, y cada una est protegida contra las acciones de
las dems. Algunos programas de MS-DOS que hacen referencias directas al
hardware de la computadora no se ejecutarn en este modo bajo Windows
NT, 2000 y XP
Modo de direccionamiento
real
Modo de direccionamiento
real
Modo de direccionamiento
real
Direccin de cdigo
CS * 10H + IP
Direccin de datos
DS * 10H + Direccin efectiva (cuando se utiliza BX, SI o DI).
SS * 10H + Direccin efectiva (cuando se utiliza BP).
Modo protegido
Modelo de segmentacin
plano
Modelo de segmentacin
plano
Modelo de segmentacin
plano
Modelo de varios
segmentos
Modelo de varios
segmentos
Paginacin
Paginacin
Para ver cmo funciona esto, elija una computadora con memoria algo
limitada y ejecute muchas aplicaciones extensas al mismo tiempo. Deber
observar un retraso al cambiar de un programa a otro, debido a que el OS
debe transferir las porciones paginadas de cada programa, del disco a la
memoria. Una computadora funciona a una mayor velocidad cuando hay ms
memoria instalada, ya que los archivos y programas de aplicaciones extensas
pueden mantenerse por completo en la memoria, con lo que se reduce la
cantidad de paginacin.
Introduccin al Lenguaje
Ensamblador
El concepto de interrupciones
Llamadas a servicios del sistema
El concepto de
interrupciones
Las interrupciones son un "mecanismo" por medio del cual
hacemos que el CPU deje de hacer la tarea que estaba
realizando para que atienda otra tarea distinta (la que
realiza la interrupcin).
Es decir, es una forma de llamar la atencin del CPU de
manera que cuando cada dispositivo necesita ser atendido
por el CPU, emite una interrupcin o seal haciendo que el
CPU vaya a atenderlo de inmediato.
Interrupciones en modo
real
La programacin de entrada/salida mediante interrupciones
es bsica en los programas para poder accesar los datos
desde los diferentes dispositivos perifricos que existen.
A continuacin se dan una serie de definiciones que se
utilizan para manejar la programacin de entrada/salida:
Interrupciones en modo
real
Interrupciones en modo
real
Interrupciones en modo
real
Ejecucin de interrupciones en
modo real
Para que una interrupcin pueda ser servida o atendida por el
procesador, es necesario que se ejecuten una serie de pasos:
1.
Terminar de ejecutar la instruccin actual en proceso.
2.
Meter en el stack el registro de banderas.
3.
Meter en el stack la direccin del segmento de la prxima
instruccin a ejecutar (CS).
4.
Meter en el stack el desplazamiento de la prxima instruccin
a ejecutar (IP).
5.
Determinar la direccin del manejador de la interrupcin,
accesando el vector de interrupciones. Se lee el nmero de la
interrupcin, multiplicar por 4, accesar el vector en la
posicin correspondiente y cargar los registros CS e IP con los
valores.
6.
Iniciar la ejecucin del manejador de interrupciones.
Ejecucin de interrupciones en
modo real
Todos los manejadores de interrupciones terminan con la
instruccin IRET.
Despus de ejecutar la instruccin IRET se ejecutan los
siguientes pasos:
7.
Recuperar el valor del registro IP desde la pila.
8.
Recuperar el valor del registro CS desde la pila.
9.
Recuperar el valor del registro de banderas desde la
pila.
10. Continua la ejecucin de la siguiente instruccin del
programa.
Interrupciones en modo
protegido
Interrupciones en modo
protegido
Interrupciones en modo
protegido
20H
05H
10H
19H
00H
04H
02H
01H
02H
05H
09H
0AH
Funcin
Servicio
AH = 02H y Coloca el cursor en DH (rengln) y DL (columna).
BH = 00H
AH = 06H y Borra la parte de la pantalla definida en CH,
CL
BH = 07H (punto inicial) y DH, DL (punto final)
Modos de
direccionamiento
Los modos de direccionamiento indican la forma en que se obtiene el
operando de una instruccin. Los microprocesadores de la familia
Intel 8086 tienen los siguientes modos de direccionamiento:
Modos de
direccionamiento
Direccionamiento indirecto por registro.- El operando se encuentra
en la direccin de memoria especificada en un registro. Ejemplo: MOV AX,
[BX].
Modos de
direccionamiento
Direccionamiento ndice escalado.- Esta disponible en los
procesadores 386 y superiores. El segundo registro de un par de
ellos, el ndice, se modifica por el factor de escala 2X, 4X u 8X para
generar la direccin de memoria del operando. Ejemplo: MOV AL,
[EAX + 4 * EBX].
Introduccin al Lenguaje
Ensamblador
Dentro de
proyecto.
Visual
Studio,
crear
un
nuevo
En la ventana del explorador de soluciones, pulsar con el botn derecho el nombre del
proyecto recin creado.
Tarea
Escribir
un
programa
en
lenguaje
ensamblador que muestre en la consola los
datos generales de los dos integrantes del
equipo.
Fecha:
Programacin de la consola
Win32
Antecedentes
Conjuntos de caracteres y
funciones de la API de Windows
Las funciones de Win32 que tienen que ver con texto, por lo general, se
proporcionan en dos versiones, una que termina con la letra A (para los
caracteres ANSI de 8 bits) y la otra que termina en W (para los conjuntos de
caracteres extensos, incluyendo Unicode). Una de estas funciones es
WriteConsole:
WriteConsoleA.
WriteConsoleW.
Tipo de
MASM
DWORD
Descripcin
BYTE
BYTE
DWORD
DWORD
DWORD
DWORD
SDWORD
SDWORD
DWORD
LPCSTR
PTR BYTE
LPCVOID
LPSTR
DWORD
PTR BYTE
LPCTSTR
PTR WORD
LPTSTR
PTR WORD
LPVOID
LRESULT
DWORD
DWORD
SIZE_T
DWORD
UINT
WNDPROC
WORD
WPARAM
DWORD
DWORD
WORD
DWORD
Manejadores de consola
Funciones de la consola
Win32
Funciones de la consola
Win32
Funcin
AllocConsole
CreateConsoleScreenBuffer
ExitProcess
FillConsoleOutputAttribute
Descripcin
Asigna una nueva consola para el proceso que hace la llamada
Crea un bfer de pantalla de consola
Termina un proceso y todos sus subprocesos
Establece los atributos de texto y color de fondo para un nmero especificado de
celdas de caracteres
FillConsoleOutputCharacter Escribe un carcter en el bfer de pantalla, un nmero especificado de veces
FlushConsoleInputBuffer
Vaca el bfer de entrada de la consola
FreeConsole
Desconecta el proceso que hizo la llamada de su consola
GenerateConsoleCtrlEvent
Enva una seal especificada a un grupo de proceso de control que comparte la
consola asociada con el proceso que hizo la llamada
GetConsoleCP
Obtiene la pgina de cdigo de entrada utilizada por la consola asociada con el
proceso que hizo la llamada
GetConsoleCursorInfo
Obtiene informacin acerca del tamao y la visibilidad del cursor para el bfer de
pantalla de consola especificado
GetConsoleMode
Obtiene el modo de entrada actual del bfer de entrada de una consola, o el modo de
salida actual de un bfer de pantalla de consola
GetConsoleOutputCP
Obtiene la pgina de cdigo de salida que utiliza la consola asociada con el proceso
que hizo la llamada
GetConsoleScreenBufferInf Obtiene informacin acerca del bfer de pantalla de consola especificado
o
GetConsoleTitle
Obtiene la cadena de la barra de ttulo para la ventana de consola actual
GetConsoleWindow
Obtiene el manejador de ventana utilizado por la consola asociada con el proceso que
hizo la llamada
GetLargestConsoleWindow Obtiene el tamao de la ventana de consola ms grande posible
Size
GetNumberOfConsoleInputE Obtiene el nmero de registros de entrada no ledos en el bfer de entrada de la
vents
consola
GetNumberOfConsoleMouse Obtiene el nmero de botones en el ratn, utilizados por la consola actual
Buttons
GetStdHandle
Obtiene un manejador para la entrada estndar, la salida estndar o el dispositivo de
error estndar
HandlerRoutine
Una funcin definida por la aplicacin, que se utiliza con la funcin
SetConsoleCtrlHandler
PeekConsoleInput
Lee datos del bfer de entrada de consola especificado, sin eliminarlos del bfer
Funciones de la consola
Win32
Funcin
ReadConsole
ReadConsoleInput
ReadConsoleOutput
Descripcin
Lee la entrada de caracteres del bfer de entrada de la consola y la elimina del bfer
Lee datos de un bfer de entrada de consola y los elimina del bfer
Lee los datos de los caracteres y atributos de color de un bloque rectangular de celdas de
caracteres en un bfer de pantalla de consola
ReadConsoleOutputAttr Copia un nmero especificado de atributos de color de texto y de fondo, de las celdas
ibute
consecutivas de un bfer de pantalla de consola
ReadConsoleOutputCha Copia un nmero de caracteres de las celdas consecutivas de un bfer de pantalla de
racter
consola
ScrollConsoleScreenBu Mueve un bloque de datos en un bfer de pantalla
ffer
SetConsoleActiveScreen Establece el bfer de pantalla especificado para que sea el bfer de pantalla de consola
Buffer
que se muestra actualmente
SetConsoleCP
Establece la pgina de cdigo de entrada utilizada por la consola asociada con el proceso
que hizo la llamada
SetConsoleCtrlHandler Agrega o elimina una funcin HandlerRoutine definida por una aplicacin, de la lista de
funciones manejadoras para el proceso que hizo la llamada
SetConsoleCursorInfo
Establece el tamao y la visibilidad del cursor para el bfer de pantalla de consola
especificado
SetConsoleCursorPositi Establece la posicin del cursor en el bfer de pantalla de consola especificado
on
SetConsoleMode
Establece el modo de entrada del bfer de entrada de una consola, o el modo de salida de
un bfer de pantalla de consola
SetConsoleOutputCP
Establece la pgina de cdigo de salida utilizada por la consola asociada con el proceso
que hizo la llamada
SetConsoleScreenBuffer Modifica el tamao del bfer de pantalla de consola especificado
Size
SetConsoleTextAttribut Establece los atributos de color de texto y de fondo de los caracteres que se escriben en el
e
bfer de pantalla
SetConsoleTitle
Establece la cadena de la barra de ttulo para la ventana de consola actual
SetConsoleWindowInfo Establece el tamao y posicin actuales de la ventana de un bfer de pantalla de consola
SetStdHandle
Establece el manejador para la entrada estndar, la salida estndar o el dispositivo de
error estndar
WriteConsole
Escribe una cadena de caracteres en un bfer de pantalla de consola, empezando en la
posicin actual del cursor
WriteConsoleInput
Escribe datos directamente en el bfer de entrada de consola
Formatos de instruccin
Un formato de instruccin define la descripcin en
bits de una instruccin, en trminos de las distintas
partes que la componen.
Un formato de instruccin debe contener un cdigo
de operacin (cod-op) e implcita o explcitamente,
ningn o algunos operandos.
Existen diversos tipos de formatos de instruccin en
el 8086, que varan en longitud desde 1 hasta 6
bytes.
Formatos de instruccin
1.- Instruccin de 1 byte con operandos implcitos.
COD-OP
Ejemplo:
CLC
Formatos de instruccin
1.- Instruccin de 1 byte con operandos implcitos.
COD-OP
Ejemplo:
CLC
11111000
Formatos de instruccin
2.- Instruccin de 1 byte modo registro.
COD-OP
Ejemplo:
DEC CX
REG
Formatos de instruccin
2.- Instruccin de 1 byte modo registro.
COD-OP
Ejemplo:
DEC CX
01001rrr
REG
Formatos de instruccin
2.- Instruccin de 1 byte modo registro.
COD-OP
Ejemplo:
DEC CX
01001rrr
01001001
REG
Formatos de instruccin
3.- Registro a registro.
CODOP
Ejemplo:
d w
MOV AX, CX
m
d
re
g
r/
m
Formatos de instruccin
3.- Registro a registro.
CODOP
Ejemplo:
d w
m
d
MOV AX, CX
100010dw mdregr/m
re
g
r/
m
Capacidad de
Direccionamiento
Cdigo de Operacin.- El primer byte esta formado por tres campos:
Mod r/m.- El segundo byte tambin esta formado por tres campos:
Mod.- Los primeros dos bits son el campo MOD. Este campo selecciona el
modo de direccionamiento y si hay desplazamiento en el modo seleccionado.
REG.- Una referencia, de tres bits, a un registro.
R/M.- Una referencia, de tres bits, a un registro o a memoria.
Capacidad de
Direccionamiento
Tabla 1.- Bits REG
REG
W=0
000
AL
001
CL
010
DL
011
BL
100
AH
101
CH
110
DH
111
DH
W=1
AX
CX
DX
BX
SP
BP
SI
DI
000
001
010
R/M
011
100
101
110
111
00
01
10
11
M[BX + SI]
M[BX + DI]
M[BP + SI]
M[BP + DI]
M[SI]
M[DI]
Direc. Directo
M[BX]
M[BX + SI + DESP8]
M[BX + DI + DESP8]
M[BP + SI + DESP8]
M[BP + DI + DESP8]
M[SI + DESP8]
M[DI + DESP8]
M[BP + DESP8]
M[BX + DESP8]
M[BX + SI + DESP16]
M[BX + DI + DESP16]
M[BP + SI + DESP16]
M[BP + DI + DESP16]
M[SI + DESP16]
M[DI + DESP16]
M[BP + DESP16]
M[BX + DESP16]
AL o AX
CL o CX
DL o DX
BL o BX
AH o SP
CH o BP
DH o SI
BH o DI
Formatos de instruccin
3.- Registro a registro.
CODOP
Ejemplo:
d w
m
d
MOV AX, CX
100010dw mdregr/m
10001001 11001000
10001011 11000001
re
g
r/
m
Formatos de instruccin
4.- Registro a/de memoria sin desplazamiento.
CODOP
Ejemplo:
d w
m
d
re
g
r/
m
Formatos de instruccin
4.- Registro a/de memoria sin desplazamiento.
CODOP
Ejemplo:
d w
m
d
re
g
001000dw mdregr/m
r/
m
Formatos de instruccin
4.- Registro a/de memoria sin desplazamiento.
CODOP
Ejemplo:
d w
m
d
re
g
001000dw mdregr/m
00100010 00010000
r/
m
Formatos de instruccin
5.- Registro a/de memoria con desplazamiento.
CODOP
Ejemplo:
d w
m
d
re
g
r/
m
P.B.
Desp.
P.A.
Desp.
Formatos de instruccin
5.- Registro a/de memoria con desplazamiento.
CODOP
d w
Ejemplo:
m
d
re
g
r/
m
P.B.
Desp.
desp
P.A.
Desp.
Formatos de instruccin
5.- Registro a/de memoria con desplazamiento.
CODOP
d w
Ejemplo:
m
d
re
g
r/
m
P.B.
Desp.
P.A.
Desp.
desp
Formatos de instruccin
6.- Operando inmediato para registro.
CODOP
Ejemplo:
s w
m
d
co
d
r/
m
P.B.
Dato
P.A. Dato
Formatos de instruccin
6.- Operando inmediato para registro.
CODOP
s w
Ejemplo:
m
d
co
d
r/
m
P.B.
Dato
dato
P.A. Dato
Formatos de instruccin
6.- Operando inmediato para registro.
CODOP
s w
Ejemplo:
m
d
co
d
r/
m
P.B.
Dato
P.A. Dato
dato
Formatos de instruccin
7.- Operando inmediato a memoria con 16 bits de desplazamiento.
CODOP
Ejemplo:
md
co
d
r/
m
P.B.
Desp.
P.A.
Desp.
P.B.
Dato
P.A.
Dato
Formatos de instruccin
7.- Operando inmediato a memoria con 16 bits de desplazamiento.
CODOP
Ejemplo:
md
co
d
r/
m
P.B.
Desp.
P.A.
Desp.
P.B.
Dato
dato
P.A.
Dato
Formatos de instruccin
7.- Operando inmediato a memoria con 16 bits de desplazamiento.
CODOP
Ejemplo:
md
co
d
r/
m
P.B.
Desp.
P.A.
Desp.
P.B.
Dato
P.A.
Dato
00000000
dato
00100000 01000101
Ejercicios
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
AAA
CBW
HLT
INC AX
POP BX
PUSH SI
ADD AL, BL
CMP CX, SI
OR CL, BL
SUB [BX], CL
ADC [DI], DX
CMP DL, [SI]
SBB [SI + 1234H], CL
XOR [DI + 56H], DX
AND BL, [SI + 78H]
CMP AL, 0FFH
MOV CX, 1234H
OR SI, 5678H
ADC [BX + DI + 12H], 0FFEEH
SUB [BP + SI + 9876H], 0AH