Вы находитесь на странице: 1из 41

LENGUAJE DE INTERFAZ

ING. LIMBERG MORALES CLEMENTE


Unidad 2 Programación básica
CONTENIDO 2.1 Ensamblador (y ligador) a utilizar
2.2 Ciclos numéricos
2.3 Captura básica de cadenas
2.4 Comparación y prueba
Unidad 1 Introducción al lenguaje 2.5 Saltos
ensamblador 2.6 Ciclos condicionales
1.1 Importancia de la programación en 2.7 Incremento y decremento
lenguaje ensamblador. 1.2 El procesador y sus 2.8 Captura de cadenas con formato
registros internos 2.9 Instrucciones aritméticas
1.3 La memoria principal (RAM) 2.10 Manipulación de la pila
1.4 El concepto de interrupciones 2.11 Obtención de cadena con representación
1.5 Llamadas a servicios del sistema decimal
1.6 Modos de direccionamiento 2.12 Instrucciones lógicas
1.7 Proceso de ensamblado y ligado 2.13 Desplazamiento y rotación
1.8 Desplegado de mensajes en el monitor 2.14 Obtención de una cadena con la representación
hexadecimal
2.15 Captura y almacenamiento de datos numéricos
2.16 Operaciones básicas sobre archivos de disco
Unidad 4 Programación de
CONTENIDO dispositivos
4.1 El buffer de video en modo texto
4.2 Acceso a discos en lenguaje ensamblador
Unidad 3 Modularización 4.3 Programación del puerto serial
3.1 Procedimientos 4.4 Programación del puerto paralelo
3.2 Macros 4.5 Programación híbrida
4.6 Programación de puerto usb
En esta unidad empezaremos adentrándonos en lo que es el lenguaje
ensamblador que será el que utilizaremos y todos los conceptos relacionados
con este mismo.
El lenguaje ensamblador es un lenguaje clasificado en los de bajo nivel que es
utilizado para crear programas informáticos y que representa la forma más
directa del código maquina específico para cada arquitectura de los
microprocesadores. La principal importancia de este lenguaje radica en que
trabaja directamente con el microprocesador, para lo cual se necesita saber a
cerca de la estructura de este mismo.
La importancia del lenguaje ensamblador es
principalmente que se trabaja directamente
1.1 Importancia de la programación en lenguaje
ensamblador. con el microprocesador; por lo cual se debe
de conocer el funcionamiento interno de
este, tiene la ventaja de que en él 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.
• Registros de segmento

Un registro de segmento tiene 16


bits de longitud y facilita un área
de memoria para direccionamiento
conocida como el segmento
actual.

• Registro de Apuntador de
Instrucciones.
1.2 El procesador y sus registros
El registro apuntador de instrucciones
(IP) de 16 bits contiene el
desplazamiento de dirección de la
siguiente instrucción que se ejecuta
1.3 La memoria principal (RAM)

La memoria principal o primaria, “Memoria


Central ", es aquella memoria de un
ordenador, donde se almacenan
temporalmente tanto los datos como los
programas que la CPU está procesando o va
a procesar en un determinado momento. Por
su función, es una amiga inseparable del
microprocesador, con el cual se comunica a
través de los buses de datos
Una interrupción es el Interrupciones por
1.4 El concepto de interrupciones
rompimiento en la secuencia hardware: Son aquellas
de un programa para que son provocadas por
ejecutar un programa dispositivos externos al
especial llamando una rutina procesador su
de servicio cuya característica principal es
característica principal es que no son programadas,
que al finalizar regresa al esto es, pueden ocurrir en
punto donde se interrumpió cualquier momento en el
el programa. programa.
1.5 Llamadas a servicios del sistema

Las llamadas al sistema


comúnmente usan una instrucción
especial de la CPU que causa que
el procesador transfiera el control a un
código privilegiado. previamente
especificado por el mismo código. Esto
permite al código privilegiado
especificar donde va a ser conectado,
así como el estado del procesador.
1.6 Modos de direccionamiento
Los llamados modos de direccionamiento son las
diferentes maneras de especificar en informática un
operando dentro de una instrucción en lenguaje
ensamblador.

Diferentes arquitecturas de
computadores varían mucho en
cuanto al número de modos de
direccionamiento que ofrecen
desde el hardware.
1.7 Proceso de ensamblado y ligado

