Sie sind auf Seite 1von 29

27/4/18

1. Introducción al Lenguaje
Ensamblador
Lenguajes de Interfaz

1.1 Importancia de la programación en lenguaje


ensamblador.

• Es el lenguaje de programación u3lizado para escribir programas


informá3cos de bajo nivel, y cons3tuye la representación más directa
del Código máquina específico para cada arquitectura de
computadoras legible por un programador.

• Aun hoy se u3liza en la programación de handler o manipuladores de


disposi3vos de hardware.

• El único lenguaje que en3enden los microcontroladores es el código


máquina formado por ceros y unos del sistema binario.
2

1
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.

• 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.

• El lenguaje ensamblador trabaja con nemónicos, que son grupos de


caracteres alfanuméricos que simbolizan las órdenes o tareas a
realizar.

1.1 Importancia de la programación en lenguaje


ensamblador.
• 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 par;r de
este fichero el correspondiente código máquina , que suele tener la
extensión *.hex.

2
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.

Definición:

• El lenguaje ensamblador es un 0po de lenguaje de bajo nivel u0lizado


para escribir programas informá0cos, y cons0tuye la representación
más directa del código máquina específico para cada arquitectura de
microprocesador.

1.1 Importancia de la programación en lenguaje


ensamblador.
Caracterís)cas:
• El código escrito en lenguaje ensamblador posee una cierta dificultad
de ser entendido directamente por un ser humano ya que su
estructura se acerca más bien al lenguaje máquina, es decir, lenguaje
de bajo nivel.

• El lenguaje ensamblador es di>cilmente portable, es decir, un código


escrito para un Microprocesador, suele necesitar ser modificado,
muchas veces en su totalidad para poder ser usado en otra máquina
dis@nta, aun con el mismo Microprocesador, solo pueden ser
reu@lizados secciones especiales del código programado.
6

3
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Caracterís)cas:
• Los programas hechos en lenguaje ensamblador, al ser programado
directamente sobre Hardware, son generalmente más rápidos y
consumen menos recursos del sistema (memoria RAM y ROM).

• Al programar cuidadosamente en lenguaje ensamblador se pueden


crear programas que se ejecutan más rápidamente y ocupan menos
espacio que con lenguajes de alto nivel.

1.1 Importancia de la programación en lenguaje


ensamblador.
Caracterís)cas:
• Con el lenguaje ensamblador se 1ene un control muy preciso de las tareas
realizadas por un Microprocesador por lo que se pueden crear segmentos
de código di;ciles de programar en un lenguaje de alto nivel.

• También se puede controlar el 1empo en que tarda una Ru1na en


ejecutarse, e impedir que se interrumpa durante su ejecución.

• El lenguaje ensamblador es un código estructurado y gravitatorio


desarrollado sobre un archivo de programación (.asm), en el cual pueden
exis1r varios programas, macros o ru1nas que pueden ser llamados entre
si.

4
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Importancia

• 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, 8ene la
ventaja de que en el se puede realizar cualquier 8po de programas que en los
lenguajes de alto nivel no lo pueden realizar.

• Otro punto es que los programas en ensamblador ocupan menos


espacio en memoria.

1.1 Importancia de la programación en lenguaje


ensamblador.
Importancia

10

5
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
• 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


instrucción Binaria como se expresa en código de máquina:
Binario: 10110000 01100001 (Hexadecimal: 0xb061)

11

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
• La representación equivalente en lenguaje ensamblador es más fácil
de recordar:
MOV al, 061h

• Esta instrucción significa:


Asigna el valor Hexadecimal 61 (97 Decimal) al registro "al".

12

6
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
• El mnemónico "mov" es un código de operación u "opcode", elegido por
los diseñadores de la colección de instrucciones para abreviar "move"
(mover, pero en el sen9do de copiar valores de un si9o a otro).

• El opcode es seguido por una lista de argumentos o parámetros,


completando una instrucción de ensamblador =pica.

• 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 máquina.
13

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
• En algunos casos, un ensamblador puede proveer "pseudo instrucciones"
que se expanden en un código de máquina más extenso a fin de proveer la
funcionalidad necesaria.

• Por ejemplo, para un código máquina condicional como:


• "si X mayor o igual que", un ensamblador puede u@lizar una pseudo instrucción al
grupo "haga si menor que", y "si = 0" sobre el resultado de la condición anterior.

• Los Ensambladores más completos también proveen un rico lenguaje de


macros que se u@liza para generar código más complejo y secuencias de
datos.

14

7
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
• Cada arquitectura de microprocesadores 0ene su propio lenguaje de
máquina, y en consecuencia su propio lenguaje ensamblador ya que
este se encuentra muy ligado al la estructura del hardware. (set de
instrucciones)

• Los microprocesadores difieren en el 0po y número de operaciones


que soportan

• También pueden tener diferente can0dad de registros, y dis0nta


representación de los 0pos de datos en memoria.
15

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje

• La mayoría son capaces de cumplir esencialmente las mismas


funciones, (de diferente forma).

• Pueden exis:r múl:ples conjuntos de mnemónicos o Sintaxis de


lenguaje ensamblador para un mismo conjunto de instrucciones,
instanciados Apicamente en diferentes programas en ensamblador.

16

8
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
Código máquina
• El código máquina, o lenguaje de máquina, está formado por
instrucciones sencillas, -dependiendo de la estructura del procesador-
pueden especificar:

• Registros específicos para operaciones aritmé>cas, direccionamiento o


control de funciones.
• Posiciones de memoria especificas (offset).
• Modos de direccionamiento usados para interpretar operandos.

17

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
Código máquina
• Las operaciones más complejas se realizan combinando estas
instrucciones sencillas, que pueden ser ejecutadas secuencialmente o
mediante instrucciones de control de flujo.
• Casi todas las instrucciones u<lizan 2 operandos específicos para
realizar su función.
• Ejemplo, cuando deseamos mover un valor constante hacia un registro de
almacenamiento debemos especificar ambos operandos.
• Las operaciones disponibles en la mayoría de los conjuntos de instrucciones
incluyen:

18

9
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
Código máquina
mover • Llenar un registro con un valor constante (Ej.: mov al, `20`).
• Mover datos de una posición de memoria a un registro o viceversa (Ej.: mov
al, [si])
• Escribir y leer datos de dispositivos (Ej.: lea dx, offset cadena)
calcular • sumar, restar, mulJplicar o dividir los valores de dos registros, colocando el
resultado en uno de ellos o en otro registro (Ej.: sum, mul, div, entres otras
instrucciones).
• Realizar operaciones binarias, incluyendo operaciones lógicas
(AND/OR/XOR/NOT) o
• Comparar valores entre registros (mayor, menor, igual) (Ej.: cmp)

19

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
Código máquina
afectar el flujo • Saltar a otra posición en el programa y ejecutar instrucciones allí (Ej.: jmp)
del programa • Saltar si se cumplen ciertas condiciones (IF) (Ej.: jnb, jnz, jb, jz, jne, je,
entre otros) o
• Saltar a otra posición, pero guardar el punto de salida para retornar (Ej.:
CALL, llamada a subrutinas)
• Algunas computadoras incluyen instrucciones complejas dentro de sus
capacidades. Una sola instrucción compleja hace lo mismo que en otras
computadoras puede requerir una larga serie de instrucciones, por
ejemplo:
• Salvar varios registros en la Pila de una sola vez
• Mover grandes bloques de memoria

20

10
27/4/18

1.1 Importancia de la programación en lenguaje


ensamblador.
Lenguaje
Ejemplo de lenguaje ensamblador
El siguiente es un ejemplo del programa clásico Hola mundo escrito para la arquitectura de procesador x86
(bajo el sistema opera;vo DOS) en modo texto (por defecto).
.model small
.stack
.data
Cadena1 DB 'Hola Mundo.$’
.code
programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1 mov ah, 9
int 21h
int 20h
end programa

21

1.2 El procesador y sus registros internos


• Los registros del procesador se emplean para controlar instrucciones
en ejecución, manejar direccionamiento de memoria y proporcionar
capacidad aritmé7ca.