• Edición • Link
Los archivos fuente de código De la misma forma que el ensamblado, la
ensamblador deben estar en
formato ASCII standard. Para esto fase de liga se lleva a cabo con el LINK.
puede usarse cualquier editor que Este puede ser invocado de la misma forma
permita crear archivos sin formato,
e.g. Edlin, Edit, Write, El editor del que el MASM. Los parámetros que este
Turbo Pascal, Works, Word, requiere son:
WordStar, etcétera.
LINK objeto
• Ensamblado [,[ejecutable][,[mapa][,[librería]]]]][opciones][
;]
El ensamblado se lleva a cabo invocando al
MASM. Este puede ser invocado, usando
una línea de comando, de la siguiente • Ejecución
manera: Para la ejecución del programa simplemente basta teclear su
nombre en el prompt de MS-DOS y teclear ENTER
MASM archivo [,
[objeto][,[listado][,[cross]]]]][opciones][;]
CODE ENDS
end principio
¡Al fin! ¡Llegamos al final! Aquí está el
código fuente completo: CODE
SEGMENT
ASSUME CS:CODE, DS:CODE,
SS:CODE, ES:CODE ORG 100h
principio:
mov ah, 0Fh mov ah, 0 int 10h
lea dx, mensaje_a_mostrar mov ah, 9h
mensaje_a_mostrar db "¡Hola
En este momento podemos comenzar a escribir las Mundo!$",0
verdaderas instrucciones que le indicarán a la
computadora que mensaje y como lo va a desplegar. CODE ENDS

end principio
1.8 Desplegado de mensajes en el monitor
Podemos concluir que el lenguaje ensamblador es una de las bases de la
programación actual ya que todos los lenguajes de alto nivel se basaron o se
programaron en este.

Aun mas importante que esto, la verdadera importancia del lenguaje


ensamblador radica en que trabaja directamente con los microprocesadores
de todos los dispositivos electrónicos que el ser humano ha construido sin
importar su constitución el lenguaje ensamblador es capaz de programar
cualquier hardware, con programas aún más rápidos y menos pesados ya
que no cuenta con librerías que hagan más espacio en la memoria del
sistema.
Una computadora digital o, mejor dicho, su parte física, solo distingue datos del tipo binario, es decir,
constituidos por dos únicos valores 0 y 1, y que físicamente se materializan con tensiones
comprendidas entre 0 y 4 voltios y 4 y 5 voltios respectivamente. Para representar datos que
contengas una información se utiliza una serie de unos y ceros cuyo conjunto indica dicha
información.

Para esta unidad veremos todos los tipos de ensambladores y sus características que dependen
mucho del tipo de procesador donde se escribe los programas y del computador donde se va a correr
el programa.
Un ensamblador es el programa que convierte un listado de código fuente,
escrito en un fichero de texto, en código objeto, es decir, lenguaje máquina
(el que finalmente interpretará el procesador) en el que sólo les faltan las
referencias a rutinas externas.

Ensambladores Ensambladores Ensambladores de


Residentes. Cruzados (Cross- dos fases.
Assembler)

Ensambladores de Macroensambladores. Micro-ensambladores.


dos fases.
La razón de ser de estos
segmentos es que,
considerando que el tamaño
máximo de un número que
puede manejar el procesador
esta dado por una palabra de
16 bits o registro

Cada dirección de una casilla


La arquitectura de los específica la formamos con dos
procesadores x86 obliga registros, nos es posible el acceso a
una cantidad de 4294967296 bytes de
al uso de segmentos de memoria, lo cual es, en la actualidad,
memoria para manejar la más memoria de la que veremos
instalada en una PC
información, el tamaño de
estos segmentos es de
64kb.
Algunas derivaciones de CMPS son las siguientes:

CMPSB. Compara bytes


La instrucción CMPS compara el
contenido de una localidad de CMPSD. Compara palabras dobles

memoria (direccionada por DS:SI). CMPSW. Compara palabras


Dependiendo de la bandera de
dirección, CMPS

incrementa o disminuye también los