• Los registros son direccionable por medio de un nombre.

• Los bits por convención, se numeran de derecha a izquierda, como


en:

… 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 1 1 0 1 1 1 0 0 1 0 1 1

22

11
27/4/18

Los registros del procesador tienen como misión fundamental almacenar las posiciones de
memoria que van a sufrir repetidas manipulaciones, ya que los accesos a memoria son mucho más
lentos que los accesos a los registros. El 8086 dispone de 14 registros de 16 bits que se emplean
para controlar la ejecución de instrucciones, direccionar la memoria y proporcionar capacidad
aritmética y lógica. Cada registro puede almacenar datos o direcciones de memoria. Los registros
son direccionables por medio de un nombre. Por convención los bits de un registro se numeran de
1.2 El procesador y sus registros internos
derecha a izquierda:

15 14 13 12 11 10 9 8
• Los
1
registros
0 0
del
0
8086
0
se
1
clasifican
1 0
en:17 6
0
5
0
4
0
3
1
2
1
1
1
0
0
• registros de propósito general o de datos, registros de segmento, registro
apuntador de instrucciones
Los diferentes (IP),
registros del 8086 registrosen:
se clasifican apuntadores (SP y BP),
registros de propósito registros
general o de datos,
índice
registros de(SI y DI) y registro
segmento, de banderas,
registro apuntador FLAGS o (IP),
de instrucciones registro de estado
registros (FL).(SP y BP),
apuntadores
registros índice (SI y DI) y registro de banderas, FLAGS o registro de estado (FL).

AX SP CS IP
BX BP DS FLAGS o FL
CX SI SS Registro puntero
DX DI ES de instrucciones;
Registros de Registros Registros de y Registro de
propósito punteros y segmento banderas,
general Registros FLAGS o de
o de datos índice estado (FL)

Figura 3. Registros del 8086/88 y del 80286.


23

1.1.1.- Registros de propósito general.

Se utilizan para cálculo y almacenamiento de propósito general. Los programas leen datos de
memoria y los dejan en estos registros, ejecutan operaciones sobre ellos, y guardan los resultados en
memoria. Hay cuatro registros de propósito general que, aparte de ser usados a voluntad por el
programador, tienen fines específicos:

Registro AX Este registro es el acumulador principal, implicado en gran parte de las


1.2 El procesador
operaciones deyaritméticas
sus registros
y de E/S. internos
Registro BX Recibe el nombre de registro base ya que es el único registro de propósito general
que se usa como un índice en el direccionamiento indexado. Se suele utilizar para
Registros de segmento
cálculos aritméticos.
• Un registro de segmento
Registro CX El CX es conocido -ene
como 16 bitscontador
registro de longitud y facilita
ya que puede contenerun
un área de
valor para
controlar el número de veces que se repite una cierta operación.
memoria
Registro DXpara
Se direccionamiento
conoce como registro de conocida
datos. Algunas como el segmento
operaciones actual.
de E/S requieren su uso,
y las operaciones de multiplicación y división con cifras grandes suponen que el
DX y el AX trabajando juntos
Registro CS
• El DOS Losalmacena la direcci
registros de propósito ón inicial
general se puedendel segmento
direccionar como deuna código
palabra o de
comoun un byte.
programa en el registro CS.
El byte de la izquierda es la parte alta o byte más significativo y el byte de la derecha es la parte o
byte menos significativo.
• Esta dirección de segmento, mas un valor de desplazamiento en el
registro apuntador de instrucción (IP), indica la dirección de una
instrucción que es buscada para su ejecución.

24

12
27/4/18

1.2 El procesador y sus registros internos


Registros de segmento

Registro DS
• La dirección inicial de un segmento de datos de programa es
almacenada en el registro DS.

• En términos sencillos, esta dirección, más un valor de desplazamiento


en una instrucción, genera una referencia a la localidad de un byte
específico en el segmento de datos.

25

1.2 El procesador y sus registros internos


Registros de segmento

Registro SS
• El registro SS permite la colocación en memoria de una pila, para
almacenamiento temporal de direcciones y datos.
• El DOS almacena la dirección de inicio del segmento de pila de un
programa en el registro SS.
• Esta dirección de segmento, más un valor de desplazamiento en el
registro del apuntador de pila (SP), indica la palabra actual en la pila
que está siendo direccionada.

26

13
27/4/18

1.2 El procesador y sus registros internos


Registros de segmento

Registros ES
• Algunas operaciones con cadenas de caracteres (datos de caracteres)
u3lizan el registro extra de segmento para manejar el
direccionamiento de memoria.
• En este contexto, el registro ES está asociado con el registro DI
(índice).
• Un programa que requiere el uso del registro ES puede inicializarlo
con una dirección de segmento apropiada.

27

1.2 El procesador y sus registros internos


Registros de segmento

Registros FS y GS
• Son registros extra de segmento en los procesadores 80386 y
posteriores.

28

14
27/4/18

1.2 El procesador y sus registros internos


Registros de propósito general

• Los registros de propósito general AX, BX, CX y DX son los caballos de


batalla del sistema. Son únicos en el sen=do de que se puede
direccionarlos como una palabra o como una parte de un byte.

• El úl=mo byte de la izquierda es la parte "alta", y el ul=mo byte de la


derecha es la parte "baja". Por ejemplo, el registro CX consta de una
parte CH (alta) y una parte Cl (baja), y usted puede referirse a
cualquier parte por su nombre.

29

1.2 El procesador y sus registros internos


Registros de propósito general

Registro AX
• El registro AX, el acumulador principal, es u5lizado para operaciones
que implican entrada/salida y la mayor parte de la aritmé5ca.

• Por ejemplo, las instrucciones para mul5plicar, dividir y traducir


suponen el uso del AX. También, algunas operaciones generan código
más eficiente si se refieren al AX en lugar de a los otros registros.

AX: AH AL
EAX:
30

15
27/4/18

1.2 El procesador y sus registros internos


Registros de propósito general

Registro BX
• El BX es conocido como el registro base ya que es el único registro de
propósito general que puede ser índice para direccionamiento
indexado.
• También es común emplear el BX para cálculos.

BX: BH BL
EBX:
31

1.2 El procesador y sus registros internos


Registros de propósito general

Registro DX
• El DX es conocido como l registro de datos.
• Alguna operaciones de entrada/salida requieren uso, y las
operaciones de mul:plicación y división con cifras grandes suponen al
DX y al AX trabajando juntos.
DX: DH DL
EDX:

• Puede usar los registros de propósito general para suma y resta de


cifras de 8, 16 o 32 bits. 32

16
27/4/18

1.2 El procesador y sus registros internos


Registros de propósito general
Registro Propósito

Registro AX Este registro es el acumulador principal, implicado en gran parte de las


operaciones de aritméticas y de E/S.
Registro BX Recibe el nombre de registro base ya que es el único registro de propósito
general que se usa como un índice en el direccionamiento indexado. Se
suele utilizar para cálculos aritméticos.
Registro CX El CX es conocido como registro contador ya que puede contener un valor
para controlar el número de veces que se repite una cierta operación.
Registro DX Se conoce como registro de datos. Algunas operaciones de E/S requieren
su uso, y las operaciones de multiplicación y división con cifras grandes
suponen que el DX y el AX trabajando juntos
33

1.2 El procesador y sus registros internos


Registro de Apuntador de Instrucciones.

• El registro apuntador de instrucciones (IP) de 16 bits con8ene el


desplazamiento de dirección de la siguiente instrucción que se
ejecuta.
• El IP está asociado con el registro CS en el sen8do de que el IP indica
la instrucción actual dentro del segmento de código que se está
ejecutando actualmente.
• Los procesadores 80386 y posteriores 8enen un IP ampliado de 32
bits, llamado EIP.

34

17
27/4/18

1.2 El procesador y sus registros internos


Registro de Apuntador de Instrucciones.

• En el ejemplo siguiente, el registro CS con4ene 25A4 [0]H y el IP


con4ene 412H.
• Para encontrar la siguiente instrucción que será ejecutada, el
procesador combina las direcciones en el CS y el IP:

Segmento de dirección en el registro CS: 25A40H


Desplazamiento de dirección en el registro IP: + 412H
Dirección de la siguiente instrucción: 25E52H

35

1.2 El procesador y sus registros internos


Registro de Apuntador de Instrucciones.

Registros Apuntadores

• Los registros SP (apuntador de la pila) Y BP (apuntador de base) están


asociados con el registro SS y permiten al sistema accesar datos en el
segmento de la pila.

36

18
27/4/18

1.2 El procesador y sus registros internos


Registro de Apuntador de Instrucciones.

Registro SP
• El apuntador de la pila de 16 bits está asociado con el registro SS y
proporciona un valor de desplazamiento que se refiere a la palabra
actual que está siendo procesada en la pila.
• Los procesadores 80386 y posteriores Aenen un apuntador de pila de
32 bits, el registro ESP.
• El sistema maneja de forma automáAca estos registros.

37

1.2 El procesador y sus registros internos


Registro de Apuntador de Instrucciones.

Registro SP
• En el ejemplo siguiente, el registro SS con3ene la dirección de segmento
27B3 [0]H y el SP el desplazamiento 312H.
• Para encontrar la palabra actual que está siendo procesada en la pila, la
computadora combina las direcciones en el SS y el SP:
Dirección de segmento en el registro SS: 27B30H
Desplazamiento en el registro SP: + 312H
Dirección de la pila: 27E42H

27B3[0]H 312H
38
Dirección del segmento SS Desplazamiento del SP

19
27/4/18

1.2 El procesador y sus registros internos


Registro de Apuntador de Instrucciones.

Registro BP
• El BP de 16 bits facilita la referencia de parámetros, los cuales son
datos y direcciones transmi:dos vía pila.

• Los procesadores 80386 y posteriores :enen un BP ampliado de 32


bits llamado el registro EBP.

39

1.2 El procesador y sus registros internos


Registro de índice.
• Los registros SI y DI están disponibles para direccionamiento indexado
y para sumas y restas.

Registro SI
• El registro índice fuente de 16 bits es requerido por algunas
operaciones con cadenas (de caracteres).
• En este contexto, el SI esta asociado con el registro DS.
• Los procesadores 80386 y posteriores permiten el uso de un registro
ampliado de 32 bits, el ESI.

40

20
27/4/18

1.2 El procesador y sus registros internos


Registro de índice.

Registro DI
• El registro índice des/no también es requerido por algunas
operaciones con cadenas de caracteres.
• En este contexto, el DI esta asociado con el registro ES.
• Los procesadores 80386 y posteriores permiten el uso de un registro
ampliado de 32 bits, el EDI.

41

1.2 El procesador y sus registros internos


Registro de banderas.
• De los 16 bits del registro de banderas, nueve son comunes a toda la
familia de procesadores 8086, y sirven para indicar el estado actual de
la máquina y el resultado del procesamiento.

• Muchas instrucciones que piden comparaciones y aritméAca cambian


el estado de las banderas, algunas cuyas instrucciones pueden realizar
pruebas para determinar la acción subsecuente.

• En resumen, los bits de las banderas comunes son como sigue:

42

21
27/4/18

1.2 El procesador y sus registros internos


Registro de banderas.

OF (Overflow, desbordamiento)
• Indica desbordamiento de un bit de orden alto (más a la izquierda)
después de una operación aritmé9ca.

DF (dirección)
• Designa la dirección hacia la izquierda o hacia la derecha para mover
o comparar cadenas de caracteres.

43

1.2 El procesador y sus registros internos


Registro de banderas.

IF (interrupción)
• Indica que una interrupción externa, como la entrada desde el teclado, sea
procesada o ignorada.

TF (trampa)
• Permite la operación del procesador en modo de un paso.
• Los programas depuradores, como el DEBUG, ac>van esta bandera de
manera que usted pueda avanzar en la ejecución de una sola instrucción a
un >empo, para examinar el efecto de esa instrucción sobre los registros de
memoria.
44

22
27/4/18

1.2 El procesador y sus registros internos


Registro de banderas.