registros SI y DI en 1 para bytes, en
2 para palabras y en 4 para
palabras dobles. La operación
establece las banderas AF, CF, OF,
PF, SF y ZF.
Una instrucción usada comúnmente para la transferencia de control es
la instrucción JMP
(jump, salto, bifurcación). Un salto es incondicional, ya que la operación
transfiere el control bajo cualquier circunstancia. También JMP vacía el
resultado de la instrucción previamente procesada; por lo que, un
programa con muchas operaciones de salto puede perder velocidad de
procesamiento.
LOOP etiqueta
La instrucción loop
decrementa CX en 1,
y transfiere el flujo
del programa a la
etiqueta dada como
operando si CX es
diferente a 1.

LOOPNE etiqueta LOOPE etiqueta


Esta instrucción Esta instrucción
decrementa en uno a decrementa CX en 1.
CX y transfiere el Si CX es diferente a
flujo del programa cero y ZF es igual a
solo si ZF es 1
diferente a 0.
Son las instrucciones más básicas a la hora de
hacer operaciones con registros: INC incrementa
el valor de un registro, o de cualquier posición en
memoria, en una unidad, y DEC lo decrementa.

Decremento Incremento

Instrucción INC INC Instrucción DEC DEC


AX AX

Incrementa en uno el Decremento AX, le


valor de AX IN WORD resta uno. DEC WORD
PTR PTR
Incrementa la palabra Decrementa la
situada en CS. palabra situada en CS.
• MOVC transferir carácter de una cadena
• MOVW transferir palabra de una cadena
• CMPC comparar carácter de una cadena
• CMPW comparar palabra de una cadena
• SCAC buscar carácter de una cadena
• SCAW buscar palabra de una cadena
• LODC cargar carácter de una cadena
• LODW cargar palabra de una cadena
• STOC guardar carácter de una cadena
• STOW guardar palabra de una cadena
• REP repetir
• CLD poner a 0 el indicador de dirección
• STD poner a 1 el indicador de dirección
-ROT (a b c – c a b) Rota
Elimina elementos.
hacia atrás.
2OUTK (::: n -- ::) Elimina el elemento n 2OVER (ab
-2ROT (ab cd ef – ef ab cd)
cd – ab cd ab) Inserta una copia de ab. 2PICK (:: n --
Rota hacia atrás.
:::) Copia el elemento n
NIP ( a b – b) Quita a de la pila.
encima de la pila.
OUTK (... n -- ..) Elimina el elemento n.

TUCK (a b -- b a b) Inserta una copia de b.

2?DUP (ab – ab ab)

Duplica si ab <> 0. 2DROP (ab -- )

Elimina 2 de encima. 2DUP ( ab – ab ab)

Duplica los elementos. 2NIP (ab cd – cd)


En este modo, los datos son proporcionados
directamente como parte de la instrucción.

Ejemplo:

Mov AX,34h; Copia en AX el número 34h


hexadecimal Mov CX,10; Copia en CX el número 10
en decimal
Requiere un solo Esta instrucción Requiere de dos Requiere dos

AND (producto lógico)

exclusiva)
OR (suma lógica)

XOR (suma lógica


NOT (negación)

operando y su también operandos y su operandos, los


función es conocida como valor será uno si cuales se
cambiar el producto lógico alguno de los comparan y el
estado de los requiere de dos bits que compara resultado
bits del mismo, es operandos y su es uno. obtenido es uno
decir, cambiar valor será igual cuando uno de
los ceros por a uno cuando los los bits es uno y
unos y los unos bits que se el otro cero.
por ceros. comparen ambos
sean uno.
Rotación a la izquierda de bits

Desplazamiento o corrimiento de bits a la Las rotaciones a la izquierda (ROL y RCL) desplazan a la


izquierda. izquierda los bits del registro designado. Las instrucciones
Los corrimientos hacia la izquierda (SHL y SAL) de rotación a la izquierda estipulan datos lógicos (sin
mueven los bits a la izquierda, en el registro
signo) y aritméticos (consigno):
designado. SHL y SAL son idénticos en su
operación.

INSTRUCCION COMENTARIO

MOV CL, 03
INSTRUCCION COMENTARIO
MOV AL, 10110111B ; AL = 10110111
MOV CL, 03
SHL AL, 01 ; AL = 01101110 Un corrimiento a MOV BL, ; BL = 10110111
10110111B
la izquierda
SHR BL, 01 ; BL = 11011011 Una rotación a la izquierda

SHLAL, CL ; AL = 01110000 Tres corrimientos SHR BL, CL ; BL = 00001011 Tres rotaciones a la izquierda

mas
1. Tomando como ejemplo el número binario 101011 lo
dividimos en grupos de 4 bits y nos queda:

10; 1011
4. 2BH (Donde la H representa la base
2. Rellenando con ceros el último grupo (el de la hexadecimal)
izquierda):

0010; 1011

3. Después tomamos cada grupo como un número


independiente y consideramos su valor en decimal:

0010 = 2; 1011 = 11
2.15 Captura y almacenamiento de 2.16 Operaciones básicas sobre
datos numéricos archivos de disco
En la etapa de diseño se plantea el problema a resolver y MOVS. Mueve un byte, palabra o palabra doble desde
se propone la mejor solución, creando diagramas una localidad en memoria direccionada por SI a otra
esquemáticos utilizados para el mejor planteamiento de la localidad direccionada por DI.
solución.
LODS. Carga desde una localidad de memoria
La codificación del programa consiste en escribir el direccionada por SI un byte en AL, una palabra en AX o
programa en algún lenguaje de programación; en este caso una palabra doble en EAX.
específico en ensamblador, tomando como base la solución
propuesta en el paso anterior. STOS. Almacena el contenido de los registros AL, AX, o EAX
en la memoria direccionada por SI.
La traducción al lenguaje máquina es la creación del
programa objeto, esto es, el programa escrito como una CMPS. Compara localidades de memoria de un byte,
secuencia de ceros y unos que pueda ser interpretado por palabra o palabra doble direccionadas por SI, DI.
el procesador.
SCAS. Compara el contenido de AL, AX o EAX con el
La prueba del programa consiste en verificar que el contenido de una localidad de memoria direccionada por
programa funcione sin errores, o sea, que haga lo que tiene SI.
que hacer.
El lenguaje ensamblador es muy complejo y no es sencillo de aprender, pero el
lenguaje ensamblador es y seguirá siendo una de las herramientas de programación
mas utilizadas por todas las personas que desean tener un mayor grado de
comprensión sobre el funcionamiento de los dispositivos.

Este lenguaje nos brinda todas las herramientas con las cuales nosotros podemos
innovar y seguir aprendiendo de ello. El lenguaje ensamblador no ha sido relegado,
en la actualidad existe una gran cantidad de programas ensambladores que nos
permiten programar en ambientes operativos gráficos como Windows, Linux, iOS,
entre otros.
Introducción
Como sabemos en un programa de alto nivel se fraccionan partes de código para hacer una
determinada tarea llamados métodos y esos métodos se mandan a llamar dentro de un método
principal que correrá todo el programa completo pues es igual en el lenguaje ensamblador solo que
se denominan con un nombre diferente.

La programación modular es uno de los métodos de diseño más flexibles y poderosos para el
mejoramiento de la productividad de un programa. Usando la programación modular el problema
se divide en módulos, donde cada una de los cuales ejecuta una única actividad o tarea y se
codifican independientemente de otros modulo. Cada uno de estos módulos se analiza, se codifica
y se prueba de preferencia por separado.
PROC nomProc proposición
3.1 Procedimientos
[proposición]
Es una colección de
instrucciones que realizan ...
una tarea específica.
Dependiendo de su extensión ENDP [nomProc]
y complejidad, un programa
puede contener uno, algunos La llamada a un procedimiento
o inclusive cientos de tiene la siguiente forma:
procedimientos.
CALL nomProc

Un buen procedimiento debe: Para regresar de un procedimiento

Hacer solo una tarea. se utiliza

Ser tan pequeño como sea posible RET


y tan largo como sea necesario
Este conjunto de instrucciones es invocado como una
sola instrucción o macroinstrucción. Para emplear una
macro en un programa debemos de definir la macro e
invocar la macro.

MACRO nombMacro [parForm [, parForm]...] proposición

[proposición]

...

ENDM [nombMacro]

3.2 Macros
Conclusión
En el lenguaje ensamblador hay dos conceptos muy importantes que nos ayudan mucho a la hora de
programar y son los procedimientos y los macros.

Un procedimiento es un conjunto de instrucciones que tienen como finalidad ejecutar una tarea en especifico
dentro del programa, creo que es muy obvia la función de los procedimientos y como vimos que los lenguajes
de alto nivel que se utilizan en la actualidad de igual manera funcionan mediante instrucciones que realizan
actividades o una cierta actividad pues esta característica como vemos viene desde el lenguaje ensamblador.
Las instrucciones son indispensables en todo tipo de programa ya que sin estas el programa no haría nada. Los
procedimientos son similares a los macros.

Lo macros nos ofrecen la facilidad de codificar una sola vez un conjunto de instrucciones y reutilizar el código
las veces que sean necesarias dentro de un programa.
Introducción
4.1 El buffer de video en modo texto

 Se llama modo texto a cualquier modo de El uso del modo texto se hizo popular a principios de
vídeo de un ordenador en el que el contenido los años 1970, cuando los terminales de texto
de la pantalla se representa internamente en
términos de caracteres textuales en lugar de orientados a vídeo empezaron a reemplazar a
píxeles individuales los teletipos en el uso interactivo de las computadoras.
Se define una transferencia elemental de información
como la transmisión de una sola unidad de información
(normalmente un byte) entre el procesador y el periférico
4.2 Acceso a discos en lenguaje ensamblador o viceversa.

_AbsoluteRead Servicio Descripción


00 Inicializar puerto serie
Es una rutina que transfiere el contenido de uno o más sectores del disco
al buffer especificado 01 Enviar un dato

02 Recibir un dato

AbsoluteWrite 03 Obtener el estado del puerto

Transfiere el contenido del buffer especificando a uno o más sectores de


disco

FreeDiskSpace

Devuelve en DX:AX el espacio libre en disco (en Kb).


4.3 Programación del puerto serial

En lenguaje ensamblador, se puede acudir a la


interrupción 14H de la ROM- BIOS para configurar, leer,
escribir o simplemente para conocer el estado del puerto;
cada una de estas cuatro opciones es un servicio de la
interrupción, y se seleccionan a través del registro AH. En
todos los casos, el registro DX debe contener el número
del puerto serie; el primero de ellos, COM1 se especifica
como 00h.
out DX, AL; lleva al puerto DX el contenido del
registro AL
4.4 Programación del puerto paralelo
in AL, DX; lleva al registro AL, el contenido del
En lenguaje ensamblador, se puede leer un dato del
puerto DX
puerto mediante la instrucción IN ó escribir un dato en el
puerto con la instrucción OUT, en ambos casos el registro
AL debe participar activamente en la instrucción, bien sea
como fuente (en operaciones de escritura) o destino (en
operaciones de lectura) del dato, como en los siguientes
casos:
4.5 Programación híbrida

La programación hibrida es utilizada en los casos en


donde el código en ensamblador dificulta la estructuración
del programa. La programación híbrida proporciona un
mecanismo por medio del cual podemos aprovechar las
ventajas del lenguaje ensamblador y los lenguajes de alto
nivel, todo esto con el fin escribir programas más rápidos
y eficientes.
Conclusión

Podemos concluir que el lenguaje ensamblador tiene como objetivo final la


programación de diversos dispositivos, así como son microprocesadores, periféricos,
entre otros, pero para lo cual debemos tener el conocimiento básico de este lenguaje
hay que saber como esta constituido el lenguaje ensamblador, cual es su estructura y
mas que nada saber como se utilizan cada línea de código o comando dentro del
lenguaje.
Bibliografía http://sagitario.itmorelia.edu.mx/mfraga/materias/li/unidad1.pdf

http://itpn.mx/recursosisc/6semestre/lenguajesdeinterfaz/Unidad%20I.pdf

http://itpn.mx/recursosisc/6semestre/lenguajesdeinterfaz/Unidad%20II.pdf

https://prezi.com/y5nr_na4vfjr/unidad-2/

http://itpn.mx/recursosisc/6semestre/lenguajesdeinterfaz/Unidad%20III.pdf

http://yesenializbethguerrerogarcia.blogspot.com/2017/04/unidad-iii-
modularizacion.html

https://prezi.com/lamscama-n5m/unidad-3-modularizacion-lenguaje-de-
interfaz/

http://itpn.mx/recursosisc/6semestre/lenguajesdeinterfaz/Unidad%20IV.pdf

https://prezi.com/fza8xd9uiku8/unidad-4-programacion-de-dispositivos/

Вам также может понравиться