IF (interrupción)
• Con$ene el signo resultante de una operación aritmé$ca (0 = posi$vo y 1 =
nega$vo).

ZF (cero)
• Indica el resultado de una operación aritmé$ca o de comparación (0 = resultado
diferente de cero y 1 = resultado igual a cero).

AF (acarreo auxiliar)
• Con$ene un acarreo externo del bit 3 en un dato de 8 bits para aritmé$ca
especializada.
45

1.2 El procesador y sus registros internos


Registro de banderas.

PF (paridad)
• Indica paridad par o impar de una operación en datos de 8 bits de
bajo orden (más a la derecha).

CF (acarreo)
• Con;ene el acarreo de orden más alto (más a la izquierda) después de
una operación aritmé;ca; también lleva el contenido del ul;mo bit en
una operación de corrimiento o de rotación.

46

23
27/4/18

1.2 El procesador y sus registros internos


Registro de banderas.
• Las banderas están en el registro de banderas en las siguientes
posiciones:

• Las banderas más importantes para la programación en ensamblador


son O, S, Z y C, para operaciones de comparación y aritméticas, y D para
operaciones de cadenas de caracteres.

• Los procesadores 80286 y posteriores tienen algunas banderas usadas


para propósitos internos, en especial las que afectan al modo protegido.

• Los procesadores 80286 y posteriores tienen un registro extendido de


47
banderas conocido como Eflags.

1.2 El procesador y sus registros internos


SEGMENTO.

• Un segmento es un área especial en un programa que inicia en un


límite de un párrafo, esto es, en una localidad de regularmente
divisible entre 16, o 10 hexadecimal.

• Aunque un segmento puede estar ubicado casi en cualquier lugar de


la memoria y, en modo real, puede ser hasta de 64K, solo necesita
tanto espacio como el programa requiera para su ejecución.

48

24
27/4/18

1.2 El procesador y sus registros internos


SEGMENTO.

• Un segmento en modo real puede ser de hasta 64K. Se puede tener


cualquier número de segmentos; para direccionar un segmento en
par;cular basta cambiar la dirección en el registro del segmento
apropiado.

• Los tres segmentos principales son los segmentos de código, de datos


y de la pila.

49

1.2 El procesador y sus registros internos


Segmento de código

• El segmento de código (CS) con3ene las instrucciones de máquina


que son ejecutadas por lo común la primera instrucción ejecutable
está en el inicio del segmento, y el sistema opera3vo enlaza a esa
localidad para iniciar la ejecución del programa.

• Como su nombre indica, el registro del CS direcciona el segmento de


código. Si su área de código requiere más de 64K, su programa puede
necesitar definir más de un segmento de código.

50

25
27/4/18

1.2 El procesador y sus registros internos


Segmento de datos

• El segmento de datos (DS) con2ene datos, constantes y áreas de


trabajo definidos por el programa.

• El registro DS direcciona el segmento de datos. Si su área de datos


requiere más de 64K, su programa puede necesitar definir más de un
segmento de datos.

51

1.2 El procesador y sus registros internos


Segmento de pila

• En términos sencillos, la pila con1ene los datos y direcciones que


usted necesita guardar temporalmente o para uso de sus "llamadas"
subru1nas.

• El registro de segmento de la pila (SS) direcciona el segmento de la


pila.

52

26
Los registros de segmentos contienen la dirección inicial de cada segmento. La
figura 3.1 presenta un esquema de los registros CS, DS y SS; los registros y
segmentos no necesariamente están en el orden mostrado. Otros registros de 27/4/18
segmentos son el ES (segmento extra) y, en los procesadores 80386 y
posteriores, los registros FS y GS, que contienen usos especializados.

Coma ya dijimos, un segmento inicia en un límite de párrafo, que es una dirección


por lo común divisible entre el 16 decimal o 10 hexadecimal. Suponga que un
segmento de datos inicia en la localidad de memoria 045F0H.

Ya que en este y todos los demás casos el ultimo dígito hexadecimal de la

1.2 El procesador y sus registros internos


derecha es cero, los diseñadores de computadora decidieron que sería
innecesario almacenar el dígito cero en el registro del segmento. Así, 045F0H se
almacena como 045F, con el cero de la extrema derecha sobrentendido. En donde

LIMITES DE LOS SEGMENTOS sea apropiado, el texto indica al cero de la derecha con corchetes, como 045F[0].

• Los registros de segmentos


con.enen la dirección inicial de
cada segmento.

• La figura presenta un esquema de


los registros CS, DS y SS; los
registros y segmentos no
necesariamente están en el orden
mostrado.
Figura 3.1. Segmentos y registros.

53

1.2 El procesador y sus registros internos


LIMITES DE LOS SEGMENTOS

• Otros registros de segmentos son el ES (segmento extra) y, en los


procesadores 80386 y posteriores, los registros FS y GS, que con@enen usos
especializados.

• Coma ya dijimos, un segmento inicia en un límite de párrafo, que es una


dirección por lo común divisible entre el 16 decimal o 10 hexadecimal.

• Suponga que un segmento de datos inicia en la localidad de memoria


045F0H.
54

27
27/4/18

1.2 El procesador y sus registros internos


LIMITES DE LOS SEGMENTOS

• Ya que en este y todos los demás casos el ul1mo dígito hexadecimal de la


derecha es cero, los diseñadores de computadora decidieron que sería
innecesario almacenar el dígito cero en el registro del segmento.

• Así, 045F0H se almacena como 045F, con el cero de la extrema derecha


sobrentendido.

• En donde sea apropiado, el texto indica al cero de la derecha con


corchetes, como 045F[0].
55

1.2 El procesador y sus registros internos


LIMITES DE LOS SEGMENTOS
DESPLAZAMIENTO

• En un programa, todas la localidades de memoria están referidas a una dirección


inicial de segmento. La distancia en bytes desde la dirección del segmento se
define como el desplazamiento (offset).

• Un desplazamiento de dos bytes (16 bits) puede estar en el rango de 0000H hasta
FFFFH, o bien, desde cero hasta 65, 535.

• El primer byte del segmento de código Hene un desplazamiento 00, el segundo


byte Hene un desplazamiento 01, etc. hasta el desplazamiento 65,535.
56

28
27/4/18

1.2 El procesador y sus registros internos


LIMITES DE LOS SEGMENTOS
DESPLAZAMIENTO

• Para referir cualquier dirección de memoria en un segmento, el procesador


combina la dirección del segmento en un registro de segmento con un
valor de desplazamiento.

• En el ejemplo siguiente, el registro DS con>ene la dirección de segmento


del segmento de datos en 045F[0]H y una instrucción hace referencia a una
localidad con DESPLAZAMIENTO
un desplazamiento de 0032H bytes dentro del segmento de
datos. En un programa, todas la localidades de memoria están referidas a una dirección
inicial de segmento. La distancia en bytes desde la dirección del segmento se
57
define como el desplazamiento (offset).

Un desplazamiento de dos bytes (16 bits) puede estar en el rango de 0000H hasta
FFFFH, o bien, desde cero hasta 65, 535. Así el primer byte del segmento de
código tiene un desplazamiento 00, el segundo byte tiene un desplazamiento 01,
etc. hasta el desplazamiento 65, 535. Para referir cualquier dirección de memoria
en un segmento, el procesador combina la dirección del segmento en un registro
de segmento con un valor de desplazamiento.
1.2 El procesador y sus registros internos
En el ejemplo siguiente, el registro DS contiene la dirección de segmento del
segmento de datos en 045F[0]H y una instrucción hace referencia a una localidad
LIMITES DE LOSconSEGMENTOS
un desplazamiento de 0032H bytes dentro del segmento de datos.
DESPLAZAMIENTO

• Por lo tanto, la localidad real de memoria del byte referido por la


instrucción esPor
04622H;
lo tanto, la localidad real de memoria del byte referido por la instrucción es

Dirección Desplazamiento:
04622H; 045F0H
Dirección real: +0032H
Del segmentoDirección
DS: del 04622H
segmento DS: 045F0H
Desplazamiento: +0032H
Dirección real: 04622H 58

29