Está en la página 1de 584

Lenguaje ensamblador para

Lenguaje ensamblador para computadoras basadas en Intel



Resumen
Lenguaje ensamblador para computadoras basadas en Intel Resumen por Victor Gutierrez

Lenguaje ensamblador para computadoras basadas en Intel

Autor del libro: Kip R. Irvine
5ta edicin
Resumen: Victor ugo Guti!rrez Guti!rrez


Resumen por Victor Gutierrez
"
Lenguaje ensamblador para computadoras basadas en Intel


#

acer un resumen de un libro con tanta cantidad $undamental de conocimiento es una
tarea algo di$%cil& clasi$ico ' a la vez de$ino resumen como la ovacin de a(uellos detalles
min)sculos (ue no a$ectan en el proceso de a prendimiento del lector& se *an eliminado
los res)menes de cap%tulos +estos mostrados en la parte $inal de cada cap%tulo,& ejercicios
de programacin& bibliogra$%as& ap!ndices& etc.

ndice:
". -onceptos b.sicos.
#. /r(uitectura del procesador I/01#.
1. 2undamentos del lenguaje ensamblador.
3. 4rans$erencias de datos& direccionamiento ' aritm!tica.
5. 5rocedimientos.
6. 5rocesamiento condicional.
7. /ritm!tica de enteros.
8. 5rocedimientos avanzados.
9. -adenas ' arreglos.
":. ;structuras ' macros.
"". 5rogramacin en <= >indo?s.
"1. 5rogramacin en <=0@A= de "6 bits.
"3. 2undamentos de los discos.
"5. 5rogramacin a nivel del BIA=.
"6. 5rogramacin eCperta en <=0@A=.
"7. 5rocedimiento de punto $lotante ' codi$icacin de
instrucciones.


1

1 Conceptos bsicos:
Bienvenidos al lenguaje ensamblador
Ensamblador: -onvierte un cdigo de $uente en lenguaje ensamblador a cdigo de m.(uina.
Enlazador: -ombina los arc*ivos individuales creados por un ensamblador en un solo programa
ejecutable.
Interprete de microcdigo: 5rograma dentro del procesador encargado de interpretar las
instrucciones de un programa en lenguaje ensamblador cuando estas no coinciden directamente
con la ar(uitectura de la computadora +cuando est. en ejecucin el programa,.
!rogramas embebidos: =on programas cortos (ue se almacenan en un espacio reducido de
memoria.
!ortabilidad: Lenguajes cu'os programas de cdigo de $uente pueden compilarse ' ejecutarse en
cual(uier =A.
Controlador de dispositivo: =on programas (ue traducen los comandos generales del sistema
operativo en re$erencias espec%$icas a los detalles de *ard?are (ue solo el $abricante conoce.
Concepto de m"uina virtual
5or lo general una computadora ejecuta programas escritos en su lenguaje mquina nativo a este
lenguaje lo llamaremos L#& para los programadores es mu' di$icultoso escribir en L# +Lenguaje
mquina nativo,& por lo (ue se crea L1 un lenguaje m.s $.cil de usar *a' dos $ormas para lograr
esto:
Interpretacin: @e esta manera a medida (ue se ejecuta el programa en L" este se va
decodi$icando en lenguaje L: por un programa escrito en L: encargado de realizar la
interpretacin.
Traduccin: ;l programa en L" se convierte en L: debido a un programa en L: (ue se encarga de
traducirlo. @espu!s de esto el programa podr%a ejecutarse directamente desde el *ard?are de la
computadora.
<.(uinas Virtuales: en vez de tan solo utilizar lenguajes es m.s $.cil verlo en t!rminos de una
computadora $icticia o m.(uina virtual $%& V<: ser. la m.(uina virtual (ue utiliza L: ' V<" L"
Dna V< no puede ser completamente distinta a la otra debido a (ue el proceso interpretacin o
traduccin ser%a mu' largo.
=i el lenguaje (ue soporta $%1 no es mu' amigable para el programador se podr%a diseEar
+*ard?are o so$t?are, una $% *asta (ue VMn $uera $.cil de programar.
%"uinas espec&'icas:
3

Relacionaremos estos conceptos con las computadoras ' los lenguajes reales usando nombres
como $%#()*ivel #& $%1()*ivel 1:








Fivel :0GLgica digital: ard?are lgico digital
Fivel "0G<icro ar(uitectura: Los comandos de micro ar(uitectura espec%$icos son un secreto del
propietario ' por lo general no se permiten (ue los usuarios promedio escriban
microinstrucciones& podr%an re(uerirse 1 *asta 3 instrucciones en microcdigo para llegar a cabo
una instruccin primitiva.
Fivel #0G/r(uitectura del conjunto de instrucciones: 5rimer nivel en donde el usuario puede
escribir un programa& este consiste en n)meros binarios este lenguaje es llamado Hlenguaje
mquina convencionalI cada instruccin en lenguaje m.(uina se ejecuta mediante varias
microinstrucciones.
Fivel 10G =istema Aperativo
Fivel 30GLenguaje ensamblador
Fivel 50GLenguaje de alto nivel





Representacin de datos
Lenguaje alto nivel
Lenguaje ensamblador
=istema operativo
/r(uitectura del conjunto
de instrucciones
<icroar(uitectura
Lgica digital
5

+istema Base ,&gitos posibles
Binario
Actal
@ecimal
eCadecimal
#

8
":
"6
: "

: " # 1 3 5 6 7
: " # 1 3 5 6 7 8 9
: " # 1 3 5 6 7 8 9 / B - @ ; 2

Binario: =on n)meros en base # en donde cada d%gito binario +bit, es un : o un "& los bits se
enumeran empezando desde cero en la parte derec*a ' se incrementan *acia la iz(uierda. ;l bit
m.s a la iz(uierda se conoce como Hbit ms significativoI +%+B, ' el bit de m.s a la derec*a es el
Hbit menos significativoI +L+B,
F)meros bits <=B J LB= de un n)mero binario de "6 d%gitos:
%+B L+B
" : " " : : " : " : : " " " : :
"5 :

-raduccin de enteros binarios sin signo a decimal:
;K: ####1##1 e(uivale a .
;numeramos desde L=B +bit menos significativo, *asta <=B +bit m.s signi$icativo, de : a HnI
: : : : " : : "

/ 0 1 2 3 4 1 #
Multiplicamos (1x!X" # (1x!X"
LXMe(uivale a la posicin en donde est. ubicado el primer bit desde L=B a <=B de : a HnI
+"C#N:, O +"C#LN1,M9

-raduccin de entero decimal sin signo a binario:
6

=e debe dividir en $orma repetida el n)mero entero decimal sin signo con #& se debe guardar cada
residuo o resto como binario ' luego tomar el cociente ' volverlo a dividir con #.
;K: 17
@ivisin -ociente

Residuo

17P#
"8P#
9P#
3P#
#P#
"P#
"8

9

3
#
"
:
"

:

"

:

:
"

=e recolecta de manera inversa obteniendo: "::":"& -omo el almacenamiento en las
computadoras Intel siempre consisten en n)meros binarios de longitud 8 bits se debe rellenar con
: a la iz(uierda: ##"::":"
+uma binarias:
;Cisten 3 maneras de sumar d%gitos binarios:
:O:M: :O"M"
"O:M" "O"M":

=e debe comenzar la suma desde L=B *asta <=B
;K:
: : : : : " : :
O : : : : : " " "
# # # # 1 # 1 1

-ama5o de almacenamiento de enteros:
7

La unidad b.sica de almacenamiento para todos los datos en una computadora basada en I/01# es
un b'te (ue contiene 8 bits. Atros tamaEos de almacenamiento son:
0palabra +# b'tes,
0doble palabra +3 b'tes,
0palabra cudruple +8 b'tes,
Dn Kilob'te es igual a #N": o ":#3 b'tes
Dn megab'te es igual a #N#: o "&:38&576 b'tes
Dn gigab'te es igual a #N1: o "&:71&73"&8#3 b'tes
Dn terab'te es igual a #N3: o "&:99&5""&6#7&776 b'tes
Dn petab'te es igual #N5: o "&"#5&899&9:6&83#&6#3 b'tes
Dn eCab'te es igual a #N6: o "&"5#&9#"&5:3&6:6&836&976 b'te
Dn zettab'te es igual a #N7: b'tes
Dn 'ottab'te es igual a #N8: b'tes
Enteros 6e7adecimales:
@ecimal:
" # 1 3 5 6 7 8 9 ": "" "# "1 "3 "5
eCadecimal:
" # 1 3 5 6 7 8 9 / B - @ ; 2







Conversin de 6e7adecimal sin signo decimal:
8

;jemplo nQ":
+eCadecimal, "#13 e(uivale a 366: +decimal,
;numeramos desde : a HnI partiendo desde : ' desde la derec*a:
" # 1 3
1 # " :
+3C"6N:, O +1C"6N", O +#C"6N#, O +"C"6N1,M 366:
;jemplo nQ#:
+eCadecimal, 1B/3 e(uivale a "5#68 +decimal,
;numeramos desde : a HnI partiendo desde : ' desde la derec*a:
1 B / 3
1 # " :
+3C"6N:, O +":C"6N", O +""C"6N#, O +1C"6N1,M "5#68
Conversin de decimal sin signo a 6e7adecimal:
=e debe dividir en $orma repetida el valor decimal por "6 luego conservar el residuo o resto de
cada divisin como d%gito *eCadecimal.
;K:
3## +decimal,
@ivisin -ociente Residuo
3##P"6
#6P"6
"P"6
#6
"
:
6

/

"


=e recolecta de manera inversa obteniendo "/6

Enteros con signo:
9

Los enteros binarios con signos son positivos o negativos. ;n las computadoras basadas en Intel& el
bit m.s signi$icativo +<=B, indica:
:: positivo
": negativo
;jemplo:
" " " " : " " :0GFegativo
: : : : " : " :0G5ositivo

*otacin de complemento a dos:
Los enteros negativos utilizan la representacin de complemento a dos& en base al principio
matem.tico (ue establece (ue el complemento a dos de un entero es su inverso aditivo +si se
suma un n)mero a su inverso aditivo el resultado es cero,
La representacin en complemento a dos es )til para los diseEadores de procesadores 'a (ue
elimina la necesidad de tener circuitos digitales separados para manejar tanto la suma como la
resta. 5or ejemplo& si presentamos al procesador la eCpresin / B. tan solo necesita convertirla
en eCpresin de suma
/ O +0B,
5ara $ormar el complemento de dos de un entero binario se invierten +complementan, sus bits '
se les suma "
;K: :::::::"
Valor Inicial: :::::::"
5aso ": invertir los bits """"""":
5aso#: =umar " al valor de paso "
=uma: representacin a complemento de dos """"""""
"""""""" es la representacin en complemento a dos de 0"& esta operacin es reversible por lo
(ue el complemento a dos de """""""" es :::::::"


Complemento a dos de 6e7adecimal:
":

=e debe invertir los bits ' sumarle uno
;jemplo:
61/@
:"": ":": ::"" "":"
-omplemento de dos:
"::" :":" "":: ::":
O "RRRRRRRRRRRRRRRR
M "::" :":" "":: ::""
95-1
Conversin de binario con signo a decimal:
=i el bit m.s alto +<=B, es "& el n)mero est. almacenado en notacin de complemento a
dos. =e debe $ormar nuevamente el complemento a dos una segunda vez para obtener el
e(uivalente positivo& luego se convierte el n)mero a decimal.
;jemplo: """":::: +binario,
Valor inicial: """"::::
5aso ": Invertir los bits: ::::""""
5aso #: =umar " al valor del paso ": ::::""""O"
5aso 1: 2ormar el complemento a dos: :::"::::
5aso 3: -onvertir en decimal: "6
-omo el valor era negativo& in$erimos (ue su valor decimal era (10
=i el bit m.s alto +<=B, es :& se puede convertir en decimal como si $uera un entero
binario sin signo.




Conversin de entero decimal a binario:
""

5aso ": -onvertir el valor absoluto del entero a decimal binario
5aso #: =i el entero original era negativo& se debe $ormar el complemento de dos del n)mero
binario del paso anterior
Conversin de 6e7adecimal con signo a decimal:
5aso ": =i el entero *eCadecimal es negativo& se debe $ormar el complemento de dos& si no es
negativo se debe mantener el valor
5aso #: ;l entero del paso anterior se convierte a decimal& si este era negativo se debe agregar el
s%mbolo +0,
LeCadecimal negativo: el primer valor de iz(uierda a derec*a debe ser ma'or o igual a 8 +G o M,
eCadecimal positivo: el primer valor de iz(uierda a derec*a debe ser menor o igual a 7 +S o M,
8peraciones booleanas
FA4: T o U o V
/F@: W o X
AR: Yo O
FA4: 5uede escribirse en notacin matem.tica como TZ& en donde Z es una variable +o eCpresin,
(ue contiene un valor verdadero +V, o $also +2,
4abla FA4:
9 :9
2 V
V 2
Dna tabla de verdad puede usar:
:M$also
"Mverdadero
/F@: La operacin /F@ re(uiere dos operandos ' puede eCpresarse mediante la notacin ZNJ


4abla /F@:
"#

9 ; 9<;
2 2 2
2 V 2
V 2 2
V V V

/F@ solo es verdadero si Z e J son V& en todos los otros casos son $also
AR: La operacin AR re(uiere dos operandos ' a menudo se eCpresa mediante la notacin Z Y J
4abla AR:
9 ; 9 = ;
2 2 2
2 V V
V 2 V
V V V

;l resultado es 2 solo cuando ambas variables +Z e J, son 2
!rocedencia de los operadores:
<a'or a menor:
0FA4
0/F@
0AR



4 Ar"uitectura del procesador IA(34:
"1

Conceptos generales:
@escribiremos la ar(uitectura de la $amilia de los procesadores I/01# de Intel ' su sistema
computacional an$itrin desde el punto de vista del programador.
;l lenguaje ensamblador es una *erramienta eCcelente para aprender el $uncionamiento de una
computadora. 5ara lo cual es necesario tener un conocimiento pr.ctico acerca del *ard?are de la
computadora.
@iseEo b.sico de una microcomputadora:
-5D: +$nidad central de procesamiento,& es en donde se realizan los c.lculos ' las operaciones
lgicas& contiene un n)mero limitado de lugares de almacenamiento& conocidas como registros
/dem.s contiene un reloj de alta $recuencia& una unidad de control ' una unidad de aritm!tica0
lgica.
Reloj de alta $recuencia: =incroniza las operaciones internas de la -5D con los dem.s
componentes del sistema.
Dnidad de control +-D,: -oordina la secuencia de los pasos involucrados en la ejecucin de
instrucciones de m.(uina.
Dnidad aritm!tica0lgica: +/LD,: Realiza operaciones aritm!ticas como la suma ' la resta& '
operaciones lgicas como /F@&AR ' FA4
La -5D se une a al resto de la computadora mediante terminales (ue se conectan al zcalo
+soc[et, de la -5D en la tarjeta madre de la computadora. La ma'or%a de las computadoras se
conectan al bus de datos& el bus de control ' al bus de direcciones.
Dnidad de almacenamiento de memoria: ;s en donde se mantienen las instrucciones ' los datos
mientras se ejecuta un programa en la computadora. La unidad de almacenamiento recibe
solicitudes de datos por parte de la -5D& trans$iere datos de la R/< +memoria de acceso aleatorio,
a la -5D ' trans$iere datos de la -5D a la memoria.
Dn bus es un grupo de cables en paralelos (ue trans$ieren datos de una parte de la computadora
*acia otra. 5or lo general el bus del sistema de una computadora consiste en tres buses separados:


bus de datos: 4rans$iere instrucciones ' datos entre la -5D ' la memoria.
bus de control: Dtiliza seEales binarias para sincronizar las acciones de todos los
dispositivos conectados al bus del sistema.
"3

bus de direcciones: /lmacena direcciones de las instrucciones ' datos& cuando la
instruccin actual (ue est. en ejecucin trans$iere datos entre la -5D ' la memoria.
Reloj: Dnidad b.sica de tiempo es un ciclo de m.(uina +o ciclo de reloj,. La longitud de un ciclo de
reloj es el tiempo re(uerido para un pulso completo de reloj:

Ciclo de ejecucin de instrucciones:
La operacin de una sola instruccin de m.(uina puede dividirse en una secuencia de operaciones
individuales& conocidas como ciclo de ejecucin de instrucciones. /ntes de ejecutarse un programa
se carga en memoria. ;l apuntador de instrucciones contiene la direccin de la siguiente
instruccin. La cola de instrucciones guarda un grupo de instrucciones (ue est.n a punto de
ejecutarse. 5ara ejecutar una instruccin de m.(uina se re(uieren tres pasos: b%squeda&
decodificacin ' ejecucin. -uando la instruccin utiliza un operando en memoria se re(uieren dos
pasos m.s: b%squeda de operandos ' almacenamiento del operando del resultado.
B)s(ueda: la unidad de control busca la instruccin en la cola de instrucciones e
incrementa el apuntador de instrucciones +I5, o contador del programa.
@ecodi$icacin: la unidad de control decodi$ica la $uncin de la instruccin para
determinar lo (ue !sta debe *acer. Los operandos de entrada de la instruccin se pasan a
la unidad aritm!tica0lgica +/LD,& ' se env%an seEales a la /LD para indicar la operacin
(ue se va a realizar
B)s(ueda de operandos: si la instruccin utiliza un operando de entrada ubicado en
memoria& la unidad de control utiliza una operacin de lectura para obtener el operando '
copiarlo en los registros internos. ;stos registros no son visibles para los programa de los
usuarios.
;jecucin: la /LD ejecuta la instruccin utilizando los registros con nombre ' los registros
internos como operandos& ' env%a el resultado a los registros con nombre ' a la memoria.
La /LD actualiza las banderas de estado (ue proporcionan la in$ormacin acerca del
estado del procesador.
/lmacenamiento del operando del resultado: si el operando resultante est. en memoria&
la unidad de control utiliza una operacin de escritura para almacenar el dato.
La secuencia de pasos puede eCpresarse en seudocdigo:
"5

Iterar
Obtener la siguiente instruccin
Avanzar el apuntador de instrucciones (IP)
Decodificar la instruccin
Si se necesita un operando en memoria, leer el valor de memoria
Eecutar la instruccin
Si el resultado es un operando en memoria, escribir el resultado en la
memoria
!ontinuar el ciclo

-analizacin de varias etapas:
-ada paso en el ciclo de instrucciones re(uiere cuando menos un pulso del reloj del sistema& a lo
cual se le conoce como ciclo de reloj. ;l procesador no tiene (ue esperar *asta (ue se completen
todos los pasos antes de empezar la siguiente instruccin& sino (ue puede ejecutar pasos en
paralelo& con la t!cnica conocida como canalizacin.
;jecucin de una instruccin no canalizada de seis etapas:
+1 +4 +3 +2 +1 +0
1 I0"
4 I0"
3 I0"
2 I0"
1 I0"
0 I0"
/ I0#
> I0#
. I0#
1# I0#
11 I0#
14 I0#



;jecucin de una instruccin canalizada de seis etapas:
"6

+1 +4 +3 +2 +1 +0
1 I0"
4 I0# I0"
3 I0# I0"
2 I0# I0"
1 I0# I0"
0 I0# I0"
/ I0#

/r(uitectura superescalar
Dn procesador superescalar o multin)cleo tiene dos o m.s canalizaciones de ejecucin. Lo cual
*ace posible (ue *a'a dos instrucciones en la etapa de ejecucin al mismo tiempo.
;jemplo de ejecucin con canalizacin& utilizando una sola canalizacin +la etapa =3 re(uiere dos
ciclos de reloj para (ue la siguiente instruccin pueda entrar al ciclo& por lo (ue a medida (ue van
entrando m.s instrucciones se producen ciclos desperdiciados,:
+1 +4 +3 +2 +1 +0
1 I0"
4 I0# I0"
3 I01 I0# I0"
2 I01 I0# I0"
1 I01 I0"
0 I0# I0"
/ I0# I0"
> I01 I0#
. I01 I0#
1# I01
11 I01







5rocesador escalar canalizado de 6 etapas +la etapa =3 re(uiere dos ciclos,:
Las instrucciones con numeracin par entran la canalizacin v mientras (ue las instrucciones con
numeracin impar entran en la canalizacin u& eliminando los ciclos desperdiciados.
"7

+1 +4 +3 u v +1 +0
1 I0"
4 I0# I0"
3 I01 I0# I0"
2 I03 I01 I0# I0"
1 I03 I01 I0# I0"
0 I03 I01 I0# I0"
/ I03 I01 I0# I0"
> I03 I01 I0#
. I03 I01
1# I03

Lectura de la memoria
/ menudo el rendimiento de un programa depende de la velocidad del acceso a la memoria. La
velocidad acceso a la -5D podr%a ser varios giga*ertz& mientras (ue el acceso a la memoria se
realiza a trav!s de un bus del sistema (ue se ejecuta con una lentitud de 11 <z La -5D se ve
obligada a esperar uno o m.s ciclos de reloj *asta (ue se buscan ' se obtienen los operandos de la
memoria para poder ejecutar las instrucciones. Los ciclos de reloj desperdiciados se conocen como
estados de espera.

<emoria cac*!
-omo la memoria convencional es muc*o m.s lenta (ue la -5D& las computadoras utilizan
memoria cac() de alta velocidad para almacenar las instrucciones ' datos m.s recientes. La
primera vez (ue un programa lee un blo(ue de datos& deja una copia en el cac*!. =i el programa
necesita leer los mismos datos una segunda vez& los busca en el cac*!. Dn acierto en el cac()
indica (ue los datos se encuentran en el cac*!\ un fallo en el cac() indica (ue los datos no se
encuentran en el cac*! ' deben leerse de la memoria convencional. ;n general la memoria cac*!
tiene un e$ecto notable cuando se trata de mejorar el acceso a los datos en especial cuando es
grande.




Como se ejecutan los programas
5roceso de carga ' ejecucin:
"8

;l sistema operativo +A=, busca el nombre de arc*ivo del programa en el directorio actual&
si no puede encontrar el nombre a*%& lo busca en una lista predeterminada de directorios
+llamados tra'ectorias,. =i el A= no puede encontrar el nombre del arc*ivo del programa&
muestra un mensaje de error.

=i encuentra el nombre del arc*ivo& el A= obtiene la in$ormacin b.sica sobre el arc*ivo
del programa del directorio en el disco& inclu'endo el tamaEo del arc*ivo ' su ubicacin
$%sica en la unidad de disco.

;l A= determina la siguiente ubicacin disponible en memoria ' carga el arc*ivo del
programa. /signa un blo(ue de memoria al programa e ingresa in$ormacin acerca del
tamaEo ' la ubicacin del programa en una tabla +lo (ue algunas veces se conoce como
tabla de descriptores,. /dem.s& el A= puede ajustar los valores de los apuntadores dentro
del programa& para (ue contengan las direcciones de los datos.

;l A= ejecuta una instruccin de salto (ue *ace (ue la -5D empiece la ejecucin de la
primera instruccin de m.(uina del programa. /l momento en (ue el programa empieza a
ejecutarse& se le denomina proceso. ;l A= asigna un n)mero de identi$icacin al proceso
+I@ del proceso,& el cual utiliza para llevar el registro del proceso mientras se ejecuta.


;l proceso se ejecuta por s% solo. ;s $uncin del A= registrar la ejecucin del proceso '
responder a las solicitudes de recursos del sistema como memoria& arc*ivos en disco '
dispositivos de entrada ' salida.

-uando termina el proceso& se elimina su manejador ' la memoria (ue se utiliz se libera
para (ue otros programas puedan utilizarla.






<ultitarea
Dn sistema operativo multitarea puede ejecutar varias tareas al mismo tiempo. Dna tarea se
de$ine como un programa +proceso, o un *ilo +subproceso, de ejecucin. ;n realidad la -5D puede

ejecutar slo una instruccin a la vez& por lo (ue un componente del sistema operativo& conocido
como planificador& asigna una particin de tiempo de la -5D a cada tarea.

;jemplo de tipo de plani$icador:



Dn A= multitareas se ejecuta en un procesador con soporte para
procesador almacena el estado de cada tarea antes de cambiar a una nueva. ;l estado de una
tarea consiste en los registros del procesador& el contador del programa ' l
junto con las re$erencias a los segmentos de memoria de la tarea. 5or lo general& un =A multitarea
asigna distintas prioridades a las tareas con la cual reciben particiones de tiempo relativamente
m.s grandes o m.s pe(ueEas.

Ar"uitectura del procesador IA
%odo de operacin
Tarea 6
Tarea 7
Tarea 8
truccin a la vez& por lo (ue un componente del sistema operativo& conocido
& asigna una particin de tiempo de la -5D a cada tarea.
;jemplo de tipo de plani$icador: *lanificador por turnos (round+robin",
Dn A= multitareas se ejecuta en un procesador con soporte para conmutacin de tareas
procesador almacena el estado de cada tarea antes de cambiar a una nueva. ;l estado de una
tarea consiste en los registros del procesador& el contador del programa ' las banderas de estado&
junto con las re$erencias a los segmentos de memoria de la tarea. 5or lo general& un =A multitarea
a las tareas con la cual reciben particiones de tiempo relativamente
m.s grandes o m.s pe(ueEas.
ctura del procesador IA(34
Planificador
Tarea 1
Tarea2
Tarea 3
Tarea 4
Tarea 5
Tarea 6
"9
truccin a la vez& por lo (ue un componente del sistema operativo& conocido

conmutacin de tareas- ;l
procesador almacena el estado de cada tarea antes de cambiar a una nueva. ;l estado de una
as banderas de estado&
junto con las re$erencias a los segmentos de memoria de la tarea. 5or lo general& un =A multitarea
a las tareas con la cual reciben particiones de tiempo relativamente
Tarea2
Tarea 3
#:

Los procesadores I/01# tienen tres modos principales de operacin: modo protegido& modo de
direccionamiento real ' modo de administracin de sistemas. ;Ciste otro modo llamado ./.0
virtual& (ue es un caso especial de modo protegido.
<odo protegido: ;l modo protegido es el estado nativo del procesador& en la (ue est.n
disponibles todas las instrucciones ' caracter%sticas.

<odo 8:86 virtual: mientras se encuentra en modo protegido& el procesador puede
ejecutar en $orma directa el so$t?are por modo de direccionamiento real& como los
programas de <=0@A=& en un entorno multitarea seguro. ;n otras palabras& si un
programa de <=0@A= $alla o trata de escribir datos en el .rea de memoria del sistema& no
a$ectar. a los otros programas (ue se ejecutan al mismo tiempo. >indo?s Z5 puede
ejecutar varias sesiones separadas en modo 8:86 a la vez.

<odo de direccionamiento real: ;ste modo implementa el entorno de programacin del
procesador 8:86 de Intel& con unas cuantas caracter%sticas adicionales& como la *abilidad
de cambiar a otros modos. ;ste modo est. disponible en >indo?s 98 ' puede usarse para
ejecutar un programa de <=0@A= (ue re(uiera acceso directo a la memoria del sistema '
a los dispositivos *ard?are.

<odo de administracin del sistema: ;l modo de administracin del sistema +=<<,
proporciona al sistema operativo un mecanismo para implementar $unciones& como la
administracin de energ%a ' la seguridad del sistema. 5or lo general& estas $unciones las
implementan los $abricantes de computadoras.

;spacio de direcciones
Los procesadores I/01# pueden acceder a 3G de memoria en modo protegido\ este l%mite se basa
en el tamaEo de una direccin representada por un n)mero entero binario sin signo& de 1# bits.
Los programas en direccionamiento real tienen un rango de memoria de " <B. =i el procesador se
encuentra en modo protegido ' ejecuta varios programas en modo 8:86 virtual& cada programa
tiene su propia .rea de memoria de " <B.
Registros b.sicos de ejecucin de un programa
Los registros son ubicaciones de almacenamiento de alta velocidad& (ue se encuentran
directamente dentro de la -5D +Dnidad central de procesamiento,& ' est.n diseEadas para una
velocidad de acceso muc*o ma'or (ue la de la memoria convencional.
1egistros de propsito general de 2 bits,
;/Z ;B5
#"

;BZ ;=5
;-Z ;=I
;@Z ;@I

;2L/G=

;I5
1egistros de segmento de 10 bits
-= ;=
== 2=
@= G=


Registros de propsito general: Los registros de propsito general se utilizan principalmente para
las operaciones aritm!ticas ' el movimiento de datos.
-ada registro puede direccionarse como un valor individual de 1# bits& o como dos valores de "6
bits.

EA9M1# bits& A9M"6 bits& A? +mitad superior, ' AL +mitad in$erior, M8 bits

;l resto de los registros de propsito general solo tiene nombres espec%$icos para sus "6 bits
in$eriores. 5or lo general& los registros de "6 bits (ue se muestran a(u% se utilizan cuando se
escriben programas en modo de direccionamiento real:
##

34 bits 10 bits
;=I =I
;@I @I
;B5 B5
;=5 =5

Dsos especializados /lgunos registros de propsito general tienen usos especializados:
;/Z es el registro (ue se utilizan de manera autom.tica las instrucciones de multiplicacin
' divisin. / menudo se conoce como el registro acumulador extendido.
La -5D utiliza de manera autom.tica a ;-Z como su contador de ciclo
;=5 direcciona datos en la pila +una estructura de memoria del sistema,. =e utiliza raras
veces para operaciones aritm!ticas o de trans$erencia de datos ordinarias. / menudo se
conoce como el registro apuntador de pila extendido.
;=I ' ;@I son registros (ue utilizan las instrucciones de trans$erencia de memoria de alta
velocidad. /lgunas veces se les conoce como registros 3ndice de origen extendido e 3ndice
de destino extendido.
;B5 es el registro (ue utilizan los lenguajes de alto nivel para *acer re$erencia a los
par.metros de $unciones ' las variables locales en la pila. Fo debe utilizarse para
operaciones aritm!ticas o de trans$erencia de datos ordinarias& eCcepto en nivel avanzado
de programacin. / menudo se le conoce como registro apuntador de estructura
extendido.
Registros de segmento ;n el modo de direccionamiento real& los registros de segmento indican las
direcciones bases de las .reas pre asignadas de memoria& conocidas como segmentos. ;n el modo
protegido& los registros de segmento guardan apuntadores a tablas de descriptores de segmento.
/lgunos segmentos guardan instrucciones de un programa +cdigo,& otros guardan variables
+datos,& ' otros segmento llamado segmento de pila guarda las variables de $unciones locales ' los
par.metros de $unciones.
Apuntador de instrucciones ;l registro ;I5& o apuntador de instrucciones& contiene la direccin de
la siguiente instruccin a ejecutar. -iertas instrucciones de m.(uina manipulan a ;I5& para (ue el
programa se bi$ur(ue *acia una nueva direccin.
Registro E@LAA+ ;l registro ;2L/G= +o simplemente 2lags, consiste en bits binarios individuales
(ue controlan la operacin de la -5D& o (ue re$lejan resultados de alguna operacin de la -5D.
/lgunas instrucciones eval)an ' manipulan las banderas individuales del procesador.
+Dna bandera se activa cuando es igual a "\ se desactiva cuando es igual a :,
#1

Banderas de control Las banderas de control controlan la operacin de la -5D. 5or ejemplo&
pueden *acer (ue la -5D se salga de un ciclo despu!s de ejecutar cada instruccin& generar una
interrupcin cuando se detecta un desbordamiento aritm!tico& entrar al modo 8:86 virtual '
entrar en modo protegido.
Banderas de estado Las banderas de estado re$lejan el resultado de las operaciones aritm!ticas '
lgicas (ue realiza la -5D. ;stas banderas son: @esbordamiento& =igno& -ero& /carreo /uCiliar&
paridad ' /carreo
Bandera Acarreo +-2,: =e activa cuando el resultado de una operacin aritm!tica sin signo
es demasiado grande para caer en el destino.
Bandera ,esbordamiento +A2,: =e activa cuando el resultado de una operacin aritm!tica
con signo es demasiado grande o pe(ueEo para caer en el destino.
Bandera +igno +=2,: =e activa cuando el resultado de una operacin aritm!tica o lgica
genera un resultado negativo.
Bandera Cero +]2,: =e activa cuando el resultado de una operacin aritm!tica o lgica
genera un resultado de cero.
Bandera de Acarreo Au7iliar +/-,: =e activa cuando una operacin aritm!tica produce un
acarreo del bit 1 al bit 3& en un operando de 8 bits
Bandera de !aridad +52, se activa si el b'te menos signi$icativo en el resultado contiene un
n)mero par de bits (ue sean ".

Bnidad de punto 'lotante
La unidad de punto $lotante +25D, de los procesadores I/01# realiza operaciones aritm!ticas de
punto $lotante& de alta velocidad. ace tiempo se re(uer%a un c*ip coprocesador separado para
esto. / partir de intel386 a la $ec*a& la 25D est. integrada en el procesador principal. a' oc*o
registros de datos de punto $lotante en la 25D& cu'os nombres son
=4+:,&=4+",&=4+#,&=4+1,&=4+3,&=4+5,&=4+6,&=4+7,.




1egistros de datos de ./ bits

=4+:,
/puntador de instrucciones de la 25D
#3

=4+",
=4+#,
=4+1,
=4+3,
=4+5,
=4+6,
=4+7,

Registro de
cdigos de
operacin

8tros registros
;Cisten otros dos conjuntos de registros (ue se utilizan para la programacin avanzada con
multimedia en la serie de procesadores 5entium:
Ac*o registros de 63 bits para utilizarlos con el conjunto de instrucciones <<Z
Ac*o registros Z<< de "#8 bits (ue se utilizan para las operaciones de una sola
instruccin ' varios datos +=I<@,.






Administracin de memoria del procesador IA(34
Los procesadores I/01# administran la memoria de acuerdo a los modelos b.sicos de operacin. ;l
modo protegido es el m.s simple ' poderoso\ los dem.s se utilizan& por lo general cuando los
programas deben acceder directamente al *ard?are del sistema.
/puntador de datos de la 25D
Registro de eti(uetas
Registro de control
Registro de estado
#5

;n modo de direccionamiento real slo puede direccionarse " <B de memoria& entre el :::::
*asta 22222 *eCadecimal. ;l procesador slo puede ejecutar un programa a la vez& pero puede
interrumpir en $ormas moment.nea ese programa para procesar las solicitudes +conocidas como
interrupciones, de los peri$!ricos. Los programas de aplicacin pueden leer ' modi$icar cual(uier
.rea de R/< +memoria de acceso aleatorio, ' pueden leer pero no modi$icar cual(uier .rea del
RA< +memoria de solo lectura,. ;l sistema operativo <=0@A= se ejecuta en modo de
direccionamiento real& ' >indo?s 95P98 puede cargarse en este modo.
;n modo protegido& el procesador puede ejecutar varios programas al mismo tiempo. / cada
proceso +programa en ejecucin, le asigna un total de 3GB de memoria. / cada programa se le
puede asignar su propia .rea reservada de memoria& ' los programas no pueden acceder de
manera accidental al cdigo ' loas datos de los dem.s programas. <=0>indo?s ' LinuC se
ejecutan en modo protegido
;n modo >#>0 virtual& la computadora se ejecuta en modo protegido ' crea una m.(uina 8:86
virtual con su propio espacio de direcciones "<B& (ue simula a una programacin 8: C 86 (ue se
ejecuta en modo de direccionamiento real. /lgunos programas de <=0@A= (ue *acen re$erencias
directas al *ard?are de la computadora no se ejecutar.n en este modo bajo >indo?s F4& #::: '
Z5.
%odo de direccionamiento real
;n el modo de direccionamiento real& el procesador I/01# puede acceder "<B de memoria
mediante el uso de direcciones de #: bits& en el rango de : a 22222 *eCadecimal. Los ingenieros de
Intel tuvieron (ue resolver un problema b.sico: los registros de "6 bits en el procesador 8:86 no
pod%an almacenar direcciones de #: bits& 5or ende& idearon un es(uema conocido como memoria
segmentada. 4oda la memoria se divide en unidades de 63[ilob'tes& a los cuales se les llama
segmento. -ada segmento empieza en una direccin (ue tiene un cero en su )ltimo d%gito
*eCadecimal. -omo el )ltimo d%gito siempre es cero& se omite al representar los valores de los
segmentos. 5or ejemplo un valor de segmento -::: *ace re$erencia al segmento en la direccin
-::::.






#6


2::::
;::::
@::::
-::::
B::::
/::::
9::::
8::::
7::::
6::::
5::::
3::::
1::::
#::::
"::::
:::::

;n la direccin 8:::: para acceder a un b'te en este segmento se suma un desplazamiento de "6
bits +de : a 22222, a la ubicacin base del segmento. 5or ejemplo& la direccin 8:::::#5:
representa un desplazamiento de #5: dentro del segmento (ue empieza en la direccin 8::::. La
direccin lineal es 8:#5:*


















#7

-.lculo de direcciones lineales de #: bits Dna direccin se re$iere a una ubicacin individual en la
memoria& ' cada b'te de memoria tiene una direccin distinta. ;n el modo de direccionamiento
real& la direccin lineal o absoluta es de #: bits ' var%a de : a 22222 *eCadecimal. Los programas no
pueden utilizar las direcciones lineales directamente& por lo (ue las direcciones se eCpresan
mediante el uso de dos enteros de "6 bits. Dna direccin tipo segmento+despla4amiento inclu'e lo
siguiente:
Dn valor de segmento de "6 bits& (ue se coloca en uno de los registros de segmento
+-=&@=&;=&==,
Dn valor de desplazamiento de "6 bits
La -5D convierte en $orma autom.tica una direccin segmento0desplazamiento en una direccin
lineal de #: bits. =upongamos (ue la direccin segmento0desplazamiento *eCadecimal de una
variable es A82"::"::. La -5D multiplicar. el valor del segmento pro "6+": *eCadecimal, ' suma
el producto al desplazamiento de la variable:
"#$% & %"' ( "#$%"' (valor de segmento austado)
)alor de segmento austado* "$#%"
Se suma el desplazamiento* "%""
Direccin lineal* "+"%"
Dn programa ordinario tiene tres segmentos: cdigo datos ' pila. Los tres registros de segmento
-=& @= ' == contienen las ubicaciones base de los segmentos:
-= contiene la direccin del segmento de cdigo de "6 bits
@= contiene la direccin del segmento de datos de "6 bits
== contiene la direccin del segmento de la pila de "6 bits
;=& 2= ' G= pueden apuntar a segmentos de datos alternativos.
%odo protegido
;l modo protegido es el modo HnativoI m.s poderoso del procesador. /l ejecutarse en modo
protegido& un programa puede acceder a 3GB de memoria& con direcciones de : *asta 22222222
*eCadecimal. ;n el conteCto de <icroso$t /ssambler& el modelo de memoria plano es apropiado
para la programacin en modo protegido. ;l modelo plano es $.cil de usar& 'a (ue slo re(uiere un
entero de 1# bits para guardar la direccin de una instruccin o variable. La -5D realiza el c.lculo '
traduccin de las direcciones en segundo plano& todo lo cual es transparente para los
programadores de aplicaciones. Los registros de segmento +-=& @=& ==& ;=& 2=& G=, apuntan a tablas
de descriptores de segmentos& (ue el sistema operativo utiliza para llevar el registro de las
ubicaciones de los segmentos individuales de un programa. Dn programa ordinario en modo
protegido tiene tres segmentos: cdigo& datos ' pila& ' utiliza los registros de segmento -=.@= ' ==:


#8

-= *ace re$erencia a la tabla de descriptores para el segmento de cdigo.
@= *ace re$erencia a la tabla de descriptores para el segmento de datos.
== *ace re$erencia a la tabla de descriptores para el segmento de pila.
%odelo de segmentacin plano
;n este modelo& todos los segmentos se asignan al espacio completo de direcciones $%sicas de 1#
bits de la computadora. =e re(uieren por lo menos dos segmentos& uno para cdigo ' otro para
datos. -ada segmento se de$ine mediante un descriptor de segmento. Dn entero de 63 bits (ue se
almacena en una tabla conocida como la tabla de descriptores globales +G@4,.


<uestra un descriptor de segmento cu'o campo direccin base apunta a la primera ubicacin
disponible en la memoria +::::::::,. ;l campo l3mite de segmento puede indicar de manera
opcional la cantidad de memoria $%sica en el sistema. ;n esta $igura& el l%mite del segmento es
::3:. ;l campo acceso contiene bits (ue determinan cmo puede utilizarse el segmento.








#9

%odelo de varios segmentos
;n el modelo multisegmentos& cada tarea o programa recibe su propia tabla de descriptores de
segmento conocida como tabla de descriptores locales +L@4,. -ada descriptor apunta a un
segmento& (ue puede ser distinto de los dem.s segmentos utilizados por otros procesos. -ada
segmento tiene su propio espacio de direcciones.

!aginacin
Los procesadores I/01# tienen soporte para la paginacin& una caracter%stica (ue permite dividir
los segmentos en blo(ues de 3&:96 b'tes de memoria& conocidas como p.ginas. La paginacin
permite (ue el total de memoria utilizada por todos los programas (ue se ejecutan al mismo
tiempo sea muc*o m.s grande (ue la memoria $%sica de la computadora. La coleccin completa de
p.ginas asignadas por el sistema operativo se llama memoria virtual.







1:

Componentes de una microcomputadora IA(34
-arjeta madre
;l corazn de una microcomputadora es una tarjeta madre& un tablero de circuitos planos en el
(ue se colocan a la -5D de la computadora& los procesadores de soporte +juego de c*ips,& la
memoria principal& los conectores de entrada0salida& los conectores de $uente de alimentacin& '
las ranuras de eCpansin. Los diversos componentes se conectan entre s% mediante un bus& un
conjunto de alambres grabados directamente en la tarjeta madre. a' decenas de tarjetas madre
disponibles en el mercado de la 5-s& las cuales var%an en cuanto su capacidad de eCpansin& los
componentes integrados ' la velocidad. Los siguientes componentes se encuentran de manera
tradicional en la tarjeta madre de las 5-s:
Dn zcalo +soc[et, para la -5D.
Ranuras de memoria +=I<< o @I<<, (ue alojan pe(ueEas tarjetas de memoria
insertables.
-*ips de BIA=.
R/< de -<A=& con una pe(ueEa bater%a circular para mantenerla energizada.
-onectores para los dispositivos de almacenamiento masivo& como discos duros '
unidades de -@0RA<.
-onectores D=B para los dispositivos eCternos.
5uerto de teclado ' ratn.
-onectores de bus 5-I para las tarjetas de sonido& de gr.$icos& de ad(uisicin de datos& '
dem.s dispositivos de entrada0salida.
Los siguientes componentes son opcionales:
5rocesador de sonido integrado.
-onectores de dispositivos en serie ' en paralelo.
/daptador de red integrado.
-onector de bus /G5 para una tarjeta de video de alta velocidad.
Los siguientes son algunos procesadores de soporte importante en un sistema I/01# ordinario:
La $nidad de punto flotante +25D, se encarga de los c.lculos de punto $lotante ' de
n)meros enteros eCtendidos.
;l 5enerador de reloj conocido simplemente como reloj.
;l 6ontrolador de interrupciones programables +5I-,.
;l Tempori4ador76ontador de intervalos programables.
;l *uerto paralelo programable.


1"

Ar"uitectura de los buses !CI C !CI E7press
;l bus !CI +Interconexin de componentes perif)ricos, proporciona un puente de coneCin entre la
-5D ' los otros dispositivos del sistema& como discos duros& memoria& controladores de video&
tarjetas de sonido ' controladores de red. ;l bus 5-I ;Cpress& (ue es m.s reciente proporciona
coneCiones seriales de dos v%as entre los dispositivos& la memoria ' el procesador. 4ransporta los
datos en $orma de pa(uetes& de manera similar a las redes& en Hv%asI separadas. ;s de amplio uso
en los controladores gr.$icos& ' puede trans$er% datos a una velocidad aproCimada de 3GB por
segundo.
Duego de c6ips de la tarjeta madre
La ma'or%a de las tarjetas madres contienen un conjunto integrado de microprocesadores '
controladores& al cual se le conoce como juego de c(ips +c*ipset,. ;l juego de c*ips determina en
gran parte las capacidades de la computadora.
+alida de video
;l adaptador de video controla la visualizacin de teCto ' gr.$icos en computadoras IB<0
compatibles. 4iene dos componentes: el controlador de video ' la memoria de visualizacin de
video. 4odos los gr.$icos ' el teCto (ue se muestran en el monitor se escriben en la R/< de
visualizacin de video& para despu!s enviarlo al monitor mediante el controlador de video. ;l
controlador de video es en s% un microprocesador de propsito especial& (ue libera a la -5D
principal del trabajo de controlar el *ard?are de video.
%emoria
;n los sistemas basados en Intel se utilizan varios tipos de memoria: memoria de slo lectura
+RA<,& memoria de slo lectura programable ' borrable +;5RA<,& memoria din.mica de acceso
aleatorio +@R/<,& R/< est.tica +=R/<,&R/< de video +VR/<, ' R/< de metal0Cido
semiconductor complementario +-<A=,.
!uertos de entradaEsalida e inter'aces de dispositivos
Bus serial universal +D=B, ;l puerto del Bus serial universal proporciona una coneCin inteligente
de alta velocidad entre una computadora ' los dispositivos con soporte D=B. La versin #.: de D=B
soporta velocidades de trans$erencia de datos de38: <egabits por segundo. 5uede conectar
unidades de una sola $uncin +ratones& impresoras, o dispositivos compuestos con m.s de un
peri$!rico& (ue comparten el mismo puerto.



1#

+istema de entradaEsalida
Cmo 'unciona todo
Los programas de aplicacin leen& de manera rutinaria& la entrada (ue se recibe del teclado ' de
los arc*ivos en disco& ' escriben la salida en la pantalla ' en arc*ivos. Las operaciones de ;P= no se
realizan mediante el acceso directo al *ard?are& sino (ue podemos llamar a las $unciones (ue
proporciona el sistema operativo. a' opciones de ;P= disponible en distintos niveles de acceso&
de manera similar al concepto de m.(uina
2unciones de lenguaje de alto nivel +LL,: un lenguaje de programacin de alto nivel& como
-OO o java& contienen $unciones para realizar operaciones de entrada0salida. ;stas
$unciones son portables& 'a (ue se trabajan en una variable de sistemas computacionales
distintos& ' no dependen de ning)n sistema operativo.
=istema operativo: los programadores pueden *acer llamadas a las $unciones de sistema
operativo& desde una biblioteca conocida como /5I +Inter$az de programacin de
aplicaciones,. ;l sistema operativo proporciona operaciones de alto nivel& como la
escritura de cadenas en arc*ivos& lectura de cadenas del teclado ' la asignacin de blo(ues
de memoria.
BIA=: el =istema b.sico de entrada0salida es una coleccin de subrutinas de bajo nivel& (ue
se comunican en $orma directa con los dispositivos de *ard?are. ;l $abricante de la
computadora instala el BIA=& el cual se adapta para ajustarse al *ard?are de la
computadora. 5or lo general& los sistemas operativos se comunican con el BIA=.
Controladores de dispositivos
^_u! ocurre si se instala un nuevo dispositivo en la computadora& (ue el BIA= desconozca`
-uando se inicia el sistema operativo& carga un programa controlador de dispositivos (ue contiene
$unciones para comunicarse con el dispositivo. Dn controlador de dispositivos $unciona de $orma
mu' parecida al BIA=& pues proporciona $unciones de entrada0salida adaptadas a un dispositivo
espec%$ico& o $amilia de dispositivos. Dn ejemplo de ello es -@RA<.=J=& (ue permite a <=0@A=
leer unidades de -@0RA<.
11


Kerar(u%a de ;P= en perspectiva& mostrando lo (ue ocurre cuando un programa de aplicacin
muestra una cadena de caracteres en la pantalla. =e lleva a cabo los siguientes pasos:
". La instruccin en el programa de aplicacin llama a una $uncin de la biblioteca LL& La
cual escribe la cadena en la salida est.ndar.
#. La $uncin de biblioteca +Fivel 1, llama a una $uncin del sistema operativo& ' pasa a un
apuntador de cadena.
1. La $uncin del sistema operativo +Fivel #, utiliza un ciclo para llamar a una subrutina del
BIA=& pasarle el cdigo /=-II ' el color de car.cter. ;l sistema operativo llama a otra
subrutina del BIA= para desplazar el cursor a la siguiente posicin en la pantalla.
3. La subrutina de BIA= +Fivel ", recibe un car.cter& lo asigna a una $uente espec%$ica del
sistema ' env%a el car.cter a un puerto de *ard?are& conectado a la tarjeta controladora
de video.
5. La tarjeta controladora de video +Fivel :, genera seEales de *ard?are sincronizadas para
la pantalla de video. ;stas seEales controlan el barrido de trama ' la visualizacin de los
piCeles.
5rogramacin en varios niveles Los programas en lenguaje ensamblador tienen poder ' $leCibilidad
en el .rea de la programacin de las operaciones de entrada0salida. 5ueden elegir uno de los
siguientes niveles de acceso:
Programa de aplicacin
(Nivel 3)
Funcin del !
(Nivel 2)
Funcin del "#!
(Nivel 1)
$ard%are
(Nivel &)
13


Fivel 1: llamar a las $unciones de biblioteca para realizar operaciones de ;P= de teCto
gen!rico& ' de ;P= basada en arc*ivos.
Fivel #: llamar $unciones del sistema operativo para realizar operaciones de ;P= de teCto
gen!rico ' de ;P= basada en arc*ivos. =i el A= utiliza una inter$az gr.$ica de usuario& tiene
$unciones para visualizar los gr.$icos de una manera independiente de los dispositivo.
Fivel ": llamar a las $unciones del BIA= para controlar caracter%sticas espec%$icas de cada
dispositivo& como el color& los gr.$icos& el sonido& la entrada del teclado ' la ;P= de disco
bajo nivel.
Fivel :: enviar ' recibir datos desde puntos de *ard?are& teniendo un control absoluto
sobre cada dispositivo.









"i'lio(eca )Nivel 3
funcin
del !
)Nivel 2
Funcin
del "#!
)Nivel 1
*ard%are )Nivel &
15

3 @undamentos del lenguaje ensamblador:
Constantes enteras
Dna constante entera +o literal, est. compuesta de un signo opcional a la iz(uierda& uno o m.s
d%gitos ' un car.cter opcional de su$ijo +llamado ra%z,
abOc0de d%gitos ara%ze
La ra%z puede ser una de las siguientes +en ma')sculas o min)sculas,
* eCadecimal
(Po Actal
d @ecimal
b Binario
r Real codi$icado
t decimal +alternativo,
' Binario +alternativo,

=i no se da una ra%z& se asume (ue la constante entera es decimal.
;jemplos:
#6 @ecimal 3#o Actal
#6d @ecimal "/* eCadecimal
"":"::""b Binario :/1* eCadecimal
3#( Actal
Dna constante *eCadecimal (ue empieza con una letra debe tener un cero a la i4quierda& para
evitar (ue el ensamblador lo interprete como un identi$icador.
E7presiones enteras
Dna eCpresin entera es una eCpresin matem.tica (ue involucra valores enteros ' operadores
aritm!ticos. La eCpresin se debe evaluar como un entero& el cual puede almacenarse en 1# bits
+del : al 22222222*,



Aperadores aritm!ticos seg)n su procedencia +ma'or a menor,
16

8perador *ombre *ivel de procedencia
+, 5ar!ntesis "
O&0
Dnario positivo&
unario negaivo #
L&P
<ultiplicacin&
@ivisin 1
<A@ <odulo 1
O&0 =uma& resta 3

La procedencia se re$iere al orden impl%cito de las operaciones cuando una eCpresin contiene dos
o m.s operadores. ;l orden de operaciones se muestra para las siguientes eCpresiones:
3 O 5 L # <ultiplicacin& suma
"# " <A@ 5 <dulo& resta
05 O # Dnario negativo& suma
+3 O #, L 6 =uma& multiplicacin
Constantes numFricas reales
Las constantes num!ricas reales se representan como reales decimales o reales codi$icados
+*eCadecimales,. Dn real decimal contiene un signo opcional seguido de un entero& un punto
decimal& un entero opcional (ue eCpresa una $raccin ' un eCponente opcional:
a=ignoe entero.aenteroe aeCponentee
/ continuacin se muestra la sintaCis para el signo ' el eCponente
=igno bO&0d
;Cponente ;abO&0deentero
/ continuacin mostraremos algunos ejemplos de constantes num!ricas reales v.lidas:
#.
O1.:
033.#;O:5
#6.;5
=e re(uieren& por lo menos& un d%gito ' un punto decimal.
17

1eales codificados Dn real codi$icado representa a un n)mero real en *eCadecimal& utilizando el
$ormato I;;; de punto $lotante& 5or ejemplo la representacin binaria del n)mero O".: decimal es:
::"" """" "::: :::: :::: :::: :::: ::::
;l mismo valor se codi$icar. como un real corto en lenguaje ensamblador de la siguiente manera:
128:::::r
Constante tipo carcter
Dna constante tipo car.cter es un solo car.cter encerrado entre comillas sencillas o dobles. </=<
almacena el valor en memoria como el cdigo /=-II binario del car.cter. /lgunos ejemplos:
V/f
HdI
Constante tipo cadena
Dna constante tipo cadena es una secuencia de caracteres +inclusive espacios, encerrados entre
comillas sencillas o dobles:
V/B-f
VZf
HBuenas noc*es& VictorI
=e pueden agregar comillas a la cadena& siempre ' cuando se utilicen de la siguiente manera:
Hgsta no es una pruebaI
V@iga HBuenas noc*esI& Victorf
!alabras reservadas
Las palabras reservadas tienen un signi$icado especial en </=<& ' slo pueden usarse dentro de
su conteCto correcto. a' distintos tipos de palabras reservadas:
Femnicos de instrucciones.
@irectivas.
/tributos +BJ4; ' >AR@,.
Aperadores.
=%mbolos prede$inidos.

Identi$icadores
18

Dn identi$icador es un nombre elegido por el programador. 5uede servir para identi$icar a una
variable& una constante& un procedimiento o una eti(ueta de cdigo. =e debe -onsiderar lo
siguiente a la *ora de crear identi$icadores:
5ueden contener entre " ' #37 caracteres.
Fo son sensibles a ma')sculasPmin)sculas.
;l primer car.cter debe ser una letra& guion bajo& h& ` o i. Los siguientes caracteres
tambi!n pueden ser d%gitos.
Dn identi$icador no puede ser igual (ue una palabra reservada para el lenguaje
ensamblador.
L5ara *acer (ue todas las palabras claves ' los identi$icares sean sensibles a ma')sculaPmin)scula&
se debe agregar el modi$icador de l%nea de comandos -p cuando se ejecute el ensamblador.
;l ensamblador utiliza muc*o el s%mbolo h como pre$ijo para los s%mbolos prede$inidos& por lo (ue
es conveniente evitarlo en los identi$icadores (ue se creen. =e debe utilizar nombres descriptivos '
$.ciles de entender para sus identi$icaciones. e a(u% algunos identi$icadores v.lidos:
Var" -uenta iprimero
Rmain <aC arc*ivoRabierto
hhmiarc*ivo ValorZ R"#135
,irectivas
Dna directiva es un comando incrustado en el cdigo de $uente& (ue el ensamblador reconoce '
act)a en base a !sta. Las directivas no se llevan a cabo en tiempo de ejecucin& mientras (ue las
instrucciones s%. Las directivas pueden de$inir variables& macros ' procedimientos. 5ueden asignar
nombres a los segmentos de memoria ' realizar muc*as otras tareas de mantenimiento
relacionadas con el ensamblador en </=<& las directivas no son sensibles a
ma')sculasPmin)sculas. </=< reconoce a Gdata& G,A-A ' a G,ata como e(uivalentes.
;l siguiente ejemplo nos a'udar. a mostrar las directivas (ue no se llevan a cabo en tiempo de
ejecucin& La directiva @>AR@ indica al ensamblador (ue debe reservar espacio en el programa
para una variable de tipo doble palabra. La instruccin <AV se lleva a cabo en tiempo de
ejecucin& copiando el contenido de miVar al registro ;/Z:
mi)ar D,O-D ./ 0directiva D,O-D
mov ea1, mi)ar 0instruccin 2O)


19

-ada ensamblador tiene un conjunto distinto de directivas. 5or ejemplo 4/=< +Borland, ' F/<=
+Fet?ide /ssembler, comparten un subconjunto com)n de directivas con </=<. 5or otro lado& el
ensamblador GFD casi no tiene directivas en com)n con </=<.
@e$inicin de segmentos Dna $uncin importante de las directivas de ensamblador es de$inir las
secciones& o segmentos& del programa. La directiva .@/4/ identi$ica el .rea de un programa (ue
contiene variables:
.data
La directiva .-A@; identi$ica el .rea de un programa (ue contiene instrucciones:
.code
La directiva .=4/-K identi$ica el .rea de un programa (ue guarda la pila en tiempo de ejecucin& '
establece su tamaEo:
.stac[ "::*
Instrucciones
Dna instruccin es un enunciado (ue se vuelve ejecutable cuando se ensambla un programa. ;l
ensamblador traduce las instrucciones en b'te de lenguaje m.(uina& para (ue la -5D los cargue '
los lleve a cabo en tiempo de ejecucin. Dna instruccin contiene cuatro partes b.sicas:
;ti(ueta +opcional,.
Femnico de instrucciones +re(uerido,.
Aperando+s, +5or lo general& son re(ueridos,.
-omentario +opcional,.
gsta es una sintaCis b.sica:
aeti(ueta:e nemnico operando+s, a\comentarioe
Eti"ueta
Dna eti(ueta es un identi$icador (ue act)a como marcador de posicin para las instrucciones ' los
datos una eti(ueta (ue se coloca justo antes de una instruccin& representa la direccin de esa
instruccin @e manera similar& una eti(ueta se coloca justo antes de una variable para representar
la direccin de esa variable.


3:

8tiquetas de datos Dna eti(ueta de datos identi$ica la ubicacin de una variable ' proporciona una
manera conveniente de *acer re$erencia a la variable dentro del cdigo. ;l siguiente ejemplo
de$ine a una variable llamada cuenta:
cuenta D,O-D %""
;l ensamblador asigna una direccin num!rica a cada eti(ueta. ;s posible de$inir varios elementos
de datos despu!s de una eti(ueta. ;n el siguiente ejemplo& la eti(ueta arreglo de$ine la ubicacin
del primer n)mero +":#3,. Los dem.s n)meros (ue se le siguen en la memoria van
inmediatamente despu!s:
arreglo @>AR@ ":#3& #:38
@>AR@ 3:96& 8"9#

8tiquetas de cdigo Dna eti(ueta en el .rea cdigo de un programa +en donde se encuentran las
instrucciones, debe terminar con un car.cter de dos puntos +:,. ;n este conteCto& las eti(uetas se
utilizan como destinas de las instrucciones de salto ' de ciclos. 5or ejemplo& la siguiente
instruccin K<5 trans$iere el control a la ubicacin marcada por la eti(ueta llamada destino& con lo
cual se crear. un ciclo:
destino:
mov aC&bC
...
Kmp destino
Dna eti(ueta de cdigo puede compartir la misma l%nea con una instruccin& o puede estar en una
l%nea por si sola:
L": mov aC&bC
L#:
Dna eti(ueta de datos no puede terminar con un signo de dos puntos. Los nombres de las
eti(uetas se crean utilizando las reglas para los identi$icadores. Los nombres de las eti(uetas de
datos deben ser )nicos dentro del mismo arc*ivo de cdigo de $uente\ las eti(uetas de cdigo slo
deben ser )nicas dentro del mismo procedimiento.



3"

*emnicos de instruccin
Dn nemnico de instruccin es una palabra corta (ue identi$ica a una instruccin& ;n Ingl!s& un
nemnico es un dispositivo (ue a'uda a la memoria. @e manera similar& los nemnicos de
instrucciones en lenguaje ensamblador como mov& add ' sub& proporcionan sugerencias acerca del
tipo de operacin a realiza
mov <ueve +asigna, un valor a otro
add =uma dos valores
=ub Resta un valor de otro
mul <ultiplica dos valores
jmp =alta a una nueva ubicacin
call Llama a un procedimiento

9perandos las instrucciones en lenguaje ensamblador pueden tener de cero a tres operandos cada
uno de los cuales puede ser un registro& un operando de memoria& una eCpresin constante o un
puerto de ;P=
stc \activa la bandera de /carreo
inc eaC \suma " a ;/Z
mov cuenta&ebC \mueve ;BZ a cuenta
;n una instruccin con dos operandos& al primero se le llama destino ' al segundo el origen. ;n
general& la instruccin modi$ica el contenido del operando de destino. 5or ejemplo& en una
instruccin <AV los datos se copian del origen al destino.
-omentarios
Los comentarios son un medio importante para (ue el escritor de un programa comuni(ue
in$ormacin acerca de su $uncionamiento a la persona (ue lee el cdigo de $uente. -on $recuencia
se inclu'e la siguiente in$ormacin en la parte superior del listado de un programa:
La descripcin de propsito del programa.
Los nombres de las personas (ue crearon ' revisaron el programa.
Las $ec*as de creacin ' revisin del programa.
Fotas t!cnicas acerca de la puesta en marc*a del programa.

3#

Los comentarios pueden especi$icarse en dos $ormas:
-omentarios de una sola l%nea& (ue empiezan con un car.cter de punto ' coma +\,. ;l
ensamblador ignora todos los caracteres (ue van despu!s del punto ' coma en la misma
l%nea.
-omentarios de blo(ue& (ue empiezan con directiva -A<<;F4 ' un s%mbolo especi$icado
por el usuario por ejemplo&
-A<<;F4 j
;sta l%nea es un comentario.
;sta l%nea tambi!n es un comentario.
j
5odemos usar cual(uier s%mbolo
-A<<;F4 j
-A<<;F4 i
-A<<;F4 k

La instruccin FA5 +ninguna operacin,
La instruccin m.s segura (ue podemos escribir se llama FA5 +ninguna operacin,. Acupa " b'te
de almacenamiento de programa ' no *ace nada. /lgunas veces los compiladores ' los
ensambladores lo utilizan para alinear el cdigo con los l%mites de las direcciones pares
:::::::: 66 8B -1mov aC&bC
:::::::1 9: nop \ alinea la siguiente instruccin
:::::::3 8B @" mov edC&ecC
Los procesadores I/01# est.n diseEados para cargar cdigo ' datos con m.s rapidez de
direcciones pares de doble palabra.




31

Ejemplo: +uma C resta de enteros
/*ora vamos a presentar un programa corto en lenguaje ensamblador (ue suma ' resta enteros.
Los registros se utilizan para almacenar los datos intermedios& ' se *ace una llamada a una
subrutina de biblioteca para mostrar el contenido de los registros en la pantalla. e a(u% el cdigo
de $uente del programa:
3I34E suma 5 resta (Suma-esta6asm)
0Este programa suma 5 resta enteros de 7. bits6
I8!49DE Irvine7.6inc
6code
main proc
mov ea1, %""""' 0EA:(%""""'
add ea1, ;""""' 0EA:(<""""'
sub ea1, .""""' 0EA:(7""""'
call Dump-egs 0muestra los registros
e1it
main E8DP
E8D main
Vamos a analizar el programa& l%nea por l%nea:
3I34E suma 5 resta (Suma-esta6asm)
La directiva 4I4L; marca toda la l%nea como comentario. 5uede ponerse lo (ue sea en esta l%nea.
0 Este programa suma 5 resta enteros de 7. bits6
;l ensamblador ignora todo el teCto (ue est! a la derec*a de un signo punto ' coma& as% (ue lo
utilizamos para comentarios.
I8!49DE Irvine7.6inc
La directiva IF-LD@; copia de$iniciones necesarias ' la in$ormacin de con$iguracin de un arc*ivo
de teCto llamado Irvine1#.inc& ubicado en el directorio IF-LD@; del ensamblador


33

6code
La directiva Gcode marca el inicio del segmento cdigo& en el (ue se ubican todas las instrucciones
ejecutables de un programa.
main P-O!
La directiva 5RA- identi$ica el comienzo de un procedimiento. ;l nombre (ue elegimos para el
)nico procedimiento en nuestro programa es main.
mov ea1, %""""' 0EA:(%""""'
La instruccin <AV mueve +copia, el n)mero entero "::::* al registro ;/Z. ;l primer operando
+;/Z, se llama operando de destino ' el segundo operando de origen.
add ea1, ;""""' 0EA:(<""""'
La instruccin /@@ suma 3::::* al registro ;/Z.
sub ea1, .""""' 0EA:(7""""'
La instruccin =D resta #::::* del registro ;/Z.
call Dump-egs 0 muestra los registros
La instruccin -/LL llama a un procedimiento (ue muestra los valores actuales del registro de la
-5D. gsta puede ser una $orma )til de veri$icar (ue un programa est! $uncionando en $orma
apropiada.
e1it
main E8DP
La instruccin e7it llamaa +indirectamente, a una $uncin prede$inida de <=0>indo?s (ue detiene
la ejecucin del programa. La directiva ;F@5 marca el $inal del procedimiento main. Abserve (ue
e7it no es una palabra clave de </=<& sino un comando de$inido de Irvine2-inc (ue proporciona
una manera sencilla de terminar un programa
;F@ main
La directiva ;F@ marca la )ltima l%nea del programa (ue se va a ensamblar. Identi$ica el nombre
del procedimiento de arran(ue del programa +el procedimiento (ue inicia la ejecucin del
programa,.
Resultado del programa
35

;/ZM:::1:::: ;BZM722@2::: ;-ZM:::::":" ;@ZM22222222
;=IM:::::::: ;@IM:::::::: ;B5M::"#222: ;=5M::"#22-3
;I5M::3:":#3 ;2LM:::::#:6 -2M: =2M: ]2M: :2M: /2M: 52M"
=egmentos Los programas se organizan alrededor de segmentos llamados cdigo& datos ' pila. ;l
segmento de cdigo contiene todas las instrucciones ejecutables de un programa. 5or lo general&
el segmento cdigo contiene uno o m.s procedimientos& en donde uno de ellos se designa como
un procedimiento de arranque.
;n el programa +umaResta& el procedimiento de arran(ue es main. Atro segmento& el segmento
de pila almacena los par.metros de procedimiento ' las variables locales. ;l segmento de datos
almacena variables.
;stilo de codi$icacin -omo el lenguaje ensamblador es insensible al uso de
ma')sculasPmin)sculas no *a' una regla de estilo $ija en relacin con la capitalizacin de cdigo
de $uente. 5ara su $.cil lectura& debemos ser consistentes en el uso de min)sculas ' ma')sculas&
as% como en los nombres (ue asignaremos a los identi$icadores. / continuacin se muestran
algunas metodolog%as relacionadas con el uso de ma')sculas ' min)sculas (ue se aconseja
adoptar:
Dtilizar min)sculas para las palabas clave& ma')sculas ' min)sculas para los
identi$icadores ' solo ma')sculas para las constantes. ;sta metodolog%a sigue el modelo
general de -&-OO ' Kava.
Dtilizar ma')sculas en todo. ;sta metodolog%a se utiliz en el so$t?are anterior a la d!cada
de "97: cuando muc*as terminales de computadoras no ten%an soporte para las letras
min)sculas. 4iene la ventaja de solucionar los e$ectos de las impresoras de mala calidad '
los de$ectos en la vista pero es un poco anticuada.
Dsar ma')sculas para las palabras reservadas en el lenguaje ensamblador& inclu'endo a
los nemnicos de instrucciones ' los nombres de los registros. ;sta metodolog%a nos a'uda
a di$erencia entre los identi$icadores ' las palabras reservadas.
Dsar ma')sculas en las directivas ' los operadores de lenguaje ensamblador& usar una
mezcla de ma')sculas ' min)sculas para los identi$icadores. J min)sculas para todo lo
dem.s +se emplear. esta metodolog%a a eCcepcin de (ue utilizaremos min)sculas para las
directivas ,.
$ersin alternativa de +umaResta
;l programa =umaResta utiliza el arc*ivo Irvine1#.lib& el cual oculta unos cuantos detalles. -on el
tiempo comprenderemos todo lo (ue *a' en ese arc*ivo& pero apenas estamos empezando con el
lenguaje ensamblador. =i se (uiere ver toda la in$ormacin completa desde el principio& *e a(u%
una versin de =umaResta (ue no depende de arc*ivos incluidos. =e utiliza la $uente en negrita
para resaltar las partes del programa (ue son distintas a la versin anterior.
3I34E suma 5 resta (Suma-esta6asm)
36

0Este programa suma 5 resta enteros de 7. bits6
.386
.model flat,stdcall
ExitProcess PROTO, dwExitCode:DWORD
DumpRes PROTO
6code
main proc
mov ea1, %""""' 0EA:(%""""'
add ea1, ;""""' 0EA:(<""""'
sub ea1, .""""' 0EA:(7""""'
call Dump-egs 0muestra los registros
!"#O$E ExitProcess,%
main E8DP
E8D main
+amo, a *a'lar de la, l-nea, .ue ,e modificaron/ 0omo an(e, mo,(raremo, cada l-nea de
cdigo con ,u e1plicacin2
67#/
3a direc(iva /386 iden(ifica el (ipo de proce,ador m-nimo re.uerido para e,(e programa
(#n(el386)
6model flat,stdcall
3a direc(iva /4563 in,(ru7e el en,am'lador para .ue genere cdigo para un programa en
modo pro(egido8 7 !T50933 *a'ili(a la, llamada, a funcione, de 4!:;indo%,/
E1itProcess P-O3O, d=E1it!ode*D,O-D
Dump-egs P-O3O
5o, direc(iva, P<T declaran lo, pro(o(ipo, de lo, procedimien(o, u(ili=ado, por e,(e
programa2 61i(Proce,, e, una funcin de 4!:;indo%, .ue de(iene la e>ecucin del programa
ac(ual (denominado proce,o) 7 5ump<eg, e, un procedimien(o de la 'i'lio(eca de enlace
#rvine32 .ue mue,(ra el con(enido de lo, regi,(ro,/
I8)O>E E1itProcess,"
37

6l programa (ermina con una llamada a la funcin 61i(Proce,, a la cual le a,a un cdigo de
re(orno cero/ #N+?6 e, una direc(iva del en,am'lador8 .ue llama a un procedimien(o o a una
funcin/
Plan(illa de programa
3o, programa, en lengua>e en,am'lador (ienen una e,(ruc(ura ,imple8 con pe.ue@a,
variacione,8 9l empe=ar un nuevo programa8 e, A(il empe=ar con una plan(illa de un programa
vac-o8 con (odo, lo, elemen(o, 'B,ico, en ,u lugar/ Puede evi(ar e,cri'ir en forma redundan(e
,i rellena la, par(e, fal(an(e, 7 guarda el arc*ivo 'a>o un nuevo nom're/ 6l ,iguien(e programa
en modo pro(egido (plan(illa/a,m) puede per,onali=ar,e fBcilmen(e/ ',erve .ue *emo,
in,er(ado comen(ario,8 marcado lo, pu(o, en donde ,e de'e agregar cdigo propio2
3I34E Plantilla de programa (Plantilla6asm)
0 Descripcin del programa*
0 Autor*
0 $ec'a de creacin*
0 -evisiones*
0 $ec'a de la ?ltima modificacin
I8!49DE Invirne7.6inc
0 (a@uA se insertan las definiciones de sAmbolos)
6data
0 (a@uA se insertan las variables)
6code
main P-O!
0(a@uA se insertan las instrucciones eectuables)
e1it 0sale al sistema operativo
main E8DP
0(a@uA se insertan los procedimientos adicionales)
E8D main

38

C,o de comen(ario, 9l principio del programa ,e *an in,er(ado vario, campo, de comen(ario,/
6, convenien(e incluir la de,cripcin del programa8 el nom're del au(or del mi,mo8 la fec*a de
creacin e informacin acerca de la, modificacione, ,u',iguien(e,/
3a documen(acin de e,(e (ipo e, A(il para cual.uier per,ona .ue lea el li,(ado del programa
(inclu7endo a uno mi,mo8 me,e, o a@o, a par(ir de a*ora)/ 4uc*o, programadore, *an
de,cu'ier(o .ue8 a@o, de,puD, de *a'er e,cri(o un programa8 de'en volver a familiari=ar,e
con ,u propio cdigo para poder modificarlo/
6n,am'lado8 enla=ado 7 e>ecucin de programa, 6n,am'lado8 enla=ado 7 e>ecucin de programa, 6n,am'lado8 enla=ado 7 e>ecucin de programa, 6n,am'lado8 enla=ado 7 e>ecucin de programa,
6n lo, cap-(ulo, an(eriore,8 vimo, e>emplo, de programa, ,imple, en lengua>e mB.uina8 por lo
.ue e,(B claro .ue un programa de cdigo de fuen(e en lengua>e en,am'lador no puede
e>ecu(ar,e direc(amen(e en ,u compu(adora de de,(ino/ 5e'e traducirse o ensamblarse en
cdigo e>ecu(a'le/ 5e *ec*o8 un en,am'lador e, mu7 ,imilar a un compilador8 el (ipo de
programa .ue u(ili=amo, para (raducir un programa en 0EE o Fava a cdigo e>ecu(a'le/
6l en,am'lador produce un arc*ivo .ue con(iene lengua>e mB.uina8 al cual ,e le conoce como
archivo de cdigo objeto/ 6,(e arc*ivo no e,(B li,(o para e>ecu(ar,e/ 5e'e pa,ar,e por o(ro
programa llamado enlazador8 .ue a ,u ve= produce un arc*ivo e>ecu(a'le8 6,(e arc*ivo e,(B
li,(o para e>ecu(ar,e de,de 4!:5!G;indo%,/
0iclo de en,am' 0iclo de en,am' 0iclo de en,am' 0iclo de en,am'lado lado lado lado: :: :enla=ado enla=ado enla=ado enla=ado: :: :e>ecucin e>ecucin e>ecucin e>ecucin

6l en,am'lador produce do, (ipo, de arc*ivo,2
9rc*ivo de cdigo de o'>e(o (/"F)/
9rc*ivo de li,(ado (/3#!T) opcional/
6l enla=ador produce do, (ipo, de arc*ivo,2
9rc*ivo e>ecu(a'le (/6H6)/
9rc*ivo de mapa (/49P) opcional/

9rc*ivo, creado, o ac(uali=ado, por el enla=ador 9rc*ivo, creado, o ac(uali=ado, por el enla=ador 9rc*ivo, creado, o ac(uali=ado, por el enla=ador 9rc*ivo, creado, o ac(uali=ado, por el enla=ador
39

9rc*ivo de mapa Cn arc*ivo de mapa con(iene informacin (en (e1(o ,imple) acerca de lo,
,egmen(o, de un programa8 inclu7endo lo ,iguien(e2
Nom're del mdulo8 u(ili=ado como el nom're 'a,e del arc*ivo 6H6 .ue produce el
enla=ador/
6(i.ue(a de fec*a 7 *ora del enca'e=ado del arc*ivo del programa (no del ,i,(ema del
arc*ivo)/
Cna li,(a de de ,-m'olo, pA'lico,8 .ue con(iene la direccin8 el nom're8 la direccin
plana 7 el mdulo en donde ,e define cada ,-m'olo/
3a direccin del pun(o de en(rada del programa/
9rc*ivo de 'a,e de da(o, del programa 0uando 49!4 en,am'la un programa con la opcin de
depuracin (:Ii)8 crea un arc*ivo de 'a,e de da(o, del programa con la e1(en,in de arc*ivo
pd'/ 5uran(e el pa,o de enla=ado8 el enla=ador lee 7 ac(uali=a el arc*ivo pd'/ 0uando
e>ecu(amo, el programa u,ando un depurador8 D,(e mue,(ra el cdigo de fuen(e del programa8
,u, da(o,8 la pila en (iempo de e>ecucin 7 demB, informacin de u(ilidad/
5efinicin de da(o, 5efinicin de da(o, 5efinicin de da(o, 5efinicin de da(o,
Tipo, de da(o Tipo, de da(o Tipo, de da(o Tipo, de da(o, in(r-n,eco, , in(r-n,eco, , in(r-n,eco, , in(r-n,eco,
49!4 define (ipo, de da(o, in(r-n,eco,8 cada uno de lo, cuale, de,cri'e un con>un(o de
valore, .ue pueden a,ignar,e a la, varia'le, 7 e1pre,ione, del (ipo da(o8 3a carac(er-,(ica
e,encial de cada (ipo e, ,u (ama@o en 'i(,2 88 168 328 64 7 8&/ 3a, demB, carac(er-,(ica, (por
e>emplo2 con ,igno8 apun(ador o de pun(o flo(an(e) ,on opcionale, 7 ,u prop,i(o principal e,
para el 'eneficio de lo, programadore, .ue de,ean .ue ,e le, recuerde acerca del (ipo de
da(o, .ue guarda la varia'le/ Por e>emplo8 e, lgico .ue una varia'le declarada como 5;<5
guarde un en(ero de 32 'i(, ,in ,igno/ 5e *ec*o podr-a guardar un en(ero de 32 'i(, con ,igno8
un nAmero real de 32 'i(, con preci,in ,imple o un apun(ador de 32 'i(,/ 6l en,am'lador no
e, ,en,i'le al u,o de ma7A,cula,GminA,cula,8 por lo .ue una direc(iva (al como 5;<5
podr-a e,cri'ir,e como d%ord8 5%ord8 d;ord8 e(cD(era/
#n,(ruccione, de definicin de da(o, #n,(ruccione, de definicin de da(o, #n,(ruccione, de definicin de da(o, #n,(ruccione, de definicin de da(o,
Cna instruccin o estatuto de datos ,epara e,pacio de almacenamien(o de memoria para una
varia'le8 con un nom're opcional/ 3a, in,(ruccione, (o e,(a(u(o,) de definicin de da(o, crean
varia'le, con 'a,e en lo, (ipo, de da(o, in(r-n,eco,8 una definicin de da(o, (iene la ,iguien(e
,in(a1i,2
BnombreC directiva inicializador B,inicializadorCD6

5:

-ipo Bso
BJ4; ;ntero de 8 bits sin signo
=BJ4; ;ntero de 8 bits con signo
>AR@ ;ntero de "6 bits sin signo atambi!n puede ser un apuntador cercano +near en modo de direccionamiento reale
=>AR@ ;ntero de "6 bits con signo
@>AR@ ;ntero de 1# bits sin signo
=@>AR@ ;ntero de 1# bits con signo atambi!n puede ser un apuntador cercano +near, en modo protegidoe
2>AR@ ;ntero de 38 bits aapuntador lejano +$ar, en modo protegidoe
_>AR@ ;ntero de 63 bits
4BJ4; ;ntero de 8: bits +": b'tes,
R;/L3 F)mero real corto I;;; de 1# bits +3 b'tes,
R;/L8 F)mero real llargo I;;; de 63 bits +8 b'tes,
R;/L": F)mero real eCtendido I;;; de 8: bits +": b'tes,

JTodo, lo, (ipo, de da(o, per(enecen a en(ero,8 e1cep(o lo, Al(imo, (re,8 en lo, .ue la
no(acin #666 *ace referencia a lo, forma(o, de nAmero, reale, e,(Bndar8 pu'licado, por la
,ociedad de compu(adora, del #666/
Nom're Nom're Nom're Nom're 6l nom're opcional .ue ,e a,igna a una varia'le de'e apegar,e a la, regla, para lo,
iden(ificadore,
5irec(iva 5irec(iva 5irec(iva 5irec(iva 3a direc(iva en una in,(ruccin de definicin de da(o, puede ,er "KT68 ;<58
5;<58 !"KT68 !;<5 o cual.uiera de lo, (ipo, li,(ado, en la (a'la an(erior/ 9demB,8 puede
,er cual.uiera de la, direc(iva, de definicin de da(o, *eredada, .ue ,e mue,(ran a
con(inuacin2
5irec(iva 5irec(iva 5irec(iva 5irec(iva C,o C,o C,o C,o
5" 6n(ero de 8 'i(,
5; 6n(ero de 16 'i(,
55 6n(ero real de 32 'i(,
5L 6n(ero real de 64 'i(,
5T 5efine 8& 'i(,8 o die= '7(e,

#niciali=ador #niciali=ador #niciali=ador #niciali=ador 6n una definicin de da(o, ,e re.uiere por lo meno, un inicializador8 aun.ue ,ea
cero/ 3o, iniciali=adore, adicionale, (,i lo, *a7) van ,eparado, por coma,/ Para lo, (ipo, de
da(o, en(ero,8 iniciali=adore, e, una con,(an(e o e1pre,in en(era8 .ue coincide con el (ama@o
del (ipo de la varia'le8 como "KT6 o ;<5 !i ,e .uiere de>ar la varia'le ,in iniciali=ar (.ue ,e
le a,igne un valor alea(orio)8 ,e u,a el ,-m'olo M MM M como iniciali=ador/ Todo, lo, iniciali=adore,8
,in impor(ar ,u forma(o8 ,e convier(en en da(o, 'inario, median(e el en,am'lador/ 3o,
iniciali=adore, como &&11&&1&'8 32* 7 5&d (erminan con el mi,mo valor 'inario/
5"

5efinicin de da(o, "KT6 7 !"KT6 5efinicin de da(o, "KT6 7 !"KT6 5efinicin de da(o, "KT6 7 !"KT6 5efinicin de da(o, "KT6 7 !"KT6
3a direc(iva "KT6 (definir '7(e) 7 !"KT6 (definir '7(e con ,igno) a,ignan e,pacio de
almacenamien(o para uno o mB, valore, con o ,in ,igno/ 0ada iniciali=ador de'e ca'er en 8
'i(, de almacenamien(o/
valor% EF3E GAH 0 constante tipo carIcter
valor. EF3E " 0 el b5te sin signo mIs pe@ueJo
valor7 EF3E .<< 0 el b5te sin signo mIs grande
valor; SEF3E K%.# 0 el b5te con signo mIs pe@ueJo
valor< SEF3E L%.M 0 el b5te con signo mIs grande
Cn iniciali=ador con ,igno de in(errogacin (M) de>a la varia'le ,in iniciali=ar8 indicando .ue ,e
le a,ignarB un valor en (iempo de e>ecucin2
valor/ EF3E N
6l nom're opcional e, una e(i.ue(a .ue marca el de,pla=amien(o de la varia'le8 de,de el inicio
de ,u ,egmen(o/ Por e>emplo8 ,i valor1 valor1 valor1 valor1 ,e encuen(ra en el de,pla=amien(o &&&& den(ro del
,egmen(o de da(o, 7 con,ume un '7(e de almacenamien(o8 valor2 valor2 valor2 valor2 ,e encuen(ra de manera
au(omB(ica en el de,pla=amien(o &&&12
valor% EF3E %"'
valor. EF3E ."'
3a direc(iva *eredada 5" puede definir (am'iDn una varia'le de 8 'i(,8 con o ,in ,igno2
)al% DE .<< 0 b5te sin signo
)al % DE K%.# 0 b5te con signo
4Al(iple, iniciali=adore, 4Al(iple, iniciali=adore, 4Al(iple, iniciali=adore, 4Al(iple, iniciali=adore,
!i ,e u(ili=an vario, iniciali=adore, e la mi,ma definicin de da(o,8 ,u e(i.ue(a ,lo *ace
referencia al de,pla=amien(o del primer iniciali=ador/ 6l ,iguien(e e>emplo8 li,(a li,(a li,(a li,(a ,e encuen(ra
en el de,pla=amien(o &&&&/ !i e, a,-8 en(once, el valor 1& ,e encuen(ra en el de,pla=amien(o
&&&&8 2& en el de,pla=amien(o &&&18 3& en el de,pla=amien(o &&&28 7 4& en el
de,pla=amien(o 32
@esplazamiento valor
::::: ":
:::": #:
:::#: 1:
:::1: 3:

5#

No (oda, la, definicione, de da(o, re.uieren e(i.ue(a,/ Por e>emplo para con(inuar el arreglo
de '7(e, .ue empe=amo, con li,(a li,(a li,(a li,(a8 podemo, definir '7(e, adicionale, en la, ,iguien(e, l-nea,2
lista EF3E %",.",7",;"
EF3E <",/",M",#"
EF3E #%,#.,#7,#;
5en(ro de una definicin de da(o, individual8 ,u, iniciali=adore, pueden u(ili=ar di,(in(a,
ra-ce,/ Pueden me=clar,e li'remen(e la, con,(an(e, (ipo carBc(er 7 de cadena/ 6n el ,iguien(e
e>emplo li,(a1 7 li,(a2 (ienen el mi,mo con(enido2
lista% EF3E %", 7., ;%', ""%"""%"b
lista. EF3E "A', ."', GAH, ..'
5efinicin de cadena, 5efinicin de cadena, 5efinicin de cadena, 5efinicin de cadena,
Para definir una cadena de carac(ere,8 *a7 .ue encerrarlo, en(re comilla, ,encilla, o do'le,/
6l (ipo mB, comAn de cadena (ermina con un '7(e nulo (.ue con(iene &)/ 3a, cadena, de e,(e
(ipo8 conocida, como cadenas con terminacin nula8 ,e u(ili=an en programa, en 080EE 7 Fava2
saludo% EF3E OEuenas tardesP,"
saludo. EF3E OEuenas noc'esP,"
0ada carBc(er u(ili=a un '7(e de almacenamien(o/ 3a, cadena, ,on una e1cepcin de la regla
.ue e,(a'lece .ue lo, valore, de '7(e, de'en ,eparar,e por coma,/ !in e,(a e1cepcin
(endr-amo, .ue definir a ,aludo1 ,aludo1 ,aludo1 ,aludo1 de la ,iguien(e manera2
saludo% EF3E GbH,HuH,HeH,HnH,HaH,HsHD66etc6
3o cual ,er-a mu7 (edio,o/ Cna cadena puede di,(ri'uir,e a (ravD, de varia, l-nea,8 ,in (ener
.ue ,umini,(rar a una e(i.ue(a para cada l-nea2
saludo% EF3E OEienvenido al programa de demostracin de !ifradoP
EF3E Ocreado por >ip Irvine6P,"d',"a'
EF3E OSi desea modificar este programa, por favorP
EF3E OenvAame una copia6P,"d',"a',"
3o, cdigo, *e1adecimale, &5* 7 &9* ,e llaman (am'iDn 0<G3F (re(orno de carroGavance de
l-nea) o caracteres de fin de lnea/ 0uando ,e e,cri'en en la ,alida e,(Bndar8 de,pla=an el
cur,or *acia la columna i=.uierda de la l-nea .ue ,igue a la l-nea ac(ual/
51

6l carBc(er de con(inuacin de l-nea (N) conca(ena do, l-nea, de cdigo de fuen(e en una ,ola
in,(ruccin/ 5e'e ,er el Al(imo carBc(er en la l-nea/ 3a, ,iguien(e, in,(ruccione, ,on
e.uivalen(e,2
saludo% EF3E OEienvenido al programa de demostracin de cifradoP
F
saludo% Q
EF3E OEienvenido al programa de demostracin de cifradoP
6l operador 5CP 6l operador 5CP 6l operador 5CP 6l operador 5CP
6,(e operador a,igna almacenamien(o para vario, elemen(o, de da(o,8 u,ando una e1pre,in
con,(an(e como con(ador/ 6n e,pecial8 e, A(il cuando ,e a,igna un e,pacio para una cadena o
arreglo8 7 puede u(ili=ar,e con da(o, iniciali=ado, o ,in iniciali=ar2
EF3E ." D9P(") 0 ." b5tes, todos iguales a cero
EF3E ." D9P(N) 0 ." b5tes, sin inicializar
EF3E < D9P(OPI4AP) 0 ." b5tes* OPI4API4API4API4API4AP
5efinicin de da(o, ;<5 7 !;<5
3a direc(iva ;<5 (definir pala'ra) 7 !;<5 (definir pala'ra con ,igno) crean
almacenamien(o para uno o mB, en(ero, de 16 'i(,2
palabra% ,O-D /<<7< 0 el valor sin signo mIs grande
palabra. S,O-D K7.M/# 0 el valor con signo mIs pe@ueJo
palabra7 ,O-D N 0 sin inicializar, sin signo
Tam'iDn puede u,ar,e la direc(iva 5; *eredada2
val% D, /<<7< 0 sin signo
val. D, K7.M/# 0 con signo
Arreglo de palabras para crear un arreglo de pala'ra, ,e li,(an lo, elemen(o, o ,e u,a el
operador 5CP/ 6l ,iguien(e arreglo con(iene una li,(a de valore,2
mi3i,(a ;<5 182838485
9 con(inuacin ,e mue,(ra un diagrama de arreglo en memoria8 ,uponiendo .ue mi3i,(a mi3i,(a mi3i,(a mi3i,(a
empie=a en el de,pla=amien(o &&&&/ 3a, direccione, ,e incremen(an en 28 7a .ue cada valor
ocupa 2 '7(e,2
53

@esplazamiento valor
::::: "
:::#: #
:::3: 1
:::6: 3
:::8: 5

6l operador 5CP proporciona una manera convenien(e de iniciali=ar varia, pala'ra,2
arreglo ,O-D < D9P(N) 0 < valores, sin inicializar
5efinicin de da(o, 5;<5 7 !5;<5 5efinicin de da(o, 5;<5 7 !5;<5 5efinicin de da(o, 5;<5 7 !5;<5 5efinicin de da(o, 5;<5 7 !5;<5
3a, direc(iva, 5;<5 (definir do'le pala'ra) 7 !5;<5 (definir do'le pala'ra con ,igno)
a,ignan almacenamien(o para uno o mB, en(ero, de 32 'i(,2
val% D,O-D %.7;</M#' 0 sin signo
val. SD,O-D K.%;M;#7/;# 0 con signo
val7 D,O-D ." D9P(N) 0 arreglo sin signo
Arreglo de dobles palabras Para crear un arreglo de do'le, pala'ra,8 ,e iniciali=a cada
elemen(o en forma e1pl-ci(a8 o ,e u(ili=a el operador 5CP/ $e a.u- un arreglo .ue con(iene
valore, ,in ,igno e,pec-fico,2
mi4ista D,O-D %,.,7,;,<
9 con(inuacin ,e mue,(ra un diagrama del arreglo en memoria8 ,uponiendo .ue mi3i,(a mi3i,(a mi3i,(a mi3i,(a
empie=a en el de,pla=amien(o &&&&/ 3o, de,pla=amien(o, ,e incremen(an por 42
@esplazamiento valor
::::: "
:::3: #
:::8: 1
:::-: 3
::":: 5





5efinicin de da(o, L;<5 5efinicin de da(o, L;<5 5efinicin de da(o, L;<5 5efinicin de da(o, L;<5
55

3a direc(iva L;<5 (define pala'ra cuBdruple) a,igna almacenamien(o para valore, de 64
'i(, (8 '7(e,)2
@uad% R,O-D %.7;</M#%.7;</M#'
Tam'iDn puede u,ar,e la direc(iva 5L *eredada2
@uad% DR %.7;</M#%.7;</M#'
5efinicin de da(o, T"KT6
3a direc(iva T"KT6 (define 1& '7(e,) crea almacenamien(o para lo, en(ero, de 8& 'i(,/ 6,(e
(ipo de da(o, ,e u(ili=a principalmen(e para almacenar nAmero, decimale, codificado, en
'inario/ Para manipular e,(o, valore, ,e re.uieren in,(ruccione, e,peciale, en el con>un(o de
in,(ruccione, de pun(o flo(an(e2
val% 3EF3E %"""""""""%.7;</M#+A'
Tam'iDn puede u(ili=ar,e la direc(iva 5T *eredada2
val D3 %"""""""""%.7;</M#+A'
5efinicin de da(o, de nAmero, reale,
<6934 define a una varia'le real de 4 '7(e, 7 preci,in ,imple/ <6938 define a una real de 8
'7(e, 7 preci,in do'le8 7 <6931& define a una real de 1& '7(e, 7 do'le preci,in e1(endida/
0ada uno re.uiere de uno o mB, iniciali=adore, con,(an(e, reale,2
r)al% -EA4; K%6.
r)al. -EA4# 76.EK./"
r)al7 -EA4%" ;6/EL;"+/
rArreglo -EA4; ." D9P ("6")
3a ,iguien(e (a'la de,cri'e a cada uno de lo, (ipo, reale, e,(Bndar/ 6n (Drmino, de ,u nAmero
m-nimo de d-gi(o, ,ignifica(ivo, 7 el rango apro1imado2
Tipo de da(o, Tipo de da(o, Tipo de da(o, Tipo de da(o, 5-gi(o, ,ignifica(ivo, 5-gi(o, ,ignifica(ivo, 5-gi(o, ,ignifica(ivo, 5-gi(o, ,ignifica(ivo, <ango apro1imado <ango apro1imado <ango apro1imado <ango apro1imado
<eal cor(o 6 1/1811&O:38 a 3/4&11&O38
<eal largo 15 2/2311&O:3&8 a 1/7P11&O3&8
<eal de preci,in e1(endida 1P 3/3711&O:4P32 a 1/1811&O4P32
3a direc(iva 558 5L 7 5T *eredada, pueden definir nAmero, reale,2
r)al% DD K%6. 0 real corto
56

r)al. DR 76.EK./" 0 real largo
r)al7 D3 ;6/EL;"+/ 0 real de precisin e1tendida
rden 3i((le 6ndian rden 3i((le 6ndian rden 3i((le 6ndian rden 3i((le 6ndian
3o, proce,adore, #n(el almacenan 7 recuperan da(o, de la memoria u,ando el orden little
endian/ 6l '7(e meno, ,ignifica(ivo ,e almacena en la primera direccin de memoria a,ignada
para lo, da(o,/ 6l re,(o de lo, '7(e, ,e almacenan en la, ,iguien(e, po,icione, con,ecu(iva,
de memoria/ 0omo e>emplo8 con,idere la do'le pala'ra 123455678* !i ,e coloca en el
de,pla=amien(o &&&& de la memoria8 ,e almacenar-a 78* en el primer '7(e8 56 en el ,egundo
'7(e/ K el re,(o de lo, '7(e, e,(ar-an en el de,pla=amien(o &&&3 7 &&&42
::::: 78
:::": 56 Little endian
:::#: 13
:::1: "#

$a7 o(ro, ,i,(ema, compu(acione, .ue u(ili=an el orden big endian (de ma7or a menor)8 3a
,iguien(e figura mue,(ra un e>emplo del nAmero 12345678* almacenado en orden 'ig endian8
en el de,pla=amien(o &2
::::: "#
:::": 13 Big endian
:::#: 56
:::1: 78










9gregar varia'le, al programa !uma<e,(a 9gregar varia'le, al programa !uma<e,(a 9gregar varia'le, al programa !uma<e,(a 9gregar varia'le, al programa !uma<e,(a
+amo, a u(ili=ar el programa !uma<e,(a !uma<e,(a !uma<e,(a !uma<e,(a para agregarle un ,egmen(o de da(o, .ue con(enga
varia, varia'le, de (ipo do'le pala'ra/ 9 e,(e programa modificado le llamaremo,
!uma<e,(a2 !uma<e,(a2 !uma<e,(a2 !uma<e,(a22
57

3I34E suma 5 resta, )ersin . (Suma-esta.6asm)
0 Este programa suma 5 resta enteros de 7. bits sin signo
0 5 almacena la suma en una variable6
I8!49DE Irvine7.6inc
6data
val% d=ord %""""'
val. d=ord ;""""'
val7 d=ord .""""'
val$inal d=ord N
6code
main P-O!
mov ea1,val% 0 empieza con %""""'
add ea1,val. 0 suma ;""""'
sub ea1,val7 0 resta .""""'
mov val$inal,ea1 0 almacena el resultado (7""""')
call Dump-egs 0 muestra los registros
e1it
main E8DP
E8D main
Q0mo funcionaM Primero el en(ero en val1 val1 val1 val1 ,e mueve a 69H2
mov ea1,val% 0 empieza con %""""'
5e,puD,8 val2 val2 val2 val2 ,e ,uma a 69H2
add ea1,val. 0 suma ;""""'
3uego8 ,e re,(a val3 val3 val3 val3 de 69H2
sub ea1,val7 0 resta .""""'
69H ,e copia a valFinal valFinal valFinal valFinal2
58

mov val$inal,ea1 0 almacena el resultado (7""""')
5eclaracin de da(o, ,in iniciali=ar 5eclaracin de da(o, ,in iniciali=ar 5eclaracin de da(o, ,in iniciali=ar 5eclaracin de da(o, ,in iniciali=ar
3a direc(iva /59T9M declara lo, da(o, ,in iniciali=ar8 9l definir un 'lo.ue e1(en,o de da(o, ,in
iniciali=ar8 la direc(iva /59T9M reduce el (ama@o de un programa compilado/ Por e>emplo8 el
,iguien(e cdigo ,e declara de manera eficien(e2
6data
arregloPe@uenio D,O-D %" D9P(") 0 ;" b5tes
6dataN
arregloSrande D,O-D <""" D9P(N) 0 .",""" b5tes sin inicializar
Por o(ro lado el ,iguien(e cdigo produce un programa compilado .ue e, 2&8&&& '7(e, mB,
grande2
6data
arregloPe@uenio D,O-D %" D9P(") 0;" b5tes
arregloSrande D,O-D <""" D9P(N) 0.",""" b5tes
Mezcla de cdigo y datos 6l en,am'lador no, permi(e cam'iar en(re cdigo 7 lo, da(o, en
nue,(ro, programa,/ Por e>emplo8 (al ve= podr-amo, llegar a nece,i(ar declarar una varia'le
.ue ,e u(ilice ,lo den(ro de un Brea locali=ada de un programa/ 6l ,iguien(e e>emplo in,er(a
una varia'le llamada (emp (emp (emp (emp en(re do, in,(ruccione, de cdigo2
6code
mov ea1,eb1
6data
temp D,O-D N
6code
mov temp, ea1
D
9un.ue (emp (emp (emp (emp parece in(errumpir el flu>o de in,(ruccione, e>ecu(a'le,8 49!4 coloca a (emp (emp (emp (emp en
el ,egmen(o de da(o,8 ,eparada del ,egmen(o .ue guarda el cdigo compilado/
0on,(an(e, ,im'lica, 0on,(an(e, ,im'lica, 0on,(an(e, ,im'lica, 0on,(an(e, ,im'lica,
Cna constante simblica (o definicin de smbolo) ,e crea median(e la a,ociacin de un
iden(ificador (un ,-m'olo) con una e1pre,in en(era8 o con cier(o (e1(o/ 3o, ,-m'olo, no
59

re,ervan almacenamien(o/ !lo lo, u(ili=a el en,am'lador al momen(o de e1plorar un
programa8 7 no pueden cam'iar en (iempo de e>ecucin/ 3a ,iguien(e (a'la mue,(ra un
re,umen ,o're ,u, diferencia,2
!-m'olo !-m'olo !-m'olo !-m'olo +aria'le +aria'le +aria'le +aria'le
QC,a almacenamien(oM N !#
Q0am'ia ,u valor en (iempo de
e>ecucin
N !#

4o,(raremo, cmo u(ili=ar la direc(iva de ,igno de igual (R) para crear ,-m'olo, .ue
repre,en(en e1pre,ione, en(era,/ C(ili=aremo, la, direc(iva, 6LC 7 T6HT6LC para crear
,-m'olo, .ue repre,en(en (e1(o ar'i(rario/
5irec(iva de ,igno de igual 5irec(iva de ,igno de igual 5irec(iva de ,igno de igual 5irec(iva de ,igno de igual
3a direc(iva de ,igno igual a,ocia el nom're de un ,-m'olo con una e1pre,in en(era/ 3a
,in(a1i, e,2
nom're R e1pre,in
Por lo comAn8 e1pre,in e, un valor en(ero de 32'i(,/ 0uando ,e en,am'la un programa8
(oda, la, coincidencia, de nombre ,e ,u,(i(u7en por expresin duran(e el pa,o del
preproce,ador del en,am'lador/ Por e>emplo8 ,i el en,am'lador lee la, l-nea,2
!9E83A ( <""
mov a1,!9E83A
genera 7 en,am'la la ,iguien(e in,(ruccin2
mov a1,<""
QPara .uD u(ili=ar ,-m'olo,M Podr-amo, *a'er omi(ido el ,-m'olo 0C6NT9 por comple(o8 7 ,olo
codificar la in,(ruccin 4+ con el valor li(eral 5&&8 pero la e1periencia no, *a demo,(rado
.ue e, mB, fBcil leer 7 man(ener programa, ,i ,e u(ili=an ,-m'olo,/ !upongamo, .ue 0C6NT9
,e u(ili=a 1& vece, en (odo un programa/ Podr-a incremen(ar,e de,puD, a 6&&8 al(erando ,lo
una l-nea de cdigo2
0C6NT9 R 6&&
0uando ,e vuelve a en,am'lar el programa .ue u(ili=a 0C6NT98 (oda, la, in,(ancia, de
0C6NT9 ,e ,u,(i(u7en de manera au(omB(ica por 6&&/ !in e,(e ,-m'olo8 el programador
(endr-a .ue 'u,car 7 ,u,(i(uir manualmen(e (odo, lo, nAmero, 5&& con 6&& en el cdigo de
fuen(e del programa/ QLuD pa,ar-a ,i una ocurrencia del nAmero 5&& no e,(uviera relacionada
con (oda, la, demB,M 6n(once, ,e producirB un error ,i ,e cam'iara por 6&&/
6:

5efinicione, del (eclado 9 menudo8 lo, programa, definen ,-m'olo, para carac(ere,
impor(an(e, del (eclado/ Por e>emplo8 27 e, el cdigo 9!0## para la (ecla 6,c2
TeclaS6,c R 27
5e,puD, en el mi,mo programa8 una in,(ruccin ,e de,cri'e mB, a ,- mi,ma ,i u(ili=a el
,-m'olo en ve= de un valor inmedia(o2
mov al,3eclaTEsc 0 buen estilo
en ve= de
mov al,.M 0 mal estilo
Uso del operador DUP el con(ador u(ili=ado por 5CP de'e ,er una con,(an(e ,im'lica8 para
,implificar el man(enimien(o del programa/ 6n el ,iguien(e e>emplo8 ,i ,e defini 0C6NT98
puede u(ili=ar,e en la ,iguien(e definicin de da(o,2
Arreglo D,O-D !9E83A D9P(")
-edefiniciones Cn ,-m'olo definido con R puede definir,e de nuevo den(ro del mi,mo
programa/ 6l ,iguien(e e>emplo mue,(ra cmo el en,am'lador evalAa a 0C6NT98 cuando
cam'ia de valor2
!9E83A ( <
mov al,!9E83A 0 A4 ( <
!9E83A ( %"
mov al, !9E83A 0 A4 ( %"
!9E83A ( %""
mov al, !9E83A 0 A4 ( %""
6l valor cam'ian(e de un ,-m'olo (al como 0C6NT9 no (iene nada .ue ver con el orden de
e>ecucin de la, in,(ruccione, en (iempo de e>ecucin8 ,ino .ue el ,-m'olo cam'ia ,u valor de
acuerdo con el proce,amien(o ,ecuencial del cdigo de fuen(e .ue *ace el en,am'lador/

0Blculo de lo, (ama@o, de lo, arreglo, 7 cadena, 0Blculo de lo, (ama@o, de lo, arreglo, 7 cadena, 0Blculo de lo, (ama@o, de lo, arreglo, 7 cadena, 0Blculo de lo, (ama@o, de lo, arreglo, 7 cadena,
9l u(ili=ar un arreglo por lo general8 e, convenien(e conocer ,u (ama@o/ 6l ,iguien(e e>emplo
u(ili=a una con,(an(e llamada Tam3i,(a Tam3i,(a Tam3i,(a Tam3i,(a para declarar el (ama@o de li,(a li,(a li,(a li,(a2
li,(a "KT6 1&82&83&84&
Tam3i,(a R 4
6"

No e, convenien(e calcular en forma manual lo, (ama@o, de lo, arreglo, cuando D,(o, pueden
cam'iar de (ama@o mB, adelan(e en el programa/ !i (uviDramo, .ue agregar mB, '7(e, a li,(a li,(a li,(a li,(a8
*a'r-a .ue corregir el valor de Tam3i,(a Tam3i,(a Tam3i,(a Tam3i,(a/ Cna me>or manera de mane>ar e,(a ,i(uacin ,er-a
de>ar .ue el en,am'lador calculara Tam3i,(a Tam3i,(a Tam3i,(a Tam3i,(a en forma au(omB(ica/ 6l operador T (contador de
ubicacin actual) devuelve el de,pla=amien(o a,ociado con la in,(ruccin ac(ual del programa/
6n el ,iguien(e e>emplo8 Tam3i,(a Tam3i,(a Tam3i,(a Tam3i,(a ,e calcula re,(ando el de,pla=amien(o de li,(a li,(a li,(a li,(a8 a par(ir del
con(ador de u'icacin ac(ual (T)2
lista EF3E %",.",7",;"
3am4ista ( (U K lista)
Tam3i,(a Tam3i,(a Tam3i,(a Tam3i,(a de'e ir >u,(o de,puD, de li,(a li,(a li,(a li,(a/ 6l ,iguien(e e>emplo produce un valor dema,iado
grande para Tam3i,(a Tam3i,(a Tam3i,(a Tam3i,(a8 de'ido a .ue el almacenamien(o u(ili=ado por var2 var2 var2 var2 afec(a a la di,(ancia
en(re el con(ador de la u'icacin ac(ual 7 el de,pla=amien(o de li,(a li,(a li,(a li,(a2
lista EF3E %",.",7",;"
var. EF3E ." D9P (N)
3am4ista ( (U K lista)
6n ve= de calcular la longi(ud de una cadena en forma manual8 de>emo, .ue el en,am'lador lo
*aga2
mi!adena EF3E OEsta es una cadena larga, @ue contieneP
EF3E O!ual@uier n?mero de caracteresP
mi!adenaTlongitud ( (U K mi!adena)
Arreglo de palabras y doble palabras 9l calcular el nAmero de elemen(o, en un arreglo .ue
con(iene pala'ra, de 16 'i(, (;<5)8 divida la diferencia en lo, de,pla=amien(o, en(re 22
lista ,O-D %"""',."""',7"""',;"""'
3am4ista( (U K lista) V .
5e manera ,imilar8 cada elemen(o de un arreglo de do'le, pala'ra, e, de 4 '7(e,8 por lo .ue
,u longi(ud (o(al de'e dividir,e en(re cua(ro para producir el nAmero de elemen(o, de arreglo2
lista D,O-D %"""""""',."""""""',7"""""""',;"""""""'
3am4ista ( (U K lista) V ;
5irec(iva 6LC 5irec(iva 6LC 5irec(iva 6LC 5irec(iva 6LC
3a direc(iva 6LC a,ocia un nom're ,im'lico con una e1pre,in en(era o con algAn (e1(o
ar'i(rario/ 61i,(en (re, forma(o,2
6#

nombre ER9 expresin
nombre ER9 smbolo
nombre ER9 WtextoX
6n el primer forma(o8 expresin de'e ,er una e1pre,in en(era vBlida/ 6n el ,egundo forma(o8
smbolo e, el nom're de un ,-m'olo e1i,(en(e8 .ue 7a ,e *a definido con R o 6LC/ 6n el (ercer
forma(o8 puede aparecer cual.uier (e1(o den(ro de lo, ,igno, U 7 V/ 0uando el en,am'lador
encuen(ra a nombre mB, adelan(e en el programa8 ,u,(i(u7e el valor en(ero o (e1(o por e,e
,-m'olo/
6LC puede ,er A(il cuando ,e define un valor .ue no ,e evalAa como en(ero8 Por e>emplo8 una
con,(an(e numDrica real puede definir,e median(e 6LC2
PI ER9 W76%;%/X
jemplo 6l ,iguien(e e>emplo a,ocia un ,-m'olo con una cadena de carac(ere,/ 5e,puD,
puede crear,e una varia'le median(e el u,o de ,-m'olo2
oprima3ecla ER9 WPOprima cual@uier tecla para continuarDP,"X
6
6
6data
Indicador EF3E oprima3ecla
jemplo ,upongamo, .ue de,eamo, definir un ,-m'olo .ue cuen(e el nAmero de celda, en
una ma(ri= en(era de 1& por 1&/ 5efiniremo, lo, ,-m'olo, de do, forma, di,(in(a,8 Primero
como una e1pre,in en(era 7 de,puD, como una e1pre,in de (e1(o/ 5e,puD, u(ili=aremo, lo,
do, ,-m'olo, en definicione, de da(o,2

matriz% ER9 %" & %"
matriz. ER9 W%" & %"X
6data
2% ,O-D matriz%
2. ,O-D matriz.
6l en,am'lador produce di,(in(a, definicione, de da(o, para 41 41 41 41 7 42 42 42 42/ 3a e1pre,in en(era en
ma(ri=1 ma(ri=1 ma(ri=1 ma(ri=1 ,e evalAa 7 ,e a,igna a 41 41 41 41/ Por o(ro lado8 el (e1(o en ma(ri=2 ma(ri=2 ma(ri=2 ma(ri=2 ,e copia direc(amen(e en
la definicin de da(o, para 42 42 42 422
61

2% ,O-D %""
2. ,O-D %" & %"
!in redefinicin 9 diferencia de la direc(iva R8 un ,-m'olo definido con 6LC no puede
redefinir,e en el mi,mo arc*ivo de cdigo fuen(e/ 6,(a re,(riccin evi(a .ue un ,-m'olo ,e le
a,igne ,in .uerer un nuevo valor/
5irec(iva T6HT6LC 5irec(iva T6HT6LC 5irec(iva T6HT6LC 5irec(iva T6HT6LC
3a direc(iva T6HT6LC8 ,imilar a 6LC8 crea lo .ue ,e conoce como macro de texto/ $a7 (re,
forma(o, di,(in(o,2 el primero a,igna (e1(o8 el ,egundo a,igna el con(enido de una macro de
(e1(o e1i,(en(e8 7 el (ercero a,igna una e1pre,in en(era con,(an(e2
nombre 3E:3ER9 WtextoX
nombre 3E:3ER9 macrotexto
nombre 3E:3ER9 %exprConst
Por e>emplo8 la varia'le indicador1 u(ili=a el macro de (e1(o m,>0on(inuar m,>0on(inuar m,>0on(inuar m,>0on(inuar2
m,>0on(inuar T6HT6LC UW5e,ea con(inuar (!GN)MWV
/da(a
#ndicador1 "KT6 m,>0on(inuar
3a, macro, de (e1(o ,e pueden 'a,ar en o(ra, con,(an(e, de (e1(o/ 6n el ,iguien(e e>emplo8
cuen(a cuen(a cuen(a cuen(a ,e e,(a'lece al valor de una e1pre,in en(era en la .ue ,e u(ili=a (amFila (amFila (amFila (amFila/ 5e,puD,8 el
,-m'olo mover mover mover mover ,e define como mov mov mov mov/ Por Al(imo8 e,(a'lecer93 e,(a'lecer93 e,(a'lecer93 e,(a'lecer938 ,e crea a par(ir de mover mover mover mover 7
cuen(a cuen(a cuen(a cuen(a2


tam$ila ( <
cuenta 3E:3ER9 Y(tam$ila & .)
mover 3E:3ER9 WmovX
establecerA4 3E:3ER9 Wmover al, cuentaX
Por lo (an(o8 la in,(ruccin
e,(a'lecer93
,e en,am'lar-a como
63

mov al81&
Cn ,-m'olo definido por T6HT6LC puede redefinir,e en cual.uier momen(o/
Programacin en modo direccionamien(o real (opcional) Programacin en modo direccionamien(o real (opcional) Programacin en modo direccionamien(o real (opcional) Programacin en modo direccionamien(o real (opcional)
3o, programa, di,e@ado, para 4!:5! de'en ,er aplicacione, de 16 'i(, .ue ,e e>ecu(an en
modo de direccionamien(o real/ 3a, aplicacione, en modo direccionamien(o real u(ili=an
,egmen(o, de 16 'i(, 7 ,iguen el e,.uema de direccionamien(o ,egmen(ado/ !i ,e u(ili=a un
proce,ador #9:328 aAn ,e puede u(ili=ar lo, regi,(ro, de 32 'i(, de prop,i(o general para lo,
da(o,/
0am'io, 'B,ico,
$a7 uno, cuan(o, cam'io, .ue de'emo, *acer a lo, programa, de 32 'i(, .ue pre,en(amo,
en e,(e cap-(ulo8 para (ran,formarlo, en programa, en modo direccionamien(o real2
3a direc(iva #N03C56 *ace referencia a una 'i'lio(eca di,(in(a2
#N03C56 #rvine16/inc
!e in,er(an do, in,(ruccione, adicionale, al principio del procedimien(o de arran.ue
(main)/ 6,(a, in,(ruccione, iniciali=an el regi,(ro 5! con la u'icacin inicial del
,egmen(o de da(o,8 iden(ificada por la con,(an(e predefinida Xda(a de 49!42
mov a18 Xda(a
mov d,8a1
3o, de,pla=amien(o, (direccione,) de la e(i.ue(a de da(o, 7 de cdigo ,on de 16 'i(,/






6l programa !uma<e,(a2 6l programa !uma<e,(a2 6l programa !uma<e,(a2 6l programa !uma<e,(a2
$e a.u- un li,(ado del programa !uma<e,(a2/a,m8 modificado para e>ecu(ar,e en modo de
direccionamien(o real/ 3a, nueva, l-nea, e,(Bn marcada, por comen(ario,2
3I34E Suma 5 resta, )ersin . (Suma-esta.6asm)
0 Este programa suma 5 resta enteros de 7. bits
0 5 almacena la suma en una variable6
0 2odo de direccionamiento real6
I8!49DE Irvine%/6inc 0 cambiado &
Fo se puede mover hdata directamente a @= ' ;=& 'a (ue la instruccin <AV no permite
mover una constante directamente a un registro de segmento.
65

6data
val% d=ord %""""'
val. d=ord ;""""'
val7 d=ord .""""'
val$inal d=ord N
6code
main P-O!
mov a1,Zdata 0 nuevo &
mov ds,a1 0 nuevo &
mov ea1,val% 0 empieza con %""""'
add ea1,val. 0 suma ;""""'
sub ea1,val7 0 resta .""""'
mov val$inal,ea1 0 almacena el resultado (7""""')
call Dump-egs 0 muestra los registros
e1it
main E8DP
E8D main

4 4 4 4 Tran,ferencia de da(o,8 direccionamien(o 7 ari(mD(ica Tran,ferencia de da(o,8 direccionamien(o 7 ari(mD(ica Tran,ferencia de da(o,8 direccionamien(o 7 ari(mD(ica Tran,ferencia de da(o,8 direccionamien(o 7 ari(mD(ica
Tipo, de operando, Tipo, de operando, Tipo, de operando, Tipo, de operando,
6n e,(e cap-(ulo pre,en(aremo, (re, (ipo, de operando, de in,(ruccione,2 inmediatos8 de
registro 7 de memoria/ 5e lo, (re, el (ercero e, un poco complicado/
No(acin de operando, de in,(ruccione,/
66

8perando ,escripcin
r. Registro de propsito general de 8 bits: /& /L& B& BL& -& -L& @& @L
r10 Registro de propsito general de "6 bits: /Z& BZ& -Z& @Z& =I& @I& =5& B5
r2 Registro de propsito general de 1# bits: ;/Z& ;-Z& ;@Z& ;=I& ;@I& ;=5& ;B5
reg -ual(uier tipo de registro de propsito general
sreg Registros de segmento de "6 bits: -=& @=& ==& ;=& 2=& G=
imm Valor inmediato de 8& "6 o 1# bits
imm. Valor tipo b'te inmediato de 8 bits
imm10 Valor tipo palabra inmediato de "6 bits
imm2 Valor tipo doble palabra inmediato de 1# bits
r7m. Aperando de 8 bits& (ue puede ser un registro general de 8 bits o un b'te de memoria
r7m10 Aperando de "6 bits& (ue puede ser un registro general de "6 bits o una palabra de memoria
r7m2 Aperando de 1# bits& (ue puede ser un registro general de 1# bits o una doble palabra
mem -ual(uier operenado de memoria de 8&"6 o 1# bits

perando, direc(o, de memoria perando, direc(o, de memoria perando, direc(o, de memoria perando, direc(o, de memoria
6n el cap-(ulo an(erior (cap-(ulo 3) e1plicamo, .ue lo, nom're, de la, varia'le, ,on
referencia, a de,pla=amien(o, den(ro del ,egmen(o de da(o,/ Por e>emplo la ,iguien(e
declaracin indica .ue ,e *a a,ignado al ,egmen(o de da(o, un '7(e .ue con(iene el nAmero
1&*2
6data
var% EF3E %"'
6l cdigo del programa con(iene in,(ruccione, .ue emplean ('u,can) operando, .ue *acen
referencia a direccione, de memoria/ !upongamo, .ue var1 var1 var1 var1 ,e u'ic en de,pla=amien(o
1&4&&*/ Cna in,(ruccin en lengua>e en,am'lador para mover e,(a varia'le al regi,(ro 93
podr-a ,er2
mov A4,var%
49!4 en,am'lar-a e,(a in,(ruccin como el ,iguien(e cdigo de mB.uina2
9& &&&1&4&&
6l primer '7(e en la in,(ruccin de mB.uina e, el cdigo de operacin/ 3a par(e re,(an(e e, la
direccin *e1adecimal de 32 'i(, de var1 var1 var1 var1/ 9un.ue ,e podr-a e,cri'ir programa, con
direccione, numDrica,8 lo, nom're, ,im'lico, como var1 var1 var1 var1 facili(an el proce,o de referenciar a
la memoria/



*otacin alternativa. /lgunos programadores pre$ieren usar la siguiente notacin con
operandos directos& 'a (ue los corc*etes implican una operacin (ue emplean operandos (ue
*acen re$erencia a una direccin de memoria:
mov al,Bvar%C
</=< permite esta notacin& por lo (ue usted puede utilizarla en sus propios programas& si as%
lo desea. @ebido a (ue muc*os programas +inclu'endo los de <icroso$t, se imprimen sin
corc*etes& slo lo utilizaremos en este libro cuando est! involucrada una eCpresin aritm!tica:
mov al, Bvar% L <C
67







#n,(ruccin 4+ #n,(ruccin 4+ #n,(ruccin 4+ #n,(ruccin 4+
3a in,(ruccin 4+ copia da(o, de un operando de origen a un operando de de,(ino/ 6,(a
in,(ruccin8 conocida como transferencia de datos8 ,e u(ili=a en ca,i (odo, lo, programa,/ !u
forma(o 'B,ico mue,(ra .ue el primer operando e, el de,(ino 7 el ,egundo e, el origen2
2O) destino,origen
6l con(enido del operando de de,(ino cam'ia8 pero el del operando de origen no/ 6l
movimien(o de da(o, de derec*a a i=.uierda e, ,imilar a la in,(ruccin de a,ignacin en 0EE o
Fava2
destino ( origen 0
(6n ca,i (oda, la, in,(ruccione, en lengua>e en,am'lador8 el operando i=.uierdo e, el de,(ino 7
el operando derec*o e, el origen)
4+ e, 'a,(an(e fle1i'le en el u,o de ,u, operando,8 ,iempre 7 cuando ,e o',erven la,
,iguien(e, regla,2
9m'o, operando, de'en ,er del mi,mo (ama@o/
9m'o, operando, no pueden ,er operando, de memoria/
0!8 6#P e #P no pueden ,er operando, de de,(ino/
Cn valor inmedia(o no puede mover,e en el regi,(ro de ,egmen(o/

$e a.u- una li,(a de varian(e, generale, de 4+8 e1clu7endo lo, regi,(ro, de ,egmen(o2
2O) reg,reg
2O) mem,reg
2O) reg,mem
2O) mem,imm
2O) reg,imm
68

3o, programa, .ue ,e e>ecu(an en modo pro(egido no de'en modificar direc(amen(e lo,
regi,(ro, de ,egmen(o/ 3a, ,iguien(e, operacione, e,(Bn di,poni'le, en modo real8 con
e1cepcin de 0! no puede ,er un operando de de,(ino2
2O) rVm%/,sreg
2O) sreg,rVm%/
Memoria a memoria Cna ,ola in,(ruccin 4+ no puede u,ar,e para mover da(o,
direc(amen(e de una u'icacin de memoria a o(ra/ 6n ve= de ello8 puede mover el valor del
operando de origen a un regi,(ro8 an(e, de mover a un operando de memoria2
6data
var% ,O-D N
var. ,O-D N
6code
mov a1,var%
mov var.,a1
$a7 .ue con,iderar el nAmero m-nimo de '7(e, re.uerido, por una con,(an(e en(era8 al
copiarlo a una varia'le o regi,(ro (cap-(ulo 1)/
61(en,in con cero 7 con ,igno de en(ero, 61(en,in con cero 7 con ,igno de en(ero, 61(en,in con cero 7 con ,igno de en(ero, 61(en,in con cero 7 con ,igno de en(ero,
0opia valore, mB, pe.ue@o, a valore, mB, grande, 0opia valore, mB, pe.ue@o, a valore, mB, grande, 0opia valore, mB, pe.ue@o, a valore, mB, grande, 0opia valore, mB, pe.ue@o, a valore, mB, grande,
9un.ue 4+ no puede copiar da(o, direc(amen(e de un operando mB, pe.ue@o a uno mB,
grande8 lo, programadore, pueden crear ,olucione, al(erna(iva,/ !upongamo, .ue cuen(a cuen(a cuen(a cuen(a
(con ,igno8 16 'i(,) de'e mover,e a 60H (32 'i(,/)/ Podemo, e,(a'lecer 60H con cero 7 mover
cuen(a cuen(a cuen(a cuen(a a 0H2


6data
cuenta ,O-D %
6 code
mov ec1,"
mov c1, cuenta
QLuD ocurre ,i (ra(amo, el mi,mo mD(odo con un en(ero con ,igno igual a :16M
69

6data
valor!onSigno S,O-D K%/ 0 $$$"' (K%/)
6code
mov ec1,"
mov c1,val!onSigno 0 E!:( """"$$$" (L/<<.")
6l valor 60H (E6552&) e, comple(amen(e di,(in(o de :16/ Por o(ro lado8 ,i llenBramo, primero
a 60H con FFFFFFFF* 7 de,puD, copiBramo, valor0on!igno valor0on!igno valor0on!igno valor0on!igno a 0H8 el valor final *u'iera ,ido
correc(o2
mov ec1,"$$$$$$$$'
mov c1,val!onSigno 0 E!: ( $$$$$$$"' (K%/)
6,(o repre,en(a un pro'lema al (ra(ar,e de en(ero, con ,igno2 no .ueremo, (ener .ue
compro'ar ,u, valore, para ver ,i ,on po,i(ivo, o nega(ivo, an(e, de decidir cmo llenar lo,
operando, de de,(ino/ Por for(una lo, ingeniero, de #n(el de(ec(aron e,(e pro'lema al di,e@ar
el proce,ador #n(el3868 e in(rodu>eron la, in,(ruccione, 4+IH 7 4+!H para me>orar en(ero,
,in ,igno 7 en(ero, con ,igno/

#n,(ruccin 4+IH #n,(ruccin 4+IH #n,(ruccin 4+IH #n,(ruccin 4+IH
3a in,(ruccin 4+IH (mover con extensin de ceros) copia el con(enido de un operando de
origen a un operando de de,(ino8 7 e1(iende con cero, el valor *a,(a 16 o 32 'i(,/ 6,(a
in,(ruccin ,e u(ili=a ,olo con en(ero, ,in ,igno/ $a7 (re, varian(e,2
2O)[: r7.,rVm#
2O)[: r7.,rVm%/
2O)[: r%/,rVm%#
3a ,iguien(e in,(ruccin mueve el nAmero 'inario 1&&&1111 a 9H2
mov=1 a181&&&1111'
5iagrama de 4+IH a18 8F* 5iagrama de 4+IH a18 8F* 5iagrama de 4+IH a18 8F* 5iagrama de 4+IH a18 8F*2
7:


3o, ,iguien(e, e>emplo, u(ili=an regi,(ro, para (odo, lo, operando,8 mo,(rando (oda, la,
variacione, de (ama@o2
mov b1,"A/+E'
movz1 ea1,b1 0 EA: ( """"A/+E'
movz1 ed1,bl 0 ED: ( """"""+E'
movz1 c1,bl 0 !: ( ""+E'
3o, ,iguien(e, e>emplo, u(ili=an operando, de memoria para el origen 7 producen el mi,mo
re,ul(ado2
6data
b5te% EF3E +E'
palab% ,O-D "A/+E'
6code
movz1 ea1,palab% 0 EA: ( """"A/+E'
movz1 ed1,b5te% 0 ED: ( """"""+E'
movz1 c1,b5te% 0 !: ( ""+E'





=i se (uiere ejecutar ' probar los ejemplos de este cap%tulo en modo direccionamiento real& utilice
IF-LD@; con Irvine"6.lib e inserte las siguientes l%neas al principio del procedimiento principal +main,:
mov aC&hdata
mov ds&aC
7"


#n,(ruccin 4+!H #n,(ruccin 4+!H #n,(ruccin 4+!H #n,(ruccin 4+!H
3a in,(ruccin 4+!H (mover e1(en,in de ,igno) copia el con(enido de un operando de origen
en un operando de de,(ino8 7 e1(iende con ,igno el valor *a,(a 16 o 32 'i(,/ 6,(a in,(ruccin
,lo ,e u(ili=a con en(ero, con ,igno/ 61i,(en (re, varia'le,
2O)S: r7.,rVm#
2O)S: r7.,rVm%/
2O)S: r%/,rVm#
Para e1(ender con ,igno un operando8 ,e (oma el 'i( mB, al(o del operando mB, pe.ue@o 7 re
repi(e (replica) e,(e 'i( a lo largo de lo, 'i(, e1(endido, en el operando de de,(ino/
!upongamo, .ue el valor 8 'i(, 1&&&1111'
!e mueve a un de,(ino de 16 'i(,2
movs1 a1,%"""%%%%b





5iagrama de 4+!H a181&&&1111'2

$e a.u- uno, cuan(o, e>emplo, mB, .ue u(ili=an una variedad de (ama@o, de regi,(ro2
mov b1,"A/+E'
movz1 ea1,b1 0 EA: ( $$$$A/+E'
movz1 ed1,bl 0 ED: ( $$$$$$+E'
7#

movz1 cl,bl 0 !: ( $$+E'
#n,(ruccione, 39$F 7 !9$F #n,(ruccione, 39$F 7 !9$F #n,(ruccione, 39$F 7 !9$F #n,(ruccione, 39$F 7 !9$F
3a in,(ruccin 39$F (cargar 'andera, de e,(ado, en 9$) copia el '7(e inferior del regi,(ro
6F39Y! a 9$/ !e copian la, ,iguien(e, 'andera,2 !igno8 0ero8 9carreo 9u1iliar8 Paridad 7
9carreo/ 4edian(e el u,o de e,(a in,(ruccin8 podemo, guardar fBcilmen(e una copia de la,
'andera, en una varia'le8 por ,eguridad2
6data
guardarbanderas EF3E N
6code
la'f 0 carga las banderas en A\
mov guardarbanderas, a' 0 las guarda en una variable
3a #n,(ruccin !9$F (almacenar 9$ en 'andera, de e,(ado) copia 9$ el '7(e inferior del
regi,(ro 6F39Y!/ Por e>emplo8 puede o'(ener lo, valore, de la, 'andera, .ue ,e *a7an
guardado an(e, en una varia'le2
mov a', guardarbanderas 0 carga las banderas guardadas a A\
sa'f 0 las copia a los registros flags
#n,(ruccin H0$Y #n,(ruccin H0$Y #n,(ruccin H0$Y #n,(ruccin H0$Y
3a in,(ruccin H0$Y (in(ercam'iar da(o,) in(ercam'ia el con(enido de do, operando,/ $a7 (re,
varian(e,2
:!\S reg,reg
:!\S reg,mem
:!\S mem,reg
3a, regla, para lo, operando, en la in,(ruccin H0$Y ,on la, mi,ma, .ue para la in,(ruccin
4+8 e1cep(o .ue H0$Y no acep(a operando, inmedia(o,/ 6n la, aplicacione, para ordenar
arreglo, H0$Y proporciona una manera ,imple de in(ercam'iar lo, elemen(o, de do, arreglo,/
$e a.u- uno, cuan(o, e>emplo, del u,o de H0$Y2
1c'g a1,b1 0 intercambia registros de %/ bits
1c'g a',al 0 intercambia registros de # bits
1c'g var%,b1 0 intercambia op mem de %/ bits con E:
1c'g ea1,eb1 0 intercambia registros de 7. bits
71

Para in(ercam'iar do, operando, de memoria8 ,e de'e u(ili=ar un regi,(ro como con(enedor
(emporal 7 com'inar 4+ con H0$Y2
mov a1,val%
1c'g a1,val.
mov val%,a1
perando de de,pla=amien(o direc(o perando de de,pla=amien(o direc(o perando de de,pla=amien(o direc(o perando de de,pla=amien(o direc(o
Para crear un operando de de,pla=amien(o direc(o podemo, ,umar un de,pla=amien(o al
nom're una varia'le/ 6,(o no, permi(e acceder a u'icacione, de memoria .ue (al ve= no
(engan e(i.ue(a, e1pl-ci(a,/ 6mpecemo, con un arreglo de '7(e, llamado arreglo" arreglo" arreglo" arreglo"2
arregloE EF3E %"',."',7"',;"',<"'
!i u(ili=amo, 4+ con arreglo" arreglo" arreglo" arreglo" como operando de origen8 moveremo, de manera au(omB(ica
el primer '7(e en el arreglo2
mov al,arregloE 0 A4 ( %"'
Podemo, acceder al ,egundo '7(e en el arreglo8 ,umando 1 al de,pla=amien(o de arreglo" arreglo" arreglo" arreglo"2
mov al,BarregloEL%C 0 A4 ( ."'
Para acceder al (ercer '7(e8 le ,umamo, 22
mov al,BarregloEL.C 0 A4 ( 7"'
Cna e1pre,in como arreglo"E1 arreglo"E1 arreglo"E1 arreglo"E1 produce lo .ue ,e conoce como direccin efectiva8 al ,umar
una con,(an(e al de,pla=amien(o de la varia'le/ 9l encerrar una direccin efec(iva en(re
corc*e(e,8 indicamo, .ue la e1pre,in ,e u(ili=a para *acer referencia a una direccin de
memoria para o'(ener ,u con(enido/ 49!4 no re.uiere lo, corc*e(e,8 por lo la, ,iguien(e,
in,(ruccione, ,on e.uivalen(e,2
mov al,BarregloEL.C
mov al,arregloEL.
"omprobacin de rango 49!4 no (iene compro'acin de rango in(egrada para la,
direccione, efec(iva,/ !i e>ecu(amo, la ,iguien(e in,(ruccin8 el en,am'lador ,lo o'(iene un
'7(e de memoria fuera del arreglo/ 6l re,ul(ado e, un (raicionero error lgico8 por lo .ue
de'emo, ,er mu7 cuidado,o, al compro'ar la, referencia, de arreglo,2
2ov al,BarregloEL."C 0 A4 ( NN
Arreglo de tipo palabra y doble palabra 6n un arreglo de pala'ra, de 16 'i(,8 el
de,pla=amien(o de cada elemen(o del arreglo e, 2 '7(e, mB, adelan(e del an(erior/ Z,(a e, la
73

ra=n por la cual ,umamo, 2 a arreglo; arreglo; arreglo; arreglo; en el ,iguien(e e>emplo8 para llegar al ,egundo
elemen(o2
6data
arreglo, ,O-D %""',.""',7""'
6code
mov a1,arreglo, 0 A: ( %""'
mov a1,Barreglo,L.C 0 A: ( .""'
5e manera ,imilar8 el ,egundo elemen(o en un arreglo de (ipo do'le pala'ra ,e encuen(ra en 4
'7(e, mB, adelan(e del primero2
6data
arregloD D,O-D %""""',.""""'
6code
mov ea1,arregloD 0 EA: ( %""""'
mov ea1,BarregloDL;C 0 EA: ( .""""'

Programa de e>emplo (movimien(o,) Programa de e>emplo (movimien(o,) Programa de e>emplo (movimien(o,) Programa de e>emplo (movimien(o,)
6l ,iguien(e programa demue,(ra la ma7or par(e de lo, e>emplo, de (ran,ferencia, de da(o,
3I34E eemplo de transferencia de datos (2oves6asm)
0 Eemplo del capAtulo ;6 Demostracin de 2O) 5
0 :!\S con operando directos 5 desplazamiento directo
0 ]ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
6data
val% ,O-D %"""'
val. ,O-D ."""'
arregloE EF3E %"',."',7"',;"',<"'
arreglo, ,O-D %""',.""',7""'
75

arregloD D,O-D %""""',.""""'
6code
main proc
0 2O)[:
mov b1,"A/+E'
movz1 ea1,b1 0 EA: ( """"A/+E'
movz1 ed1,bl 0 ED: ( """"""+E'
movz1 c1,bl 0 !: ( ""+E'
0 2O)S:
mov b1,"A/+E'
movz1 ea1,b1 0 EA: ( $$$$A/+E'
movz1 ed1,bl 0 ED: ( $$$$$$+E'
mov bl,ME'
mov c1,bl 0 !: ( ""ME'
0 Intercambio de memoria a memoria*
mov a1,val% 0 A: ( %"""'
1c'g a1,val. 0 A: ( ."""', val. ( %"""'
mov val%,a1 0 val% ( ."""'
0 Direccionamiento con desplazamiento directo (arreglo de b5tes)*
mov al, arregloE 0 A4 ( %"'
mov al,BarregloEL%C 0 A4 ( ."'
mov al, BarregloEL.C 0 A4 ( 7"'
0 Direccionamiento con desplazamiento directo (arreglo de palabra)*
mov al,arreglo, 0 A: ( %""'
mov a1,Barreglo,L.C 0 A: ( .""'
0 Direccionamiento con desplazamiento directo (arreglo de dobles
palabras)*
76

mov ea1,arregloD 0 EA: ( %""""'
mov ea1,BarregloDL;C 0 EA: ( .""""'
mov ea1,BarregloDL3FPE arregloDC 0 EA: ( .""""'
e1it
main E8DP
E8D main
J6,(e programa no genera re,ul(ado, en la pan(alla






!uma 7 re,(a !uma 7 re,(a !uma 7 re,(a !uma 7 re,(a
3a ari(mD(ica e, un (ema 'a,(an(e e1(en,o en el lengua>e8 por lo .ue lo dividiremo, en pa,o,/
9.u- no, enfocaremo, en la ,uma 7 re,(a de en(ero, en el cap-(ulo 7 pre,en(aremo, la
mul(iplicacin 7 divi,in de en(ero,/ 6n el cap-(ulo 17 mo,(raremo, cmo reali=ar operacione,
ari(mD(ica, de pun(o flo(an(e8 con un con>un(o de in,(ruccione, comple(amen(e di,(in(o/
+amo, a empe=ar con #N0 (incremen(o)8 560 (decremen(o)8 9558 !C" 7 N6Y (negacin)/ 6l
(ema de cmo ,e ven afec(ada, la, 'andera, de e,(ado (9carreo8 !igno8 0ero8 e(c/)/
#n,(ruc #n,(ruc #n,(ruc #n,(ruccione, #N0 7 560 cione, #N0 7 560 cione, #N0 7 560 cione, #N0 7 560
3a, in,(ruccione, #N0 (incremen(o) 7 560 (decremen(o) ,uman 1 7 re,(an 1 de un ,olo
operando8 re,pec(ivamen(e8 la ,in(a1i, e,2
I8! regVmem
DE! regVmem
9 con(inuacin ,e mue,(ran alguno, e>emplo,2
6data
miPalabra ,O-D %"""'
6code
77

inc miPalabra 0 %""%'
mov b1,miPalabra
dec b1 0 %"""'
3a, 'andera, 5e,'ordamien(o8 !igno8 0ero8 9carreo au1iliar 7 Paridad cam'ian de acuerdo al
valor del operando de de,(ino/ No afec(an a la 'andera de 9carreo (lo cual e, un poco
,orprenden(e)/
#n,(ruccin 955
3a in,(ruccin 955 ,uma un operando de origen con uno de de,(ino del mi,mo (ama@o/ 3a
,in(a1i, e,[
ADD dest,origen
#rigen permanece ,in cam'io en la operacin 7 la ,uma ,e almacena en el operando de
de,(ino/ 6l con>un(o de po,i'le, operando, e, el mi,mo .ue para la in,(ruccin 4+/ $e a.u-
un e>emplo 'reve .ue ,uma do, en(ero, de 32 'i(,2


6data
var% D,O-D %""""'
var. D,O-D .""""'
6code
mov ea1,var% 0 EA: ( %""""'
add ea1,var. 0 EA: ( 7""""'
$anderas 3a, 'andera, 9carreo8 cero8 !igno8 5e,'ordamien(o8 9carreo au1iliar 7 Paridad
cam'ian de acuerdo con el valor del operando de de,(ino/
#n,(ruccin !C"
3a in,(ruccin !C" re,(a un operando de origen a un operando de de,(ino/ 6l con>un(o de
po,i'le, operacione, e, el mi,mo .ue para la in,(ruccin 955 7 4+/ 3a ,in(a1i, e,2
S9E dest,origen
$e a.u- un e>emplo 'reve de cdigo .ue ,e re,(a do, en(ero, de 32 'i(,2
6data
78

var% D,O-D 7""""'
var. D,O-D %""""'
6code
mov ea1, var% 0 EA: ( 7""""'
sub ea1,var. 0 EA: ( .""""'
Cna manera ,encilla de reali=ar una re,(a ,in (ener .ue crear nuevo, circui(o, digi(ale, e,
negar 7 de,puD, ,umar8 por e>emplo 4 :1 puede in(erpre(ar,e como 4 E (:1)/ Para lo, nAmero,
nega(ivo, ,e u(ili=a la no(acin de complemen(o, a do,8 por lo .ue :1 ,e repre,en(a median(e
111111112





9carreo 1 1 1 1 1 1
& & & & & 1 & &

1 1 1 1 1 1 1 1
E
& & & & & & 1 1

$anderas 3a, 'andera, 9carreo8 0ero8 !igno8 5e,'ordamien(o8 9carreo au1iliar 7 Paridad
cam'ian de acuerdo con el valor del operando de de,(ino/
#n,(ruccin N6Y #n,(ruccin N6Y #n,(ruccin N6Y #n,(ruccin N6Y
3a in,(ruccin N6Y (negacin) invier(e el ,igno de un nAmero convir(iDndolo en ,u
complemen(o a do,/ !e permi(en lo, ,iguien(e, operando,2
8ES reg
8ES mem
79

(Para calcular el complemen(o de a do, de un nAmero ,e invier(en (odo, lo, 'i( en el operando
de de,(ino 7 ,e le ,uma 1)
"andera, 3a, 'andera, 9carreo8 0ero8 !igno8 5e,'ordamien(o8 9carreo au1iliar 7 paridad
cam'ian de acuerdo con el valor de operando de de,(ino/
#mplemen(acin de e1pre,ione, ari(mD(ica,
9rmado con la, in,(ruccione, 9558 !C" 7 N6Y8 (enemo, lo, medio, para implemen(ar
e1pre,ione,8 ari(mD(ica, .ue involucran la ,uma8 re,(a 7 negacin en lengua>e en,am'lador/
6n o(ra, pala'ra,8 uno puede ,imular lo .ue un compilador en 0EE podr-a *acer al leer una
e1pre,in como2
val< R :valH E ( valK \ valI)[




!e u(ili=an la, ,iguien(e, varia'le, de 32 'i(,2
val- SD,O-D N
val: SD,O-D ./
valF SD,O-D 7"
val[ SD,O-D ;"
9l (raducir una e1pre,in8 ,e evalAa cada (Drmino por ,eparado 7 ,e com'inan lo, (Drmino, al
final/ Primero8 negamo, una copia de valH valH valH valH2
0 primer t^rmino* Kval:
mov ea1,val:
neg ea1 0 EA: ( K./
5e,puD, valK valK valK valK ,e copia a un regi,(ro 7 ,e re,(a valI valI valI valI2
mov eb1,valF
sub eb1,val[ 0 EE: ( K%"
Por ?ltimo, se suman los dos t^rminos (en EA: 5 EE:)*
add ea1,eb1
8:

mov val-,ea1 0 val- ( K7/
"andera, "andera, "andera, "andera, afec(ada, por la ,uma 7 la re,(a afec(ada, por la ,uma 7 la re,(a afec(ada, por la ,uma 7 la re,(a afec(ada, por la ,uma 7 la re,(a
9l e>ecu(ar in,(ruccione, ari(mD(ica,8 a menudo e, convenien(e ,a'er algo acerca del
re,ul(ado/ Q6, nega(ivo8 po,i(ivo o ceroM Q6, dema,iado grande o dema,iado pe.ue@o para
ca'er en el operador de de,(inoM 3a, re,pue,(a, a (ale, pregun(a, no, pueden a7udar a
de(ec(ar errore, de cBlculo .ue de o(ra manera podr-an oca,ionar un compor(amien(o errB(ico/
C(ili=amo, lo, valore, de la, 'andera, de e,(ado de la 0PC para compro'ar el re,ul(ado de la,
operacione, ari(mD(ica,/ Tam'iDn u(ili=amo, lo, valore, de 'andera, de e,(ado para ac(ivar
in,(ruccione, de 'ifurcacin condicional8 la, *erramien(a, 'B,ica, de la lgica de
programacin/ $e a.u- un 'reve vi,(a=o a la, 'andera, de e,(ado/ 4B, adelan(e la, veremo,
con de(alle2
3a 'andera de 9carreo indica un de,'ordamien(o de en(ero, ,in ,igno/ Por e>emplo8 ,i
una in,(ruccin (iene un operando de de,(ino de 8 'i(,8 pero genera un re,ul(ado
ma7or .ue el 11111111 'inario8 ,e ac(iva la 'andera 9carreo/
3a 'andera de 5e,'ordamien(o indica un de,'ordamien(o de en(ero, con ,igno/ Por
e>emplo8 ,i una in,(ruccin (iene un operando de de,(ino de 16 'i(,8 pero genera un
re,ul(ado nega(ivo menor .ue el nAmero :327688 ,e ac(iva la 'andera de
5e,'ordamien(o/
3a 'andera 0ero indica .ue una operacin produ>o cero como re,ul(ado/ Por e>emplo8
,i ,e re,(a un operando de o(ro de igual valor8 ,e ac(iva la 'andera 0ero/
3a 'andera !igno indica .ue una operacin produ>o un re,ul(ado nega(ivo/ !i ,e ac(iva
el 'i( mB, ,ignifica(ivo de operando de de,(ino8 ,e ac(iva la 'andera !igno/
3a 'andera Paridad cuen(a el nAmero de 'i(, .ue ,on 1 en el '7(e meno, ,ignifica(ivo
del operando de de,(ino/
3a 'andera de 9carreo au1iliar ,e ac(iva cuando un 'i( 1 ,e acarrea *acia fuera de la
po,icin 3 en el '7(e meno, ,ignifica(ivo del operando de,(ino/
peracione, ,in ,igno2 0ero8 9carreo 7 9carreo au1iliar
3a 'andera 0ero ,e ac(iva cuando el re,ul(ado de una operacin ari(mD(ica e, cero/ 3o,
,iguien(e, e>emplo, mue,(ran el e,(ado del regi,(ro de de,(ino 7 de la 'andera 0ero8 de,puD,
de e>ecu(ar la, in,(ruccione, !C"8 #N0 7 560
mov ec1,%
sub ec1,% 0 E!: ( ", [$ ( %
mov ea1,"$$$$$$$$'
inc ea1 0 EA: ( ", [$ ( %
inc ea1 0 EA: ( %, [$ ( "
dec ea1 0 EA: ( ", [$ ( %
8"

4a suma 5 la banderas Acarreo 3a operacin de 'andera 9carreo e, mB, fBcil de
e1plicar ,i con,ideramo, la ,uma 7 re,(a por ,eparado/ 0uando ,e ,uman do, en(ero, ,in
,igno8 la 'andera 9carreo e, una copia del acarreo .ue ,ale del 4!" ('i( mB, ,ignifica(ivo) del
operando de de,(ino/ Por in(uicin8 podemo, decir .ue 0F R 1 cuando la ,uma e1cede al
(ama@o de almacenamien(o de ,u operando de de,(ino/ 6n el ,iguien(e e>emplo8 955 ac(iva la
'andera de 9carreo8 de'ido a .ue la ,uma (1&&*) e, dema,iado grande para 932
mov al,"$$'
add al,% 0 A4 ( "", !$ ( %




3a ,iguien(e figura mue,(ra lo .ue ocurre a nivel de 'i(, cuando ,e ,uma 1 a &FF*/ 6l acarreo
.ue ,ale de la po,icin del 'i( mB, al(o de 93 (4!") ,e copia en la 'andera de 9carreo2
("i( de 9carreo) 1 1 1 1 1 1 1 1
1
1 1 1 1 1 1 1 1

& & & & & & & &
E
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
Por o(ro lado8 ,i ,e ,uma 1 a &&FF* en 9H8 la ,uma ca'e fBcilmen(e en 16 'i(, 7 la 'andera
9carreo ,e 'orra2
mov a1,""$$'
add a1,% 0 A: ( "%""', !$ ( "
Pero ,i ,e ,uma 1 a FFFF* en el regi,(ro 9H8 ,e genera un 9carreo *acia fuera de la po,icin
del 'i( ,uperior de 9H2
mov a1,"$$$$'
add a1,% 0 A: ( """", !$ ( %
%a resta y la bandera de Acarreo Cna operacin de re,(a ac(iva la 'andera de 9carreo
cuando ,e re,(a un en(ero ,in ,igno mB, grande de uno mB, pe.ue@o/ 6, mB, fBcil con,iderar
8#

el efec(o de la re,(a ,o're la 'andera 9carreo de,de un pun(o de vi,(a relacionado con el
*ard%are/ +amo, a ,uponer por un momen(o .ue la 0PC puede negar un en(ero po,i(ivo ,in
,igno8 formando ,u complemen(o a do,2
1/ 6l operando de origen ,e niega 7 ,e ,uma al de,(ino/
2/ 6l acarreo .ue ,ale de 4!" ,e invier(e 7 ,e copia a la 'andera 9carreo/






+amo, a re,(ar 2 de 18 como operando, de 8 'i(,/ 5e,puD, de negar el 28 ,umamo, lo,
en(ero,2
& U:
& & & & & & & 1
E
1 1 1 1 1 1 1 1

SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

& & & & & & 1 1
3a ,uma (255) no e, vBlida/ 6l acarreo .ue ,ale del 'i( 7 ,e invier(e 7 ,e coloca en la 'andera
9carreo8 por lo .ue 0F R 1/ $e a.u- el corre,pondien(e cdigo en en,am'lador2
mov al,%
sub al,. 0 A4 ( $$', !$ ( %



Las instrucciones IF- ' @;- no a$ectan a la bandera /carreo. =i se aplica F;G a un operando
distinto de cero& siempre se activa la bandera /carreo.
81

Acarreo auxiliar 3a 'andera de 9carreo au1iliar (90) indica un acarreo o prD,(amo ('orro%) en
el 'i( 3 del operando de de,(ino/ !e u(ili=a principalmen(e en la ari(mD(ica con nAmero,
decimale, codificado, en 'inario ("05)8 pero puede u,ar,e en o(ro, con(e1(o,/ !upongamo,
.ue ,umamo, 1 a &F*/ 3a ,uma (1&*) con(iene un 1 en la po,icin del 'i( 4 .ue ,e acarre de
la po,icin del 'i( 32
mov al ,"$'
add al,% 0 A! ( %
$e a.u- la ari(mD(ica2
" " " " % % % %
L " " " " " " " %
KKKKKKKKKKKKKKKKKKKKK
" " " % " " " "
Paridad 3a 'andera paridad (PF) ,e ac(iva cuando el '7(e meno, ,ignifica(ivo del de,(ino (iene
un nAmero par de 'i(, .ue ,on 1/ 3a, ,iguien(e, in,(ruccione, 955 7 !C" al(eran la paridad de
932
mov al,%"""%%""b
add al,""""""%"b 0 A4 ( %"""%%%", P$ ( %
sub al,%"""""""b 0 A4 ( """"%%%", P$ ( "
5e,puD, de la in,(ruccin 9558 93 con(iene el nAmero 'inario 1&&&111& (cua(ro 'i(, & 7
cua(ro 'i(, 1)8 7 PF R 1/ 5e,puD, de !C"8 93 con(iene un nAmero impar de 'i(, 18 por lo .ue PF
R &/
peracione, con peracione, con peracione, con peracione, con ,igno2 'andera, !igno 7 5e,'ordamien(o ,igno2 'andera, !igno 7 5e,'ordamien(o ,igno2 'andera, !igno 7 5e,'ordamien(o ,igno2 'andera, !igno 7 5e,'ordamien(o
$andera signo 3a 'andera ,igno ,e ac(iva cuando el re,ul(ado de una operacin ari(mD(ica
con ,igno e, nega(ivo/ 6l ,iguien(e e>emplo re,(a un en(ero mB, grande (5) de un en(ero mB,
pe.ue@o (4)2
mov ea1,;
sub ea1,< 0EA: ( K%, S$ ( %
5e,de el pun(o de vi,(a mecBnico8 la 'andera !igno e, una copia del 'i( ,uperior del operando
de de,(ino/ 6l ,iguien(e e>emplo mue,(ra lo, valore, *e1adecimale, de "3 cuando ,e genera
un re,ul(ado nega(ivo2
mov bl,% 0 E4 ( "%'
83

sub bl,. 0 E4 ( $$' (K%)
Eandera desbordamiento 3a 'andera de 5e,'ordamien(o ,e ac(ive cuando el re,ul(ado
de una operacin ari(mD(ica con ,igno provoca .ue el operando de de,(ino (enga un
de,'ordamien(o por e1ce,o (overflo%) o por defec(o (underflo%)/ Por e>emplo8 del cap-(ulo 1
,a'emo, .ue el valor de '7(e en(ero con ,igno mB, grande po,i'le e, E127 ,i ,e le ,uma uno
,e produce de,'ordamien(o por e1ce,o (overflo%)2
mov al,L%.M
add al,% 0 O$ ( %
5e manera ,imilar el valor de '7(e en(ero con ,igno mB, pe.ue@o po,i'le :128/ !i le re,(amo,
18 ,e produce un de,'ordamien(o por defec(o (underflo%)/ 6l valor del operando de de,(ino no
almacena un re,ul(ado ari(mD(ico vBlido8 por lo .ue ,e ac(iva la 'andera 5e,'ordamien(o2
mov al, K%.#
sub al,% 0 O$ (%
%a prueba de suma $a7 una manera mu7 ,encilla de ,a'er ,i *a ocurrido un de,'ordamien(o
con ,igno cuando ,e ,uman do, operando,/ 6l de,'ordamien(o ocurre cuando2
5o, operando, po,i(ivo, generan una ,uma nega(iva/
5o, operando, nega(ivo, generan una ,uma po,i(iva/
6l de,'ordamien(o nunca ,e produce cuando lo, ,igno, de lo, do, operando, de la ,uma ,on
di,(in(o,/
"mo el hard&are detecta el desbordamiento 3a 0PC u(ili=a un in(ere,an(e mecani,mo
para de(erminar el e,(ado de la 'andera 5e,'ordamien(o8 5e,puD, de una operacin de ,uma
o re,(a/ 9l 'i( .ue ,e acarrea *acia fuera del 4!" ("i( mB, ,ignifica(ivo) de un operando ,e le
aplica un < e1clu,ivo con el 'i( .ue ,e acarrea *acia el 4!"/ 6l valor re,ul(an(e ,e coloca en
la 'andera 5e,'ordamien(o/ Por e>emplo8 al ,umar lo, en(ero, 'inario, de 8 'i(, 1&&&&&&& 7
1111111& no ,e produce ningAn acarreo *acia el 'i( 7 (4!")8 pero ,- *a7 un acarreo del 'i( 7
a la 'andera 9carreo2
JNo *a7 acarreo del 'i( 6 al 7
7 6 5 4 3 2 1 &
1 & & & & & &
&
E1 1 1 1 1 1 1
&
& 1 1 1 1 1 1
85

&

6n o(ra, pala'ra, la operacin 1 H< & produce &F R 1/
'nstruccin () 3a in,(ruccin N6Y produce un re,ul(ado invBlido ,i el operando de de,(ino
no puede almacenar,e en forma correc(a/ Por e>emplo8 ,i movemo, :128 a 93 7 (ra(amo, de
negarlo8 el valor correc(o (E128) no ca'rB en 938 3a 'andera 5e,'ordamien(o ,e ac(iva8
indicando .ue 93 con(iene un valor invBlido2
mov al,K%.# 0 A4 ( %""""""""b
neg al 0 A4 ( %""""""""b, O$ ( %
Por o(ro lado8 ,i E127 ,e niega8 el re,ul(ado e, vBlido 7 la 'andera 5e,'ordamien(o ,e 'orra2
mov al,L%.M 0 A4 ( "%%%%%%%%b
neg al 0 A4 ( %"""""""%b, O$ ( "

Programa de e>emplo (!uma<e,(a3) Programa de e>emplo (!uma<e,(a3) Programa de e>emplo (!uma<e,(a3) Programa de e>emplo (!uma<e,(a3)
6l ,iguien(e programa implemen(a varia, e1pre,ione, ari(mD(ica,8 u,ando in,(ruccione, 9558
!C"8 #N08 560 7 N6Y8 7 mue,(ra cmo ,e ven afec(ada, cier(a, 'andera, de e,(ado2
3I34E suma 5 resta (AddSub76asm)
0 Eemplo del capAtulo ;6 Demostracin de instrucciones
0 ADD, S9E, I8!, DE! 5 8ES, 5 la manera en
0 @ue afectan a las banderas de estado de la !P96
0 ?ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
6data
val- SD,O-D N
val: SD,O-D ./
valF SD,O-D 7"
val[ SD,O-D ;"
6code
86

main P-O!
0 I8! 5 DE!
mov a1,%"""'
inc a1 0 %""%'
dec a1 0 %"""'
0 E1presin* )al- ( Kval: L (valF _ val[)
mov ea1,val:
neg ea1 0 K./
mov eb1,valF
sub eb1,val[ 0 K%"
add ea1,eb1
mov val-,ea1 0 K7/
0 Eemplo de la bandera !ero*
mov c1,%
sub c1,% 0 [$ ( %
mov a1,"$$$$'
inc a1 0 [$ ( %
0 Eemplo de la bandera Signo*
mov c1,"
sub c1,% 0 S$ ( %
mov a1, M$$$'
add a1,. 0 S$ ( %
0 E`emplo de bandera Acarreo
mov al,"$$'
add al,% 0 !$ ( %, A4 ( ""
0 Eemplo de la bandera Desbordamiento*
87

mov al,L%.M
add al,% 0 "$ ( %
mov al,K%.#
sub al,% 0 "$ ( %
e1it
main E8DP
E8D main




peradore, 7 direc(iva, relacionada, con lo, da(o, peradore, 7 direc(iva, relacionada, con lo, da(o, peradore, 7 direc(iva, relacionada, con lo, da(o, peradore, 7 direc(iva, relacionada, con lo, da(o,
3o, operadore, 7 la, direc(iva, no ,on in,(ruccione, e>ecu(a'le,[ en ve= de e,o8 el
en,am'lador la, in(erpre(a/ Podemo, u,ar varia, direc(iva, de 49!4 para o'(ener
informacin acerca de la, direccione, 7 carac(er-,(ica, de (ama@o de lo, da(o,2
6l operador FF!6T devuelve la di,(ancia de una varia'le8 a par(ir del inicio de ,u
,egmen(o circulan(e/
6l operador PT< no, permi(e redefinir el (ama@o prede(erminado de una varia'le/
6l operador TKP6 devuelve el (ama@o (en '7(e,) de un operando8 o cada elemen(o en
un arreglo/
6l operador 36NYT$F devuelve el nAmero de elemen(o, en un arreglo/
6l operador !#I6F devuelve el nAmero de '7(e, u(ili=ado, por un iniciali=ador de
arreglo,/
9demB, la direc(iva 39"63 proporciona una manera de redefinir la mi,ma varia'le con
di,(in(o, a(ri'u(o, de (ama@o/ 3o, operadore, 7 la, direc(iva, en e,(e cap-(ulo repre,en(an
,lo un pe.ue@o ,u'con>un(o de operadore, .ue ,opor(a 49!4/



perador FF!6T perador FF!6T perador FF!6T perador FF!6T
</=< sigue o$reciendo soporte para la directiva *eredadas L;FG4 +en vez de L;FG4A2, ' =I];
+en vez de =I];A2,.
88

6l operador FF!6T devuelve el de,pla=amien(o de una e(i.ue(a de da(o,/ 6l de,pla=amien(o
repre,en(a la di,(ancia (en '7(e,) de la e(i.ue(a8 a par(ir del inicio del ,egmen(o de da(o,)/ 6n
modo pro(egido8 lo, de,pla=amien(o, ,on de 32 'i(,/ 6n modo direccionamien(o real8 lo,
de,pla=amien(o, ,on de 16 'i(,/
6>emplo de FF!6T 6>emplo de FF!6T 6>emplo de FF!6T 6>emplo de FF!6T
6n el ,iguien(e e>emplo8 declaramo, (re, (ipo, di,(in(o, de varia'le,2
6data
valE EF3E N
val, ,O-D N
valD D,O-D N
valD. D,O-D N
!i val" val" val" val" ,e encon(rara en el de,pla=amien(o &&4&4&&& (*e1adecimal)8 el operador FF!6T
devolver-a lo, ,iguien(e, valore,2
mov esi,O$$SE3 valE 0 ESI ( "";";"""
mov esi,O$$SE3 val, 0 ESI ( "";";""%
mov esi,O$$SE3 valD 0 ESI ( "";";""7
mov esi,O$$SE3 valD. 0 ESI ( "";";""M
FF!6T (am'iDn puede aplicar,e a un operando de de,pla=amien(o direc(o/ !upongamo, .ue
mi9rreglo mi9rreglo mi9rreglo mi9rreglo con(iene cinco pala'ra, de 16 'i(,/ 3a ,iguien(e in,(ruccin 4+ o'(iene el
de,pla=amien(o de mi9rreglo mi9rreglo mi9rreglo mi9rreglo8 le ,uma 4 7 mueve la ,uma a 6!#2
6data
miArreglo ,O-D %,.,7,;,<
6code
mov esi,O$$SE3 miArreglo L ;
5irec(iva 93#YN 5irec(iva 93#YN 5irec(iva 93#YN 5irec(iva 93#YN
3a direc(iva 93#YN alinea una varia'le a un l-mi(e definido por '7(e8 pala'ra8 do'le pala'ra o
pBrrafo/ 3a ,in(a1i, e,2
A4IS8 lmite
%mite puede ,er 18 28 4 o 16/ Cn valor de 1 alinea a la ,iguien(e varia'le en un l-mi(e de 1 '7(e
(el valor prede(erminado)/ !i el l-mi(e e, de 28 la ,iguien(e varia'le ,e alinea en una direccin
89

con numeracin par/ !i el l-mi(e e, 48 la ,iguien(e direccin e, un mAl(iplo de 4/ !i el l-mi(e e,
168 la ,iguien(e direccin e, un mAl(iplo de 168 un l-mi(e de pBrrafo/ 6l en,am'lador puede
in,er(ar uno o mB, '7(e, vacio, an(e, de la varia'le para corregir la alineacin/ QPor .uD
mole,(ar,e en alinear lo, da(o,M Por.ue la 0PC puede proce,ar lo, da(o, almacenado, en
direccione, con numeracin par mB, rBpido .ue la, direccione, con numeracin impar/
6n la ,iguien(e revi,in de un e>emplo de la ,eccin 48 val" val" val" val" ,e encuen(ra de manera ar'i(raria
en el de,pla=amien(o &&4&4&&&/ 9l in,er(ar la direc(iva 93#YN 2 an(e, de val; val; val; val;8 ,e le a,igna
un de,pla=amien(o con numeracin par2
valE EF3E N 0 "";";"""
A4IS8 .
val, ,O-D N 0 "";";"".
valE. EF3E N 0 "";";"";
A4IS8 ;
valD D,O-D N 0 "";";""#
valD. D,O-D N 0 "";";""!
',erve .ue val5 val5 val5 val5 *u'iera e,(ado en el de,pla=amien(o &&4&4&&58 pero la direc(iva 93#YN 4
lo cam'i al de,pla=amien(o &&4&4&&8/
perador PT< perador PT< perador PT< perador PT<
Podemo, u(ili=ar el operador PT< para redefinir el (ama@o declarado de un operando/ 6,(o ,lo
e, nece,ario cuando (ra(amo, de acceder a la varia'le median(e un a(ri'u(o de (ama@o
di,(in(o al .ue u(ili=amo, para declarar la varia'le/ Por e>emplo8 ,upongamo, .ue de,eamo,
mover *acia 9H lo, 16 'i(, inferiore, de una varia'le de una varia'le (ipo do'le pala'ra
llamado mi5o'le mi5o'le mi5o'le mi5o'le/ 6l en,am'lador no permi(irB el ,iguien(e movimien(o 7a .ue lo, (ama@o, de
lo, operando, no coinciden2
6data
miDoble D,O-D %.7;</M#'
6code
mov a1,miDoble 0 error
Pero el operador ;<5 PT< *ace po,i'le el movimien(o de la pala'ra de menor orden(5678*)
a 9H2
mov a18;<5 PT< mi5o'le
9:

QPor .uD no ,e movi el nAmero 1234* a 9HM #n(el u(ili=a el forma(o de almacenamien(o %ittle
endian8 en el cual el '7(e de menor orden ,e almacena en la direccin inicial de la varia'le/ 6n
la ,iguien(e figura8 ,e mue,(ra la di,(ri'ucin de la memoria mi5o'le mi5o'le mi5o'le mi5o'le de (re, forma,2 primero
como do'le pala'ra8 de,puD, como do, pala'ra, (5678*)8 7 por Al(imo como cua(ro '7(e,
(78*8 56*8 34*8 12*)2

3a 0PC puede acceder a la memoria en cual.uiera de e,(a, (re, forma,8 independien(emen(e
de la manera en .ue ,e defina una varia'le/ Por e>emplo8 ,i mi5o'le mi5o'le mi5o'le mi5o'le empie=a en el
de,pla=amien(o &&&&8 el valor de 16 'i(, almacenado en e,a direccin e, 5678*/ Tam'iDn
podr-amo, o'(ener 1234*8 la pala'ra en la u'icacin mi5o'leE2 mi5o'leE2 mi5o'leE2 mi5o'leE28 u,ando la ,iguien(e
in,(ruccin2
mov a1,,O-D P3- BmiDobleL.C 0 %.7;'
5e manera ,imilar podr-amo, u,ar el operador "KT6 PT< para mover un '7(e individual de
mi5o'le a "32
mov bl,EF3E P3- miDoble 0 M#'
',erve .ue PT< de'e u,ar,e en com'inacin con uno de lo, (ipo, de da(o, e,(Bndar del
en,am'lador2 "KT68 !"KT68 ;<58 !;<58 5;<58 !5;<58 F;<58 L;<5 o T6<9"KT6/
Mover valores m*s pe+ue,os a destinos m*s grandes 6n alguna, oca,ione, ,erB
nece,ario mover do, valore, mB, pe.ue@o, de memoria *acia un operando de de,(ino mB,
grande8 6n el ,iguien(e e>emplo8 la primera pala'ra ,e copia a la mi(ad inferior de 69H 7 la
,egunda pala'ra ,e copia a la mi(ad ,uperior/ 6l operador 5;<5 PT< *ace e,(o po,i'le2
6data
listaPalabras ,O-D </M#', %.7;'
6code
mov ea1,D,O-D P3- listaPalabras 0 EA: ( %.7;</M#'
9"

perador TKP6 perador TKP6 perador TKP6 perador TKP6
6l operador TKP6 devuelve el (ama@o en '7(e, de un ,olo elemen(o de una varia'le/ Por
e>emplo8 el (ipo (TKP6) de un '7(e e, igual a 18 el (ipo de una pala'ra e, igual a 28 el (ipo de
una do'le pala'ra e, 4 7 el (ipo de una pala'ra cuBdruple e, 8/ $e a.u- e>emplo, de cada uno2
6data
var% EF3E N
var. ,O-D N
var7 D,O-D N
var; R,O-D N


61pre,in 61pre,in 61pre,in 61pre,in +alor +alor +alor +alor
TKP6 var1 1
TKP6 var2 2
TKP6 var3 3
TKP6 var4 4

perador 36NYT$F perador 36NYT$F perador 36NYT$F perador 36NYT$F
6l operador 36NYT$F cuen(a el nAmero de elemen(o, de un arreglo8 definido por lo, valore,
.ue aparecen en la mi,ma l-nea .ue ,u e(i.ue(a/ C(ili=aremo, lo, ,iguien(e, da(o, por
e>emplo2
6data
b5te% EF3E %",.",7"
arreglo% ,O-D 7" D9P(N),","
arreglo. ,O-D < D9P(7 D9P(N))
arreglo7 D,O-D %,.,7,;
cadDigitos EF3E O%.7;</M#P,"
9#

0uando ,e u(ili=an operadore, 5CP anidado, en la definicin de un arreglo8 36NYT$F
devuelve el produc(o de lo, do, con(adore,/ 3a ,iguien(e (a'la pre,en(a lo, valore, devuel(o,
por cada e1pre,in 36NYT$F2
61pre,in 61pre,in 61pre,in 61pre,in +alor +alor +alor +alor
36NYT$F '7(e1 3
36NYT$F arreglo1 3& E 2
36NYT$F arreglo2 5 J 3
36NYT$F arreglo3 4
36NYT$F cad5igi(o, P

!i ,e declara un arreglo .ue a'arca varia, l-nea, de programa8 36NYT$F ,lo relaciona lo,
da(o, de la primera l-nea como par(e del arreglo8 en el ,iguien(e e>emplo8 36NYT$F mi9rreglo
devuelve el valor 5
miArreglo EF3E %",.",7",;",<"
EF3E /",M",#",+",%""
5e manera al(erna(iva8 ,e puede (erminar la primera l-nea como una coma 7 con(inuar la li,(a
de iniciali=adore, en la ,iguien(e l-nea/ 6n el ,iguien(e e>emplo8 36NYT$F mi9rreglo devuelve
el valor 1&
miArreglo EF3E %",.",7",;",<",
EF3E /",M",#",+",%""
perador !#I6F perador !#I6F perador !#I6F perador !#I6F
6l operador !#I6F devuelve el valor .ue e.uivale mul(iplicar 36NYT$F por TKP6/ Por
e>emplo8 arreglo#n( arreglo#n( arreglo#n( arreglo#n( (iene lo, valore, TKP6 R 2 7 36NYT$F 32/ Por lo (an(o8 !#I6F arreglo#n( arreglo#n( arreglo#n( arreglo#n(
e, igual a 642
6data
arregloInt ,O-D 7. D9P(")
6code
mov ea1,SI[EO$ arregloInt 0 EA: ( /;
5irec(iva 39"63 5irec(iva 39"63 5irec(iva 39"63 5irec(iva 39"63
91

3a direc(iva 39"63 no, permi(e in,er(ar una e(i.ue(a 7 proporcionarle un a(ri'u(o de (ama@o
,in a,ignar e,pacio de almacenamien(o/ 0on 39"63 puede u,ar,e (odo, lo, a(ri'u(o, de
(ama@o e,(Bndar8 como "KT68 ;<58 L;<5 o T"KT6/ Cn u,o comAn de 39"63 e, para
proporcionar un nom're 7 a(ri'u(o de (ama@o al(erna(ivo, para la varia'le .ue ,e declara a
con(inuacin en el ,egmen(o de da(o,/ 6n el ,iguien(e e>emplo8 declaramo, una e(i.ue(a
llamada val val val val1 11 16 66 6 >u,(o an(e, de val32 val32 val32 val328 7 le damo, un a(ri'u(o ;<52
6data
val%/ 4AEE4 ,O-D
val7. D,O-D %.7;</M#'
6code
mov a1,val%/ 0 A: ( </M#'
mov d1,Bval%/L.C 0 D: ( %.7;'
val16 val16 val16 val16 e, un alia, para la mi,ma la mi,ma u'icacin de almacenamien(o llamada val32 val32 val32 val32/ 3a
direc(iva 39"63 en ,- no a,igna e,pacio de almacenamien(o/
9lguna, vece, e, nece,ario con,(ruir un en(ero mB, grande a par(ir de do, en(ero, mB,
pe.ue@o,/ 6n el ,iguien(e e>emplo8 ,e carga un valor de 32 'i(, en 69H8 a par(ir de do,
varia'le, de 16 'i(,2
6data
)alor4argo 4AEE4 D,O-D
val% ,O-D </M#'
val. ,O-D %.7;'
6code
mov ea1,)alor4argo 0 EA: ( %.7;</M#'
5ireccionamien(o indirec(o 5ireccionamien(o indirec(o 5ireccionamien(o indirec(o 5ireccionamien(o indirec(o
6l direccionamien(o indirec(o no e, prBc(ico para el proce,amien(o de arreglo,/ 4u7 rara,
vece, e, nece,ario proporcionar una e(i.ue(a Anica para cada elemen(o de arreglo/ No e,
convenien(e u(ili=ar de,pla=amien(o, con,(an(e, para direccionar mB, de uno, cuan(o,
elemen(o, de arreglo/ 3a Anica forma prBc(ica de mane>ar un arreglo e, u(ili=ar un regi,(ro
como apun(ador (conocido como direccionamiento indirecto) 7 manipular el valor de e,e
regi,(ro/ 0uando un operando u(ili=a el direccionamien(o indirec(o8 ,e llama operando
indirecto/
perando, indirec(o, perando, indirec(o, perando, indirec(o, perando, indirec(o,
93

4odo pro(egido Cn operando indirec(o puede ,er cual.uier regi,(ro de prop,i(o general de 32
'i(, (69H8 6"H8 60H8 65H8 6!#8 65# 7 6!P) encerrado en(re corc*e(e,/ !e a,ume .ue el regi,(ro
de'e con(ener el de,pla=amien(o de cier(o, da(o,/ 6n el ,iguien(e e>emplo8 6!# con(iene el
de,pla=amien(o de val1 val1 val1 val1/ 3a in,(ruccin 4+ u(ili=a el operando indirec(o como origen8 el
de,pla=amien(o en 6!# ,e emplea para poder *acer referencia a la direccin de memoria 7 ,e
mueve un '7(e a 932
6data
val% EF3E %"'
6code
mov esi,O$$SE3 val%
mov al,BesiC 0 A4 ( %"'
!i el operando de de,(ino u(ili=a el direccionamien(o indirec(o8 ,e coloca un nuevo valor en
memoriam en la u'icacin a la .ue apun(a el regi,(ro2
mov BesiC,bl
Modo de direccionamiento real 6n el modo8 un regi,(ro de 16 'i(, almacena el
de,pla=amien(o de una varia'le/ !i el regi,(ro ,e u(ili=a como un operando indirec(o8 ,lo
puede ,er !#8 5#8 "H o "P/ Por lo general8 evi(amo, u,ar el regi,(ro "P8 7a .ue direcciona a la
pila en ve= del ,egmen(o de da(o,/ 6n el ,iguien(e e>emplo8 !# *ace referencia a val1 val1 val1 val12
6data
val% EF3E %"'
6code
main P-O!
inicio
mov si,O$$SE3 val%
mov al,BsiC 0 al ( %"'
rror de proteccin general 6n modo pro(egido8 ,i la direccin efec(iva apun(a a una a un
Brea fuera del ,egmen(o de da(o, de nue,(ro programa8 la 0PC e>ecu(a un error de proteccin
general (YP)/ 6,(o ocurre inclu,o aun.ue una in,(ruccin no modifi.ue la memoria8 Por
e>emplo8 ,i 6!# no ,e iniciali=ara8 la ,iguien(e in,(ruccin pro'a'lemen(e generarB un error de
pro(eccin general2
mov a1,BesiC
95

!iempre *a7 .ue iniciali=ar lo, regi,(ro, an(e, de u,arlo, como operando, indirec(o,/ 3o
mi,mo ,e aplica a la programacin en lengua>e de al(o nivel con ,u'-ndice, 7 apun(adore,/ 3o,
errore, de pro(eccin general no ocurren en el modo de direccionamien(o real8 el cual *ace
.ue lo, operando, indirec(o, ,in iniciali=ar ,ean dif-cile, de de(ec(ar/
Uso de P-. con operandos indirec(o, Tal ve= el (ama@o de un operando no e,(D claro de,de
el con(e1(o de una in,(ruccin/ 3a ,iguien(e in,(ruccin *ace .ue el en,am'lador genere un
error de (ipo ]el operando de'e (ener un (ama@oW2
inc BesiC
6l en,am'lador no ,a'e ,i 6!# apun(a a un '7(e8 una pala'ra8 una do'le pala'ra o cual.uier
o(ro (ama@o/
6l operador PT< aclara el (ama@o del operando2
inc EF3E P3- BesiC

9rreglo, 9rreglo, 9rreglo, 9rreglo,
3o, operando, indirec(o, ,on A(ile, al manera arreglo,8 7a .ue el valor de un operando
indirec(o puede modificar,e en (iempo de e>ecucin/ 5e manera ,imilar al ,u'-ndice de un
arreglo8 lo, operando, indirec(o, pueden apun(ar a di,(in(o, elemen(o, del arreglo/ 6n el
,iguien(e e>emplo8 arreglo" arreglo" arreglo" arreglo" con(iene 3 '7(e,/ Podemo, incremen(ar 6!# 7 *acer .ue apun(e a
cada '7(e8 en orden2
6data
arregloE EF3E %"',."',7"'
6code
mov esi,O$$SE3 arregloE
mov al,BesiC 0 A4 ( %"'
inc esi
mov al,BesiC 0 A4 ( ."'
inc esi
mov al,BesiC 0 A4 ( 7"'
!i u(ili=amo, un arreglo de en(ero, de 16 'i(,8 ,umamo, 2 a 6!# para direccionar cada
elemen(o ,u',iguien(e del arreglo2
6data
96

arreglo, ,O-D %"""',."""',7"""'
6code
mov esi,O$$SE3 arreglo,
mov a1,BesiC 0 A: ( %"""'
add esi,.
mov a1,BesiC 0 A: ( ."""'
add esi,.
mov a1,BesiC 0 A: ( 7"""'
!upongamo, .ue arreglo; arreglo; arreglo; arreglo; ,e encuen(ra en el de,pla=amien(o 1&2&&*/ 3a ,iguien(e
in,(ruccin mue,(ra a 6!# en relacin con lo, da(o, del arreglo2

6>emplo2 ,uma de en(ero, de 32 'i(, 6l ,iguien(e e1(rac(o de un programa ,uma (re, do'le,
pala'ra,/ 5e'e ,umar,e un de,pla=amien(o de 4 para cada valor ,u',iguien(e del arreglo8 7a
.ue la, do'le, pala'ra, ,on de 4 '7(e,2
6data
arregloD D,O-D %""""', .""""', 7""""'
6code
mov esi,O$$SE3 arregloD
mov ea1,BesiC 0 primer n?mero
add esi,;
add ea1,BesiC 0 segundo n?mero
add esi,;
add ea1,BesiC 0 tercer n?mero
97

!i arreglo5 arreglo5 arreglo5 arreglo5 ,e encuen(ra en el de,pla=amien(o 1&2&&*8 la ,iguien(e ilu,(racin mue,(ra a 6!#
en relacin con lo, da(o, del arreglo2




perando, inde1ado, perando, inde1ado, perando, inde1ado, perando, inde1ado,
Cn operando indexado ,uma una con,(an(e a un regi,(ro para generar una direccin efec(iva/
Puede u,ar,e cual.uiera de lo, regi,(ro, de prop,i(o general de 32 'i(, como regi,(ro -ndice/
49!4 permi(e varia, forma, de no(acin (lo, corc*e(e, ,on par(e de la no(acin)2
constanteBregC
Bconstante L regC
3a primera forma de no(acin com'ina el nom're de una varia'le con un regi,(ro/ 6l nom're
de la varia'le e, una con,(an(e .ue repre,en(a el de,pla=amien(o de la varia'le/ $e a.u-
e>emplo, de mue,(ran am'a, forma, de no(acin2
arregloEBesiC BarregloE L esiC
arregloDBeb1C BarregloD L eb1C

3o, operando, inde1ado, ,on adecuado, para el proce,amien(o de arreglo,/ 6l regi,(ro -ndice
de'e iniciali=ar,e con cero an(e, de acceder al primer elemen(o de arreglo2
6data
arregloE EF3E %"',."',7"'
6code
mov esi,"
mov al,BarregloL esiC 0 A4 ( %"'
98

3a Al(ima in,(ruccin ,uma 6!# al de,pla=amien(o de arreglo" arreglo" arreglo" arreglo"/ 3a direccin generada por la
e1pre,in ^arreglo" E 6!# arreglo" E 6!# arreglo" E 6!# arreglo" E 6!#_ ,e emplea para *acer referencia a memoria 7 el '7(e en memoria ,e
copia a 93/
!uma de desplazamientos 6l ,egundo (ipo de direccionamien(o inde1ado com'ina a un
regi,(ro con un de,pla=amien(o con,(an(e/ 6l regi,(ro -ndice almacena la direccin 'a,e de un
arreglo o e,(ruc(ura8 7 la con,(an(e iden(ifica lo, de,pla=amien(o, de vario, elemen(o, del
arreglo/ 6l ,iguien(e e>emplo mue,(ra cmo *acer e,(o con un arreglo de pala'ra, de 16 'i(,2



6data
arreglo, ,O-D %"""',."""',7"""'
6code
mov esi,O$$SE3 arreglo,
mov a1,BesiC 0 A: ( %"""'
mov a1,BesiL.C 0 A: ( ."""'
mov a1,BesiL;C 0 A: ( 7"""'
Uso de registros de /0 bits 6, comAn u(ili=ar regi,(ro, de 16 'i(, con operando, inde1ado,
en el modo de direccionamien(o real/ 6n e,(e ca,o8 e,(amo, limi(ado, a u(ili=ar !#85#8"H o "P2
mov al,arregloEBsiC
mov a1,arreglo,BdiC
mov ea1,arregloDBb1C
9l igual .ue n el ca,o de lo, operando, indirec(o,8 ,e de'e evi(ar u(ili=ar "P8 e1cep(o cuando
,e direccionen da(o, en la pila/
Fac(ore, de e,cala en operando, inde1ado, Fac(ore, de e,cala en operando, inde1ado, Fac(ore, de e,cala en operando, inde1ado, Fac(ore, de e,cala en operando, inde1ado,
3o, operando, inde1ado, de'en (ener en cuen(a el (ama@o de cada elemen(o de arreglo al
calcular lo, de,pla=amien(o,/ Por e>emplo8 ,i u,amo, un arreglo de do'le, pala'ra,8
mul(iplicamo, el ,u'-ndice (3) por 4(el (ama@o de una do'le pala'ra) para generar el
de,pla=amien(o del elemen(o de arreglo .ue con(iene 4&&*2
6data
99

arregloD D,O-D %""', .""', 7""', ;""'
6code
mov esi,7& 3FPE arregloD 0 desplazamiento de arregloDB7C
mov ea1,arregloDBesiC 0 EA: ( ;""'
3o, di,e@adore, de #n(el .uer-an facili(ar una operacin comAn a lo, e,cri(ore, de
compiladore,8 por lo .ue proporcion una forma de calcular lo, de,pla=amien(o,8 u,ando un
factor de escala/ 6,(e fac(or de e,cala e, el (ama@o del componen(e del arreglo (pala'ra R 28
do'le pala'ra R 48 o pala'ra cuBdruple R 8)/ +amo, a revi,ar el e>emplo an(erior8 a,ignando a
6!# el ,u'-ndice (3) del arreglo 7 mul(iplicando 6!# por el fac(or de e,cala (4) para do'le,
pala'ra,2
6data
arregloD D,O-D %,.,7,;
6code
mov esi,7 0 subAndice
mov ea1,arregloDBesi&;C 0 EA: ( ;""'
6l operador TKP6 puede *acer el inde1ado mB, fle1i'le8 en ca,o de .ue el arreglo5 ,e redefina
como o(ro (ipo en el fu(uro2
mov esi,7 0 subAndice
mov ea1,arregloDBesi&3FPE arregloDC 0 EA: ( ;""'
9pun(adore, 9pun(adore, 9pun(adore, 9pun(adore,
9 una varia'le .ue con(iene la direccin de o(ra varia'le ,e le conoce como apuntador/ 3o,
apun(adore, ,on una e,(upenda *erramien(a para manipular arreglo, 7 e,(ruc(ura, de da(o,8 7
*acen po,i'le la a,ignacin dinBmica de memoria/ 3o, programa, 'a,ado, en #n(el u(ili=an
do, (ipo, 'B,ico, de apun(adore,8 cercano, (N69<) 7 le>ano, (F9<)/ !u, (ama@o, ,e ven
afec(ado, por el modo ac(ua del proce,ador (real de 16 'i(, o pro(egido de 32 'i(,)8 como ,e
mue,(ra a con(inuacin2
4odo de 16 'i(, 4odo de 16 'i(, 4odo de 16 'i(, 4odo de 16 'i(, 4odo de 32 'i(, 4odo de 32 'i(, 4odo de 32 'i(, 4odo de 32 'i(,
9pun(ador N69< 5e,pla=amien(o de 16 'i(,8 a
par(ir del inicio del ,egmen(o
de da(o,
5e,pla=amien(o de 32 'i(,8 a
par(ir del inicio del ,egmen(o
de da(o,
9pun(ador F9< 5ireccin de de,pla=amien(o
de ,egmen(o de 32 'i(,
5ireccin de de,pla=amien(o
de ,eleccin de ,egmen(o de
"::

4& 'i(,

6n e,(e re,umen8 lo, programa, en modo pro(egido u(ili=an apun(adore, cercano, (near)8 por
lo .ue ,e almacenan en varia'le, (ipo do'le pala'ra/ $e a.u- do, e>emplo,2 apun(" apun(" apun(" apun(" con(iene el
de,pla=amien(o 7 apun(; apun(; apun(; apun(; con(iene el de,pla=amien(o de arreglo; arreglo; arreglo; arreglo;2
arregloE EF3E %"',."',7"',;"'
arreglo, ,O-D %"""',."""',7"""'
apuntE D,O-D arregloE
apunt, D,O-D arreglo,
Tam'iDn ,e puede u(ili=ar el operador FF!6T para .ue la relacin ,ea mB, clara2
apuntE D,O-D O$$SE3 arregloE
apunt, D,O-D O$$SE3 arreglo,





C,o del C,o del C,o del C,o del operador TKP656F operador TKP656F operador TKP656F operador TKP656F
6l operador TKP656F no, permi(e crear un (ipo definido por el u,uario8 .ue (iene (oda, la,
carac(er-,(ica, de un (ipo in(egrado a la *ora de definir la, varia'le,/ TKP656F e, ideal para
crear varia'le, (ipo apun(ador/ Por e>emplo8 la ,iguien(e declaracin crea un nuevo (ipo de
da(o, P"KT68 .ue e, un apun(ador a '7(e,2
PEF3E 3FPEDE$ P3- EF3E
6,(a declaracin por lo general8 ,e coloca cerca del principio de un programa8 an(e, del
,egmen(o de da(o,8 9,-/ Podr-an definir,e varia'le, median(e el u,o de P"KT62
6data
arregloE EF3E %",.",7",;"
apunt% PEF3E N 0 sin inicializar
apunt. PEF3E arregloE 0 apunta a un arreglo
Los lenguajes de alto nivel ocultan de manera intencional los detalles $%sicos acerca de los apuntadores& 'a (ue sus
implementaciones var%an entre las distintas ar(uitecturas de las m.(uinas. ;n el lenguaje ensamblador& como
estamos tratando una sola implementacin& eCaminamos ' utilizamos los apuntadores en el nivel $%sico. ;ste en$o(ue
nos permite eliminar algunos de los misterios (ue rodean a los apuntadores.
":"

Programa de ejemplo1 apuntadores 6l ,iguien(e programa (apun(adore,/a,m) u(ili=a
TKP656F para crear (re, (ipo, de apun(adore, (P"KT68 P;<58 P5;<5)/ 0rea vario,
apun(adore,8 a,igna vario, de,pla=amien(o, de arreglo 7 emplea apun(adore, para *acer la
referencia a memoria2
3I34E Apuntador (Apuntadores6asm)
0 Demostracin de los apuntadores 5 3FPEDE$6
0 ]ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
0 !rea tipos definidos por los usuarios6
PEF3E 3FPEDE$ P3- EF3E 0 apuntador a b5tes
P,O-D 3FPEDE$ P3- ,O-D 0 apuntador a palabras
PD,O-D 3FPEDE$ P3- D,O-D 0 apuntador a dobles palabras
6data
arregloE EF3E %"',."',7"'
arreglo, ,O-D %,.,7
arregloD D,O-D ;,<,/
0 !rea algunas variables tipo apuntador
apunt% PEF3E arreglo,
apunt. P,O-D arreglo,
apunt7 PD,O-D arregloD
6code
main P-O!
0 9sa los apuntadores para accede a los datos6
mov esi,apunt%
mov al,BesiC 0 %"'
mov esi,apunt.
mov a1,BesiC 0 %
":#

mov esi,apunt7
mov ea1,BesiC 0 ;
main E8DP
E8D main



#n,(ruccione, F4P 7 3P #n,(ruccione, F4P 7 3P #n,(ruccione, F4P 7 3P #n,(ruccione, F4P 7 3P
5e manera prede(erminada8 la 0PC carga 7 e>ecu(a lo, programa, en forma ,ecuencial/ Pero la
in,(ruccin ac(ual podr-a ,er condicional8 lo cual ,ignifica .ue (ran,fiere el con(rol a una nueva
u'icacin en el programa8 con 'a,e en lo, valore, de la, 'andera, de e,(ado de la 0PC (0ero8
!igno8 9carreo8 e(c/)/ 3o, programa, en lengua>e en,am'lador u(ili=an in,(ruccione,
condicionale, para implemen(ar in,(ruccione, de al(o nivel8 (ale, como la, in,(ruccione, #F 7
lo, ciclo,/ 0ada una de la, in,(ruccione, condicionale, implica una po,i'le (ran,ferencia de
con(rol (,al(o) *acia una direccin de memoria di,(in(a/ Cna transferencia de control8 o
bifurcacin8 e, una manera de al(erar el orden en el .ue ,e e>ecu(an la, in,(ruccione,/ $a7 do,
(ipo, 'B,ico, de (ran,ferencia,2
Tran,ferencia incondicional2 en (odo, lo, ca,o, el programa ,e (ran,fiere ('ifurca)
*acia una nueva u'icacin[ ,e carga una nueva direccin de memoria en el apun(ador
de in,(ruccione,8 lo cual provoca .ue la e>ecucin con(inAe en la nueva direccin/ 3a
in,(ruccin F4P e, un 'uen e>emplo/
Tran,ferencia condicional2 el programa ,e 'ifurca ,i ,e cumple cier(a condicin/ Puede
com'inar,e una al(a variedad de in,(ruccione, de (ran,ferencia condicional para crear
e,(ruc(ura, lgica, condicionale,/ 3a 0PC in(erpre(a la, condicione, de
verdaderoGfal,o de acuerdo con el con(enido de lo, regi,(ro, 60H 7 Flag,/
#n,(ruccin F4P #n,(ruccin F4P #n,(ruccin F4P #n,(ruccin F4P
3a in,(ruccin F4P e, una (ran,ferencia incondicional *acia un de,(ino8 la cual ,e iden(ifica
median(e una e(i.ue(a de cdigo .ue el en,am'lador (raduce en un de,pla=amien(o/ 3a
,in(a1i, e,2
F4P destino
0uando la 0PC e>ecu(a una (ran,ferencia incondicional8 el de,pla=amien(o de de,(ino (a par(ir
del inicio del ,egmen(o cdigo) ,e mueve *acia el apun(ador de in,(ruccione,8 lo cual provoca
.ue la e>ecucin con(inAe en la nueva u'icacin/ "a>o circun,(ancia, normale,8 ,lo ,e puede
,al(ar a una e(i.ue(a den(ro del procedimien(o ac(ual/
":1

"reacin de un ciclo 3a in,(ruccin F4P proporciona una manera ,encilla de crear un ciclo
,al(ando a una e(i.ue(a en la par(e ,uperior del ciclo
superior*
6
6
mp superior 0 repite el ciclo infinito
F4P e, incondicional8 por lo .ue el ciclo con(inuarB infini(amen(e8 a meno, .ue ,e encuen(re
o(ra forma de ,alir del ciclo/
#n,(ruccin 3P #n,(ruccin 3P #n,(ruccin 3P #n,(ruccin 3P
3a in,(ruccin 3P repi(e un 'lo.ue de in,(ruccione,8 un nAmero e,pec-fico de vece,/ 60H ,e
u(ili=a de manera au(omB(ica como con(ador8 7 ,e decremen(a cada ve= .ue ,e repi(e el ciclo/
!u ,in(a1i, e,2
3P destino
Para la e>ecucin de la in,(ruccin 3P ,e re.uieren do, pa,o,2 primero8 ,e re,(a 1 a 60H/
5e,puD,8 60H ,e compara con cero/ !i no e, igual a cero8 ,e u(ili=a un ,al(o *acia la e(i.ue(a
iden(ificada por destino/ 6n ca,o con(rario8 ,i 60H e, igual a cero8 no ,e reali=a ningAn ,al(o 7
el con(rol pa,a a la in,(ruccin .ue ,igue de,puD, del ciclo/



6n el ,iguien(e e>emplo8 ,umamo, 1 a 9H cada ve= .ue ,e repi(e el ciclo/ 0uando (ermina el
ciclo8 9H R 5 7 60H R &2
mov a1,"
mov ec1,<
4%*
inc a1
loop 4%
Cn error comAn de programacin e, iniciali=ar de manera inadver(ida a 60H con cero an(e, de
empe=ar un ciclo/ !i e,(o ocurre8 la in,(ruccin 3P decremen(a 60H para .ue .uede en
FFFFFFFF*8 `7 el ciclo ,e repi(e 482P48P6782P6 vece,a !i 0H e, el con(ador del ciclo (modo
direccionamien(o real)8 ,e repi(e 658535 vece,/
;n el modo direccionamiento real. -Z es el contador de ciclo predeterminado para la
instruccin LAA5. 5or otro lado& la instruccin LAA5@ utiliza a ;-Z como el contador de
ciclo& ' la instruccin LAA5> utiliza a -Z como el contador de ciclo.
":3

6l de,(ino del ciclo de'e e,(ar a una di,(ancia en(re :128 7 E127 '7(e, del con(ador de la
u'icacin ac(ual/ 3a, in,(ruccione, de mB.uina (ienen un (ama@o apro1imado de 3 '7(e,8 por
lo .ue un ciclo podr-a con(ener8 en promedio8 un mB1imo de 42 in,(ruccione,/ 9 con(inuacin
,e mue,(ra un e>emplo de un men,a>e de error generado por 49!48 de'ido a .ue la e(i.ue(a
de de,(ino de una in,(ruccin 3P e,(a'a dema,iado ale>ada2
error A."M<* ump destination too far* b5 %< b5te(s)
!i modificamo, a 60H den(ro del ciclo8 (al ve= la in,(ruccin 3P no funcione en forma
apropiada/ 6n el ,iguien(e e>emplo8 60H ,e incremen(a den(ro del ciclo/ Nunca llega a cero8 por
lo .ue el ciclo nunca ,e de(iene2
superior*
6
6
inc ec1
loop superior
!i ,e ago(an lo, regi,(ro, 7 ,e nece,i(a a 60H para o(ro fin8 ,e puede guardar ,u con(enido en
una varia'le al principio del ciclo 7 re,(aurarlo >u,(o an(e, de la in,(ruccin 3P2
6data
cuenta D,O-D N
6code
mov ec1,%"" 0 establece la cuenta del ciclo
superior*
mov cuenta,ec1 0 guarda la cuenta
6
mov ec1,." 0 modifica E!:
6
mov ec1,cuenta 0 restaura la cuenta del ciclo
loop superior
"iclos anidados 9l crear un ciclo den(ro del o(ro8 *a7 .ue (ener cier(a con,ideracin e,pecial
con el con(ador de ciclo e1(erior en 60H/ !e puede guardar en una varia'le2
6data
":5

cuenta D,O-D N
6code
mov ec1,%"" 0 establece la cuenta del ciclo e1terior
4%*
mov cuenta,ec1 0 guarda la cuenta del ciclo e1terior
mov ec1,."
4.*
6
6
loop 4. 0 repite el ciclo anterior
mov ec1,cuenta 0 restaura la cuenta del ciclo e1terior
loop 4% 0 repite el ciclo e1terior
0omo regla general8 *a7 .ue evi(ar anidar ciclo, mB, de do, nivele,/ 5e no ,er a,-8 la
admini,(racin de lo, con(adore, del lo, ciclo, ,e vuelve dema,iado pro'lemB(ica/ !i el
algori(mo .ue ,e u(ili=a re.uiere de ciclo, con mB, de 2 nivele, de anidacin8 ,e puede mover
alguno, de lo, ciclo, in(erno, *acia la, ,u'ru(ina,/
!uma de un arreglo de en(ero, !uma de un arreglo de en(ero, !uma de un arreglo de en(ero, !uma de un arreglo de en(ero,
No *a7 una (area mB, comAn cuando ,e empie=a a programar .ue el cBlculo de la ,uma de lo,
elemen(o, en un arreglo/ 6n lengua>e en,am'lador8 de'en ,eguir,e e,(o, pa,o,2
1/ 9,ignar la direccin de arreglo a un regi,(ro .ue ,ervirB como operando inde1ado/
2/ 6,(a'lecer 60H con el nAmero de elemen(o, en el arreglo (en modo de 16 'i(, ,e u(ili=a
0H)/
3/ 9,ignar cero al regi,(ro .ue acumula la ,uma/
4/ 0rear una e(i.ue(a para marcar el inicio del ciclo/
5/ 6n el cuerpo del ciclo8 u,ar direccionamien(o indirec(o para ,umar un elemen(o
individual del arreglo con el regi,(ro .ue almacena la ,uma/
6/ 6,(a'lecer el regi,(ro -ndice para .ue apun(e el ,iguien(e elemen(o del arreglo/
7/ C,ar una in,(ruccin 3P para repe(ir el ciclo de,de la e(i.ue(a inicial/
3o, pa,o, del 1 al 3 pueden reali=ar,e en cual.uier orden/ $e a.u- un programa cor(o .ue
reali=a el (ra'a>o2
3I34E suma de un arreglo (SumaArreglo6asm)
0 Este programa suma un arreglo de palabras6
":6

0 ]ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
6data
arregloint ,O-D %""',.""',7""',;""'
6code
main P-O!
mov edi, O$$SE3 arregloint 0 direccin del arregloint
mov ec1, 4E8S3\O$ arregloint 0 contador de ciclos
mov a1," 0 pone el acumulador en cero
4%*
add a1,BediC 0 agrega un entero
add edi, 3FPE arregloint 0 apunta al siguiente entero
loop 4% 0 repite 'asta @ue E!: ( "
e1it
main E8DP
E8D main

0opia de una cadena 0opia de una cadena 0opia de una cadena 0opia de una cadena
9 menudo8 lo, programa, (ienen .ue copiar 'lo.ue, e1(en,o, de da(o,8 de una u'icacin a
o(ra/ 3o, da(o, pueden ,er arreglo, o cadena,8 pero pueden con(ener cual.uier (ipo de
o'>e(o,/ +amo, a ver cmo ,e puede *acer e,(o en lengua>e en,am'lador8 median(e un ciclo
.ue copia una cadena/ 6l direccionamien(o inde1ado funciona 'ien para e,(e (ipo de
operacin8 7a .ue el mi,mo regi,(ro -ndice *ace referencia a am'a, cadena,/ 3a cadena de
de,(ino de'e (ener ,uficien(e e,pacio di,poni'le para reci'ir lo, carac(ere, copiado,8
inclu7endo el '7(e nulo al final2


3I34E !opia de una cadena (!opia!ad6asm)
0 Este programa copia una cadena6
":7

0 ]ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
6data
origen EF3E OEsta es la cadena de origenP,"
destino EF3E SI[EO$ origen D9P(")
6code
main P-O!
mov esi," 0 registro Andice
mov ec1, SI[EO$ origen 0 contador del ciclo
4%*
mov al,origenBesiC 0 obtiene un carIcter del origen
mov destinoBesiC,al 0 lo almacena en el destino
inc esi 0 se mueve al siguiente carIcter
loop 4% 0 repite el proceso para toda la cadena
e1it
main E8DP
E8D main

J3a in,(ruccin 4+ no puede (ener do, operando, de memoria8 por lo .ue cada carBc(er ,e
mueve de la cadena de origen a 938 7 de,puD, de 93 a la cadena de de,(ino/






":8


5 5 5 5 Procedimien(o, Procedimien(o, Procedimien(o, Procedimien(o,
6nlace con una 'i'lio(eca e1(erna 6nlace con una 'i'lio(eca e1(erna 6nlace con una 'i'lio(eca e1(erna 6nlace con una 'i'lio(eca e1(erna
!i ,e invier(e (iempo8 ,e podr-a e,cri'ir cdigo de(allado para la, operacione, de en(rada:
,alida en lengua>e en,am'lador/ 6, algo mu7 parecido al proce,o de en,am'lar el mo(or de un
au(omvil cada ve= .ue .ueramo, dar un pa,eo/ Cn (ra'a>o in(ere,an(e8 pero .ue con,ume
muc*o (iempo/ 6n el cap-(ulo 11 veremo, cmo ,e mane>an la, operacione, de en(rada:,alida
en modo pro(egido de ;indo%,/ 6, mu7 diver(ido8 ademB, de .ue ,e no, a'rirB un mundo
nuevo cuando veamo, la, *erramien(a, di,poni'le,/ !in em'argo8 por a*ora la, operacione,
de en(rada:,alida de'en ,er ,encilla, mien(ra, ,e aprende lo, fundamen(o, del lengua>e
en,am'lador/ 6n e,(e cap-(ulo veremo, cmo llamar a lo, procedimien(o, de la, 'i'lio(eca, de
enlace del li'ro8 llamada, #rvine32/li' #rvine32/li' #rvine32/li' #rvine32/li' e #rvine16/li' #rvine16/li' #rvine16/li' #rvine16/li'/ 6l cdigo fuen(e comple(o de la 'i'lio(eca
e,(B di,poni'le en el ,i(io ;e' del li'ro 7 ,e ac(uali=a con regularidad/
3a 'i'lio(eca #rvine32 e, para programa, e,cri(o, en modo pro(egido de 32 'i(,/ 0on(iene
procedimien(o, para enla=ar,e con la 9P# de 4!:;indo%, al generar operacione, de en(rada:
,alida/ 3a 'i'lio(eca #rvine16 e, para programa, e,cri(o, en modo de direccionamien(o real de
16 'i(,/ 0on(iene procedimien(o, .ue e>ecu(an in(errupcione, de 4!:5! cuando ,e generan
operacione, de en(rada:,alida/
9 99 9n(eceden(e, n(eceden(e, n(eceden(e, n(eceden(e,
Cna biblioteca de enlace e, un arc*ivo .ue con(iene procedimien(o, (,u'ru(ina,) en,am'lado,
en cdigo mB.uina/ Cna 'i'lio(eca de enlace empie=a como uno o mB, arc*ivo, de cdigo de
fuen(e8 lo, cuale, ,e en,am'lan en arc*ivo, de cdigo o'>e(o/ 6,(o, arc*ivo, ,e in,er(an en un
arc*ivo con forma(o e,pecial8 reconocido por la *erramien(a enla=ador/ !upongamo, .ue un
programa mue,(ra una cadena en la ven(ana de la con,ola8 llamando a un procedimien(o de
nom're 6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena/ 6l cdigo de fuen(e del programa de'e con(ener una direc(iva P<T
.ue iden(ifi.ue el procedimien(o 6,cri'ir0adena2
Escribir!adena P-O3O
5e,puD,8 una in,(ruccin 0933 e>ecu(a a 6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena2
!all Escribir!adena
0uando el programa ,e en,am'la8 el en,am'lador de>a la direccin de de,(ina de la
in,(ruccin 0933 en 'lanco8 ,a'iendo .ue el enla=ador la llenarB/ 6l enla=ador 'u,ca
6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena en la 'i'lio(eca de enlace 7 copia la, in,(ruccione, de mB.uina apropiada, de
la 'i'lio(eca en el arc*ivo e>ecu(a'le del programa/ 9demB,8 in,er(a la direccin
6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena 6,cri'ir0adena en la in,(ruccin 0933/ !i un procedimien(o .ue llamamo, no ,e encuen(ra en
la 'i'lio(eca de enlace8 el enla=ador genera un men,a>e de error 7 no genera un arc*ivo
e>ec(ua'le/
":9

#pciones de comandos del enlazador 3a *erramien(a enla=ador com'ina el arc*ivo de
cdigo o'>e(o de un programa con uno o mB, arc*ivo, de cdigo o'>e(o 7 'i'lio(eca, de enlace/
Por e>emplo8 el ,iguien(e comando enla=a *ola/o'> con la 'i'lio(eca irvine32/li' irvine32/li' irvine32/li' irvine32/li' 7 bernel32/li' bernel32/li' bernel32/li' bernel32/li'2
lina 'ola6ob irvine7.6lib aernel7.6lib
"omo enlazar programas de23 bits +amo, a ver con mB, de(alle (odo lo relacionado con el
proce,o de enla=ar programa, de 32 'i(,/ 6l arc*ivo ?ernel32/li' ?ernel32/li' ?ernel32/li' ?ernel32/li'8 .ue forma par(e del 4it de
desarrollo de soft&are de pla(aforma 4icro,of( ;indo%,8 con(iene informacin de enlace para
la, funcione, del ,i,(ema .ue ,e encuen(ra en un arc*ivo llamado bernel32/dll bernel32/dll bernel32/dll bernel32/dll/ 6,(e arc*ivo e,
una par(e fundamen(al de 4!:;indo%,8 7 ,e le conoce como biblioteca de vnculos din*micos/
0on(iene funcione, e>ecu(a'le, .ue ,e encargan de la, operacione, de en(rada:,alida
'a,ada, en carac(ere,/ 3a ,iguien(e figura mue,(ra como bernel32/li' bernel32/li' bernel32/li' bernel32/li' con,(i(u7e un puen(e
para bernel32/dll bernel32/dll bernel32/dll bernel32/dll2


J6n lo, cap-(ulo, 1 a 1&8 nue,(ro, programa, ,e enla=an con #rvine32/li'/ 6l cap-(ulo 11
mue,(ra cmo enla=ar programa, direc(amen(e con bernel32/li'/
3a 'i'lio(eca de enlace del li'ro 3a 'i'lio(eca de enlace del li'ro 3a 'i'lio(eca de enlace del li'ro 3a 'i'lio(eca de enlace del li'ro
Yeneralidade, Yeneralidade, Yeneralidade, Yeneralidade,
3a ,iguien(e (a'la con(iene una li,(a de procedimien(o, de u,o mB, comAn en la, 'i'lio(eca,
#rvine32 e #rvine16 .ue ,e inclu7en en el ,i(io ;e' del li'ro/ 9un.ue la 'i'lio(eca #rvine16 e,
para programa, .ue ,e e>ecu(an en modo 16 'i(, (modo de direccionamien(o real)8 u(ili=a
regi,(ro, de 32 'i(,/ 3a ma7or-a de lo, procedimien(o, documen(ado, en e,(a ,eccin e1i,(en
en am'a, 'i'lio(eca,/ 3o, procedimien(o, .ue ,e encuen(ran ,lo en la 'i'lio(eca #rvine32
e,(Bn marcado, con un J al final de ,u, de,cripcione,/

"":

5entana de consola 3a ventana de consola (o ventana de comandos) e, una ven(ana ,lo de
(e1(o8 .ue 4!:;indo%, crea cuando ,e mue,(ra el ,-m'olo de ,i,(ema/ Para mo,(rarla8 ,e
de'e *acer clic en inicio:V6>ecu(ar 7 e,cri'ir cmd cmd cmd cmd (para ;indo%, 2&&& 7 ;indo%, HP) o
command command command command (para ;indo%, P5 7 P8)/ 6n ;indo%, 2&&& 7 ;indo%, HP ,e puede cam'iar el
(ama@o del 'Afer de la ven(ana de con,ola8 *aciendo clic con el 'o(n derec*o del mou,e en
el menA de ,i,(ema8 en la e,.uina ,uperior i=.uierda de la ven(ana/ Tam'iDn ,e pueden
,eleccionar vario, (ama@o, 7 colore, de fuen(e,/ 6n ;indo%, P5 7 P88 podemo, e,(a'lecer el
nAmero de fila, a uno de vario, valore, prede(erminado,/ 6n (oda, la, ver,ione, de ;indo%, 7
4!:5!8 la ven(ana de con,ola (iene una configuracin prede(erminada de 25& fila, por 8&
columna,/ Podemo, cam'iar el nAmero de l-nea, median(e el comando mode mode mode mode/ !i e,cri'imo, lo
,iguien(e en el ,-m'olo del ,i,(ema8 la ven(ana de con,ola ,e e,(a'lecerB a 4& columna, por
3& l-nea,
mode con cols(;" lines(7"
Procedimien(o, en la 'i'lio(eca de enlace,/
Procedimien(o Procedimien(o Procedimien(o Procedimien(o 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
0lo,eFile 0ierra un arc*ivo en di,co .ue ,e *a'-a a'ier(o an(eriormen(eJ
0lr,cr "orra la ven(ana de con,ola 7 po,iciona el cur,or en la e,.uina ,uperior i=.uierda
0rea(eu(pu(File 0rea un nuevo arc*ivo en el di,co8 para e,cri'ir en modo de ,alidaJ
0rlf 6,cri'e una ,ecuencia de fin de l-nea en la ven(ana de con,ola
5ela7 5e(iene la e>ecucin del programa duran(e un in(ervalo e,pecificado en n mili,egundo,
5ump4em 6,cri'e un 'lo.ue de memoria a la ven(ana de con,ola en *e1adecimal
5ump<eg, 4ue,(ra lo, regi,(ro, 69H8 6"H8 60H8 65H8 6!#8 65#8 6"P8 6!P8 6F39Y! 7 6#P en
*e1adecimal/ Tam'iDn mue,(ra la 'andera de e,(ado mB, comune, de la 0PC
Ye(0ommandTail 0opia argumen(o, de l-nea de comando, del programa (llamados cola de comandos) en
un arreglo de '7(e,
Ye(4a1HK '(iene el nAmero de columna, 7 fila, en el 'Afer de la ven(ana de con,ola
Ye(4,econd, 5evuelve el nAmero de mili,egundo, (ran,currido, de,de medianoc*e
Ye(Te1(0olor 5evuelve lo, colore, del (e1(o 7 del fondo de la ven(ana de con,olaJ
Yo(o17 Po,iciona el cur,or en una fila 7 columna e,pec-fica, en la ven(ana de con,ola
#,5igi( 9c(iva la 'andera 0ero ,i el regi,(ro 93 con(iene cdigo 9!0## para un d-gi(o decimal (&:P)
4,g"o1 4ue,(ra un cuadro de men,a>e con(e1(ualJ
"""

4,g"o19,b 4ue,(ra una pregun(a (ipo ,iGno en un cuadro de men,a>e con(e1(ualJ
pen#npu(File 9're un arc*ivo e1i,(en(e en di,co para en(radaJ
Par,e5ecimal32 0onvier(e una cadena de en(ero, decimale, ,in ,igno a un nAmero 'inario de 32 'i(,
Par,e#n(erger32 0onvier(e una cadena de en(ero, decimale, con ,ingo en un nAmero 'inario de 32 'i(,
<andom32 Yenera un en(ero ,eudoalea(orio de 32 'i(, en el rango & a FFFFFFFF*
<andomi=e !iem'ra el generador de nAmero, alea(orio, con un valor Anico
<andom<ange Yenera un en(ero ,eudoalea(orio den(ro de un rango e,pec-fico
<ead0*ar 6,pera .ue ,e e,cri'a un carBc(er de,de el (eclado 7 devuelve e,e carBc(er
<ead5ec 3ee un en(ero decimal ,in ,igno de 32 'i(, del (eclado[ para (erminarlo ,e oprime #n(ro
<eadFromFile 3ee un arc*ivo en di,co de en(rada 7 lo coloca en un 'AferJ
<ead$e1 3ee un en(ero *e1adecimal de 32 'i(, de,de el (eclado[ para (erminarlo ,e oprime #n(ro
<ead#n( 3ee un en(ero decimal con ,igno de 32 'i(, de,de el (eclado[ para (erminarlo ,e oprime
in(ro
<ead?e7 3ee un carBc(er del 'Afer de en(rada del (eclado8 ,in e,perar la en(rada
<ead!(ring 3ee una cadena del (eclado8 la cual ,e (ermina oprimiendo #n(ro
!e(Te1(0olor 6,(a'lece lo, colore, de (e1(o 7 de fondo de (oda la ,alida de (e1(o ,u',iguien(e a la
con,ola
!(r3eng(* 5evuelve la longi(ud de una cadena
;ai(4,g 4ue,(ra un men,a>e 7 e,pera a .ue ,e oprima una (ecla
;ri(e"in 6,cri'e un en(ero ,in ,igno de 32 'i(, a la ven(ana de con,ola8 en forma(o 9!0## 'inario
;ri(e"in" 6,cri'e un en(ero a la ven(ana de con,ola en forma(o '7(e8 pala'ra o do'le pala'ra
;ri(e0*ar 6,cri'e un ,olo carBc(er a la ven(ana con,ola
;ri(e5ec 6,cri'e un en(ero ,in ,igno de 32 'i(, a la ven(ana de con,ola8 en forma(o decimal
;ri(e$e1 6,cri'e un en(ero de 32 'i(, a la ven(ana de con,ola8 en forma(o *e1adecimal
;ri(e$e1" 6,cri'e un en(ero (ipo '7(e8 pala'ra o do'le pala'ra a la ven(ana de con,ola8 en forma(o
*e1adecimal
;ri(e#n( 6,cri'e un en(ero con ,igno de 32 'i(, a la ven(ana de con,ola8 en forma(o decimal
""#

;ri(e!(ring 6,cri'e una cadena de (erminacin nula a la ven(ana de con,ola
;ri(eToFile 6,cri'e un 'Afer a un arc*ivo de ,alidaJ
;ri(e;indo%,4,g 4ue,(ra una cadena .ue con(iene el error mB, recien(e generado por 4!:;indo%,J

<edireccin de la en(rada <edireccin de la en(rada <edireccin de la en(rada <edireccin de la en(rada: :: :,alida e,(Bndar ,alida e,(Bndar ,alida e,(Bndar ,alida e,(Bndar
9m'a, 'i'lio(eca, #rvine32 e #rvine16 e,cri'en ,u ,alida a la ven(ana de con,ola8 pero la
'i'lio(eca #rvine16 (iene una carac(er-,(ica adicional1 la redireccin de la entrada6salido
est*ndar/ !u ,alida puede redirigir,e al ,-m'olo del ,i,(ema de 5! o ;indo%,8 para e,cri'ir a
un arc*ivo en di,co en ve= de *acerlo en la ven(ana de con,ola/ $e a.u- cmo funciona2
,upongamo, .ue un programa llamado ejemplo7exe e,cri'e a la ,alida e,(Bndar[ en(once,8
podemo, u,ar el ,iguien(e comando (en el ,-m'olo 5!) para redirigir ,u ,alida a un arc*ivo
llamado salida7txt
eemplo X salida6t1t
5e manera ,imilar8 ,i el mi,mo programa lee la en(rada de,de el (eclado (en(rada e,(Bndar)8
podemo, decirle .ue lea ,u en(rada de,de un arc*ivo llamado entrada7txt2
eemplo W entrada6t1t
Podemo, redirigir (an la en(rada como la ,alida con un ,olo comando2
eemplo W entrada6t1t X salida6t1t
Podemo, enviar la ,alida e,(Bndar de,de prog/7exe a la ,alida e,(Bndar de prog37exe8
u(ili=ando el ,-m'olo de canali=acin (c)2
prog1 | prog2
Podemo, enviar la ,alida de,de prog/7exe a la en(rada e,(Bndar de prog37exe8 7 enviar la
,alida de prog3/e1e a un arc*ivo llamado salida7txt2
prog1 | prog2 > salida.txt
Prog/7exe puede leer la en(rada de,de entrada7txt 7 enviar ,u ,alida a prog37exe8 .ue a ,u ve=
puede enviar ,u ,alida a salida7txt2
prog% W entrada6t1t b prog. X salida6t1t
3o, nom're, de arc*ivo en(rada/(1( 7 ,alida/(1( ,on comple(amen(e ar'i(rario,8 por lo .ue
podemo, elegir lo, nom're, .ue de,eamo,/
5e,cripcione, de lo, procedimien(o, individuale, 5e,cripcione, de lo, procedimien(o, individuale, 5e,cripcione, de lo, procedimien(o, individuale, 5e,cripcione, de lo, procedimien(o, individuale,
""1

"lose8ile (#rvine32 solamente) 6l procedimien(o 0lo,eFile cierra un arc*ivo .ue e,(a'a a'ier(o
previamen(e/ 6l arc*ivo ,e iden(ifica median(e el manejador en(ero de 32 'i(,8 el cual ,e pa,a
en 69H/ !i el arc*ivo ,e cierra con D1i(o8 el valor devuel(o en 69H ,erB di,(in(o de cero/ $e a.u-
una llamada de e>emplo
mov ea1,maneadorArc'ivo
call !lose$ile
"lrscr 6l procedimien(o 0lr,cr 'orra la ven(ana de con,ola Por lo general8 e,(e procedimien(o
,e le llama al principio 7 al final de un programa/ !i lo llamamo, o(ra, vece,8 (al ve= ,ea
nece,ario de(ener la e>ecucin del programa llamando ;ai(4,g/ 6,(o permi(e al u,uario ver la
informacin .ue 7a ,e encuen(ra en la pan(alla8 an(e, de .ue ,e 'orre/ $e a.u- una llamada de
e>emplo2
call ,ait2sg * OOprima cual@uier teclaDP
call !lrscr
"rlf 6l procedimien(o 0rlf de,pla=a el cur,or al principio de la ,iguien(e l-nea en la ven(ana de
con,ola/ 6,cri'e una cadena .ue con(iene lo, valore, &5* 7 &9*/ $e a.u- una llamada del
e>emplo2
call !rlf
"reate#utput8ile 6l procedimien(o 0rea(eu(pu(File crea un arc*ivo en di,co 7 lo a're en
modo de ,alida/ Pa,a el de,pla=amien(o del nom're de un arc*ivo en 65H/ 0uando el
procedimien(o regre,a8 ,i el arc*ivo ,e cre con D1i(o8 69H con(iene un mane>ador de arc*ivo
vBlido (en(ero de 32 'i(,)/ 6n ca,o con(rario8 69H e, igual a #N+93#5S$9N536S+93C6 (una
con,(an(e predefinida)/ $e a.u- un llamado de e>emplo2
6data
8ombre del arc'ivo EF3E Onuevoarc'ivo6t1tP,"
maneador D,O-D N
6code
mov ed1,O$$SE3 nombre del arc'ivo
call !reateOutpu$ile
cmp ea1,I8)A4IDT\A8D4ET)A49E
e errorTarc'ivo 0 muestra el mensae de error
mov maneador,ea1 0 guarda el maneador del arc'ivo
""3

No(a2 6l cdigo de e>emplo an(erior compara el valor en 69H con una con,(an(e predefinida/ !i
,on iguale, la in,(ruccin F6 ,al(a a una e(i.ue(a llamada errorSarc*ivo errorSarc*ivo errorSarc*ivo errorSarc*ivo/ 6n el cap-(ulo 6
*a'laremo, ,o're la, in,(ruccione, 04P 7 F6/ Proporcionamo, e,(e cdigo de mane>o de
errore, para ,u fu(ura referencia/
Delay 6l procedimien(o 5ela7 de(iene la e>ecucin del programa duran(e cier(o nAmero de
mili,egundo, 9n(e, de llamar a 5ela78 a,igne a 69H el in(ervalo de,eado8 $e a.u- una llamade
de e>emplo2
mov ea1,%""" 0 % segundo
call Dela5
(3a ver,in #rvine16/li' no funciona 'a>o ;indo%, NT8 2&&& o HP)/
DumpMem 6l procedimien(o 5ump4em e,cri'e un rango de memoria a la ven(ana de
con,ola en *e1adecimal/ !e le pa,a la direccin inicial en 6!#8 el nAmero de unidade, en 60H 7
el (ama@o de la unidad en 6"H (1 R '7(e8 2 R pala'ra8 4 R do'le pala'ra)/ 3a ,iguien(e llamada
de e>emplo mue,(ra un arreglo de 11 do'le, pala'ra, en *e1adecimal2
6data
arreglo D,O-D %,.,7,;,<,/,M,#,+,","A',"E'
6code
main P-O!
mov esi,O$$SE3 arreglo 0 desplazamiento inicial
mov ec1, 4E8S3\O$ arreglo 0 n?mero de unidades
mov eb1, 3FPE arreglo 0 format de doble palabra
call Dump2em
!e producirB la ,iguien(e ,alida2
&&&&&&&1 &&&&&&&2 &&&&&&&3 &&&&&&&4 &&&&&&&5 &&&&&&&6
&&&&&&&7 &&&&&&&8 &&&&&&&P &&&&&&&& &&&&&&&9 &&&&&&&"
Dump.egs 6l procedimien(o 5ump<eg, mue,(ra lo, regi,(ro, 69H8 6"H8 60H8 65H8 6!#8 65#8
6"P8 6!P8 6#P 7 6F3 (6F39Y!) en *e1adecimal/ Tam'iDn mue,(ra lo, valore, de 'andera,
9carreo8 !igno8 0ero8 5e,'ordamien(o8 9carreo au1iliar 7 Paridad/ $e a.u- una llamada de
e>emplo2
call Dump-egs
<e,ul(ado de e>emplo2
""5

69HR&&&&&613 6"HR&&&&&&&& 60HR&&&&&&FF 65HR&&&&&&&&
6!#R&&&&&&&& 65#R&&&&&1&& 6"PR&&&&&P16 6!PR&&&&&&F6
6#PR&&4&1&26 6F3R&&&&&286 0FR& !FR1 IFR& &FR& 9FR& PFR1
6l valor mo,(rado de 6#P e, el de,pla=amien(o de la in,(ruccin .ue va de,puD, de la llamada
a 5ump<eg,/ 6,(e procedimien(o puede ,er A(il al depurar programa,8 7a .ue mue,(ra una
in,(an(Bnea de la 0PC/ No (iene parBme(ro, de en(rada ni valor de re(orno/
)et"ommand-ail 6l procedimien(o Ye(0ommanTail copia la l-nea de comando, del programa
en una cadena con (erminacin nula/ !i la l-nea de comando, ,e encon(r vac-a8 ,e ac(iva la
'andera de 9carreo en ca,o con(rario8 ,e 'orra/ 6,(e procedimien(o e, A(il 7a .ue permi(e al
u,uario de un programa pa,ar informacin a la l-nea de comando,/ !upongamo, .ue un
programa llamado 0ifrar 0ifrar 0ifrar 0ifrar lee un arc*ivo de en(rada llamado 9rc*ivo1/(1( 9rc*ivo1/(1( 9rc*ivo1/(1( 9rc*ivo1/(1( 7 produce un arc*ivo
de ,alida llamado 9rc*ivo2/(1( 9rc*ivo2/(1( 9rc*ivo2/(1( 9rc*ivo2/(1(/ 6l u,uario puede pa,ar am'o, nom're, en una l-nea de
comando, cuando e>ecu(a el programa2
!ifrar arc'ivo%6t1t a arc'ivo.6t1t
9l iniciar8 el programa 0ifrar ,e puede llamar a Ye(0ommandTail 7 o'(ener lo, do, nom're, de
arc*ivo/ 9l llamar a Ye(0ommandTail8 65H de'e con(ener el de,pla=amien(o de un arreglo de
por lo meno, 12P '7(e,/ $e a.u- una llamada de e>emplo2
6data
cola!omandos EF3E %.+ D9P(") 0 vacAa el b?fer
6code
mov ed1,O$$SE3 coloca!omandos
call Set!ommand3ail 0 llena el b?fer
)etMax9: ('rvine 23 solamente) 6l procedimien(o Ye(4a1HK devuelve el (ama@o del 'Afer de
la ven(ana de con,ola/ !i el 'Afer e, mB, grande .ue el (ama@o vi,i'le de la ven(ana8
aparecerB 'arra, de de,pla=amien(o de manera au(omB(ica/ Ye(4a1HK no (iene parBme(ro,
de en(rada/ 0uando regre,a8 el regi,(ro 53 con(iene el nAmero de columna, del 'Afer 7 5$
con(iene el nAmero de fila,/ 6l po,i'le rango de cada valor no puede ,er ma7or de 2558 lo cual
podr-a ,er menor .ue el (ama@o ac(ual del 'Afer de la ven(ana/ $e a.u- una llamada de
e>emplo2
6data
filas EF3E N
cols EF3E N
6code
""6

call Set2a1:F
mov filas,d'
mov cols,dl
)etMseconds 6l procedimien(o Ye(4,econd, devuelve el nAmero de ,egundo, (ran,currido,
de,de medianoc*e en el regi,(ro 69H/ Podemo, u,arlo para medir el (iempo en(re un even(o 7
o(ro/ No ,e re.uieren parBme(ro, de en(rada/ 6l ,iguien(e e>emplo llama a Ye(4,econd, 7
almacena ,u valor de re(orno/ 5e,puD, de e>ecu(ar el ciclo8 llamamo, a Ye(4,econd, una
,egunda ve= 7 re,(amo, lo, do, valore, de (iempo/ 3a diferencia e, la duracin apro1imada del
ciclo2
6data
3iempoInicio D,O-D N
6code
call Set2seconds
mov tiempoInicio,ea1
4%*
0 (cuerpo del ciclo)
loop 4%
call Set2seconds
sub ea1,tiempoInicio 0 EA: ( tiempo del ciclo, en milisegundos
)et-ext"olor 6l procedimien(o Ye(Te1(0olor devuelve lo, colore, de (e1(o 7 de fondo de la
ven(ana de con,ola ('rvine 23 solamente)/ No (iene parBme(ro, de en(rada/ 5evuelve el color
de fondo en lo, cua(ro 'i(, ,uperiore, de 93 7 el color de (e1(o en cua(ro 'i(, inferiore,/ $e a.u-
una llamada de e>emplo2
6data
color EF3E N
6code
call Set3e1t!olor
mov color,A4
)otoxy 6l procedimien(o Yo(o17 po,iciona el cur,or en una fila 7 columna e,pecificada, en la
pan(alla/ 5e manera prede(erminada8 el rango de coordenada, H de la ven(ana de con,ola e,
""7

de & a 7P8 7 el rango de coordenada, K e, de & a 24/ 9l llamar a Yo(o178 ,e de'e pa,ar la
coordenada K (fila) en 5$ 7 la coordenada H (columna) en 538 $e a.u- una llamada de e>emplo2
mov d',%" 0 fila %"
mov dl,." 0 columna ."
call Sot15 0posiciona el cursor
6n ca,o de .ue el u,uario *a7a cam'iado el (ama@o de la ven(ana de con,ola8 podemo,
llamar a Ye(4a1HK para encon(rar el nAmero ac(ual de fila, 7 columna,/
'sDigit 6l procedimien(o #,5igi( de(ermina ,i el carBc(er en 938 e, un d-gi(o decimal vBlido/ 9l
llamarlo ,e pa,a un carBc(er 9!0## en 93/ 6l procedimien(o ac(iva la 'andera 0ero ,i 93
con(iene un d-gi(o decimal vBlido8 en ca,o con(rario8 la 'andera 0ero ,e 'orra/ $e a.u- una
llamada de e>emplo2
mov 938uncarac(er
call #,5igi(
>= digi(oSencon(rado
3a in,(ruccin FI8 .ue veremo, en la ,eccin 68 ,al(a a una e(i.ue(a cuando ,e ac(iva la
'andera 0ero/
Msg$ox ('rvine23 solamente) 6l procedimien(o 4,g"o1 mue,(ra un cuadro de men,a>e
con(e1(ual grBfico con una le7enda opcional/ !e le pa,a el de,pla=amien(o de una cadena en
65H8 la cual aparece den(ro del cuadro/ 5e manera opcional8 ,e le pa,a el de,pla=amien(o de
una cadena en 6"H para el (-(ulo del cuadro/ Para de>ar el (-(ulo en 'lanco/ 6"H ,e e,(a'lece en
cero/ $e a.u- una llamada de e>emplo2
6data
le5enda db O3itulo del cuadro dialogoP,"
2sg\ola EF3E OEste es un cuadro de mensae conte1tual6P,"d',"a'
EF3E O\aga clic en Aceptar para continuarDP,"
6code
mov eb1,O$$SE3 le5enda
mov ed1,O$$SE3 2s'ola
call 2sgEo1
Msg$oxAs; ('rvine 23 solamente) 6l procedimien(o 4,g"o19,b mue,(ra un cuadro de
men,a>e con(e1(ual grBfico con 'o(one, !- 7 No/ !e le pa,a el de,pla=amien(o de una cadena
""8

de pregun(a en 65H8 la cual aparece den(ro del cuadro/ 5e manera opcional8 ,e le pa,a el
de,pla=amien(o de una cadena en 6"H para el (-(ulo del cuadro/ Para de>ar el (-(ulo en 'lanco8
6"H ,e e,(a'lece con cero/ 4,g"o19,b devuelve un en(ero en 69H .ue no, indica .uD 'o(n
,eleccion el u,uario #5K6! (igual a 6) o #5N (igual a 7)/ $e a.u- una llamada de e>emplo2
6data
le5enda EF3E OEncuesta terminadaP,"
pregunta EF3E OSracias pos completar la encuesta6P
EF3E "d',"a'
EF3E ODesea recibir los resultadosNP,"
resultado EF3E O4os resultados se enviarIn vAa correo
electrnico6P,"d',"a',"
6code
mov eb1,O$$SE3 le5enda
mov ed1,O$$SE3 pregunta
call 2sgEo1Asa
0(comprobar el valor de retorno en EA:)
#pen'nput8ile ('rvine 23 solamente) 6l procedimien(o pen#npu(File a're un arc*ivo e1i,(en(e
en modo de en(rada/ !e le pa,a el de,pla=amien(o de un nom're de arc*ivo en 65H/ 9l
regre,ar8 ,i el arc*ivo ,e a'ri con D1i(o8 69H con(iene un mane>ador de arc*ivo vBlido/ 6n ca,o
con(rario8 69H e, igual a #N+93#5S$9N536S+93C6 (una con,(an(e predefinida)/ $e a.u- una
llamada de e>emplo2
6data
nombrearc'ivo EF3E Omiarc'ivo6t1tP,"
maneador D,O-D N
6code
mov ed1,O$$SE3 nombrearc'ivo
call OpenInput$ile
cmp ea1,I8)A4IDT\A8D4ET)A49E
e arc'ivoTerror 0 muestra el mensae de error
mov maneador,ea1 0 guarda el maneador del arc'ivo
""9

No(a2 el cdigo de e>emplo an(erior compara el valor en 69H con una con,(an(e predefinida/ !i
,on iguale,8 la in,(ruccin F6 ,al(a a una e(i.ue(a llamada arc*ivoSerror/ 6n el cap-(ulo 6
*a'laremo, ,o're in,(ruccione, 04P 7 F6/ Proporcionamo, e,(e cdigo de mane>o de errore,
para una referencia a fu(uro/
ParseDecimal23 6l procedimien(o Par,e5ecimal32 convier(e una cadena de en(ero,
decimale, ,in ,igno en un nAmero 'inario de 32 'i(,/ Todo, lo, d-gi(o, vBlido, .ue ocurren
an(e, de un carBc(er no numDrico ,e convier(en2 lo, e,pacio, en 'lanco a la i=.uierda ,e
ignoran/ !e le pa,a el de,pla=amien(o de una cadena en 65H 7 la longi(ud de la cadena en
60H2 el valor 'inario ,e devuelve en 69H/ $e a.u- una llamada de e>emplo2
6data
b?fer EF3E O#%+7P
tamEufer ( (U K b?fer)
6code
mov ed1,O$$SE3 buffer
mov ec1,tamEufer
call ParseDecimal7. 0 devuelve EA:
!e de'e con,ul(ar la de,cripcin del procedimien(o <ead5ec <ead5ec <ead5ec <ead5ec para ver lo, de(alle, acerca de
cmo ,e ve afec(ada la 'andera e 9carreo/
Perser'nteger23 6l procedimien(o Par,e#n(eger32 convier(e una cadena de en(ero,
decimale, con ,igno en un nAmero 'inario de 32 'i(,/ Todo, lo, da(o, vBlido, ocurren an(e, de
un carBc(er no numDrico ,e convier(en/ Todo, lo, d-gi(o, vBlido, .ue ocurren an(e, de un
carBc(er no numDrico ,e convier(en2 3o, e,pacio, en 'lanco a la i=.uierda ,e ignoran/ !e le
pa,a el de,pla=amien(o de una cadena en 65H 7 la longi(ud de la cadena en 60H2 el valor
'inario ,e devuelve en 69H/ $e a.u- una llamada de e>emplo2
6data
b?fer EF3E OK#%+7P
tambufer ( (U K b?fer)
6code
mov ed1,O$$SE3 b?fer
mov ec1,tamEufer
call parseInteger7. 0 devuelve EA:
"#:

3a cadena puede con(ener un ,igno po,i(ivo o nega(ivo opcional a la i=.uierda8 ,eguido ,lo de
d-gi(o, decimale,/ 3a 'andera de 5e,'ordamien(o ,e ac(iva 7 ,e mue,(ra un men,a>e en la
con,ola ,i el valor no puede repre,en(ar,e como en(ero con ,igno de 32 'i(, (rango de :
2814784838648 a E2814784838647)/
.andom23 6l procedimien(o <andom32 genera 7 devuelve un en(ero alea(orio de 32 'i(, en
69H/ !i ,e llama repe(ida, vece,8 <andom32 genera una ,ecuencia alea(oria ,imulada8 en la
.ue cada nAmero ,e conoce como entero seudoaleatorio/ 3o, nAmero, ,e crean u(ili=ando una
funcin ,imple8 .ue (iene una en(rada conocida como semilla/ 6,(a funcin u(ili=a la ,emilla en
una frmula .ue genera el valor alea(orio/
3o, valore, alea(orio, ,u',iguien(e, ,e generan u(ili=ando cada valor alea(orio generado
an(eriormen(e como ,u, ,emilla,/ 5e e,(e pun(o en adelan(e8 el (Drmino aleatorio ,ignificarB
,eudoalea(orio / $e a.u- una llamada de e>emplo2
/da(a
+al9lea(orio 5;<5 M
/code
call <andom32
mov val9lea(orio8ea1
6l procedimien(o <andom32 (am'iDn e,(B di,poni'le en la 'i'lio(eca #rvine168 7 devuelve ,u
valor en 69H/
.andomize 6l procedimien(o <andomi=e iniciali=a el valor de la ,emilla inicial de lo,
procedimien(o, <andom32 7 <andom<ange/ 3a ,emilla e, igual a la *ora del d-a8 con una
preci,in de 1G1&& de un ,egundo/ 0ada ve= .ue ,e e>ecu(e un programa .ue llama a
<andom32 7 a <andom<ange8 la ,ecuencia generada ,erB di,(in(a 7 cual.uier ,ecuencia de
nAmero, alea(orio, (am'iDn ,erB Anica/ !olo nece,i(amo, llamar a <andomi=a una ve= al
principio de un programa/ 6n el ,iguien(e e>emplo producimo, 1& en(ero, alea(orio,2
call -andomize
mov ec1,%"
4%* call -andom7.
0 a@uA se utiliza o se muestra el valor aleatorio en EA:D
loop 4%
.andom.ange 6l procedimien(o <andom<ange produce un en(ero alea(orio den(ro de un
rango de & a n \ 18 en donde n e, un parBme(ro de en(rada .ue ,e pa,a en el regi,(ro 69H/ 6l
en(ero alea(orio ,e devuelve en 69H/ 6l ,iguien(e e>emplo genera un en(ero alea(orio individual
en(re & 7 4PPP8 7 lo coloca en 69H2
"#"

/da(a val9lea( 5;<5 M
/code
mov ea185&&&
call <andom<ange
mov val9lea(8ea1
.ead"har 6l procedimien(o <ead0*ar lee un ,olo carBc(er del (eclado 7 devuelve e,e carBc(er
en el regi,(ro 93/ 6l carBc(er no ,e imprime en la ven(ana de con,ola/ $e a.u- una llamada del
e>emplo2
6data
car EF3E N
6code
call -ead!'ar
mov car,al
!i el u,uario oprime una (ecla e1(endida como una (ecla de funcin8 la flec*a de cur,or8 #n,er(
o !upr8 el procedimien(o e,(a'lece 93 en cero 7 9$ con(iene un cdigo de e1ploracin de
(eclado/
-eadDec 6l procedimien(o <ec5ec( lee un en(ero decimal ,in ,igno de 32 'i(, del (eclado 7
devuelve el valor en 69H/ 3o, e,pacio, a la i=.uierda ,e ignoran/ 6l valor de re(orno ,e calcula
en 'a,e a (odo, lo, d-gi(o, vBlido, .ue apare=can8 *a,(a encon(rar,e un carBc(er .ue no ,ea
d-gi(o/ Por e>emplo8 ,i el u,uario e,cri'e 1239"08 el valor devuel(o en 69H e, 123/ $e a.u- una
llamada de e>emplo2
6data
valEntero D,O-D N
6code
call -eadDec
mov valEntero,ea1
<ead5ec afec(a a la 'andera de 9carreo en lo ,iguien(e2
!i el en(ero e,(B en 'lanco8 69H R & 7 0F R 1/
!i el en(ero ,lo con(iene e,pacio, 69H R & K 0F R 1/
!i el en(ero e, ma7or .ue 2O32:18 69H R & 7 0F R 1/
6n ca,o con(rario8 69H R el en(ero conver(ido 7 0F R &/
"##

.ead8rom8ile ('rvine 23 solamente) 6l procedimien(o <eadFromFile lee un arc*ivo de
en(rada 7 lo coloca en un 'Afer/ <eci'e un mane>ador de arc*ivo a'ier(o en 69H8 el
de,pla=amien(o de un 'Afer en 65H 7 el nAmero mB1imo de '7(e, a leer en 60H/ 0uando el
procedimien(o regre,a8 ,i 0F R &8 69H con(iene la cuen(a del nAmero de '7(e, .ue ,e le7eron
del arc*ivo/ !i 0F R 18 69H con(iene el cdigo de error del ,i,(ema8 .ue e1plica lo .ue ,ali mal/
(Podemo, llamar a ;ri(e;indo%,4,g para o'(ener una repre,en(acin de (e1(o del men,a>e)/
$e a.u- una llamada de e>emplo2
6data
3A2TE]$E- ( <"""
6data
b?fer EF3E 3A2TE]$E- D9P (N)
b5tes4eidos D,O-D N
6code
mov ed1,O$$SE3 buffer 0 apunta al buffer
mov ec1,3A2TE]$E- 0 mI1imo de b5tes a leer
call read$rom$ile 0 lee el arc'ivo
c muestraTmensaeTerror 0 ocurri un error
mov b5tes4eidos,ea1 0 cuenta los b5tes @ue se le5eron
.ead<ex 6l procedimien(o <ead$e1 lee un en(ero *e1adecimal de 32 'i(, de,de el (eclado/ K
devuelve el valor en 69H/ No ,e reali=a una compro'acin de errore, para carac(ere, invBlido,/
!e pueden u(ili=ar le(ra, (an(o ma7A,cula, como minA,cula, para lo, d-gi(o, 9:F/ Puede
in(roducir,e un mB1imo de oc*o d-gi(o, (lo, carac(ere, adicionale, ,e ignoran)/ 3o, e,pacio, a
la i=.uierda ,e ignoran/ $e a.u- una llamada de e>emplo2
6data
val\e1 D,O-D N
6code
call -ead\e1
mov val\e1,ea1
<ead#n( 6l procedimien(o <ead#n( lee un en(ero con ,igno de 32 'i(, de,de el (eclado8 7
devuelve el valor en 69H/ 6l u,uario puede e,cri'ir un ,igno po,i(ivo o nega(ivo opcional a la
i=.uierda8 7 el re,(o del nAmero ,lo puede con,i,(ir de d-gi(o,/ <ead#n( 9c(iva la 'andera
5e,'ordamien(o 7 mue,(ra un men,a>e de error ,i el valor in(roducido no puede repre,en(ar,e
"#1

como en(ero con ,igno de 32 'i(, (rango2 :2814784838648 a E2814784838647)/ 6l valor de
re(orno ,e calcula a par(ir de (odo, lo, d-gi(o, vBlido, encon(rado,8 *a,(a .ue ,e encuen(ra un
carBc(er .ue no ,ea d-gi(o/ Por e>emplo8 ,i el u,uario e,cri'e E1239"08 el valor devuel(o e,
E123/ $e a.u- una llamada de e>emplo2
6data
valEntero S,O-D N
6code
call -eadInt
mov )alEntero,ea1
-ead>e5 6l procedimien(o <ead?e7 reali=a una compro'acin del (eclado ,in e,pera/ !i no ,e
encuen(ra una (ecla8 ,e ac(iva la 'andera 0ero/ !i ,e encuen(ra una (ecla8 ,e 'orra la 'andera
0ero 7 93 con(iene 7a ,ea cero o un cdigo 9!0##/ !i 93 con(iene cero8 (al ve= el u,uario oprimi
una (ecla e,pecial ((ecla de funcin8 flec*a de cur,or8 e(c/)/ 6l regi,(ro 9$ con(iene un cdigo
de e1ploracin vir(ual8 5H con(iene un cdigo de (ecla vir(ual 7 6"H con(iene lo, 'i(, de
'andera del (eclado/ 3a, mi(ade, ,uperiore, de 69H K 65H ,e ,o're,cri'en/ n el captulo //
veremos con m*s detalle el funcionamiento de .ead4ey/ $e a.u- una llamada de e>emplo8
cuando ,e u(ili=a la 'i'lio(eca #rvine32 7 el u,uario oprime una (ecla alfanumDrica e,(Bndar2
6data
car EF3E N
6code
4%* mov ea1,%" 0 crea un retraso de %" ms
call Dela5
call -ead>e5 0 comprueba la tecla
`[ 4% 0 repite si no 'a5 tecla
mov car,A4 0 guarda el carIcter
J!e *a agregado un re(ra,o de 1& mili,egundo, al ciclo8 para dar (iempo a .ue 4!:;indo%,
proce,e lo, men,a>e, de even(o,/ 6n ca,o con(rario8 podr-an perder,e alguno, (ecleo,/ !i ,e
u(ili=a la 'i'lio(eca #rvine168 ,e puede omi(ir el re(ra,o2
6data
car EF3E N
6code
"#3

4%* call -ead>e5 0 comprueba la tecla
z 4% 0 repite si no 'a5 tecla
mov car,A4 0 guarda el carIcter
.ead!tring 6l procedimien(o <ead!(ring lee una cadena del (eclado8 7 ,e de(iene cuando el
u,uario oprime #n(ro/ <eci'e el de,pla=amien(o de un 'Afer en 65H 7 e,(a'lece 60H al mB1imo
nAmero de carac(ere, .ue puede in(roducir un u,uario8 mB, 1 (para guardar e,pacio para el
'7(e de (erminacin nulo)/ Procedimien(o devuelve la cuen(a del nAmero de carac(ere, e,cri(o,
por el u,uario en 69H/ $e a.u- una llamada de e>emplo2
6data
b?fer EF3E .% D9P(") 0 b?fer de entrada
cuentaE5tes D,O-D N 0 guarda el contador
6code
mov ed1,O$$SE3 b?fer 0 apunta al b?fer
mov ec1,SI[EO$ b?fer 0 especifica el mI1imo de caracteres
call -eadString 0 recibe la cadena de entrada
mov cuentaE5tes,ea1 0 n?meros de caracteres
<ead!(ring in,er(a en forma au(omB(ica un (erminador nulo en memoria8 al final de la cadena/
9 con(inuacin ,e mue,(ra un vaciado *e1adecimal 7 9!0## de lo, primero, 8 '7(e, de 'Afer 'Afer 'Afer 'Afer8
de,puD, .ue el u,uario in(roduce la cadena ]9"056FYW2
41 42 43 44 45 46 47 && 9"056FY

3a varia'le cuen(a"7(e, cuen(a"7(e, cuen(a"7(e, cuen(a"7(e, e, igual a 7/
!et-ext"olor 6l procedimien(o !e(Te1(0olor (biblioteca 'rvine23 solamente) e,(a'lece lo,
colore, de (e1(o 7 de fondo para la ,alida de (e1(o/ 9l llamar a !e(Te1(0olor8 *a7 .ue a,ignar un
a(ri'u(o de color a 9H/ Pueden u(ili=ar,e la, ,iguien(e, con,(an(e, de colore, predefinida,8
(an(o para el (e1(o como para el fondo2
"lacb R & <ed R 4 Yra7 R 8 3ig*(<ed R 12
"lue R 1 4agen(a R 5 lig*("lue R P 3ig*(4agen(a R 13
Yreen R 2 "ro%n R 6 lig*(Yreen R 1& Kello% R 14
"#5

07an R 3 lig*(Yra7 R 7 3ig*(07an R 11 ;*i(e R 15
3a, con,(an(e, de color ,e definen en lo, arc*ivo, de inclu,in llamado, 'rvine237inc e
'rvine/07inc
4ul(iplicamo, el color de fondo por 16 7 le ,umamo, al color de (e1(o/ Por e>emplo8 la ,iguien(e
con,(an(e indica carac(ere, amarillo, en un fondo a=ul2
5ello= L (blue ( %/)
3a ,iguien(e in,(ruccin e,(a'lece el color 'lanco8 en un fondo a=ul2
mov ea1,,'ite L (blue & %/) 0 blanco sobre azul
6n la ,eccin 15 ,e encon(rarB una e1plicacin de(allada de lo, a(ri'u(o, de video/ 3a ver,in
de !e(Te1(0olor en la 'i'lio(eca #rvine16 'orra la ven(ana de con,ola con lo, colore,
,eleccionado,/
!tr%ength 6l procedimien(o !(r3eng(* devuelve la longi(ud de una cadena con (erminacin
nula/ <eci'e el de,pla=amien(o de la cadena en 65H/ 6l procedimien(o devuelve la longi(ud de
la cadena en 69H/ $e a.u- una llamada de e>emplo2
6data
b?fer EF3E OabcdeP,"
longEufer D,O-D N
6code
mov ed1,O$$SE3 buffer 0 apunta a la cadena
call Str4engt' 0 EA: ( <
mov longEufer,ea1 0 guarda la longitud

=aitMsg 6l procedimien(o ;ai(4,g mue,(ra el men,a>e ]Pre,, an7 be7 (o con(inuedW 7
e,pera a .ue el u,uario oprima una (ecla/ 6,(e procedimien(o e, A(il cuando de,eamo,
de(ener la vi,uali=acin de la pan(alla an(e, de .ue ,e de,placen lo, da(o, 7 de,apare=can/ No
(iene parBme(ro de en(rada/ $e a.u- una llamada de e>emplo2
call ,ait2sg
=rite$in el procedimien(o ;ri(e"in e,cri'e un en(ero en la ven(ana de la con,ola8 en forma(o
9!0## 'inario/ 6l en(ero ,e pa,a en 69H/ 3o, 'i(, 'inario, ,e mue,(ran en grupo, de cua(ro8
para facili(ar ,u legi'ilidad/ $e a.u- una llamada de e>emplo2
mov ea1,%.7;/A$+'
"#6

call ,riteEin
0 muestra* O"""% ""%" ""%% "%"" "%%" %"%" %%%% %""%P
=rite$in$ 6l procedimien(o ;ri(e"in" e,cri'e un en(ero de 32 'i(, en la ven(ana de con,ola8
en forma(o 9!0## 'inario/ 6l valor pa,a en el regi,(ro 69H 7 de>a .ue 6"H indi.ue el (ama@o de
vi,uali=acin en '7(e, (182 o 4)/ 3o, 'i(, ,e mue,(ran en grupo, de a cua(ro8 para facili(ar ,u
legi'ilidad/ $e a.u- una llamada de e>emplo2
mov ea1,""""%.7;'
mov eb1,3FPE ,O-D 0 . b5tes
call ,riteEinE 0 muestra """% ""%" ""%" "%""
=rite"har 6l procedimien(o ;ri(e0*ar e,cri'e un ,olo carBc(er en la ven(ana de con,ola/ Pa,a
el carBc(er (o ,u cdigo 9!0##) en 93/ $e a.u- una llamada de e>emplo2
mov al,HAH
call ,rite!'ar 0 muestra OAP
=riteDec 6l procedimien(o ;ri(e5ec e,cri'e un en(ero ,in ,igno de 32 'i(, en la ven(ana de la
con,ola8 en forma(o decimal ,in cero, a la i=.uierda/ 6l en(ero ,e pa,a en 69H/ $e a.u- una
llamada de e>emplo2
mov ea1,.+<
call ,riteDec 0 muestra O.+<P
=rite<ex 6l procedimien(o ;ri(e$e1 e,cri'e un en(ero ,in ,igno de 32 'i(, en la ven(ana de
con,ola/ 6n forma(o *e1adecimal de 8 d-gi(o,/ !i e, nece,ario8 pueden in,er(ar,e cero, a la
i=.uierda/ 6l en(ero ,e pa,a en 69H/ $e a.u- un llamado de e>emplo2
mov ea1,M$$$'
call ,rite\e1 0 muestra* O""""M$$$P
=rite<ex$ 6l procedimien(o ;ri(e$e1" e,cri'e un en(ero ,in ,igno de 32 'i(, en la ven(ana
de con,ola en forma(o *e1adecimal/ !i e, nece,ario8 ,e in,er(an cero, a la i=.uierda/ 6l en(ero
,e pa,a en 69H 7 de>a .ue 6"H indi.ue el forma(o de vi,uali=acin en '7(e, (18 2 o 4)/ $e a.u-
una llamada de e>emplo2
mov ea1,M$$$'
mov eb1,3FPE ,O-D 0 . b5tes
call ,rite\e1E 0 muestra* OM$$$P
"#7

=rite'nt 6l procedimien(o ;ri(e#n( e,cri'e un en(ero con ,igno de 32 'i(, en la ven(ana de
con,ola8 en forma(o decimal con un ,igno a la i=.uierda 7 ,in cero, a la i=.uierda/ 6l en(ero ,e
pa,a en 69H/ $e a.u- una llamada de e>emplo2
mov ea1,.%/<;7
call ,riteInt 0 muestra* OL.%/<;7P
=rite!tring 6l procedimien(o ;ri(e!(ring e,cri'e una cadena con (erminacin nula en la
ven(ana de con,ola/ 6l de,pla=amien(o de la cadena ,e pa,a en 65H/ $e a.u- una llamada de
e>emplo2
6data
indicador EF3E OEscriba su nombre* O,"
6code
mov edc,O$$SE3 indicador
call ,riteString
=rite-o8ile ('rvine 23 solamente) 6l procedimien(o ;ri(eToFile e,cri'e el con(enido de un
'Afer en un arc*ivo de ,alida/ !e le pa,a un mane>ador de arc*ivo, vBlido, en 69H8 el
de,pla=amien(o del 'Afer en 65H8 7 el nAmero de '7(e, a e,cri'ir en 60H/ 0uando el
procedimien(o regre,a8 69H con(iene una cuen(a del nAmero de '7(e, e,cri(o,/ $e a.u- una
llamada de e>emplo2
3A2TE]$E- ( <"""
6data
maneadorArc'ivo D,O-D N
b?fer EF3E 3A2TE]$E- D9P(N)
b5tesEscritos D,O-D N
6code
mov ea1,maneadorArc'ivo
mov ed1,O$$SE3 b?fer
mov ec1,3A2TE]$E-
call ,rite3o$ile
mov b5teEscritos,ea1 0 guarda el valor de retorno
"#8

=rite=indo&sMsg ('rvine 23 solamente) 6l procedimien(o ;ri(e;indo,4,g mue,(ra una
cadena .ue con(iene el error mB, recien(e generado por 4!:;indo%,/ !u ma7or u(ilidad e,
cuando un programa no puede crear o a'rir un arc*ivo/ 6l ,iguien(e e>emplo (ra(a de a'rir un
arc*ivo para en(rada8 7 al encon(rar,e con un error llama a ;ri(e;indo%,4,g para mo,(rar
e,e error2
mov ed1,O$$SE3 nombrearc'ivo
call OpenInput$ile
6I$ ea1 (( I8)A4IDT\A8D4ET)A49E
call ,rite,indo=s2sg
6E8DI$
3a ,iguien(e cadena ,e e,cri'e en la ven(ana de la con,ola2
6rror 22 6l ,i,(ema no puede *allar el arc*ivo e,pecificado/
peracione, de la pila peracione, de la pila peracione, de la pila peracione, de la pila
!i colocamo, 1& pan.ue.ue,8 uno encima del o(ro en el ,iguien(e diagrama8 al re,ul(ado ,e le
puede llamar pila/ Por lo general8 no ,acamo, un pan.ue.ue de en medio de la pila[ .ui(amo,
un pan.ue.ue de la par(e ,uperior de la pila para colocarlo en nue,(ro pla(o/ Pueden
agregar,e mB, pan.ue.ue, en la par(e ,uperior de la pila8 pero no a'a>o ni en medio




Pila de pan.ue.ue,2

4 (!uperior)
3
2
1(#nferior)

3o, pan.ue.ue, (ienen algo en comAn con lo, programa, de compu(adora/ 9 una pila (am'iDn
,e le conoce como e,(ruc(ura C6P! (>ltima en entrar? primera en salir)8 en infle, 3#F (3a,(:in8
"#9

Fir,(:u()8 7a .ue el Al(imo valor .ue ,e coloca en la pila ,iempre e, el primero .ue ,e ,aca
(C6P! e, un (Drmino con(a'le mu7 conocido)
Cna estructura de datos tipo pila ,igue el mi,mo principio2 ,e agregan nuevo, valore, a la
par(e ,uperior de la pila 7 lo, valore, e1i,(en(e, ,e .ui(an de la par(e ,uperior/ 6n general8 la,
pila, ,on e,(ruc(ura, A(ile, para una variedad de aplicacione, de programacin8 7 pueden
implemen(ar,e con facilidad median(e el u,o de mD(odo, de programacin orien(ada a
o'>e(o,/
6n e,(e cap-(ulo no, concen(raremo, en lo .ue ,e conoce como la pila en tiempo de ejecucin/
6l *ard%are en la 0PC la ,opor(a direc(amen(e8 7 e, una par(e e,encial del mecani,mo para
llamar a lo, procedimien(o, 7 regre,ar de ello,/ 3a ma7or par(e del (iempo8 la llamaremo,
,implemen(e pila/
Pila en (iempo de e>ecucin Pila en (iempo de e>ecucin Pila en (iempo de e>ecucin Pila en (iempo de e>ecucin
3a pila en tiempo de ejecucin e, un arreglo de memoria .ue la 0PC admini,(ra direc(amen(e8
median(e el u,o de do, regi,(ro,2 !! 7 6!P/ 6n modo pro(egido8 el regi,(ro !! guarda el
apun(ador a un de,crip(or de ,egmen(o 7 no ,e modifica en lo, programa, de u,uario/ 6l
regi,(ro 6!P guarda un de,pla=amien(o de 32 'i(, *acia alguna u'icacin en la pila/ 4u7 rara,
vece, e, nece,ario manipular el regi,(ro 6!P en forma direc(a[ en ve= de ello8 ,e modifica de
manera indirec(a median(e la, in,(ruccione, (ale, como 09338 <6T/ PC!$ 7 PP/
6l regi,(ro apun(ador de pila (6!P) apun(a al Al(imo en(ero .ue ,e va a agregar (o meter) a la
pila/ Para demo,(rar e,(o8 vamo, a empe=ar con una pila .ue con(iene un ,olo valor/ 6n la
,iguien(e ilu,(racin8 el regi,(ro 6!P (apun(ador de pila e1(endido) con(iene el nAmero decimal
&&&&1&&&8 el de,pla=amien(o del valor mB, recien(e ,e me(i a la pila (&&&&&&&6)2

0ada po,icin de la en e,(a figura con(iene 32 'i(,8 .ue e, el ca,o cuando el programa ,e
e>ecu(a en modo pro(egido/ 6n el modo direccionamien(o real de 16 'i(,8 el regi,(ro !P apun(a
al valor mB, recien(e .ue ,e me(i a la pila8 7 la, en(rada, de la pila ,on8 por lo general8 de 16
'i(, de longi(ud/
"1:






peracin Pu,* (me(er) peracin Pu,* (me(er) peracin Pu,* (me(er) peracin Pu,* (me(er)
Cna operacin push de 32 'i(, decremen(a el apun(ador de la pila por 4 7 copia un valor a la
u'icacin en la pila a la .ue apun(a el apun(ador/ 6n la ,iguien(e figura me(eremo, el valor
&&&&&&95 en la pila/ 3a figura mue,(ra el orden de la pila opue,(o al de la pila de pan.ue.ue,
.ue vimo, an(e,/ 3a pila en (iempo de e>ecucin ,iempre crece *acia a'a>o en la memoria8
,iguiendo el principio de ]ul(imo en en(rar8 primero en ,alirW/ 9n(e, de la operacin pu,*8 6!P R
&&&&1&&&*[ de,puD, de pu,*8 6!P R &&&&&FF0*/




4e(er en(ero, en la pila/

3a mi,ma pila luego de me(er do, en(ero, mB, (&&&&&&&1 7 &&&&&&&2)/
La pila en tiempo de ejecucin (ue describimos a(u% no es la misma (ue el tipo de datos abstracto
+/@4, pila del (ue *ablamos en el curso sobre estructuras de datos. La pila en tiempo de ejecucin
trabaja a nivel del sistema para manejar las llamadas a las subrutinas. ;l /@4 pila es una eCpresin de
programacin (ue& por lo general& se escribe en un lenguaje de programacin de alto nivel como -OO o
java. =e utiliza cuando se implementan algoritmos (ue dependen de operaciones tipo H)ltimo en
entrar& primero en salirI.
"1"


peracin PP (,acar) peracin PP (,acar) peracin PP (,acar) peracin PP (,acar)
Cna operacin pop elimina un valor de la pila 7 lo copia a un regi,(ro o u'icacin de memoria/
5e,puD, de ,acar el valor de la pila8 el apun(ador de la pila ,e incremen(a para l ,iguien(e
u'icacin mB, al(a en la pila/
!acar un valor de la pila en (iempo de e>ecucin (9n(e, 7 de,puD, de ,acar el valor
&&&&&&&2)/

6l Brea de la pila de'a>o de 6!P e,(B lgicamen(e vac-a8 7 ,e ,o're,cri'irB la pr1ima ve= .ue
el programe ac(ual e>ecu(e cual.uier in,(ruccin para me(er un valor en la pila/
9plicacione, de la, pila, 9plicacione, de la, pila, 9plicacione, de la, pila, 9plicacione, de la, pila,
$a7 vario, u,o, impor(an(e, para la, pila, en (iempo de e>ecucin en lo, programa,2
"1#

Cna pila e, un Brea de almacenamien(o (emporal convenien(e para lo, regi,(ro,8
cuando ,e u(ili=an para mB, de un prop,i(o/ 5e,puD, de modificarlo,8 pueden
re,(aurar,e a ,u, valore, originale,/
0uando ,e e>ecu(a la in,(ruccin 09338 la 0PC almacena la direccin de re(orno del
procedimien(o ac(ual en la pila/
9l llamar a un procedimien(o8 e, comAn .ue ,e le pa,en valore, de en(rada llamada,
argumentos8 lo, cuale, ,e me(en en la pila/
3a pila proporciona un Brea de almacenamien(o (emporal para la, varia'le, locale,8
den(ro de lo, procedimien(o,/
#n,(ruccione, PC!$ 7 PP #n,(ruccione, PC!$ 7 PP #n,(ruccione, PC!$ 7 PP #n,(ruccione, PC!$ 7 PP
#n,(r #n,(r #n,(r #n,(ruccin PC!$ uccin PC!$ uccin PC!$ uccin PC!$
3a in,(ruccin PC!$ primero decremen(a a 6!P 7 de,puD, copia un operando de origen de 16
o 32 'i(, en la pila/ Cn operando de 16 'i(, *ace .ue 6!P ,e decremen(e por 2/ Cn operando
de 32 'i(, *ace .ue 6!P ,e decremen(e por 4/ $a7 (re, forma(o, para la in,(ruccin2
PC!$ rGm16
PC!$ rGm32
PC!$ imm32

3o, valore, inmedia(o, ,iempre ,on de 32 'i(, en modo pro(egido/ 6n modo direccionamien(o
real8 lo, valore, inmedia(o, ,on de 16 'i(, de manera prede(erminada8 a meno, .ue ,e u(ilice
la direc(iva del proce,ador /386 (o ,uperior)/
#n,(ruccin PP #n,(ruccin PP #n,(ruccin PP #n,(ruccin PP
3a in,(ruccin PP primero copia el con(enido del en(ero de la pila al .ue apun(a 6!P8 en un
operando de de,(ino de 16 o 32 'i(,8 7 de,puD, incremen(e 6!P/ !i el operando e, de 16 'i(,8
6!P ,e incremen(a por 2[ ,i el operando e, de 32 'i(,8 6!P ,e incremen(a por 4[
PP rGm16
PP rGm32
#n,(ruccione, #n,(ruccione, #n,(ruccione, #n,(ruccione, PC!$F5 7 PPF5 PC!$F5 7 PPF5 PC!$F5 7 PPF5 PC!$F5 7 PPF5
3a in,(ruccin PC!$F5 me(e el regi,(ro 6F39Y! de 32 'i(, en la pila8 7 PPF5 ,aca el valor de
la pila 7 lo me(e en 6F39Y!2
pushfd
popfd

=i el programa llama a los procedimientos de la biblioteca Irvine1#& siempre se debe meter
valores de 1# bits\ si no es as%& las $unciones de consola >in1# utilizadas por la biblioteca no
$uncionar.n correctamente. =i el programa llama a procedimientos de la biblioteca Irvine"6
+modo direccionamiento real,& se pueden meter valores de "6 o 1# bits.
Los programas de "6 bits utilizan la instruccin 5D=2 para meter el registro 2L/G= de "6 bits
en la pila& ' 5A52 para sacar un valor de la pila ' meterlo en 2L/G=.
"11


3a in,(ruccin 4+ no puede u,ar,e para copiar la, 'andera, a una varia'le8 por lo .ue
PC!$F5 puede ,er la me>or forma de guardar la, 'andera,/ $a7 vece, .ue e, A(il reali=ar una
copida de re,paldo de la, 'andera,8 para poder re,(aurarla, mB, adelan(e a lo, valore, .ue
(en-an/ 9 menudo8 encerramo, un 'lo.ue de cdigo den(ro de PC!$F5 7 PPF52
pus'fd 0 Suarda banderas
0
0 A@uA va cual@uier secuencia de instruccionesD
popfd 0 -estaura las banderas
9l u(ili=ar in,(ruccione, de e,(e (ipo8 *a7 .ue a,egurarno, de .ue la ru(a de e>ecucin del
programa no ignore a la in,(ruccin PPF5/ 0uando ,e modifica un programa de,puD, de
cier(o (empo8 puede ,er dif-cil recordar conde ,e encuen(ran (oda la, in,(ruccione, .ue me(en
7 ,acan del ,(acb/ `6, impre,cindi'le (ener una documen(acin preci,aa
Cna manera meno, propen,a a errore, de guardar 7 re,(aurar la, 'andera, e, me(erla, en la
pila8 *e inmedia(amen(e de,puD, de ,acarla, 7 colocarla, en una varia'le2
6data
guardabanderas D,O-D c
6code
pus'fd 0 mete las banderas en la pila
pop guardabanderas 0 las copia en una variable
3a, ,iguien(e, in,(ruccione, re,(auran la, 'andera, de,de la mi,ma varia'le2
pus' guardabanderas 0 mete los valores guardados de las banderas
popfd 0 las copia a las banderas
PC!$958 PC!$958 PC!$958 PC!$958 PC!$98 PC!$98 PC!$98 PC!$98 PP95 7 PP9 PP95 7 PP9 PP95 7 PP9 PP95 7 PP9
3a #n,(ruccin PC!$95 me(e (odo, lo, regi,(ro, de prop,i(o general de 32 'i(, en la pila8 en
el ,iguien(e orden2 69H8 60H8 65H8 6"H8 6!P (!u valor an(e, de e>ecu(ar PC!$95)8 6"P8 6! 7
65#/ 3a in,(ruccin PP95 ,aca lo, mi,mo, regi,(ro, de la pila8 en orden inver,o/ 5e manera
,imilar8 la in,(ruccin PC!$9 .ue ,e in(rodu>o con el proce,ador 8&268 me(e lo, regi,(ro de
prop,i(o general de 16 'i(, (9H8 0H8 "H8 !P8 "P8 !#8 5#) en la pila8 en el orden li,(ado/ 3a
in,(ruccin PP9 ,aca lo, mi,mo, regi,(ro, en orden inver,o/
"13

!i ,e e,cri'e un procedimien(o para modificar vario, regi,(ro, de 32 'i(,8 ,e de'e u,ar
PC!$95 al principio del procedimien(o 7 PP95 al final para guardar 7 re,(aurar lo, regi,(ro,/
6l ,iguien(e fragmen(o de cdigo e, un e>emplo2
2iSub P-O!
pus'ad 0 guarda los registros de propsito general
6
6
mov ea1,666
mov ed1,D
mov ec1,D
6
6
popad 0 restaura los registros de propsito
general
ret
2iSub E8DP
5e'emo, recalcar una impor(an(e e1cepcin al e>emplo an(erior2 lo, procedimien(o, .ue
devuelven re,ul(ado, en uno o mB, regi,(ro, no de'en u(ili=ar PC!$9 7 PC!$95/ !upongamo,
.ue el ,iguien(e procedimien(o 3eer+alor 3eer+alor 3eer+alor 3eer+alor devuelve un en(ero en 69H[ la llamada a PP95
,o're,cri'e el valor de re(orno de 69H2
4eer)alor P-O!
pus'ad 0 guarda los registros de propsito general
6
6
mov ea1, valorTretorno
6
6
popad 0 sobrescribe EA:
ret
"15

4eer)alor E8DP
6>emplo2 #nver(ir una cadena 6>emplo2 #nver(ir una cadena 6>emplo2 #nver(ir una cadena 6>emplo2 #nver(ir una cadena
6l programa #nv0ad/a,m i(era a (ravD, de una cadena 7 me(e cada uno de ,u, carac(ere, en la
pila/ 5e,puD, ,aca la, le(ra, de la pila (en orden inver,o) 7 la, almacena de vuel(a en la mi,ma
varia'le de cadena/ 0omo la pila e, una e,(ruc(ura C6! (@ltimo en entrar? primero en salir)8
,e invier(en la, le(ra, en la cadena2
3I34E Invertir una cadena (Inv!ad6asm)
0 Este programa invierte una cadena
0 ?ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
6data
un8ombre EF3E OAbra'am 4incolnP,"
tamanio8ombre ( (U K un8ombre) K%
6code
main P-O!
0 2ete el nombre en la pila6
mov ec1,tamanio8ombre
mov esi,"
4%* movz1 ea1,un8ombreBesiC 0 obtiene el carIcter
pus' ea1 0 lo mete en la pila
inc esi
loop 4%
0 Saca el nombre de la pila, en orden inverso
0 5 lo almacena en el arreglo un8ombre6
mov ec1,tamanio8ombre
mov esi,"
4.* pop ea1
"16

mov un8ombreBESIC,al
inc esi
loop 4.
0 2uestra el nombre
mov ed1,O$$SE3 un8ombre
call ,ritestring
call !rlf
e1it
main E8DP
E8D main


5efinicin 7 u,o de lo, procedimien(o, 5efinicin 7 u,o de lo, procedimien(o, 5efinicin 7 u,o de lo, procedimien(o, 5efinicin 7 u,o de lo, procedimien(o,
!i 7a ,e *a e,(udiado un lengua>e de programacin de al(o nivel8 en(once, ,e ,a'e lo A(il .ue
puede ,er dividir lo, programa, en subrutinas/ Por lo general8 un pro'lema complicado ,e
divide en (area, ,eparada, para poder comprenderlo8 implemen(arlo 7 pro'arlo con
efec(ividad/ 6n el lengua>e en,am'lador8 por lo regular8 u,amo, el (Drmino de procedimiento
para indicar una ,u'ru(ina/ 6n o(ro, lengua>e,8 a la, ,u'ru(ina, ,e le, llama mD(odo, o
funcione,/
6n (Drmino, de programacin orien(ada a o'>e(o,8 la, funcione, o mD(odo, de una cla,e
individual ,on apena, e.uivalen(e, a la coleccin de procedimien(o, 7 da(o, encap,ulado, en
un mdulo en lengua>e en,am'lador/ 6,(e lengua>e ,e cre muc*o an(e, de la programacin
orien(ada a o'>e(o,8 por lo .ue (iene la e,(ruc(ura formal .ue ,e encuen(ra en lo, lengua>e,
orien(ado, a o'>e(o,/ 3o, programadore, de en,am'lador de'en imponer ,u propia e,(ruc(ura
formal en lo, programa,/
5irec(iva P<0 5irec(iva P<0 5irec(iva P<0 5irec(iva P<0
5efinicin de un procedimien(o 5efinicin de un procedimien(o 5efinicin de un procedimien(o 5efinicin de un procedimien(o
5e manera informal8 podemo, definir un procedimiento como un 'lo.ue de in,(ruccione, con
nom're8 .ue (ermina en una in,(ruccin de re(orno/ Para declarar un procedimien(o ,e u(ili=a
la, direc(iva, P<0 7 6N5P/ !e le de'e a,ignar un nom're (un iden(ificador vBlido)/ 0ada uno
de lo, programa, .ue *emo, e,cri(o, *a,(a a*ora con(iene un procedimien(o llamado main main main main8
por e>emplo8
"17

main P-O!
6
6
main E8DP
9l crear un procedimien(o di,(in(o al procedimien(o de inicio de un programa8 ,e de'e (erminar
con una in,(ruccin <6T8 la cual o'liga a la 0PC a regre,ar a la u'icacin de,de la .ue ,e llam
al procedimien(o2
eemplo P-O!
6
6
ret
eemplo E8D
6l procedimien(o de inicio (main main main main) e, un ca,o e,pecial8 7a .ue (ermina con la in,(ruccin e1i( e1i( e1i( e1i(/ 9l
u(ili=ar la in,(ruccin #N03C56 'rvine237inc8 e1i( e1i( e1i( e1i( e, un al-a, para una llamada a 61i(Proce,, 61i(Proce,, 61i(Proce,, 61i(Proce,,8 un
procedimien(o del ,i,(ema .ue (ermina el programa2
I8)O>E E1itProcess,"
6n el cap-(ulo 8 pre,en(aremo, la direc(iva #N+?68 .ue puede llamar a un procedimien(o 7
pa,arle argumen(o,/




6>emplo2 ,uma de (re, en(ero, 6>emplo2 ,uma de (re, en(ero, 6>emplo2 ,uma de (re, en(ero, 6>emplo2 ,uma de (re, en(ero,
+amo, a crear un procedimien(o llamado !uma56 !uma56 !uma56 !uma568 para calcular la ,uma de (re, en(ero, de
32 'i(,/ 9,umiremo, .ue ,e a,ignan en(ero, relevan(e, a 69H8 6"H 7 60H an(e, de llamar al
procedimien(o/ 6,(e procedimien(o devuelve la ,uma en 69H
SumaDe P-O!
add ea1, eb1
add ea1,ec1
=i se utiliza la instruccin IF-LD@; Irvine "6.inc& e7it se traduce a la directiva de ensamblador
GE9I-. ;sta directiva *ace (ue el ensamblador genera las siguientes dos instrucciones:
mov a',;!""\ 0 llama a la funcin ;!\ de 2SKDOS
int .%' 0 termina el programa
"18

ret
SumaDe E8DP
5ocumen(acin de lo, procedimien(o, 5ocumen(acin de lo, procedimien(o, 5ocumen(acin de lo, procedimien(o, 5ocumen(acin de lo, procedimien(o,
Cn 'uen *B'i(o .ue cul(ivar e, el de agregar una documen(acin clara 7 legi'le a nue,(ro,
programa,/ 9 con(inuacin ,e mue,(ran alguna, ,ugerencia, para la informacin .ue ,e puede
colocar al principio de cada procedimien(o2
Cna de,cripcin de (oda, la, (area, .ue reali=a el procedimien(o/
Cna li,(a de lo, parBme(ro, de en(rada 7 ,u u,o8 e(i.ue(ado, median(e una pala'ra
como <eci'e <eci'e <eci'e <eci'e/ !i alguno de lo, parBme(ro, de en(rada (iene re.uerimien(o, e,pec-fico,
para lo, valore, de en(rada8 ,e de'en mo,(rar a.u-/
Cna de,cripcin de lo, valore, devuel(o, por el procedimien(o8 e(i.ue(ado, median(e
una pala'ra como 5 55 5evu evu evu evuelve elve elve elve/
Cna li,(a de lo, re.uerimien(o, e,peciale,8 conocido, como condiciones previas .ue
de'en ,a(i,facer,e para poder llamar al procedimien(o/ Z,(o, pueden e(i.ue(ar,e
median(e la
Pala'ra <e.uiere <e.uiere <e.uiere <e.uiere/ Por e>emplo8 para un procedimien(o .ue di'u>a una l-nea de
grBfico,8 una condicin previa A(il ,er-a .ue el adap(ador de video 7a ,e de'e encon(rar
en modo grBfico,/



0on e,(a, idea, en men(e8 vamo, a agregar la documen(acin apropiada al procedimien(o
!uma5e !uma5e !uma5e !uma5e2
SumaDe P-O!
0 !alcula 5 devuelve la suma de tres enteros de 7. botsK
0 -ecibe* EA:, EE:, E!:, los tres enteros6 Pueden ser
0 con o sin signo6
0 Devuelve* EA: ( suma
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
add ea1,eb1
add ea1,ec1
SumaDe E8DP
Las eti(uetas descriptivas (ue *emos elegido& como Recibe& @evuelve ' Re(uiere& no son las )nicas\ a
menudo se utilizan otros nombres )tiles.
"19

Por lo general8 la, funcione, e,cri(a, en lengua>e de al(o nivel8 como 0 7 0EE8 devuelven
valore, de 8 'i(, en 938 valore, de 16 'i(, en 9H8 7 valore, de 32 'i(, en 69H/
#n,(ruccione, 0933 7 <6T #n,(ruccione, 0933 7 <6T #n,(ruccione, 0933 7 <6T #n,(ruccione, 0933 7 <6T
3a in,(ruccin 0933 llama a un procedimien(o8 para lo cual dirige al proce,ador para .ue
empiece la e>ecucin en una nueva u'icacin de memoria/ 6l procedimien(o u(ili=a una
in,(ruccin <6T (re(orno del procedimien(o) para regre,ar al proce,ador al pun(o en el
programa en el .ue ,e llam al procedimien(o/ $a'lando en el ,en(ido mecBnico8 la in,(ruccin
0933 me(e ,u direccin de re(orno en la pila 7 copia la direccin del procedimien(o al .ue ,e
llam en el apun(ador de in,(ruccione,/ 0uando el procedimien(o e,(B li,(o para regre,ar8 ,u
in,(ruccin <6T ,aca la direccin de re(orno de la pila 7 la coloca en el apun(ador de
in,(ruccione,/ 6n modo de 32 'i(,8 la 0PC e>ecu(a la in,(ruccin en la memoria a la .ue apun(a
el regi,(ro 6#P (regi,(ro apun(ador de in,(ruccione,)/ 6n modo de 16 'i(,8 #P apun(a a la
in,(ruccin/

6>emplo de llamada 7 re(orno 6>emplo de llamada 7 re(orno 6>emplo de llamada 7 re(orno 6>emplo de llamada 7 re(orno
!upongamo, .ue en main main main main8 una in,(ruccin 0933 ,e encuen(ra en el de,pla=amien(o
&&&&&&2&/ Por lo general e,(a in,(ruccin re.uiere de cinco '7(e, de cdigo mB.uina8 por lo
.ue la ,iguien(e in,(ruccin (4+ en e,(e ca,o) ,e encuen(ra en el de,pla=amien(o
&&&&&&252
main P-O!
""""""." call 2iSub
"""""".< mov ea1,eb1
9*ora8 ,upongamo, .ue la primera in,(ruccin e>ecu(a'le en 4i!u' 4i!u' 4i!u' 4i!u' ,e encuen(ra en el
de,pla=amien(o &&&&&&4&2
2iSub P-O!
"""""";" mov ea1,ed1
6
6
ret
2iSub E8DP
0uando ,e e>ecu(a la in,(ruccin 09338 la direccin .ue ,igue de,puD, de la llamada
(&&&&&&25) ,e me(e en la pila8 7 la direccin 4i!u' 4i!u' 4i!u' 4i!u' ,e carga en 6#P/
6>ecucin de una in,(ruccin 0933/
"3:


Toda, la, in,(ruccione, en 4i!u' 4i!u' 4i!u' 4i!u' ,e e>ecu(an *a,(a la in,(ruccin <6T/ 0uando ,e e>ecu(a la
in,(ruccin <6T8 el valor en la pila al .ue apun(a 6!P ,e ,aca 7 ,e coloca en 6#P/

6>ecucin de la in,(ruccin <6T/

3uego8 6!P ,e decremen(a8 de manera .ue apun(a al valor an(erior en la pila/

3lamada, a procedimien(o, anidada, 3lamada, a procedimien(o, anidada, 3lamada, a procedimien(o, anidada, 3lamada, a procedimien(o, anidada,
"3"

Cna llamada a procedimiento anidada ocurre cuando un procedimien(o al cual ,e llam *ace
una llamada a o(ro procedimien(o an(e, de .ue el primer procedimien(o regre,e/ !upongamo,
.ue main main main main llama a un procedimien(o llamado !u'1 !u'1 !u'1 !u'1/ 4ien(ra, !u'1 !u'1 !u'1 !u'1 ,e e>ecu(a8 *ace una
llamada al procedimien(o ,u'2 ,u'2 ,u'2 ,u'2/ 4ien(ra, !u'2 !u'2 !u'2 !u'2 ,e e>ecu(a8 *ace una llamada a !u'3 !u'3 !u'3 !u'3/ 6l
proce,o ,e mue,(ra a con(inuacin2






0uando ,e e>ecu(a la in,(ruccin <6T al final de ,u'3 ,u'3 ,u'3 ,u'38 ,aca el valor .ue *a7 en la pila^6!P_ 7 lo
coloca en el apun(ador de in,(ruccione,/ 6,(o *ace .ue la e>ecucin con(inAe en la in,(ruccin
"3#

.ue va de,puD, de la in,(ruccin .ue llama a ,u'3/ 6l ,iguien(e diagrama mue,(ra la pila8 >u,(o
an(e, de .ue ,e e>ecu(e el re(orno de ,u'3 ,u'3 ,u'3 ,u'32

5e,puD, del re(orno8 6!P apun(a a la ,iguien(e en(rada mB, al(a en la pila/ 0uando la
in,(ruccin <6T al final de !u'2 !u'2 !u'2 !u'2 e,(B a pun(o de e>ecu(ar,e8 la pila aparece como ,e mue,(ra a
con(inuacin2

Por Al(imo8 cuando !u'1 !u'1 !u'1 !u'1 regre,a8 ,e ,aca pila^6!P_ 7 ,e coloca en el apun(ador de
in,(ruccione,8 7 la e>ecucin ,e reanuda en main main main main2

6, eviden(e .ue la pila en ,- demue,(ra ,er un di,po,i(ivo A(il para recordar informacin8
inclu7endo la, llamada, a procedimien(o, anidada,/ 6n general8 la, e,(ruc(ura, (ipo pila ,e
u(ili=an en ,i(uacione, en la, lo, programa, de'en volver a (ra=ar ,u, oa,i, en un orden
e,pec-fico/
"31

Pa,o de argumen(o, (ipo regi,(ro a lo, procedimien(o, Pa,o de argumen(o, (ipo regi,(ro a lo, procedimien(o, Pa,o de argumen(o, (ipo regi,(ro a lo, procedimien(o, Pa,o de argumen(o, (ipo regi,(ro a lo, procedimien(o,
!e e,cri'imo, un procedimien(o .ue realice alguna operacin e,(Bndar8 como calcular la ,uma
de un arreglo de en(ero,8 no e, convenien(e incluir referencia, a nom're, de varia'le,
e,pec-fico, den(ro del procedimien(o/ !i ,e *ace8 el procedimien(o ,olo podrB u,ar,e con un
arreglo/ Cn me>or mD(odo e, pa,ar el de,pla=amien(o de un arreglo al procedimien(o8 7 pa,arle
un en(ero .ue e,pecifi.ue el nAmero de elemen(o, del arreglo/ 9 e,(o, valore, le, llamamo,
argumentos (o par*metros de entrada)/ 6n lengua>e en,am'lador8 e, comAn pa,ar
argumen(o, den(ro de lo, regi,(ro, de prop,i(o general/
6n la ,eccin an(erior creamo, un procedimien(o ,imple llamado !uma5e !uma5e !uma5e !uma5e8 el cual ,uma'a lo,
en(ero, en lo, regi,(ro, 69H8 6"H 7 60H 6n main main main main8 an(e, de llamar a !uma5e !uma5e !uma5e !uma5e8 a,ignamo,
valore, a 69H8 6"H 7 60H2

6data
laSuma D,O-D N
6code
main P-O!
mov ea1,%""""' 0 argumento
mov eb1,.""""' 0 argumento
mov ec1,7""""' 0 argument
call SumaDe 0 EA: ( (EA: L EE: L E!:)
mov laSuma,ea1 0 guarda la suma
5e,puD, de la in,(ruccin 09338 (enemo, la opcin de copiar la ,uma en 69H a una varia'le/
6>emplo2 !uma de un arreglo de en(ero, 6>emplo2 !uma de un arreglo de en(ero, 6>emplo2 !uma de un arreglo de en(ero, 6>emplo2 !uma de un arreglo de en(ero,
Cn (ipo 'a,(an(e comAn de ciclo8 .ue pro'a'lemen(e 7a ,e *a codificado en 0EE o en Fava8 e,
el .ue calcula la ,uma de un arreglo de en(ero,/ 6,(o e, mu7 fBcil de llevar,e a ca'o en el
lengua>e en,am'lador8 7 puede codificar,e de (al forma .ue ,e e>ecu(e lo mB, rBpido po,i'le/
Por e>emplo8 podremo, u,ar regi,(ro, en ve= de varia'le, den(ro de un ciclo/
+amo, a crear un procedimien(o llamado !uma9rreglo !uma9rreglo !uma9rreglo !uma9rreglo8 el cual reci'e do, parBme(ro, de un
programa8 e,(e procedimien(o calcula 7 devuelve la ,uma del arreglo en 69H
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
SumaArreglo P-O!
"33

0 !alcula la suma de un arreglo de enteros de 7. bits6
0 -ecibe ESI ( el desplazamiento del arreglo
0 E!: ( n?mero de elementos en el arreglo
0 Devuelve EA: ( suma de los elementos del arreglo
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
pus' esi 0 guarda ESI, E!:
pus' ec1
mov ea1," 0 establece la suma en cero
4%* add ea1,BESIC 0 agrega cada entero a la suma
add esi, 3FPE D,O-D 0 apunta al siguiente entero
loop 4% 0 repite para el tamaJo del arreglo
pop ec1 0 restaura a E!:, ESI
pop esi
ret 0 la suma estI en EA:
SumaArreglo E8DP
Nada en e,(e procedimien(o e, e,pec-fico para el nom're o el (ama@o de un cier(o arreglo/
Podr-a u(ili=ar,e en cual.uier programa .ue nece,i(e ,umar un arreglo de en(ero, de 32 'i(,/
!iempre .ue ,ea po,i'le8 de'emo, crear procedimien(o, .ue ,ean fle1i'le, 7 adap(a'le,/
%lamada a !umaArreglo 9 con(inuacin ,e mue,(ra un e>emplo de una llamada a
!uma9rreglo !uma9rreglo !uma9rreglo !uma9rreglo8 en donde ,e le pa,a la direccin de arreglo arreglo arreglo arreglo en 6!# 7 la cuen(a del arreglo en 60H8
5e,puD, de la llamada copiamo, la ,uma en 69H a una varia'le2
6data
arreglo D,O-D %""""',.""""',7""""',;""""',<""""'
laSuma D,O-D N
6code
main P-O!
mov esi,O$$SE3 arreglo 0 ESI apunta al arreglo
mov ec1, E!: 4E8S3\O$ arreglo 0 E!: ( cuenta del arreglo
"35

call SumaArreglo 0 calcula la suma
mov laSuma,ea1 0 se devuelve en EA:
5iagrama de flu>o 5iagrama de flu>o 5iagrama de flu>o 5iagrama de flu>o
Cn diagrama de flujo e, una manera 'ien e,(a'lecida de diagramar la lgica de un programa/
0ada figura en un diagrama de flu>o repre,en(a un ,olo pa,o lgico8 7 la, l-nea, con flec*a,
.ue conec(an a la, figura, mue,(ran el orden de lo, pa,o, lgico,/
Figura, 'B,ica, de un diagrama de flu>o

JFigura, mB, comune, de lo, diagrama, de flu>o/ 3a mi,ma figura ,e u(ili=a para lo,
conec(ore, inicioGfin8 a,- como para la, e(i.ue(a, .ue ,on lo, de,(ino, de la, in,(ruccione, de
,al(o/
3a, no(acione, de (e1(o como s 7 no ,e agregan a un lado del ,-m'olo de decisin8 para
mo,(rar la, direccione, de la, 'ifurcacione,/ No *a7 una po,icin re.uerida para cada flec*a
conec(ada a un ,-m'olo de deci,in/ 0ada ,-m'olo de proce,o puede con(ener una o mB,
in,(ruccione, e,(rec*amen(e relacionada,/ 3a, in,(ruccione, no nece,i(an (ener una ,in(a1i,
correc(a/ Por e>emplo8 podr-amo, ,umar 1 a 0H u,ando cual.uiera de lo, ,iguien(e, ,-m'olo,
de proce,o

+amo, 9 u(ili=ar el procedimien(o !uma9rreglo !uma9rreglo !uma9rreglo !uma9rreglo de la ,eccin an(erior para di,e@ar un
diagrama de flu>o ,imple/
"36



C(ili=a un ,-m'olo de deci,in para la in,(ruccin 3P8 7a .ue D,(a de'e de(erminar ,i va a
(ran,ferir o no el con(rol a una e(i.ue(a (con 'a,e en el valor de 0H)/ 6l fragmen(o de cdigo
mue,(ra el li,(ado del procedimien(o original/
9lmacenami 9lmacenami 9lmacenami 9lmacenamien(o 7 re,(auracin de regi,(ro, en(o 7 re,(auracin de regi,(ro, en(o 7 re,(auracin de regi,(ro, en(o 7 re,(auracin de regi,(ro,
6n el e>emplo !uma9rreglo !uma9rreglo !uma9rreglo !uma9rreglo8 60H 7 6!# ,e me(ieron en la pila al principio del procedimien(o 7 ,e
,acaron al final/ 6,(a accin e, comAn en la ma7or-a de lo, procedimien(o, .ue modifican
regi,(ro,/ !iempre *a7 .ue guardar 7 re,(aurar lo, regi,(ro, .ue modifican un procedimien(o8
para .ue el programa .ue *ace la llamada pueda e,(ar ,eguro de .ue no ,e ,o're,cri'irB
ninguno de ,u, propio, valore, de regi,(ro/ 3a e1cepcin a e,(a regla per(enece a lo, regi,(ro,
.ue ,e u(ili=an como valore, de re(orno8 por lo general8 69H/ No ,e de'en me(er 7 ,acar/
"37

perador C!6! perador C!6! perador C!6! perador C!6!
6l operador C!6! >un(o con la direc(iva P<08 no, permi(e pre,en(ar lo, nom're, de (odo, lo,
regi,(ro, .ue ,e modifican den(ro de un procedimien(o/ C!6! indica al en,am'lador .ue de'e
*acer do, co,a,2 primero8 de'e generar la in,(ruccin PC!$ .ue ,e guarden lo, regi,(ro, en la
pila8 al principio del procedimien(o/ 5e,puD,8 de'e generar in,(ruccione, PP para re,(aurar
lo, valore, de lo, regi,(ro, al final del procedimien(o/ 6l operador C!6! va inmedia(amen(e
de,puD, de P<08 7 va ,eguido de una li,(a de regi,(ro, en la mi,ma l-nea ,eparado, por
e,pacio o (a'uladore, (no por coma,)/
6l procedimien(o !uma9rreglo !uma9rreglo !uma9rreglo !uma9rreglo u(ili=a in,(ruccione, PC!$ 7 PP para almacenar 7 re,(aurar lo,
regi,(ro, 6!# 7 60H/ 6l operador C!6! puede *acer lo mi,mo8 con mB, facilidad2
SumaArreglo P-O! &'E' esi ecx
mov ea1," 0 establece la suma a cero
4%*
add ea1,BesiC 0 agrega cada entero a suma
add esi,; 0 apunta a l siguiente entero
loop 4% 0 repite para el tamaJo del arreglo
ret 0 la suma estI en EA:
SumaArreglo E8DP
6l cdigo corre,pondien(e .ue genera el en,am'lador no, mue,(ra el efec(o de C!6!2
SumaArreglo P-O!
pus( esi
pus( ecx
mov ea1," 0 establece la suma a cero
4%*
add ea1,BesiC 0 agrega cada entero a la suma
add esi,; 0 apunta al siguiente entero
loop 4% 0 repite para el tamaJo del arreglo
pop ecx
pop esi
"38

ret
SumaArreglo E8DP




xcepcin $a7 una impor(an(e e1cepcin a nue,(ra regla e1i,(en(e acerca de guardar lo,
regi,(ro, .ue ,e aplica cuando un procedimien(o devuelve un valor en un regi,(ro (Por lo
general8 69H)/ 6n e,(e ca,o8 el regi,(ro de re(orno de'er-a me(er,e 7 ,acar,e de la pila/ Por
e>emplo8 en el procedimien(o !uma5e !uma5e !uma5e !uma5e8 ,i me(emo, 7 ,acamo, el regi,(ro 69H8 ,e pierde el
valor de re(orno del procedimien(o2
SumaDe P-O! 0 suma de tres enteros
pus' ea1 0 guarda EA:
add ea1,eb1 0 calcula la suma
add ea1,ec1 0 de EA:, EE:, E!:
pop ea1 0 se perdi la sumad
ret
SumaDe E8DP
5i,e@o de programa, median(e el u,o de procedimien(o, 5i,e@o de programa, median(e el u,o de procedimien(o, 5i,e@o de programa, median(e el u,o de procedimien(o, 5i,e@o de programa, median(e el u,o de procedimien(o,
0ual.uier aplicacin de programacin poco comAn (iende a involucrar una variedad de (area,
di,(in(a,/ Podr-amo, codificar (oda, la, (area, en un ,olo procedimien(o8 pero el programa
,er-a dif-cil de leer 7 man(ener/ 6, me>or dedicar un ,olo procedimien(o para cada (area/
9l crear un programa8 ,e de'e crear un con>un(o de e,pecificacione, en la, .ue ,e mencione
con e1ac(i(ud lo .ue ,e ,upone .ue de'e *acer el programa/ 3a, e,pecificacione, de'en ,er el
re,ul(ado de un cuidado,o anBli,i, del pro'lema .ue (ra(amo, de re,olver/ 5e,puD, ,e di,e@a
el programa de acuerdo con la, e,pecificacione,/ Cn mD(odo de di,e@o e,(Bndar e, dividir un
pro'lema general en (area, di,cre(a,[ a e,(e proce,o ,e le conoce como descomposicin
funcional8 o dise,o arriba6abajo/ 6,(e mD(odo depende de cier(o, principio, 'B,ico,2
Cn pro'lema e1(en,o puede dividir,e con mB, facilidad en pe.ue@a, (area,/
Cn programa e, mB, fBcil de man(ener ,i cada procedimien(o ,e prue'a por ,eparado/
Cn di,e@o de arri'a:a'a>o no, permi(e ver cuBn(o, procedimien(o, e,(Bn relacionado,
en(re ,-/
Tip de depuracin: al utilizar el depurador de <icroso$t Visual =tudio& =e puede verlas instrucciones
de m.(uinas ocultas (ue generan las directivas ' operadores avanzados de </=<& seleccionamos
la opcin @esensamblado en el men) :epurar c ventanas. ;sta ventana mostrar. el cdigo de
$uente de los programas& junto con las instrucciones m.(uinas ocultas (ue genera el ensamblador.
"39

0uando ,e e,(B ,eguro del di,e@o en general8 e, mB, fBcil concen(rar,e en lo,
de(alle,8 e,cri'iendo el cdigo .ue implemen(e cada procedimien(o/
6n la ,iguien(e ,eccin demo,(raremo, el mD(odo de di,e@o de arri'a:a'a>o para un programa
.ue reci'e en(ero, como en(rada 7 calcula ,u ,uma/ 9un.ue el programa e, ,imple8 el mi,mo
mD(odo puede aplicar,e a programa, de ca,i cual.uier (ama@o/
Programa para ,umar en(ero, (di,e@o) Programa para ,umar en(ero, (di,e@o) Programa para ,umar en(ero, (di,e@o) Programa para ,umar en(ero, (di,e@o)
9 con(inuacin ,e mue,(ran la, e,pecificacione, para un programa ,imple8 al .ue llamaremo,
!uma de en(ero,2


6l ,iguien(e ,eudocdigo mue,(ra cmo podr-amo, dividir la, e,pecificacione, en (area,2
Programa de suma de enteros
Pedir al usuario tres enteros
!alcular la suma del arreglo
2ostrar la suma
6n nue,(ra preparacin para e,cri'ir un programa8 vamo, a a,ignar un nom're de
procedimien(o a cada (area
2ain
PedirEntero
SumaArreglo
2ostrarSuma
6n el lengua>e en,am'lador8 la, (area, de en(rada:,alida re.uieren8 por lo general8 la
implemen(acin de cdigo de(allado/ Para reducir par(e de e,(e de(alle8 podemo, llamar a
procedimien(o, .ue 'orren la pan(alla8 mue,(ren una cadena8 reci'e un en(ero como en(rada8
7 mue,(re un en(ero en pan(alla2

2ain
!lrscr 0 borra la pantalla
PedirEnteros
,riteString 0 muestra una cadena
-rear un programa (ue pida al usuario tres enteros de 1# bits& los almacene en un arreglo&
calcule la suma del arreglo ' muestre la suma en la pantalla.
"5:

-eadInt 0 recibe un entero como entrada
SumaArreglo 0 suma los enteros
2ostrarSuma
,riteString 0 muestra una cadena
,riteInt 0 muestra un entero
Diagrama de estructura 6l diagrama a con(inuacin8 conocido como diagrama de estructura8
de,cri'e la e,(ruc(ura del programa/ 3o, procedimien(o, de la 'i'lio(eca de enlace e,(Bn
,om'reado,/
Programa maestro +er,in m-nima del programa/ 6,(e programa ,lo con(iene
procedimien(o, vac-o, (o ca,i vac-o,)/ 6l programa ,e en,am'la 7 ,e e>ecu(a8 pero en realidad
no *ace nada A(il/ Cn programa mae,(ro no, proporciona la opor(unidad de a,ignar (oda, la,
llamada, a lo, procedimien(o,8 e,(udiar dependencia en(re ello, 7 po,i'lemen(e me>orar el
di,e@o e,(ruc(ura an(e, de codificar lo, de(alle,/ !e de'e u,ar comen(ario, en cada
procedimien(o para e1plicar ,u prop,i(o 7 de lo, re.uerimien(o, de lo, parBme(ro,/
6>emplo de Programa mae,(ro2
3I34E Programa de suma de enteros (Suma%6asm)
0 Este programa pide al usuario tres enteros,
0 los guarda en un arreglo, calcula la suma del
Programa de
,uma (main)
0lr,cr Pedir6n(ero,
;ri(e!(ring <ead#n(
!uma9rreglo 4o,(rar!uma
;ri(e!(ring ;ri(e#n(
"5"

0 arreglo 5 muestra la suma6
I8!49DE Irvine7.6inc
6data
6code
main P-O!
0 Procedimiento principal de control del programa6
0 4lama a* !lrscr, PedirEnteros, SumaArreglo, 2ostrarSuma
e1it
main E8DP
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
PedirEnteros P-O!
0
0 Pide tres enteros al usuario, 5 los inserta
0 en un arreglo6
0 -ecibe* ESI apunta a un arreglo de entero tipo doble palabra, E!: (
tamaJo del arrego6
0 Devuelve* el arreglo contiene los valores
0 @ue introduo el usuario
0 4lama a * -eadInt, ,riteString
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
ret
PedirEnteros E8DP
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
SumaArreglo P-O!
0
0 !alcula la suma de un arreglo de enteros de 7. bits6
0 -ecibe* ESI apunta al arreglo, E!: ( tamaJo del arreglo
"5#

0 Devuelve* EA: ( suma de los elementos del arreglo
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
ret
SumaArreglo E8DP
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
2ostrarSuma P-O!
0
0 2uestra la suma en la pantalla
0 -ecibe* EA: ( la suma
0 4lama a* ,riteString, ,riteInt
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
ret
2ostrarSuma E8DP
E8D main
JCna e(i.ue(a de cdigo ,eguida de do, pun(o, e, local para ,u procedimien(o circundan(e/
Cna e(i.ue(a ,eguida de 22 e, glo'al8 lo .ue *ace acce,i'le de,de cual.uier in,(ruccin en el
mi,mo arc*ivo cdigo de fuen(e/
6 66 6: :: :Proce,amien(o condicional Proce,amien(o condicional Proce,amien(o condicional Proce,amien(o condicional
#n,(ruccione, 'ooleana, 7 de comparacin #n,(ruccione, 'ooleana, 7 de comparacin #n,(ruccione, 'ooleana, 7 de comparacin #n,(ruccione, 'ooleana, 7 de comparacin
6mpe=aremo, nue,(ro e,(udio del proce,amien(o condicional (ra'a>ando a nivel 'inario8 con
cua(ro operacione, 'B,ica, del Blge'ra 'ooleana2 9N58 <8 H< 7 NT/ 6,(a, operacione, ,e
u(ili=an en el di,e@o del *ard%are 7 ,of(%are compu(acional/
6l con>un(o de in,(ruccione, #9:32 con(iene la, in,(ruccione, 9N58 <8 H<8 NT8 T6!T 7 "Top8
la, cuale, implemen(an de manera direc(a la, operacione, 'ooleana, en(re '7(e,8 pala'ra, 7
do'le, pala'ra,/
peracin peracin peracin peracin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
9N5 peracin 9N5 'ooleana en(re un operando de origen 7 un operando de de,(ino
< peracin < 'ooleana en(re un operando de origen 7 un operando de de,(ino
"51

H< peracin < e1clu,ivo 'ooleana en(re un operando de origen 7 un operando de
de,(ino
NT peracin NT 'ooleana ,o're un operando de de,(ino
T6!T peracin 9N5 'ooleana impl-ci(a en(re un operando de origen 7 uno de de,(ino
.ue8 ac(ivan la, 'andera, de la 0PC en forma apropiada
"T8"T08"T<8"T! 0opia el 'i( n del operando de origen a la 'andera de 9carreo8 7
complemen(aGre,(a'leceGac(iva el mi,mo 'i( en el operando de de,(ino

3a, 'andera, de la 0PC 3a, 'andera, de la 0PC 3a, 'andera, de la 0PC 3a, 'andera, de la 0PC
3a, in,(ruccione, 'ooleana, afec(an a la, 'andera, 0ero8 9carreo8 !igno8 5e,'ordamien(o 7
paridad/ $e a.u- un 'reve repa,o de ,u ,ignificado2
3a 'andera 0ero ,e ac(iva cuando el re,ul(ado de una operacin e, igual a cero/
3a 'andera de 9carreo ,e ac(iva cuando una in,(ruccin genera un re,ul(ado
dema,iado grande (o mu7 pe.ue@o) para el operando de de,(ino8 cuando ,e le
con,idera un en(ero ,in ,igno/
3a 'andera !igno e, una copia del 'i( ,uperior del operando de de,(ino8 indicando .ue
e, nega(ivo ,i e,(B ac(iva 7 po,i(ivo ,i e,(B 'orrada/ (!e a,ume .ue 0ero e, po,i(ivo)/
3a 'andera de 5e,'ordamien(o ,e ac(iva cuando una in,(ruccin genera un re,ul(ado
invBlido con ,igno/
3a 'andera de Paridad ,e ac(iva cuan una in,(ruccin genera un nAmero par de 'i(, 1
en el '7(e inferior del operando de de,(ino/
#n,(ruccin 9N5 #n,(ruccin 9N5 #n,(ruccin 9N5 #n,(ruccin 9N5
3a in,(ruccin 9N5 reali=a una operacin 9N5 'ooleana ( a nivel de 'i(,) en(re cada par de 'i(,
coinciden(e, en do, operando,8 7 ,e coloca el re,ul(ado en el operando de de,(ino2
9N5 destino?origen
!e permi(e la, ,iguien(e, com'inacione, de operando,2
A8D reg,reg
A8D reg,mem
A8D reg,imm
A8D mem,reg
A8D mem,imm
"53

3o, operando, pueden ,er de 88 16 o 32 'i(,8 7 de'en (ener el mi,mo (ama@o/ Para cada 'i(
coinciden(e en lo, do, operando,8 ,e aplica la ,iguien(e regla[ ,i am'o, 'i(, ,on iguale, a 18 el
'i( de re,ul(ado e, 1[ en ca,o con(rario8 e, &/ 3a ,iguien(e (a'la de verdad del cap-(ulo 1
nom'ra a lo, 'i(, de en(rada como x 7 y/ 3a (ercera columna mue,(ra el valor de la e1pre,in
1 11 1O7 77 72
H HH H K KK K HOK HOK HOK HOK
& & &
& 1 &
1 & &
1 1 1

9 menudo8 la in,(ruccin 9N5 ,e u(ili=a para 'orrar lo, 'i(, ,eleccionado, 7 pre,ervar o(ro,/ 6n
el ,iguien(e e>emplo8 lo, cua(ro 'i(, ,uperiore, ,e 'orran 7 lo, cua(ro 'i(, inferiore,
permanecen ,in cam'io,2

3a, ,iguien(e, in,(ruccione, llevan a ca'o e,(a operacin2
mov al,""%%%"%%b
and al,""""%%%%b
3o, cua(ro 'i(, inferiore, podr-an con(ener informacin A(il8 mien(ra, .ue no no, impor(an lo,
cua(ro 'i(, ,uperiore,/ 6, A(il pen,ar en e,(a (Dcnica como una e1(raccin de 'i(,8 7a .ue lo,
cua(ro 'i(, inferiore, ,e ],acanW de 93/
$anderas 3a in,(ruccin 9N5 ,iempre 'orra la, 'andera, 5e,'ordamien(o 7 9carreo/ 4odifica
la, 'andera, !igno8 0ero 7 Paridad de acuerdo con el valor del operando de de,(ino/
0onver,in de carac(ere, a ma7A,cula, 0onver,in de carac(ere, a ma7A,cula, 0onver,in de carac(ere, a ma7A,cula, 0onver,in de carac(ere, a ma7A,cula,
3a in,(ruccin 9N5 proporciona una manera ,encilla de (raducir una le(ra de minA,cula a
ma7A,cula,/ !i comparamo, lo, cdigo, 9!0## de la le(ra 9 99 9 7 de la le(ra a aa a8 .ueda claro .ue ,lo
el 'i( 5 e, diferen(e2
"%)""""% ( /%' (GaH)
"%%""""% ( ;%' (GAH)
"55

6l re,(o de lo, carac(ere, alfa'D(ico, (ienen la mi,ma relacin/ !i aplicamo, la operacin 9N5
a cual.uier carBc(er con el nAmero 11&11111 'inario8 (odo, lo, 'i(, .uedan ,in cam'io
e1cep(o el 'i( 58 .ue ,e 'orra/ 6n el ,iguien(e e>emplo8 (odo, lo, carac(ere, en un arreglo ,e
convier(en en ma7A,cula,2
6data
arreglo EF3E <" D9P(N)
6code
mov ec1,4E8S3\O$ arreglo
mov esi,O$$SE3 arreglo
4%* and EF3E P3- BesiC,%%"%%%%%b 0 borra el bit <
inc esi
loop 4%
#n,(ruccin < #n,(ruccin < #n,(ruccin < #n,(ruccin <
3a in,(ruccin < reali=a una operacin 'ooleana en(re cada par de 'i(, coinciden(e, en do,
operando,8 7 coloca el re,ul(ado en el operando de de,(ino2
O- destino, origen
3a in,(ruccin < u(ili=a la, mi,ma, com'inacione, de operando, .ue la in,(ruccin 9N52
A8D reg,reg
A8D reg,mem
A8D reg,imm
A8D mem,reg
A8D mem,imm
3o, operando, pueden ,er de 88 16 o 32 'i(,8 7 de'en (ener el mi,mo (ama@o/ Para cada 'i(
coinciden(e en lo, do, operando,8 el 'i( de ,alida e, 1 cuando por lo meno, uno de lo, 'i(, de
en(rada e, 1/ 3a ,iguien(e (a'la de verdad (cap-(ulo 1) de,cri'e la e1pre,in 'ooleana H HH HvK KK K2
H HH H K KK K HvK HvK HvK HvK
& & &
& 1 1
"56

1 & 1
1 1 1
9 menudo8 la in,(ruccin < ,e u(ili=a para ac(ivar lo, 'i(, ,eleccionado, 7 pre,ervar lo,
demB,/ 6n la ,iguien(e figura8 ,e aplica un < en(re 3"* 7 &F*/ 3o, cua(ro 'i(, inferiore, del
re,ul(ado ,e ac(ivan 7 lo, cua(ro 'i(, ,uperiore, permanecen ,in cam'io2

3a in,(ruccin < puede u,ar,e para conver(ir un '7(e .ue con(enga un en(ero en(re & 7 P8 en
un d-gi(o 9!0##/ para *acer e,(o8 de'emo, ac(ivar lo, 'i(, 4 7 58 por e>emplo8 93 R &5*8
podemo, aplicarle un < con 3&* para conver(irlo en el cdigo 9!0## para el d-gi(o 5 (35*)2

3a, in,(ruccione, en lengua>e mB.uina para *acer e,(o ,on2
mov dl,< 0 valor binario
or dl,7" 0 lo convierte a AS!II
$anderas 3a in,(ruccin < ,iempre 'orra la, 'andera, 5e,'ordamien(o 7 9carreo/ 4odifica
la, 'andera, !igno8 0ero 7 Paridad de acuerdo con el valor del operando de de,(ino/ Por
e>emplo8 ,e puede aplicar < a un nAmero con ,- mi,mo (o cero) para o'(ener cier(a
informacin de ,u valor2
or al,al
3o, valore, de la, 'andera, 0ero 7 !igno indican lo ,iguien(e acerca del con(enido de 932
"andera 0ero "andera 0ero "andera 0ero "andera 0ero "andera !igno "andera !igno "andera !igno "andera !igno 6l valor en 93 e,d 6l valor en 93 e,d 6l valor en 93 e,d 6l valor en 93 e,d
0ero 0ero 4a7or .ue cero
9c(iva 0ero #gual a cero
0ero 9c(iva 4eno, .ue cero

#n,(ruccin H< #n,(ruccin H< #n,(ruccin H< #n,(ruccin H<
"57

3a in,(ruccin H< reali=a una operacin 'ooleana < e1clu,ivo en(re cada par de 'i(,
coinciden(e, en do, operando,8 7 almacena el re,ul(ado en el operando de de,(ino2
:O- destino,origen
3a in,(ruccin H< u(ili=a la, mi,ma, com'inacione, 7 (ama@o, de operando, .ue la,
in,(ruccione, 9N5 7 </ Para cada 'i( coinciden(e en lo, do, operando,8 ,e aplica lo ,iguien(e2
!i am'o, 'i(, ,on iguale, (am'o, & o am'o, 1)8 el re,ul(ado e, &2 en cual.uier o(ro ca,o8 el
re,ul(ado e, 1/ 3a ,iguien(e (a'la de verdad pre,cri'e la e1pre,in 'ooleana H HH H 1or K KK K2
H HH H K KK K H HH H 1or K KK K
& & &
& 1 1
1 & 1
1 1 &

Cn 'i( al .ue ,e le aplica < e1clu,ivo con & re(iene ,u valor8 7 un 'i( al .ue ,e le aplica <
e1clu,ivo con 1 cam'ia el valor opue,(o (,e complemen(a)/ H< ,e invier(e a ,- mi,mo cuando
,e aplica do, vece, el mi,mo operando/ 3a ,iguien(e (a'la de verdad mue,(ra .ue8 cuando ,e
aplica < e1clu,ivo al 'i( 1 con el 'i( 7 do, vece, a ,u valor original2


H HH H K KK K H HH H 1or K KK K (H HH H 1or K KK K) 1or K KK K
& & & &
& 1 1 &
1 & 1 1
1 1 & 1
0omo veremo, e,(a propiedad e, ]rever,i'leW de H< lo convier(e en una *erramien(a ideal
para una forma ,imple de cifrado ,imD(rico/
$anderas 3a in,(ruccin H< ,iempre 'orra la, 'andera, 5e,'ordamien(o 7 9carreo/ 4odifica
la, 'andera, !igno8 0ero 7 Paridad de acuerdo con el valor de operando de de,(ino/
"omprobacin de la bandera Paridad 3a 'andera paridad indica ,i el bit m*s inferior del
re,ul(ado de una operacin a nivel de 'i(, o ari(mD(ica (iene un nAmero par o impar de 'i(,
.ue ,ean 1/ 3a 'andera ,e ac(iva cuando la paridad e, par 7 ,e 'orra cuando la paridad e,
"58

impar/ Cna manera de compro'ar la paridad de un nAmero ,in cam'iar ,u valor e, aplicar un
< e1clu,ivo con puro, cero,2
mov al,%"%%"%"%b 0 < bits ( paridad impar
1or al," 0 la bandera de Paridad se borra (PO)
mov al,%%""%%""b 0 ; bits ( paridad par
1or al," 0 4a bandera Paridad se activa (PE)
9 menudo8 lo, depuradore, u(ili=an P6 para indicar paridad par o P para indicar paridad
impar/
Paridad de /0 bits Para compro'ar la paridad de un regi,(ro de 16 'i(,8 ,e aplica un <
e1clu,ivo en(re lo, '7(e, ,uperior e inferior2
mov a1,/;!%' 0 "%%" "%"" %%"" """%
1or a',al 0 la bandera Paridad se activa (PE)
#maginemo, .ue lo, 'i(, ac(ivo, (iguale, a 1) en cada regi,(ro ,on miem'ro, de un con>un(o de
8 'i(,/ 3a in,(ruccin H< pone en cero, (odo, lo, 'i(, .ue per(enecen a la in(er,eccin de lo,
con>un(o,/ H< (am'iDn forma la unin en(re lo, 'i(, re,(an(e,/ 3a paridad de e,(a unin ,erB
la mi,ma .ue la paridad del en(ero comple(o de 16 'i(,/
QLuD *a7 acerca de lo, valore, de 32 'i(,M !i numeramo, lo, '7(e, de "& a "38 podemo,
calcular la paridad como "& H< "1 H< "2 H< "3/

#n,(ruccin NT #n,(ruccin NT #n,(ruccin NT #n,(ruccin NT
3a #n,(ruccin NT cam'ia el valor de (odo, lo, 'i(, en un operando/ 9l re,ul(ado ,e le llama
complemento a uno/ !e permi(e lo, ,iguien(e, (ipo, de operando,2
8O3 reg
8O3 mem
Por e>emplo8 el complemen(o a uno de F&* e, &F*2
mov al,%%%%""""b
not al 0 A4 ( """"%%%%b
$anderas Ninguna 'andera ,e ve afec(ada por la in,(ruccin NT/
#n,(ruccin T6!T #n,(ruccin T6!T #n,(ruccin T6!T #n,(ruccin T6!T
"59

3a in,(ruccin T6!T reali=a una operacin 9N5 impl-ci(a en(re cada par de 'i(, coinciden(e, en
do, operando,8 7 ac(iva la, 'andera, de manera acorde/ 3a Anica diferencia en(re T6!T 7 9N5
e, .ue T6!T no modifica el operando de de,(ino/ 3a in,(ruccin T6!T permi(e la, mi,ma,
com'inacione, de operando, .ue la in,(ruccin 9N5/ 6n e,pecial8 T6!T e, valio,a para
averiguar ,i lo, 'i(, individuale, en un operando e,(Bn ac(ivo,/
jemplo1 prueba de varios bits 3a in,(ruccin T6!T puede compro'ar vario, 'i(, a la ve=/
!upongamo, .ue de,eamo, ,a'er ,i el 'i( & o el 'i( 3 e,(Bn ac(ivo, en el regi,(ro 93/ Podemo,
u,ar la ,iguien(e in,(ruccin para averiguarlo2
test al,""""%""%b 0 prueba los bits " 5 7
(9l valor &&&&1&&1 en e,(e e>emplo ,e llama m*scara de bits)/ 5e lo, ,iguien(e, con>un(o, de
da(o, de e>emplo/ Podemo, inferir .ue la 'andera 0ero ,e ac(iva ,lo cuando (odo, lo, 'i(, de
prue'a e,(Bn en cero2
""%""%"% WK valor de entrada
""""%""% WKvalor de prueba
"""""""% WKresultado* [$ ( "

""%""%"" WKvalor de entrada
""""%""% WK valor de prueba
"""""""" WKresultado* [$ ( %
$anderas 3a in,(ruccin T6!T ,iempre 'orra la, 'andera, 5e,'ordamien(o 7 9carreo/
4odifica la, 'andera, !igno8 0ero 7 Paridad de la mi,ma forma .ue la in,(ruccin 9N5/
#n,(ruccin 04P #n,(ruccin 04P #n,(ruccin 04P #n,(ruccin 04P
3a in,(ruccin 04P (comparar) re,(a impl-ci(amen(e un operando de origen de un operando de
de,(ino/ Ninguno de lo, operando, ,e modifica2
!2P destino,origen
04P u(ili=a la, mi,ma, com'inacione, de operando, .ue la in,(ruccin 9N5/
$anderas 3a in,(ruccin 04P cam'ia la, 'andera, 5e,'ordamien(o8 !igno8 0ero8 9carreo8
9carreo au1iliar 7 Paridad de acuerdo con el valor .ue el operando de de,(ina de'er-a (ener ,i
,e *u'iera u,ado la in,(ruccin !C"/ 0uando ,e comparan do, operando, ,in ,igno8 la,
'andera, 0ero 7 9carreo indican la, ,iguien(e, relacione, en(re lo, operando,2
<e,ul(ado, de 04P <e,ul(ado, de 04P <e,ul(ado, de 04P <e,ul(ado, de 04P IF IF IF IF 0F 0F 0F 0F
"6:

5e,(ino U origen & 1
5e,(ino V origen & &
5e,(ino R origen 1 &
0uando ,e comparan do, operando, con !igno8 la, 'andera, !igno8 0ero 7 5e,'ordamien(o
indican la, ,iguien(e, relacione, en(re lo, operando,2
<e,ul(ado, de 04P <e,ul(ado, de 04P <e,ul(ado, de 04P <e,ul(ado, de 04P "andera, "andera, "andera, "andera,
5e,(ino U origen !F eF
5e,(ino V origen !F R F
5e,(ino R origen IF R 1
04P e, una valio,a *erramien(a para crear e,(ruc(ura, lgica, condicionale,/ 0uando ,e le
coloca de,puD, de 04P una in,(ruccin de ,al(o condicional8 el re,ul(ado e, el e.uivalen(e en
lengua>e en,am'lador de una in,(ruccin #F/
jemplos 9nalicemo, (re, fragmen(o, de cdigo .ue mue,(ran cmo ,e ven afec(ada, la,
'andera, por la in,(ruccin 04P/ 0uando 9H e, igual a 5 7 ,e compara con 1&8 la 'andera de
9carreo ,e ac(iva de'ido a .ue para re,(ar 1& de 5 ,e re.uiere pedir pre,(ado2
mov a1,<
cmp a1,%" 0 [$ ( " 5 !$ ( %
9l comparar 1&&& con 1&&& ,e ac(iva la 'andera 0ero8 7a .ue al re,(ar el origen del de,(ino ,e
produce un cero2
mov ea1,%"""
mov c1,%"""
cmp c1,a1 0 [$ ( % 5 !$ ( "
9l comparar 1&5 con & ,e 'orran la, 'andera, 0ero 7 9carreo8 7a .ue 1&5 e, ma7or .ue &2
mov si,%"<
cmp si," 0 [$ ( " 5 !$ ( "
0omo e,(a'lecer 7 'orrar 'andera, individuale, de la 0PC 0omo e,(a'lecer 7 'orrar 'andera, individuale, de la 0PC 0omo e,(a'lecer 7 'orrar 'andera, individuale, de la 0PC 0omo e,(a'lecer 7 'orrar 'andera, individuale, de la 0PC
Q0mo podemo, ac(ivar o 'orrar fBcilmen(e la, 'andera, 0ero8 !igno8 9carreo 7
5e,'ordamien(oM $a7 varia, forma,8 la ma7or-a re.uiere modificar el operando de de,(ino/
Para ac(ivar la 'andera 0ero8 ,e aplica una operacin T6!T o 9N5 a un operando con cero[
para 'orrar la 'andera 0ero8 ,e aplica un < a un operando con 12
"6"

test al," 0 activa la bandera !ero
and al," 0 activa la bandera !ero
or al,% 0 borra la bandera !ero
T6!T no modifica el operando8 mien(ra, .ue 9N5 ,-/ Para ac(ivar la 'andera !igno8 ,e de'e
aplicar un < al 'i( mB, al(o de un operando con 1/ Parra 'orrar la 'andera !igno8 ,e de'e
aplicar un 9N5 al 'i( mB, al(o con &2
or al,#"' 0 activa la bandera Signo
and al,M$' 0 borra la bandera signo
Para ac(ivar la 'andera 9carreo8 ,e de'e u,ar la in,(ruccin !T0[ para 'orrar la 'andera
9carreo8 0302
stc 0 activa la bandera Acarreo
clc 0 borra la bandera Acarreo
Para ac(ivar la 'andera 5e,'ordamien(o8 ,e de'e ,umar do, valore, de '7(e po,i(ivo, .ue
produ=can una ,uma nega(iva/ Para 'orrar la 'andera 5e,'ordamien(o8 ,e de'e aplicar un <
a un operando con &2
mov al,M$' 0 al ( L%.M
inc al 0 al ( #"' (K%.#), O$ ( %
or ea1," 0 borra la bandera Desbordamiento
!al(o, condicionale, !al(o, condicionale, !al(o, condicionale, !al(o, condicionale,
6,(ruc(ura, condicionale, 6,(ruc(ura, condicionale, 6,(ruc(ura, condicionale, 6,(ruc(ura, condicionale,
No *a7 e,(ruc(ura, lgica, de al(o nivel en el con>un(o de in,(ruccione, #9:328 pero podemo,
implemen(ar cual.uier e,(ruc(ura lgica8 ,in impor(ar .uD (an comple>a ,ea8 median(e una
com'inacin de comparacione, 7 ,al(o,/ !e re.uieren do, pa,o, para e>ecu(ar una in,(ruccin
condicional2 6n primer lugar8 un operando como 04P8 9N5 o !C" modifica la, 'andera, de la
0PC/ 6n ,egunda lugar8 una in,(ruccin de ,al(o condicional prue'a la, 'andera, 7 provoca
una 'ifurcacin a una nueva direccin/ +eamo, un par de e>emplo,2
jemplo / 3a in,(ruccin 04P en el ,iguien(e e>emplo compara a 93 con 0ero/ 3a in,(ruccin
FI (,al(a ,i e, 0ero) ,al(a a la e(i.ue(a 31 31 31 31 ,i la in,(ruccin 04P ac(iv la 'andera 0ero2
cmp al,"
z 4% 0 salta si [$ ( %
6
"6#

6
4.*
#n,(ruccin Fcond #n,(ruccin Fcond #n,(ruccin Fcond #n,(ruccin Fcond
Cna in,(ruccin de ,al(o condicional ,e 'ifurca *acia una e(i.ue(a de de,(ino cuando una
'andera de condicin e, verdadera/ !i la 'andera de condicin e, fal,a8 ,e e>ecu(a la
in,(ruccin .ue ,igue >u,(o de,puD, del ,al(o condicional/ 3a ,in(a1i, e, la ,iguien(e
Jcond destino
cond ,e refiere a una 'andera de condicin .ue iden(ifica el e,(ado de una o mB, 'andera,/
Por e>emplo2
Fc !al(a ,i *a7 acarreo (,i la 'andera 9carreo e,(B ac(iva)
Fnc !al(a ,i no *a7 acarreo (,i la 'andera 9carreo no e,(B ac(iva)
F= !al(a ,i e, cero (,i la 'andera 0ero e,(B ac(iva)
Fn= !al(a ,i no e, cero (,i la 'andera 0ero no e,(B ac(iva)

3a, 'andera, ca,i ,iempre ,e ac(ivan median(e la, in,(ruccione, ari(mD(ica,8 de comparacin
7 'ooleana,/ 3a, in,(ruccione, de ,al(o condicional evalAan lo, e,(ado, de la, 'andera,8 7 la,
u(ili=an para de(erminar ,i ,e de'en reali=ar ,al(o, o no/
%imitaciones 5e manera prede(erminada8 49!4 re.uiere .ue el destino del ,al(o ,ea una
e(i.ue(a den(ro del procedimien(o ac(ual (en el cap-(ulo 5 mencionamo, e,(o con F4P)/ Para
lidiar e,(a re,(riccin8 podemo, declarar una e(i.ue(a glo'al (,eguida por 22)2
c 2iEti@ueta
6
6
2iEti@ueta**
6n general8 de'emo, evi(ar ,al(ar fuera del procedimien(o ac(ual8 7a .ue e,(o dificul(a la
depuracin de un programa/
Uso de la instruccin "MP !upongamo, .ue de,eamo, ,al(ar a la u'icacin 31 cuando 9H
e, igual a 5/ 6n el ,iguien(e e>emplo8 ,upongamo, .ue 9H e, igual a 52 en(once, la in,(ruccin
04P ac(iva la 'andera 0ero 7 la in,(ruccin F6 ,al(a de'ido a .ue la 'andera 0ero e,(B ac(iva2
cmp a1,<
"61

e 4% 0 salta si es igual
!i 9H no fuera igual a 58 04P 'orrar-a la 'andera 0ero 7 la in,(ruccin F6 no ,al(ar-a/ 6n el
,iguien(e e>emplo8 el ,al(o ,e reali=a de'ido a .ue 9H e, menor .ue 62
mov a1,<
cmp a1,//
l 4% 0 salta si es menor
6n el ,iguien(e e>emplo8 el ,al(o ,e reali=a 7a .ue 9H e, ma7or .ue 42
mov a1,<
cmp a1,;
g 4% 0 salta si es ma5or
Tipo, de in,(ruccione, de ,al(o, condicionale, Tipo, de in,(ruccione, de ,al(o, condicionale, Tipo, de in,(ruccione, de ,al(o, condicionale, Tipo, de in,(ruccione, de ,al(o, condicionale,
6l con>un(o de in,(ruccione, #9:32 (iene un ,orprenden(e nAmero de in,(ruccione, de ,al(o
condicional/ 6,(a, in,(ruccione, ,opor(an un rango comple(o de in,(ruccione, condicionale,8
para comparar en(ero, con o ,in ,igno 7 compro'ar la, 'andera, de la 0PC/ 3a, in,(ruccione,
de ,al(o condicional pueden dividir,e en cua(ro grupo,2
0on 'a,e en valore, e,pec-fico, de la, 'andera,/
0on 'a,e en la igualdad en(re lo, operando, o el valor de (6)0H/
0on 'a,e en la, comparacione, de operando, ,in ,igno/
0on 'a,e en la, comparacione, de operando, con ,igno/
3a ,iguien(e (a'la mue,(ra un li,(ado de ,al(o, con 'a,e en lo, valore, e,pec-fico, de la,
'andera, de la 0PC2 0ero8 9carreo8 5e,'ordamien(o8 Paridad 7 !igno/
!al(o con 'a,e en lo, valore, e,pec-fico, de la, 'andera,
Nemnico Nemnico Nemnico Nemnico 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin "andera,G<egi,(ro, "andera,G<egi,(ro, "andera,G<egi,(ro, "andera,G<egi,(ro,
FI !al(a ,i e, 0ero IF R 1
FNI !al(a ,i no e, 0ero IF R &
F0 !al(a ,i *a7 acarreo 0F R 1
FN0 !al(a ,i no *a7 acarreo 0F R &
F !al(a ,i *a7 de,'ordamien(o F R 1
FN !al(a ,i no *a7 de,'ordamien(o F R &
"63

F! !al(a ,i (iene ,igno !F R 1
FN! !al(a ,i no (iene ,igno !F R &
FP !al(a ,i *a7 paridad (par) PF R 1
FNP !al(a ,i no *a7 paridad (impar) PF R &
3o, nom're, de lo, operando, refle>an ,u orden para lo, operadore, relacionado, en Blge'ra/
Por e>emplo en la e1pre,in H U K8 H puede llamar,e op'z+ 7 K puede llamar,e opDer/
0omparacin de igualdad 0omparacin de igualdad 0omparacin de igualdad 0omparacin de igualdad
3a ,iguien(e (a'la li,(a la, in,(ruccione, de ,al(o con 'a,e en la evaluacin de la igualdad de
lo, do, operando,8 o de lo, valore, de 0H 7 60H/ 6n la (a'la8 la, no(acione, op'z+ 7 opDer ,e
refieren a lo, operando, i=.uierdo (de,(ino) 7 derec*o (origen) en una in,(ruccin 04P2
CMP opI!,op"er

!al(o, con 'a,e en la evaluacin de la igualdad/
Nemnico Nemnico Nemnico Nemnico 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
F6 !al(a ,i e, igual (op'z+ R opDer)
FN6 !al(a ,i no e, igual (op'z+ di,(in(o opDer)
F0HI !al(a ,i 0H R &
F60HI !al(a ,i 60H R &

3a in,(ruccin F6 e, e.uivalen(e a FI (,al(a ,i e, 0ero) 7 FN6 e, e.uivalen(e a FNI (,al(a ,i no
e, 0ero)/ +eamo, alguno, e>emplo,2
6>emplo 1 6>emplo 1 6>emplo 1 6>emplo 12
mov ed1,"A<.7'
cmp ed1,"A<.7'
ne 4< 0 no se realiza el salto
e 4% 0 se realiza el salto
6>emplo 2 6>emplo 2 6>emplo 2 6>emplo 22
mov b1,%.7;'
"65

sub b1,%.7;'
ne 4< 0 no se realiza el salto
e 4% 0 se realiza el salto
6>emplo 3 6>emplo 3 6>emplo 3 6>emplo 32
mov c1,"$$$$'
inc c1
c1z 4. 0 se realiza el salto
6>emplo 4 6>emplo 4 6>emplo 4 6>emplo 42
1or ec1,ec1
ec1z 4. 0 se realiza el salto
0omparacione, ,in ,igno 0omparacione, ,in ,igno 0omparacione, ,in ,igno 0omparacione, ,in ,igno
6n la ,iguien(e (a'la ,e mue,(ran lo, ,al(o, .ue ,e 'a,an e,pec-ficamen(e en comparacione,
de en(ero, ,in ,igno/ 6,(e (ipo de ,al(o e, A(il cuando ,e comparan valore, ,i ,igno/ Por
e>emplo8 como en(ero, de 16 d-gi(o, ,in ,igno8 7FFF* e, menor .ue 8&&&*/ (0omo en(ero, de
16 'i(, con signo8 7FFF* ,er-a ma7or .ue 8&&&*)/
!al(o, con 'a,e en comparacione, ,in ,igno/
Nemnico, Nemnico, Nemnico, Nemnico, 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
F9 !al(a ,i e, ma7or (,i op'z+ V opDer)
FN"6 !al(a ,i no e, menor o igual (igual .ue F9)
F96 !al(a ,i e, ma7or o igual (,i op'z+ V o R opDer)
FN" !al(a ,i no e, menor (#gual .ue F96)
F" !al(a ,i e, menor (,i op#=. U op5er)
FN96 !al(a ,i no e, ma7or o igual (igual .ue F")
F"6 !al(a ,u e, menor o giaul (,i op'z+ U o R opDer)
FN9 !al(a ,i no e, ma7or (igual .ue F"6)
0omparacione, con ,igno 0omparacione, con ,igno 0omparacione, con ,igno 0omparacione, con ,igno
"66

3a ,iguien(e (a'la mue,(ra una li,(a de ,al(o, con 'a,e en la, comparacione, con ,igno/ Por
e>emplo8 el valor con ,igno de 1 '7(e 8&* (:128d) e, menor .ue 7F* (E127d)/ 6l ,iguien(e
e>emplo mue,(ra cmo difieren F9 7 FY en ,u comparacin de 8&* 7 7F*2
mov al,M$' 0 (M$' o L%.M)
cmp al,#"' 0 (#"' o K%.#)
a es2a5or 0 (no salta, 5a @ue M$ no es X #"')
g es2a5or 0 salta 5a @ue L%.M X K%.#
3a in,(ruccin F9 no ,al(a8 7a .ue el nAmero 7F* ,in ,igno e, menor .ue el nAmero 8&* ,in
,igno/ Por o(ro lado8 la in,(ruccin FY ,al(a 7a .ue E127 (7F*) e, ma7or .ue :128 (8&*)/



!al(o, con 'a,e en comparacione, con ,igno/
Nemnico Nemnico Nemnico Nemnico 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
FY !al(a ,i e, ma7or (,i op'z+ V opDer)
FN36 !al(a ,i no e, menor o igual (igual .ue FY)
FY6 !al(a ,i e, ma7or o igual (,i op'z+ V o R opDer)
FN3 !al(a ,i no e, menor (igual .ue FY6)
F3 !al(a ,i e, menor (,i op'z+ U opDer)
FNY6 !al(a ,i no e, ma7or o igual (igual .ue F3)
F36 !al(a ,i e, menor o igual (,i op'z+ U o R opDer)
FNY !al(a ,i no e, ma7or (igual .ue F36)
+eamo, alguno, e>emplo, de comparacione, con ,igno/
6>emplo 1 6>emplo 1 6>emplo 1 6>emplo 12
mov ed1,K%
cmp ed1,"
nl 4< 0 no se realiza el salto
nle 4< 0 no se realiza el salto
"67

l 4% 0 se realiza el salto
6>emplo 2 6>emplo 2 6>emplo 2 6>emplo 22
mov b1,L7;
cmp b1,K7<
ng 4< 0 no se realiza el salto
nge 4< 0 no se realiza el salto
nl 4< 0 se realiza el salto


6>emplo 3 6>emplo 3 6>emplo 3 6>emplo 32
mov ec1,"
cmp ec1,"
g 4< 0 no se realiza el salto
nl 4% 0 se realiza el salto
6>emplo 4 6>emplo 4 6>emplo 4 6>emplo 42
mov ec1,"
cmp ec1,"
l 4< 0 no se realiza el salto
ng 4% 0 se realiza el salto
<a <a <a <ango, de la, in,(ruccione, ngo, de la, in,(ruccione, ngo, de la, in,(ruccione, ngo, de la, in,(ruccione, de ,al(o condicional de ,al(o condicional de ,al(o condicional de ,al(o condicional
6n el modo real de 16 'i(,8 lo, ,al(o, condicionale, u(ili=an un ,olo '7(e con ,igno8 conocido
como desplazamiento relativo8 para locali=ar el de,(ino del ,al(o/ 6l de,(ino e,(B limi(ado a un
rango de :128 a E127 '7(e,8 a par(ir del con(ador de la u'icacin ac(ual/ 6l con(ador de
u'icacin e, la direccin de la in,(ruccin .ue ,igue de la in,(ruccin ac(ual8 7a .ue la 0PC
incremen(a el apun(ador de in,(ruccione, an(e, de e>ecu(ar la in,(ruccin ac(ual/ 6n la,
in,(ruccione, 3P8 3PI 7 3PNI ,e aplica la mi,ma limi(acin de rango/
6l ,iguien(e e>emplo li,(a lo, '7(e, generado, por el en,am'lador para una in,(ruccin FI8
cuando ,e compila en modo real de 16 'i(,/ 3a in,(ruccin FI en el de,pla=amien(o &&&& ,e
codifica como 74 &3 74 &3 74 &3 74 &3/ 6l cdigo de operacin e, 74 7 el de,pla=amien(o rela(ivo e, &3/ (NP
"68

repre,en(a a la in,(ruccin ,in operacin)/ 3a in,(ruccin .ue va de,puD, de FI e, &&&28 por lo
.ue la 0PC ,uma 3 al 28 produciendo 5 (el de,pla=amien(o de la e(i.ue(a 32)2
Desplazamiento !odificacin !digo fuente AS2
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
"""" M; "7 z 4.
""". +" nop
"""7 +" nop
"""; +" nop
"""< 4.*
5e manera ,imilar8 el ,iguien(e e>emplo mue,(ra un ,al(o *acia a(rB, (de,pla=amien(o
nega(ivo)/ 6l de,pla=amien(o de,puD, del ,al(o &&&58 por lo .ue ,e ,uma &F"* (:5) al 58
produciendo el de,pla=amien(o &&&& (el de,pla=amien(o de la e(i.ue(a 31)2
"""" 4%*
"""" +" nop
"""% +" nop
""". +" nop
"""7 M; $E z 4%
"""<
!altos m*s largos en modo de /0 bits !i un ,al(o en un programa en modo de 16 'i(,
e1cede el rango permi(ido de de,pla=amien(o de '7(e con ,igno8 49!4 genera un error
llamado fuera de rango de salto relativo/ !uponiendo .ue la, in,(ruccione, (engan una
longi(ud de promedio de 3 '7(e,8 podemo, colocar alrededor de 4& in,(ruccione, den(ro de un
ciclo an(e, de encon(rarno, con un error/ Para ,or(ear e,(e error8 *a7 .ue ,al(ar a una
in,(ruccin de ,al(o incondicional (.ue (iene un rango de 16 'i(,)2
z 4.
mp 47
4.* mp destino4eano
47*
!altos en modo de 23 bits 6n modo de 32 'i(,8 49!4 genera un de,pla=amien(o rela(ivo de
32 'i(, con ,igno para lo, ,al(o, a de,(ino, .ue ,e encuen(ran fuera del rango de 1 '7(e/ 6n el
"69

,iguien(e e>emplo8 la e(i.ue(a 31 ,e encuen(ra 18P '7(e, ("5*) adelan(e del con(ador de
u'icacin8 por lo .ue el campo de la direccin de de,(ino e, de 32 'i(,2
"""""""" "$ #; """"""ED z 4%
3o, cdigo, de operacin para lo, ,al(o, de 32 'i(, ,on de 2 '7(e,8 como en lo, nAmero, &F*8
84* .ue u(ili=amo, en nue,(ro e>emplo/
9plicacin de ,al(o, condicionale 9plicacin de ,al(o, condicionale 9plicacin de ,al(o, condicionale 9plicacin de ,al(o, condicionale, ,, ,
Prue'a de lo, 'i(, de e,(ado Prue'a de lo, 'i(, de e,(ado Prue'a de lo, 'i(, de e,(ado Prue'a de lo, 'i(, de e,(ado
9 menudo8 la, in,(ruccione, como 9N58 <8 NT8 04P 7 T6!T van ,eguida, la, in,(ruccione,
de ,al(o, condicionale, .ue al(eran el flu>o del programa/ Por lo general8 lo, ,al(o,
condicionale, evalAan lo, valore, de la, 'andera, de e,(ado de la 0PC/ Por e>emplo8
,upongamo, .ue un operando de la memoria de 8 'i(, llamado e,(ado e,(ado e,(ado e,(ado con(iene informacin
de e,(ado acerca de un di,po,i(ivo conec(ado a la compu(adora/ 3a, ,iguien(e, in,(ruccione,
,al(an a una e(i.ue(a ,i ,e ac(iva el 'i( 58 lo cual indica .ue el di,po,i(ivo e,(B de,conec(ado2
mov al,estado
test al,""%"""""b 0 eval?a el bit <
nz E@uipoDesconectado
3a, ,iguien(e, in,(ruccione, ,al(an a una e(i.ue(a ,i alguno de lo, 'i(, &8 1 o 4 e,(Bn ac(ivo,2
mov al,estado
test al,"""%""%%b 0 eval?a los bits ",%,;
nz E5teDatosEntrada
Para ,al(ar a una e(i.ue(a ,i e,(Bn ac(ivo, lo, 'i(, 28 3 7 7 ,e re.uieren la, in,(ruccione, 9N5 7
04P2
mov al,estado
and al,%"""%%""b 0 preserva los bits .,7,M
cmp al,%"""%%""b 0 ctodo los bits activosN
e -einiciar2a@uina 0 sA* salta a la eti@ueta
l mayor de dos enteros 6l ,iguien(e cdigo compara lo, en(ero, ,in ,igno en 9H 7 "H8 7
mueve el ma7or de lo, do, a 5H2
mov d1,a1 0 asume @ue A: es ma5or
cmp a1,b1 0 si A: X( E: salta a 4%
"7:

ae 4% 0 de lo contrario, mueve E: a D:
mov d1,b1
4%*
l menor de tres enteros 3a, ,iguien(e, in,(ruccione, comparan lo, valore, ,in ,igno en la,
varia'le, +18 +2 7 +38 7 mueven el menor de lo, (re, a 9H2
6data
)% ,O-D N
). ,O-D N
)7 ,O-D N
6code
mov a1,)% 0 asume @ue )% es el menor
cmp a1,). 0 si A:W( ). entonces
be 4% 0 salta a 4%
mov a1,). 0 de lo contario, mueve ). a A:
4%* cmp a1,)7 0 si A: W( )7 entonces
be 4. 0 salta a 4.
mov a1,)7 0 de lo contrario, mueve )7 a A:
4.*
#n,(ruccione, de prue'a de 'i(, (opcional) #n,(ruccione, de prue'a de 'i(, (opcional) #n,(ruccione, de prue'a de 'i(, (opcional) #n,(ruccione, de prue'a de 'i(, (opcional)
3a, in,(ruccione, "T8 "T08 "T< 7 "T! ,e llaman con>un(o in,(ruccione, de prueba de bits/ !on
in(ere,an(e,8 7a .ue e>ecu(an vario, pa,o, den(ro de una ,ola in,(ruccin a(mica/ 6,(o (iene
implicacione, para lo, ,u'programa, con ,u'proce,amien(o mAl(iple8 en lo, .ue a menudo e,
mu7 impor(an(e poder evaluar8 'orrar8 ac(ivar 7 complemen(ar lo, 'i(, de 'andera, (llamada,
sem*foros) ,in peligro de in(errupcione, por par(e de o(ro ,u'proce,o del programa/
#n,(ruccin "T #n,(ruccin "T #n,(ruccin "T #n,(ruccin "T
3a in,(ruccin "T (prue'a de 'i() ,elecciona el 'i( n como el primer operando 7 lo copia en la
'andera de 9carreo2
E3 baseEit,n
"7"

6l primer operando8 llamado base$it8 no ,e cam'ia/ "T permi(e lo, ,iguien(e, (ipo, de
operando,2
E3 rVm%/,r%/
E3 rVm7.,r7.
E3 rVm%/,imm#
E3 rVm7.,imm#
6n el ,iguien(e e>emplo8 la 'andera 9carreo ,e le a,igna el valor del 'i( 7 en la varia'le llamada
,emBforo ,emBforo ,emBforo ,emBforo2
6data
semIforo ,O-D %"""%"""b
6code
E3 semIforo,M 0 !$ ( %
9n(e, de .ue ,e in(rodu>era la in,(ruccin "T en el con>un(o de in,(ruccione, #n(el8 *u'iDramo,
(enido .ue copiar la varia'le a un regi,(ro 7 de,pla=ar el 'i( 7 *acia la 'andera de 9carreo2
mov a1,semIforo
s'r a1,# 0 !$ ( %
(9.u-8 la in,(ruccin !$< de,pla=a (odo, lo, 'i(, en 9H oc*o po,icione, a la derec*a/ 6,(o
*ace .ue el 'i( 7 ,e de,place *acia la 'andera de 9carreo)
#n,(ruccin "T0 #n,(ruccin "T0 #n,(ruccin "T0 #n,(ruccin "T0
3a in,(ruccin "T0 (prue'a 7 complemen(o de 'i() ,elecciona el 'i( n en el primer operando8 lo
copia a la 'andera 9carreo 7 lo complemen(a (cam'ia ,u valor)2
E3! baseEit,n
"T0 permi(e lo, mi,mo, (ipo, de operando, .ue "T/ 6n el ,iguien(e e>emplo8 a la 'andera
9carreo ,e le a,igna el valor del 'i( 6 en ,emBforo ,emBforo ,emBforo ,emBforo8 7 ,e complemen(a el mi,mo 'i(2
6data
semIforo ,O-D %"""%"""b
6code
E3! semIforo,/ 0 !$ ( ", semIforo(%%""%"""b
#n,(ruccin "T< #n,(ruccin "T< #n,(ruccin "T< #n,(ruccin "T<
"7#

3a in,(ruccin "T< (prue'a 7 re,(a'lecimien(o de 'i() ,elecciona el 'i( n en el primer operando8
lo copia en la 'andera 9carreo 7 re,(a'lece ('orra) el 'i( n2
E3- baseEit,n
"T< permi(e lo, mi,mo, (ipo, de operando, "T 7 "T0/ 6n el ,iguien(e e>emplo8 a la 'andera
9carreo ,e le a,igna el valor del 'i( 7 en el ,emBforo 7 ,e 'orra el mi,mo 'i(2
6data
semIforo ,O-D %"""%"""b
6code
E3- semIforo,M 0 !$ ( %0 semIforo(""""%"""b
#n,(ruccin "T! #n,(ruccin "T! #n,(ruccin "T! #n,(ruccin "T!
3a in,(ruccin "T! (prue'a de ac(ivacin de 'i() ,elecciona el 'i( n en el primer operando8 lo
copia a la 'andera de 9carreo 7 lo ac(iva2
E3S baseEit,n
"T! permi(e lo, mi,mo, (ipo, de operando, .ue "T/ 6n el ,iguien(e e>emplo8 a la 'andera
9carreo ,e le a,igna el valor del 'i( 6 en ,emBforo 7 de,puD, ,e ac(iva el mi,mo 'i(2
6data
semIforo ,O-D %"""%"""b
6code
E3S semIforo,/ 0 !$ ( ", semIforo(%%""%"""b
#n,(ruccione, de ,al(o, condicionale, #n,(ruccione, de ,al(o, condicionale, #n,(ruccione, de ,al(o, condicionale, #n,(ruccione, de ,al(o, condicionale,
#n,(ruccione, 3PI 7 3P6 #n,(ruccione, 3PI 7 3P6 #n,(ruccione, 3PI 7 3P6 #n,(ruccione, 3PI 7 3P6
3a in,(ruccin 3PI (,al(a ,i e, cero) permi(e .ue un ciclo con(inAe mien(ra, e,(D ac(iva la
'andera 0ero 7 el valor ,in ,igno de 60H ,ea ma7or .ue cero/ 3a e(i.ue(a de de,(ino de'e e,(ar
a una di,(ancia en(re :128 7 E127 '7(e, de la u'icacin de la ,iguien(e in,(ruccin/ 3a ,in(a1i,
e,2
3PI destino
3a in,(ruccin 3P6 (i(era ,i e, igual) e, e.uivalen(e a 3PI8 7a .ue compar(en el mi,mo
cdigo de operacin/ <eali=an la, ,iguien(e, (area,2
E!: ( E!: _ %
Si E!: X " 5 [$ ( %, saltar al destino
"71

6n ca,o con(rario8 no ,e produce ningAn ,al(o 7 el con(rol pa,a a la ,iguien(e in,(ruccin/
3PI 7 3P6 no afec(an a ninguna 'andera de e,(ado/


#n,(ruccione, 3PNI 7 3PN6 #n,(ruccione, 3PNI 7 3PN6 #n,(ruccione, 3PNI 7 3PN6 #n,(ruccione, 3PNI 7 3PN6
3a in,(ruccin 3PNI (,al(a ,i no e, cero) e, la con(rapar(e de 3PI/ 6l ciclo con(inAa
mien(ra, el valor ,in ,igno de 60H ,ea ma7or .ue cero8 7 la 'andera 0ero e,(D en cero/ 3a
,in(a1i, e,2
3PNI destino
3a in,(ruccin 3PN6 (,al(a ,i no e, igual) e, e.uivalen(e a 3PNI8 7a .ue compar(en el
mi,mo cdigo de operacin/ 6,(a, in,(ruccione, reali=an la, ,iguien(e, (area,2
E!: ( E!: _ %
Si E!: X " 5 [$ ( ", salta al destino
6n ca,o con(rario8 no ocurre nada 7 el con(rol pa,a a la ,iguien(e in,(ruccin/
jemplo 6l ,iguien(e e1(rac(o de cdigo (de 3oopn=/a,m) e1plora cada nAmero en un arreglo
*a,(a encon(rar un nAmero no nega(ivo (cuando el 'i( de ,igno no e,(B en cero)2
6data
arreglo S,O-D K7,K/,K%,K%",%",7",;",;
centinela S,O-D "
6code
mov esi,O$$SE3 arreglo
mov ec1,4E8S3\O$ arreglo
4%* test ,O-D P3- BesiC,#"""' 0 prueba el bit de signo
pus'fd 0 mete las banderas en la pila
add esi,3FPE arreglo
popfd 0 saca las banderas de la pila
loopnz 4% 0 contin?a el ciclo
nz salir 0 no se encontr un valor
Dn programa (ue se ejecuta en modo direccionamiento real utiliza a -Z como el contador de
ciclo predeterminado en la instruccin LAA5]. =i se desea $orzar a (ue ;-Z sea el contador de
ciclo& se debe usar la instruccin LAA5]@
"73

sub esi,3FPE arreglo 0 ESI apunta al valor
salir*
!i ,e encuen(ra un valor no nega(ivo/ 6!# ,e .ueda apun(ando *acia Dl/ !i el ciclo no ,e
encuen(ra un nAmero po,i(ivo8 ,e de(iene cuando 60H e, igual a cero/ 6n e,e ca,o8 la
in,(ruccin FNI ,al(a a la e(i.ue(a ,alir ,alir ,alir ,alir8 7 6!# apun(a al valor cen(inela (&) .ue e,(B >u,(o
de,puD, del arreglo/


6,(ruc(ura, condicionale, 6,(ruc(ura, condicionale, 6,(ruc(ura, condicionale, 6,(ruc(ura, condicionale,
6n e,(a ,eccin e1aminaremo, una, cuan(a, de la, e,(ruc(ura, condicionale, mB, comune,
.ue ,e u(ili=an en lo, lengua>e, de programacin de al(o nivel/ +eremo, cmo puede (raducir,e
fBcilmen(e cada e,(ruc(ura a lengua>e en,am'lador/ 0on,ideremo, .ue una estructura
condicional e, una o mB, e1pre,ione, condicionale, .ue ac(ivan una eleccin en(re do,
'ifurcacione, lgica, di,(in(a,/ 0ada 'ifurcacin *ace .ue ,e e>ecu(e una ,ecuencia di,(in(a de
in,(ruccione,/
#n,(ruccione, #F con e,(ruc(ura de 'lo.ue #n,(ruccione, #F con e,(ruc(ura de 'lo.ue #n,(ruccione, #F con e,(ruc(ura de 'lo.ue #n,(ruccione, #F con e,(ruc(ura de 'lo.ue
6n la ma7or-a de lo, lengua>e, de al(o nivel8 una e,(ruc(ura #F implica .ue una e1pre,in
'ooleana de'er ir ,eguida de do, li,(a, de in,(ruccione,2 una .ue ,e reali=a cuando la
e1pre,in e, verdadera8 7 o(ra .ue ,e reali=a cuando la e1pre,in e, fal,a2
if(e1presin)
listaKinstruccionesK%
else
listaKinstruccionesK.
3a porcin el,e el,e el,e el,e de la in,(ruccin e, opcional/ 6l diagrama de flu>o a con(inuacin mue,(ra la,
do, ru(a, de 'ifurcacin en una e,(ruc(ura #F condicional8 la, cuale, ,e e(i.ue(an como
verdadero 7 falso/
"75


6>emplo 1 C,ando la ,in(a1i, FavaG0EE8 ,e e>ecu(an do, in,(ruccione, de a,ignacin ,i op1 op1 op1 op1 e,
igual a op2 op2 op2 op22
if(op% (( op.)
e
: ( %0
F ( .0
f
3a Anica manera de (raducir e,(a in,(ruccin #F en lengua>e en,am'lador e, u(ili=ar la
in,(ruccin 04P8 ,eguida de uno o mB, ,al(o, condicionale,/ 0omo op1 op1 op1 op1 7 op2 op2 op2 op2 ,on operando,
de memoria8 *a7 .ue mover uno de ello, a un regi,(ro an(e, de e>ecu(ar la in,(ruccin 04P/ 6l
,iguien(e cdigo implemen(a la in,(ruccin #F de la manera mB, eficien(e po,i'le8 invir(iendo la
condicin de igualdad 7 u,ando la in,(ruccin FN62
mov ea1,op%
cmp ea1,op. 0 cop% (( op.N
ne 4% 0 no* salta la siguiente instruccin
mov :,% 0 sA* asigna : 5 F
"76

mov F,.
4%*
!i implemen(amo, el operador RR u,ando F68 el cdigo re,ul(an(e ,erB meno, compac(o (,ei,
in,(ruccione,8 en ve= de cinco)2
mov ea1,op%
cmp ea1,op. 0 cop% (( op.N
e 4% 0 sA* salta a 4%
mp 4. 0 no* salta las asignaciones
4%* mov :,% 0 sA* asigna : 5 F
mov F,.
4.*
jemplo 3 6n el ,i,(ema de arc*ivo, F9T32 .ue u(ili=a 4!:;indo%,8 el (ama@o de un clA,(er
de di,co depende de la capacidad general del mi,mo/ 6n el ,iguien(e ,eudocdigo8
e,(a'lecemo, el (ama@o del clA,(er a 48&P6 ,i el (ama@o del di,co (en la varia'le llamada
giga'7(e, giga'7(e, giga'7(e, giga'7(e,) e, menor .ue 8Y"/ 6n ca,o con(rario8 e,(a'lecemo, el (ama@o del clA,(er a 881P22
tam!luster ( #%+.0
si gigab5tes W #
tam!luster ( ;"+/0
$e a.u- una 'uena manera de implemen(ar la mi,ma in,(ruccin en lengua>e en,am'lador2
mov tam!luster,#+%. 0 supone un cl?ster mIs grande
cmp gigab5tes,# 0 ces ma5or @ue #SEN
ae siguiente
mov tam!luster,;"+/ 0 cambia a un cl?ster mIs pe@ueJo
siguiente*
6n el cap-(ulo 14 *a'laremo, ,o're lo, clA,(er de di,co/
jemplo 3 3a ,iguien(e in,(ruccin #F:63!6 en ,eudocdigo (iene 'ifurcacione, al(erna(iva,2
if op% X op. t'en
call -utina%
"77

else
call -utina.
end if
6n la ,iguien(e (raduccin de lengua>e en,am'lador8 a,umimo, .ue op1 7 op2 ,on varia'le,
de (ipo do'le pala'ra con ,igno/ 6l operador V ,e implemen(a u,ando FNY8 el complemen(o de
FY2
mov ea1,op%
cmp ea1,op. 0 cop% X op.N
ng A% 0 no* llama a -utina.
call -utina% 0 si* llama a -utina%
mp A.
A%* call -utina.
A.*
C,o de la prue'a de la ca>a 'lanca C,o de la prue'a de la ca>a 'lanca C,o de la prue'a de la ca>a 'lanca C,o de la prue'a de la ca>a 'lanca
3a, in,(ruccione, condicionale, comple>a, en lengua>e en,am'lador (ienen varia, ru(a, de
e>ecucin8 lo cual dificul(a ,u depuracin median(e in,peccin (anali=ando el cdigo)/ 9
menudo8 lo, 'ueno, programadore, implemen(an una (Dcnica conocida como prueba de la
caja blanca8 la cual verifica la, en(rada, 7 corre,pondien(e, ,alida, de una ,u'ru(ina/ 3a
prue'a de la ca>a 'lanca re.uiere .ue ,e (enga una copia del cdigo fuen(e/ Podemo, a,ignar
una variedad de valore, a la, varia'le, de en(rada/ Para cada com'inacin de en(rada8 ,e
reali=a un ra,(reo manual por el cdigo de fuen(e8 7 ,e verifica la ru(a de e>ecucin 7 la, ,alida,
producida, por la ,u'ru(ina/ +eamo, cmo ,e *ace e,(o/ !upongamo, .ue de,eamo, (raducir
la ,iguien(e in,(ruccin #F anidada en lengua>e en,am'lador2
if op% (( op. t'en
if : X F t'en
call -utina%
else
call -utina.
end if
else
"78

call -utina7
end if
$e a.u- una po,i'le (raduccin a lengua>e en,am'lador8 en la .ue ,e agregaron nAmero, de
l-nea por cue,(in de referencia/ !e invier(e la condicin inicial (op1 RR op2) 7 de inmedia(o ,e
reali=a un ,al(o a la porcin corre,pondien(e al 63!6/ Todo lo .ue .ueda por (raducir e, la
in,(ruccin #F:63!6 in(erior2
%* mov ea1,op%
.* cmp ea1,op. 0 cop% (( op.N
7* ne 4. 0 no* llama a la -utina7
0 procesa la instruccin I$KE4SE interior
;* mov ea1,:
<* cmp ea1,F 0 c: X FN
/* g 4% 0 si* llama -utina%
M* call -utina. 0 no* llama a -utina.
#* mp 47 0 5 termina
+* 4%* call -utina% 0 llama a -utina%
%"* mp 47 0 5 termina
%%* 4.* call -utina7
%.* 47*
3a ,iguien(e (a'la mue,(ra lo, re,ul(ado, de aplicar la prue'a de la ca>a 'lanca al cdigo de
e>emplo2 !e a,ignaron valore, de prue'a a op18 op28 H 7 K8 7 ,e verifican la, ru(a, de e>ecucin
re,ul(an(e,/
Prue'a de la in,(ruccin #F anidada/
p1 p1 p1 p1 p2 p2 p2 p2 H HH H K KK K !ecuencia de e>ecucin de l-nea, !ecuencia de e>ecucin de l-nea, !ecuencia de e>ecucin de l-nea, !ecuencia de e>ecucin de l-nea, 3lama a 3lama a 3lama a 3lama a
1& 2& 3& 4& 18283811812 <u(ina3
1& 2& 4& 3& 18283811812 <u(ina3
1& 1& 3& 4& 182838485868788812 <u(ina2
1& 1& 4& 3& 182838485868P81&812 <u(ina1
"79


61pre,ione, compue,(a, 61pre,ione, compue,(a, 61pre,ione, compue,(a, 61pre,ione, compue,(a,
perador 9N5 lgico perador 9N5 lgico perador 9N5 lgico perador 9N5 lgico
6l lengua>e en,am'lador implemen(a con facilidad la, e1pre,ione, 'ooleana, compue,(a, .ue
con(ienen operadore, 9N5/ 0on,ideremo, el ,iguien(e ,eudocdigo8 en el .ue ,e a,ume .ue
la, varia'le, ,on en(ero, ,in ,igno2
if (al X bl) A8D (bl X cl)
e
: ( %
f
valuacin de corto circuito 3a ,iguien(e e, una implemen(acin direc(a .ue u(ili=a la
evaluacin de corto circuito8 en la .ue la ,egunda e1pre,in no ,e evalAa ,i la primera
e1pre,in e, fal,a2
cmp al,bl 0 primera e1presinD
a 4%
mp siguiente
4%* cmp bl,cl 0 segunda e1presinD
a 4.
mp siguiente
4.* mov :,% 0 ambas verdaderas* se establece : en %
siguiente*
Podemo, op(imi=ar el cdigo a cinco in,(ruccione,8 ,i cam'iamo, la in,(ruccin F9 inicial por
F"62
cmp al,bl 0 primera e1presinD
be siguiente 0 termina si es falso
cmp bl,cl 0 segunda e1presin
be siguiente 0 termina si es falso
mov :,% 0 ambas son verdaderas
"8:

siguiente*
6l 2Pf de reduccin en el (ama@o del cdigo (de ,ie(e in,(ruccione, a cinco) ,e o'(iene al
de>ar .ue la 0PC pa,e a la ,egunda in,(ruccin 04P ,i F"6 no ,e e>ecu(a/ 3o, compiladore, de
lengua>e de al(o nivel para FavaG0EE u(ili=an la evaluacin de cor(o circui(o8 (al ve= por ra=one,
de eficiencia/
valuacin sin corto circuito 9lguno, lengua>e, (como "9!#0) no reali=an la evaluacin de
cor(o circui(o/ 6, dif-cil implemen(ar una e1pre,in compue,(a de e,e (ipo en el lengua>e
en,am'lador8 7a .ue ,e nece,i(a una 'andera o valor 'ooleano para almacenar lo, re,ul(ado,
de la primera e1pre,in2
6data
temp EF3E N
6code
mov temp," 0 borra la bandera temp
cmp al,bl 0 cA4 X E4N
na 4% 0 no
mov temp,% 0 si* establece bandera ( verdadero
4%* cmp bl,cl 0 cE4 X !4N
na siguiente 0 no* la e1pression es falsa
and temp,% 0 sA* se aplica A8D a bandera 5 %
z siguiente 0 eval?a la bandera
mov :,%
siguiente*
Para codificar e,(e e>emplo de la manera mB, eficien(e po,i'le8 nece,i(amo, aprovec*ar la
forma en .ue la in,(ruccin 9N5 afec(a a la 'andera 0ero/ Cn compilador de "9!#0 ordinario
no podr-a *acerlo (an 'ien/ 3a, oc*o in,(ruccione, re,ul(an(e, ,on aAn 6&f mB, grande, .ue
la, cinco in,(ruccione, .ue u(ili=amo, en la evaluacin op(imi=ada de cor(o circui(o de la
mi,ma e1pre,in/
perador < lgico perador < lgico perador < lgico perador < lgico
0uando ocurren varia, e1pre,ione, en una e1pre,in compue,(a .ue u(ili=a el operador lgico
<8 la e1pre,in e, au(omB(icamen(e verdadera8 (an pron(o como cual.uiera de la,
e1pre,ione, ,ean verdadera,/ +amo, a u(ili=ar el ,iguien(e ,eudocdigo como e>emplo2
"8"

if (al X bl) O- (bl X cl)
: ( %
6n la ,iguien(e implemen(acin8 el cdigo ,e 'ifurca a 31 ,i la primera e1pre,in e, verdadera8
en ca,o con(rario pa,a a la ,egunda in,(ruccin 04P/ 3a ,egunda e1pre,in invier(e el
operador V 7 u(ili=a F"6 en ,u defec(o2
cmp al,bl 0 %* compara A4 con E4
a 4% 0 si es verdadero, omite la segunda e1presin
cmp bl,cl 0 .* compara E4 con !4
be siguiente 0 falso* omite la siguiente instruccin
4%* mov :,%
siguiente*
Para una e1pre,in compue,(a dada8 *a7 por lo meno, varia, forma, en .ue D,(a puede
implemen(ar,e en lengua>e en,am'lador2
0iclo, ;$#36 0iclo, ;$#36 0iclo, ;$#36 0iclo, ;$#36
3a e,(ruc(ura ;$#36 evalAa una condicin an(e, de e>ecu(ar un 'lo.ue de in,(ruccione,/
4ien(ra, .ue la condicin del ciclo permane=ca ,iendo verdadera8 ,e repi(en la, in,(ruccione,/
6l ,iguien(e ciclo e,(B e,cri(o en 0EE2
='ile (val% W val.)
e
val%LL0
val.KK0
f
9l codificar e,(a e,(ruc(ura en lengua>e en,am'lador8 e, convenien(e inver(ir la condicin del
ciclo 7 ,al(ar a fin%*ile fin%*ile fin%*ile fin%*ile cuando la condicin ,e vuelve verdadera/ !uponiendo .ue val1 7 val2
,on varia'le,8 de'emo, mover una de ella, a un regi,(ro al principio8 7 re,(aurar la varia'le al
final2
mov ea1,val% 0 copia la variable a EA:
ZZ='ile*
cmp ea1,val 0 if not (val% W val.)
nl fin='ile 0 sale del ciclo
"8#

inc ea1 0 val%LL0
dec val. 0 val.KK0
mp ZZ='ile. 0 repite el ciclo
fin='ile*
mov val%,ea1
69H e, un pro17 (,u,(i(u(o) para val1 val1 val1 val1 den(ro del ciclo/ 3a, referencia, a val1 de'en ,er a (ravD,
de 69H/ u(ili=a FN38 lo cual implica .ue val1 val1 val1 val1 7 val2 val2 val2 val2 ,on en(ero, con ,igno/
6>emplo2 in,(ruccin #F anidada en un ciclo 6>emplo2 in,(ruccin #F anidada en un ciclo 6>emplo2 in,(ruccin #F anidada en un ciclo 6>emplo2 in,(ruccin #F anidada en un ciclo
3o, lengua>e, e,(ruc(urado, de al(o nivel ,on mu7 adecuado, para repre,en(ar e,(ruc(ura, de
con(rol anidada,/ 6n el ,iguien(e e>emplo 0EE8 una in,(ruccin #F e,(B anidada den(ro de un
ciclo ;$#368 6,(a in,(ruccin calcula la ,uma de (odo, lo, elemen(o, del arreglo .ue ,ean
ma7ore, .ue el valor en e>emplo e>emplo e>emplo e>emplo2
int arreglo BC ( e%",/",.",77,M.,#+,;<,/<,M.,%#f
int eemplo ( <"0
inr 3amArreglo ( sizeof arreglo V sizeof eemplo0
int indice ( "0
int suma ( "0
='ile (Andice W 3amArreglo)
e
if(arregloBAndiceCX eemplo)
e
suma L(arregloBAndiceC0
indiceLL0
f
f
9n(e, de codificar e,(e ciclo en lengua>e en,am'lador8 u(ili=aremo, el ,iguien(e diagrama de
flu>o para de,cri'ir la lgica/
"81


Para ,implificar la (raduccin 7 agili=ar la e>ecucin reduciendo el nAmero de acce,o, a
memoria8 *emo, ,u,(i(uido lo, regi,(ro, por varia'le,/ 65H R e>emplo8 69H R ,uma8 6!# R
-ndice 7 60H R Tam9rreglo (una con,(an(e)/ !e agregaron nom're, de e(i.ue(a, a la, figura,/
"digo en ensamblador 3a manera mB, ,encilla de generar cdigo en,am'lador de un
diagrama de flu>o e, implemen(ar el cdigo para cada figura/ ',ervemo, la correlacin
direc(a en(re la, e(i.ue(a, del diagrama de flu>o 7 la, e(i.ue(a, .ue ,e u(ili=an en el ,iguien(e
cdigo de fuen(e
6data
suma D,O-D "
eemplo D,O-D <"
arreglo D,O-D %",/",.",77,M.,#+,;<,/<,.,%#
"83

3amArreglo ( (U K arreglo) V 3FPE arreglo
6code
main P-O!
mov ea1," 0 suma
mov ed1,eemplo
mov esi," 0 Andice
mov ec1,3amArreglo
4%* cmp esi,ec1
l 4.
mp 4<
4.* cmp arregloBesi&C,ed1
g 47
mp 4;
47* add ea1,arregloBesi&;C
4;* inc esi
mp 4%
4<* mov suma,ea1
!eleccin con(rolada por (a'la, !eleccin con(rolada por (a'la, !eleccin con(rolada por (a'la, !eleccin con(rolada por (a'la,
3a seleccin controlada por tablas e, una forma de u(ili=ar una 'A,.ueda en (a'la, para
,u,(i(uir una e,(ruc(ura de ,eleccin de varia, v-a,/ Para u,arla8 de'emo, crear una (a'la .ue
con(enga valore, de 'A,.ueda 7 lo, de,pla=amien(o, de e(i.ue(a, o procedimien(o,8 7 u(ili=ar
un ciclo para 'u,car en la (a'la/ 6,(o funciona me>or cuando ,e reali=a una gran can(idad de
comparacione,/
Por e>emplo8 el ,iguien(e cdigo e, par(e de una (a'la .ue con(iene valore, de 'A,.ueda de un
,olo carBc(er 7 direccione, de procedimien(o,2
6data
3abla!asos EF3E GAH 0 valor de b?s@ueda
D,O-D ProcesoTA 0 direccin de procedimiento
"85

EF3E GEH
D,O-D ProcesoTE
(etc6)
!upongamo, .ue Proce,oS98 Proce,oS"8 Proce,oS0 7 Proce,oS5 ,e encuen(ran en la
direccine, 12&*8 13&*8 14&* 7 15&*8 re,pec(ivamen(e/ 3a (a'la ,e ordenar-a en memoria
como ,e mue,(ra en la ,iguien(e figura2

Programa de ejemplo 6n el ,iguien(e programa de e>emplo8 el u,uario in(roduce un carBc(er
de,de el (eclado/ 4edian(e el u,o de un ciclo8 el carBc(er ,e compara con cada en(rada en la
(a'la/
3a primera coincidencia encon(rada en la (a'la produce una llamada al de,pla=amien(o del
procedimien(o almacenado inmedia(amen(e de,puD, del valor de 'A,.ueda/ 0ada
procedimien(o carga a 65H con el de,pla=amien(o de una cadena di,(in(a8 la cual ,e mue,(ra
duran(e el ciclo2
3I34E 3abla de desplazamiento de procedimientos (3ablaProc6asm)
0 Este programa contiene una tabla con desplazamientos de procedimientos6
0 9tiliza la tabla para eecutar llamadas indirectas a procedimientos
0 ]ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
6data
3abla!asos EF3E GAH 0 valor de b?s@ueda
D,O-D ProcesoTA 0 direccin del procedimiento
3amanioEntrada ( (U K 3abla!asos)
EF3E GEH
D,O-D ProcesoTE
EF3E G!H
D,O-D ProcesoT!
"86

EF3E GDH
D,O-D ProcesoTD
8umeroDeEntradas ( (U K 3abla!asos)V 3amanioEntrada
indicador EF3E OOprima A,E,!, o D ma5?scula*P,"
msA EF3E OProcesoTAP,"
msE EF3E OProcesoTEP,"
ms! EF3E OProcesoT!P,"
msD EF3E OProcesoTDP,"
6code
main P-O!
mov ed1,O$$SE3 indicador 0 pide la entrada al usuario
call ,riteString
call -ead!'ar 0 lee un c'aracter 5 lo coloca en A4
mov eb1,O$$SE3 3abla!asos 0 apunta EE: a la tabla
mov ec1,8umeroDeEntradas 0 contador de ciclo
4%*
cmp al,Beb1C 0 cse encontr coincidenciaN
ne 4. 0 no* contin?a
call 8EA- P3- Beb1L%C 0 si* llama al procedimiento


call ,riteString 0 muestra un mensae
call !rlf
mp 47
4.*
add eb1,3amanioEntrada 0 apunta a la siguiente entrada
;sta instruccin -/LL llama al procedimiento cu'a direccin se encuentra almacenada en la ubicacin de
memoria a la (ue ;BZ O " *ace re$erencia. Dna llamada indirecta tal como !sta re(uiere el operador F;/R 54R.
"87

loop 4%
47*
e1it
main E8DP


ProcesoTA P-O!
mov ed1,O$$SE3 msA
ret
ProcesoTA E8DP
ProcesoTE P-O!
mov ed1,O$$SE3 msE
ret
ProcesoTE E8DP
ProcesoT! P-O!
mov edc,O$$SE3 ms!
ret
ProcesoT! E8DP
ProcesoTD P-O!
mov ed1,O$$SE3 msD
ret
ProcesoTD E8DP
E8D main
6l mD(odo de ,eleccin con(rolado por una (a'la implica cier(a ,o'recarga inicial8 pero puede
reducir la can(idad de cdigo .ue ,e nece,i(a e,cri'ir/ Cna (a'la puede mane>ar un gran
nAmero de comparacione,8 7 puede modificar,e con mB, facilidad .ue una larga ,erie de
in,(ruccione, de comparacin8 de ,al(o 7 0933/ #nclu,ive una (a'la puede reconfigurar,e en
(iempo de e>ecucin/
-ada uno de los siguientes procedimientos mueve un desplazamiento de cadena distinto a ;@Z:
"88

9plicacin2 mB.uina, de e,(ado fini(o 9plicacin2 mB.uina, de e,(ado fini(o 9plicacin2 mB.uina, de e,(ado fini(o 9plicacin2 mB.uina, de e,(ado fini(o
Cna m*+uina de estado finito (F!4) e, una mB.uina o programa .ue cam'ia de e,(ado con
'a,e en cier(a en(rada/ 6, 'a,(an(e ,encillo u(ili=ar un grBfico para repre,en(ar una F!48 la
cual con(iene cuadro, (o c-rculo,) llamado, nodos 7 l-nea, con flec*a, en(re lo, c-rculo,8
llamada, flancos (o arco,)/
6n la ,iguien(e figura ,e mue,(ra un e>emplo ,imple/ 0ada nodo repre,en(a un e,(ado del
programa8 7 cada flanco repre,en(a una (ran,icin de e,(ado a o(ro/ Cn nodo ,e de,igna como
el estado inicial8 .ue ,e mue,(ra en nue,(ro diagrama con una flec*a en(ran(e/ 3o, e,(ado,
re,(an(e, pueden e(i.ue(ar,e con nAmero, o le(ra/ Cno o mB, e,(ado, ,e de,ignan como
estados terminales8 lo, cuale, ,e mue,(ran en un 'orde grue,o alrededor del cuadro/ Cn
e,(ado (erminal repre,en(a a un e,(ado en el .ue el programa podr-a de(ener,e ,in producir
un error/ Cna mB.uina de e,(ado fini(o e, una in,(ancia e,pec-fica de un (ipo mB, general de
e,(ruc(ura conocido como grafo dirigido (o diBgrafo)/ Z,(e e, un con>un(o de nodo, conec(ado,
por flanco, .ue (ienen direccione, e,pec-fica,
/



+alidacin de una cadena de en(rada +alidacin de una cadena de en(rada +alidacin de una cadena de en(rada +alidacin de una cadena de en(rada
9 menudo8 lo, programa, .ue leen lo, flu>o, de en(rada de'en validar ,u en(rada reali=ando
cier(a forma de compro'acin de errore,/ Por e>emplo8 un compilador de lengua>e de
programacin puede u,ar una mB.uina de e,(ado fini(o para e1plorar lo, programa, fuen(e 7
conver(ir la, pala'ra, 7 ,-m'olo, en to;ens8 .ue ,on o'>e(o, como pala'ra, clave,8 operadore,
ari(mD(ico, e iden(ificadore,/
9l u(ili=ar una mB.uina de e,(ado fini(o para compro'ar la valide= de una cadena de en(rada8
por lo general8 ,e lee la en(rada carBc(er por carBc(er/ 0ada carBc(er ,e repre,en(a median(e
un flanco ((ran,icin) en el diagrama/ Cna mB.uina de e,(ado fini(o de(ec(a la, ,ecuencia, de
en(rada ilegale, en una de do, forma,2
9
0
"
Los gra$os dirigidos tienen muc*as aplicaciones )tiles en ciencias computacionales& relacionadas con
las estructuras din.micas de datos ' las t!cnicas avanzadas de b)s(ueda.
"89

6l ,iguien(e carBc(er de en(rada no corre,ponde con ninguna (ran,icin del e,(ado
ac(ual
!e llega al fin de la en(rada 7 el e,(ado ac(ual no e, un e,(ado (erminal
jemplo de cadena de caracteres 0ompro'emo, la valide= de una cadena de en(rada8 de
acuerdo con la, ,iguien(e, do, regla,2
3a cadena de'e empe=ar con la le(ra g1h 7 (erminar con la le(ra g=h
6n(re lo, carac(ere, primero 7 Al(imo8 puede *a'er cero o mB, le(ra, den(ro del rango
^gah//h7h_/
6l diagrama de la F!4 en la ,iguien(e figura de,cri'e e,(a ,in(a1i,/ 0ada (ran,icin ,e
iden(ifica median(e un (ipo e,pec-fico de en(rada/ Por e>emplo8 la (ran,icin de e,(ado 9 al
e,(ado " ,lo puede lograr,e ,i la le(ra 1 11 1 ,e lee del flu>o de en(rada/ Cna (ran,icin del e,(ado
" a ,- mi,mo ,e reali=a median(e la in(roduccin de cual.uier le(ra del alfa'e(o8 e1cep(o = == =/ una
(ran,icin de e,(ado " al e,(ado 0 ,lo ocurre cuando la le(ra = == = ,e lee del flu>o de en(rada/

!i ,e llega al fin del flu>o de en(rada mien(ra, el programa e,(B en el e,(ado 9 o "8 ,e produce
una condicin de error de'ido a .ue ,olo el e,(ado 0 ,e marca como e,(ado (erminal/ 3a F!4
reconoce la, ,iguien(e, cadena, de en(rada2
1a'cdefg=
1=
177..rr,(uv=
+alidacin de un en(ero con ,igno +alidacin de un en(ero con ,igno +alidacin de un en(ero con ,igno +alidacin de un en(ero con ,igno
6n la ,iguien(e figura ,e mue,(ra una mB.uina de e,(ado fini(o para anali=ar un en(ero con
,igno/ 3a en(rada con,i,(e de un ,igno a la i=.uierda opcional8 ,eguido de una ,ecuencia de
d-gi(o,/ No *a7 nAmero mB1imo e,(a'lecido de d-gi(o, implicado, para el diagrama/
F!4 de un en(ero decimal con ,igno/
"9:


3a, mB.uina, de e,(ado fini(o ,e (raducen con muc*a facilidad a cdigo en lengua>e
en,am'lador/ 0ada e,(ado en el diagrama (98 "8 0d/) ,e repre,en(a median(e una e(i.ue(a/ 6n
cada e(i.ue(a ,e reali=an la, ,iguien(e, accione,2
Cna llamada a un procedimien(o de en(rada .ue lee el ,iguien(e carBc(er de la
en(rada/
!i el e,(ado e, (erminal8 a7 .ue compro'ar para ver ,i el u,uario oprimi la (ecla #n(ro
para (erminar la en(rada/
Cna o mB, in,(ruccione, verifican cada po,i'le (ran,icin .ue no, lleve *acia fuera de
e,e e,(ado/ 0ada compro'acin va ,eguida de una in,(ruccin de ,al(o condicional/
Por e>emplo8 en el e,(ado 9 el ,iguien(e cdigo lee el ,iguien(e carBc(er de en(rada 7
comprue'a una po,i'le (ran,icin al e,(ado "2
EstadoA*
call Obtensiguiente 0 lee el siguiente carIcter 5 lo coloca en A4
cmp al,HLH 0 csigno L a la iz@uierdaN
e EstadoE 0 ir al estadoE
cmp al,HKG 0 c signo _ a la iz@uierdaN
e EstadoE 0 ir al estadoE
call IsDigit 0 [$ ( % si Al contiene un dAgito
z Estado! 0 ir al estado !
call 2ostrar2sError 0 se encontr entrada invIlida
mp Salir
9demB, en el e,(ado 9 llamamo, a #,5igi( #,5igi( #,5igi( #,5igi(8 un procedimien(o de la 'i'lio(eca de enlace .ue
ac(iva la 'andera 0ero cuando ,e lee un d-gi(o numDrico de la en(rada/ 6,(o *ace po,i'le
'u,car una (ran,icin al e,(ado 0/ !i no ,e cumple e,(o8 el programa mue,(ra un men,a>e de
error 7 (ermina/ 6l diagrama de flu>o de la ,iguien(e figura repre,en(a el cdigo ad>un(o a la
e(i.ue(a 6,(ado9 6,(ado9 6,(ado9 6,(ado9/
"9"

5iagrama de flu>o de la F!4 de un en(ero con ,igno/

5irec(iva, de deci,in 5irec(iva, de deci,in 5irec(iva, de deci,in 5irec(iva, de deci,in
49!4 cuen(a con direc(iva, de deci,in (/#F8 /63!68 /63!6#F8 /6N5#F) .ue no, facili(an la
codificacin de la lgica de 'ifurcacin de varia, v-a,/ 6,(a, direc(iva, *acen .ue el
en,am'lador genere in,(ruccione, 04P 7 de ,al(o condicional en ,egundo plano8 .ue ,e
pueden ver en el arc*ivo de li,(ado de ,alida (nombreprog7lst)/

$e a.u- la ,in(a1i,2
"9#

6I$ condicin1
instr#cciones
B6E4SEI$ condicin2
instr#ccionesC
B6E4SE
instr#ccionesC
6E8DI$
3o, corc*e(e, mue,(ran .ue /63!6#F 7 /63!6 ,on opcionale,8 mien(ra, .ue /#F 7 /6N5#F ,on
re.uerido,/ Cna condicin e, una e1pre,in 'ooleana .ue involucra a lo, mi,mo, operadore,
.ue ,e u(ili=an en 0EE 7 Fava (como U8 V8 RR 7 aR)/ 3a e1pre,in ,e evalAa en (iempo de
e>ecucin/ 9 con(inuacin ,e mue,(ran e>emplo, de condicione, vBlida,8 u,ando regi,(ro, de
32 'i(, 7 varia'le,2
ea1 V 1&&&&*
val1 UR 1&&
val2 RR ea1
val3 aR e'1
9 con(inuacin ,e mue,(ran e>emplo, de condicione, compue,(a,2
(ea1 V &) ii (ea1 V 1&&&&*)
(val1 UR 1&&) cc (val2 UV 1&&)
peradore, relacionale, 7 lgico, en (iempo de e>ecucin/
perador perador perador perador 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
expr/ RR expr3 5evuelve verdadero cuando expr/ e, igual a expr3
expr/ aR expr3 5evuelve verdadero cuando expr/ no e, igual a expr3
expr/ V expr3 5evuelve verdadero cuando expr/ e, ma7or .ue expr3
expr/ VR expr3 5evuelve verdadero cuando expr/ e, ma7or o igual .ue expr3
expr/ U expr3 5evuelve verdadero cuando expr/ e, menor .ue expr3
expr/ UR expr3 5evuelve verdadero cuando expr/ e, menor o igual .ue expr3
aexpr 5evuelve verdadero cuando expr e, fal,a
"91

expr/ ii expr3 <eali=a un 9N5 lgico en(re expr/ 7 expr3
expr/ cc expr3 <eali=a un < lgico en(re expr/ 7 expr3
expr/ i expr3 <eali=a un 9N5 a nivel de 'i(, en(re expr/ 7 expr3
09<<KM 5evuelve verdadero ,u ,e ac(iva la 'andera 9carreo
+6<F3;M 5evuelve verdadero ,i ,e ac(iva la 'andera 5e,'ordamien(o
P9<#TKM 5evuelve verdadero ,i ,e ac(iva la 'andera Paridad
!#YNM 5evuelve verdadero ,i ,e ac(iva la 'andera !igno
I6<M 5evuelve verdadero ,i ,e ac(iva la 'andera 0ero




)eneracin de cdigo A!M 9l u(ili=ar direc(iva, de al(o nivel (ale, como /#F 7 /63!68 el
en,am'lador de,empe@a la funcin de e,cri(or de cdigo/ Por e>emplo8 vamo, a e,cri'ir una
direc(iva /#F .ue compara a 69H con la varia'le val1 val1 val1 val12
mov ea1,/
6I$ ea1 X val%
mov resultado,%
6E8DI$
!e a,ume .ue val1 val1 val1 val1 7 re,ul(ado re,ul(ado re,ul(ado re,ul(ado ,on en(ero, ,in ,igno de 32 'i(,/ 0uando el en,am'lador lee
la, l-nea, an(eriore,8 la, e1pande en la, ,iguien(e, in,(ruccione, en el lengua>e en,am'lador2
mov ea1,/
cmp ea1,val%
be Z!"""% 0 salta en comparacin sin signo
mov resultado,%
Z!"""%*
6l nom're de e(i.ue(a X0&&&1 lo crea el en,am'lador/ 6,(o *ace de una manera .ue
garan(ice .ue (oda, la, e(i.ue(a, den(ro del mi,mo procedimien(o ,erBn Anica,/
;l uso de las directivas de decisin es controversial& 'a (ue su simplicidad aparente puede engaEarnos. /ntes de usarlas&
debemos asegurarnos de comprender por completo las instrucciones de bi$urcacin condicional. /dem.s& cuando se
ensamble un programa (ue contiene directivas de decisin& se debe inspeccionar el arc*ivo de listado para asegurarse de
(ue el cdigo generado por </=< es el (ue nosotros deseamos.
"93

0omparacione, con ,igno 7 ,in ,igno 0omparacione, con ,igno 7 ,in ,igno 0omparacione, con ,igno 7 ,in ,igno 0omparacione, con ,igno 7 ,in ,igno
9l u(ili=ar la direc(iva /#F para comparar valore,8 de'emo, e,(ar con,cien(e, de la forma en .ue
49!4 genera lo, ,al(o, condicionale,/ !i la comparacin involucra a una varia'le ,in ,igno8 ,e
in,er(a una in,(ruccin de ,al(o condicional ,in ,igno en el cdigo generado/ Z,(a e, una
repe(icin de un e>emplo an(erior .ue compara a 69H con val1 val1 val1 val18 una do'le pala'ra ,in ,igno2
6data
val% D,O-D <
resultado D,O-D N
6code
mov ea1,/
6I$ ea1 X val%
mov resultado,%
6E8DI$
6l en,am'lador e1pande e,(o median(e el u,o de la in,(ruccin F"6 (,al(o ,in ,igno)2
mov ea1,/
cmp ea1,val%
be Z!"""% 0 salta en comparacin sin signo
Z!"""%*
"omparacin de un entero con signo +amo, a pro'ar una comparacin ,imilar con val28
una do'le pala'ra con ,igno2
6data
val. SD,O-D K%
6code
mov ea1,/
6I$ ea1 X val.
mov resultado,%
6E8DI$
"95

9*ora el en,am'lador genera cdigo median(e la in,(ruccin F368 el ,al(o 'a,ado en
comparacione, con ,igno2
mov ea1,/
cmp ea1,val.
le Z!"""% 0 salta en comparacin con signo
mov resultado,%
Z!"""%*
"omparaciones de registros 3a pregun(a .ue podr-amo, *acer en(once, e,8 Q.uD ocurre
cuando ,e comparan do, regi,(ro,M 6, eviden(e .ue el en,am'lador no puede de(erminar ,i
lo, valore, ,on con o ,in ,igno2
mov ea1,/
mov eb1,val.
6I$ ea1 X eb1
mov resultado,%
6E8DI$
<e,ul(a .ue el en,am'lador u(ili=a de manera prede(erminada una comparacin ,in ,igno8 por
lo .ue la direc(iva /#F .ue compara do, regi,(ro, ,e implemen(a u,ando la in,(ruccin F"6/
61pre,ione, compue,(a, 61pre,ione, compue,(a, 61pre,ione, compue,(a, 61pre,ione, compue,(a,
4uc*a, e1pre,ione, 'ooleana, compue,(a, u(ili=an lo, operadore, < 7 9N5 lgico,/ 9l
u(ili=ar la direc(iva /#F8 el ,-m'olo cc e, el operador < lgico2
6I$ e1presin bb oe1presin.
instrucciones
6E8DI$
5e manera ,imilar8 el ,-m'olo ii e, el operador 9N5 lgico2

6I$ e1presin% gg e1presin.
instrucciones
6E8DI$
"96

6n el ,iguien(e programa de e>emplo u(ili=aremo, el operador < lgico/
6>emplo2 e,(a'lecerPo,icin0ur,or 6>emplo2 e,(a'lecerPo,icin0ur,or 6>emplo2 e,(a'lecerPo,icin0ur,or 6>emplo2 e,(a'lecerPo,icin0ur,or
6l procedimien(o 6,(a'lecerPo,icin0ur,or 6,(a'lecerPo,icin0ur,or 6,(a'lecerPo,icin0ur,or 6,(a'lecerPo,icin0ur,or8 .ue ,e mue,(ra en el ,iguien(e e>emplo8 reali=a
compro'acione, de rango en ,u, do, parBme(ro, de en(rada8 5$ 7 53/ 3a coordenada K (5$)
de'e e,(ar en(re & 7 24/ 3a coordenada H (53) de'e e,(ar en(re & 7 7P/ !i cual.uiera de la, do,
,e encuen(ra fuera del rango8 ,e mue,(ra un men,a>e de error2
EstablecerPosicion!ursor P-O!
0 Establece la posicin del cursor6
0 -ecibe* D4 ( coordenada :, D\ ( coordenada F
0 !omprueba los rangos de D4 5 D\6
0 -egresa* nada
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
6data
2s!oord:Incorr EF3E O!oordenada : fuera de rangodP,"D',"A\,"
2s!oordFIncorr EF3E O!oordenada F fuera de rangodP,"D',"A\,"
6code
6I$ (D4 W ") bb (D4 X M+)
mov ed1,O$$SE3 2s!oord:Incorr
call ,riteString
mp salir
6E8DI$
6I$ (D\ W ") bb (D\ X .;)
mov ed1,O$$SE3 2s!oordFIncorr
call ,riteString
mp salir
6E8DI$
call Soto15
salir*
"97

ret
EstablecerPosicion!ursor E8DP
6>emplo de in,cripcin univer,i(aria 6>emplo de in,cripcin univer,i(aria 6>emplo de in,cripcin univer,i(aria 6>emplo de in,cripcin univer,i(aria
!upongamo, .ue un e,(udian(e univer,i(ario de,ea in,cri'ir,e en cier(o, cur,o,/ C(ili=aremo,
do, cri(erio, para de(erminar ,i el e,(udian(e puede regi,(rar,e o no2 6l primero e, el promedio
de calificacione, de la per,ona8 con 'a,e en una e,cala de & a 4&&8 en donde 4&& e, la ma7or
calificacin po,i'le/ 6l ,egundo e, el nAmero de crDdi(o, .ue de,ea (omar la per,ona/ Puede
u(ili=ar,e una e,(ruc(ura de 'ifurcacin de varia, v-a,8 en la .ue ,e u(ilicen la, direc(iva, /#F8
/63!6#F 7 /6N5#F/ 9 con(inuacin ,e mue,(ra un e>emplo2
6data
)E-DADE-O ( %
$A4SO ( "
promedio!alif ,O-D .M< 0 valor de prueba
cr^ditos ,O-D %. 0 valor de prueba
SePuede-egistrar EF3E N
6code
mov SePuede-egistrar,$A4SO
6I$ promedio!alif X 7<"
mov SePuede-egistrar,)E-DADE-O
6E4SEI$ (promedio!alif X .<") gg (cr^ditos W( %/)
mov SePuede-egistrar,)E-DADE-O
6E4SEI$ (cr^ditos W( %.)
mov SePuede-egistrar,)E-DADE-O
6E8DI$
5irec(iva /<6P69T 7 /;$#36 5irec(iva /<6P69T 7 /;$#36 5irec(iva /<6P69T 7 /;$#36 5irec(iva /<6P69T 7 /;$#36
3a direc(iva /<6P69T 7 /;$#36 ofrecen al(erna(iva, para e,cri'ir nue,(ro, propio, ciclo,8 con
in,(ruccione, 04P 7 de ,al(o condicional/ Permi(en la, e1pre,ione, condicionale, (ver (a'la2
peradore, relacionale, 7 lgico, en (iempo de e>ecucin)/ 3a direc(iva /<6P69T e>ecu(a el
cuerpo del ciclo an(e, de evaluar la condicin en (iempo de e>ecucin .ue va de,puD, de la
direc(iva /CNT#32
"98

6-EPEA3
instr#cciones
6983I4 condicin
3a direc(iva /;$#36 evalAa la condicin an(e, de e>ecu(ar el ciclo2
6,\I4E condicin
instr#cciones
6E8D,
jemplos2 la, ,iguien(e, in,(ruccione, mue,(ran lo, valore, de 1 al 1&8 u,ando la direc(iva
/;$#362
mov ea1,"
6,\I4E ea1 W %"
inc ea1
call ,riteDec
call !rlf
6E8D,
3a, ,iguien(e, in,(ruccione, mue,(ran lo, valore, del 1 al 1&8 u,ando la direc(iva /<6P69T2
mov ea1,"
6-EPEA3
inc ea1
call ,riteDec
call !rlf
6983I4 ea1 (( %"
6>emplo2 ciclo .ue con(iene una 6>emplo2 ciclo .ue con(iene una 6>emplo2 ciclo .ue con(iene una 6>emplo2 ciclo .ue con(iene una in,(ruccin #F in,(ruccin #F in,(ruccin #F in,(ruccin #F
9n(eriormen(e en e,(e cap-(ulo8 mo,(ramo, como e,cri'ir cdigo en el lengua>e en,am'lador
para una in,(ruccin #F anidada den(ro de un ciclo ;$#36/ $e a.u- el ,eudocdigo2
='ile(op% W op.)
e
"99

op%LL0
if(op% (( op7)
: ( .0
else
: ( 7
f
9 con(inuacin ,e mue,(ra una implemen(acin del ,eudocdigo8 u(ili=ando la, direc(iva,
/;$#36 e /#F8 0omo op1 op1 op1 op18 op2 op2 op2 op2 7 op3 op3 op3 op3 ,on varia'le,8 ,e mueven en lo, regi,(ro, para evi(ar (ener
do, operando, de memoria en cual.uier in,(ruccin2
6data
: D,O-D "
op% D,O-D . 0 datos de prueba
op. D,O-D ; 0 datos de prueba
op7 D,O-D < 0 datos de prueba
6code
mov ea1,op%
mov eb1,op.
mov ec1,op7
6,\I4E ea1 W eb1
inc ea1
6I$ ea1 (( ec1
mov :,.
6E4SE
mov :,7
6E8DI$
6E8D,
7 9ri(mD(ica de en(ero, 7 9ri(mD(ica de en(ero, 7 9ri(mD(ica de en(ero, 7 9ri(mD(ica de en(ero,
#::

#n,(ruccione, de de,pla=amien(o 7 ro(acin #n,(ruccione, de de,pla=amien(o 7 ro(acin #n,(ruccione, de de,pla=amien(o 7 ro(acin #n,(ruccione, de de,pla=amien(o 7 ro(acin
Fun(o con la, in,(ruccione, a nivel de 'i(, .ue pre,en(amo, en el cap-(ulo 68 la, in,(ruccione,
de de,pla=amien(o ,on la, mB, carac(er-,(ica, del lengua>e en,am'lador/ Desplazar ,ignifica
mover 'i(, a la derec*a 7 a la i=.uierda den(ro de un operando/ #n(el proporciona un con>un(o
'a,(an(e comple(o de in,(ruccione, en e,(a Brea8 (oda, la, cuale, afec(an a la, 'andera,
5e,'ordamien(o 7 9carreo/
#n,(ruccione, de de,pla=amien(o 7 ro(acin
!$3 5e,pla=amien(o a la i=.uierda
!$< 5e,pla=amien(o a la derec*a
!93 5e,pla=amien(o ari(mD(ico a la i=.uierda
!9< 5e,pla=amien(o ari(mD(ico a la derec*a
<3 <o(acin a la i=.uierda
<< <o(acin a la derec*a
<03 <o(acin con acarreo a la i=.uierda
<0< <o(acin con acarreo a la derec*a
!$35 5e,pla=amien(o de do'le preci,in a la i=.uierda
!$<5 5e,pla=amien(o de do'le preci,in a la derec*a

5e,pla=a 5e,pla=a 5e,pla=a 5e,pla=amien(o, lgico, 7 de,pla=amien(o, ari(mD(ico, mien(o, lgico, 7 de,pla=amien(o, ari(mD(ico, mien(o, lgico, 7 de,pla=amien(o, ari(mD(ico, mien(o, lgico, 7 de,pla=amien(o, ari(mD(ico,
61i,(en do, forma, de de,pla=ar lo, 'i( de un operando/ 3a primera8 el desplazamiento lgico8
llena la nueva po,icin de 'i( creada con cero/ 6l ,iguien(e diagrama8 un '7(e ,e de,pla=a en
forma lgica una po,icin a la derec*a/ (6l 'i( ,e le a,igna un &)2


!upongamo, .ue e>ecu(amo, un ,olo de,pla=amien(o lgico a la derec*a en el valor 'inario
11&&11118 lo cual produce &11&&111/ 6l 'i( inferior ,e de,pla=a *acia la 'andera 9carreo
#:"


$a7 o(ro (ipo de de,pla=amien(o8 conocido como de,pla=amien(o ari(mD(ico/ 3a nueva po,icin
del 'i( creada ,e llena con una copia del 'i( del ,igno del nAmero original2

Por e>emplo8 el nAmero 'inario 11&&1111 (iene un 1 en el 'i( del ,igno/ 0uando ,e de,pla=a
ari(mD(icamen(e 1 'i( a la derec*a8 ,e convier(e en 111&&1112

#n, #n, #n, #n,(ruccin !$3 (ruccin !$3 (ruccin !$3 (ruccin !$3
3a in,(ruccin !$3 (de,pla=amien(o a la i=.uierda) reali=a un de,pla=amien(o lgico a la
i=.uierda en el operando de de,(ino8 llenando el 'i( inferior con &/ 6l 'i( ,uperior ,e mueve
*acia la 'andera de 9carreo8 7 el 'i( .ue e,(a'a en la 'andera 9carreo ,e pierde2




6l nAmero 'inario 11&&1111 de,pla=ado 1 'i( a la i=.uierda ,e convier(e en 1&&1111&2

6l primer operando de !$3 e, el de,(ino8 7 el ,egundo e, la cuen(a de de,pla=amien(o
#:#

!$3 destino8 cuenta
9 con(inuacin pre,en(amo, lo, (ipo, de operando, .ue permi(e e,(a in,(ruccin2
!$3 reg8immA
!$3 mem8immA
!$3 .eg8 "%
!$3 mem8 "%
3o, proce,adore, #n(el 8&86G8&88 re.uieren .ue immA ,ea igual a 1/ 5el proce,ador #n(el
8&286 en adelan(e8 immA pude ,er cual.uier en(ero en(re & 7 255/ 6n cual.uier proce,ador
#n(el8 03 puede con(ener una cuen(a de de,pla=amien(o/ 3o, forma(o, .ue ,e mue,(ran a.u-
(am'iDn ,e aplican a la, in,(ruccione, !$<8 !938 !9<8 <<8 <38 <0< K <03/
jemplos 6n la, ,iguien(e, in,(ruccione,8 "3 ,e de,pla=a una ve= a la i=.uierda/ 6l 'i( ,uperior
,e copia a la 'andera 9carreo 7 la po,icin del 'i( inferior ,e a,igna un cero2
mov bl,#$' 0 E4 ( %"""%%%%b
s'l bl,% 0 !$,E4 ( %,"""%%%"b
M@ltiples desplazamientos 0uando un valor ,e de,pla=a varia, vece,8 la 'andera 9carreo
con(iene el Al(imo 'i( .ue ,e de,pla= *acia afuera del 'i( mB, ,ignifica(ivo (4!")/ 6n el
,iguien(e e>emplo8 el 'i( 7 no (ermina en la 'andera 9carreo8 7a .ue lo ,u,(i(u7e el 'i( 6 (un
cero)2
mov al,%"""""""b
s'l al,. 0 !$ ( "
3o mi,mo ocurre cuando ,e reali=an de,pla=amien(o, a la derec*a/
Multiplicacin r*pida !$3 puede reali=ar mul(iplicacione, de al(a velocidad8 por po(encia, de
2/ !i ,e de,pla=a cual.uier operando a la i=.uierda por n 'i(,8 e,(o e.uivale a mul(iplicar el
operando por 2On/ Por e>emplo8 ,i ,e de,pla=a el nAmero 5 a la i=.uierda por 1 'i(8 ,e produce
el produc(o de 5J22
mov dl,<
s'l dl,%
9n(e,2 " " " " " % " % ( <
5e,puD,2 " " " " % " % " ( %"
!i el nAmero 1& decimal ,e de,pla=a 2 'i(, a la i=.uierda8 el re,ul(ado e, el mi,mo .ue ,i ,e
mul(iplica 1& por 2O22
#:1

mov dl,%"
s'l dl,. 0 (%" & ;) ( ;"
#n,(ruccin !$< #n,(ruccin !$< #n,(ruccin !$< #n,(ruccin !$<
3a in,(ruccin !$< (de,pla=amien(o a la derec*a) reali=a un de,pla=amien(o lgico a la
derec*a en el operando de de,(ino8 ,u,(i(u7endo el 'i( ,uperior con un &/ 6l 'i( inferior ,e
copia a la 'andera 9carreo8 7 el 'i( .ue e,(a'a en la 'andera 9carreo ,e pierde2

!$< u(ili=a lo, mi,mo, forma(o, de in,(ruccione, .ue !$3/ 6n el ,iguien(e e>emplo8 el & del 'i(
inferior en 93 ,e copia a la 'andera 9carreo8 7 el 'i( ,uperior en 93 ,e 'orra2
mov al,"D"' 0 A4 ( %%"%""""b
s'r al,% 0 A4 ( "%%"%"""b, !$ ( "
M@ltiples desplazamientos 6n una operacin con vario, de,pla=amien(o, 8 el Al(imo 'i( .ue
,e de,pla=a *acia fuera de la po,icin & (ermina en la 'andera 9carreo2
mov al,""""""%"b
s'r al,. 0 A4 ( """"""""b, !$ ( %
Divisin r*pida !i ,e de,pla=a un en(ero ,in ,igno a la derec*a por n 'i(,8 e,(o e.uivale divir
el operando en(re 2On/ Por e>emplo8 vamo, a dividir 32 en(re 2O18 lo cual produce 162
mov dl,7.
s'r dl,%
9n(e,2 " " % " " " " " ( 7.
5e,puD,2 " " " % " " " " ( %/
6n el ,iguien(e e>emplo8 64 ,e divide en(re 2O32
mov al,"%""""""b 0 A4 ( /;
s'r al,7 0 divide entre #, A4 ( """"%"""b
3a divi,in de nAmero, con ,igno median(e lo, de,pla=amien(o, ,e reali=a con la in,(ruccin
!9<8 7a .ue pre,erva el 'i( de ,igno del nAmero/
#n,(ruccin !93 7 !9< #n,(ruccin !93 7 !9< #n,(ruccin !93 7 !9< #n,(ruccin !93 7 !9<
#:3

!93 (de,pla=amien(o ari(mD(ico a la i=.uierda) e, idDn(ica a la in,(ruccin !$3/ 3a in,(ruccin
!9< (de,pla=amien(o ari(mD(ico a la derec*a) reali=a un de,pla=amien(o ari(mD(ico a la
derec*a en ,u operando de de,(ino2

3o, operando, para !93 7 !9< ,on idDn(ico, a lo, operando, para !$3 7 !$</ 6l
de,pla=amien(o puede repe(ir,e8 con 'a,e en el con(ador en el ,egundo operando2
!9< destino8cuenta
6l !iguien(e e>emplo mue,(ra como !9< duplica el 'i( de ,igna/ 93 e, nega(ivo an(e, 7 de,puD,
.ue ,e de,pla=a a la derec*a2
mov al,"$"' 0 A4 ( %%%%""""b (K%/)
sar al,% 0 A4 ( %%%%%"""b (K#), !$ ( "
Divisin con signo Podemo, dividir un operando con ,igno en(re po(encia de 28 median(e el
u,o de la in,(ruccin !9</ 6n el ,iguien(e e>emplo8 :128 ,e divide en(re 2O3/ 6l cocien(e e, :162
mov dl,K%.# 0 D4 ( %"""""""b
sar dl,7 0 D4 ( %%%%""""b
xtensin de A9 con signo hacia 69H !upongamo, .ue 9H con(iene un en(ero con ,igno 7
de,eamo, e1(ender ,u ,igno *acia 69H/ 6l primero ,e de,pla=a 69H 16 'i(, a la i=.uierda8 7
luego ,e de,pla=a ari(mD(icamen(e 16 'i(, a la derec*a2
mov ea1,K%.# 0 EA: ( NNNN$$#"'
s'l ea1,%/ 0 EA: ( $$#"""""'
sar ea1,%/ 0 EA: ( $$$$$$#"'
#n,(ruccin <3 #n,(ruccin <3 #n,(ruccin <3 #n,(ruccin <3
3a in,(ruccin <3 (ro(acin a la i=.uierda) de,pla=a cada 'i( a la i=.uierda/ 6l 'i( ,uperior ,e
copia a la 'andera 9carreo 7 a la po,icin del 'i( inferior/ 6l forma(o de in,(ruccin e, el mi,mo
.ue para !$32

#:5

6n la ro(acin no ,e pierden 'i(,/ Cn 'i( .ue ,e ro(a *acia un e1(remo de un nAmero aparece
en el o(ro e1(remo/ ',ervemo, en el ,iguien(e e>emplo cmo el 'i( ,uperior ,e copia (an(o a la
'andera 9carreo como a la po,icin del 'i( &2
mov al,;"' 0 A4 ( "%""""""b
rol al,% 0 A4 ( %"""""""b, !$ ( "
rol al,% 0 A4 ( """""""%b, !$ ( %
rol al,% 0 A4 ( """"""%"b, !$ ( "
.otaciones m@ltiples 0uando ,e u(ili=a una cuen(a de ro(acione, ma7or .ue 18 la 'andera
9carreo con(iene el Al(imo 'i( .ue ,e ro( *acia fuera de la po,icin del 'i( mB, ,ignifica(ivo2
mov al,""%"""""b
rol al,7 0 !$ ( %, A4 ( """""""%b
'ntercambio de grupos de bits !e puede u,ar <3 para in(ercam'iar la, mi(ade, ,uperior
('i(, 4:7) e inferior ('i(, &:3) de un '7(e/ Por e>emplo8 ,i ,e ro(a el nAmero 26* cua(ro 'i(, en
cual.uier direccin8 ,e convier(e en 62*2
mov al,./'
rol al,; 0 A4 ( /.'
9l ro(ar un en(ero de vario, '7(e, por 4 'i(,8 el efec(o e, .ue ,e ro(a cada d-gi(o *e1adecimal
una po,icin a la derec*a o a la i=.uierda/ 9.u-8 por e>emplo ro(amo, en forma repe(ida el
nAmero 694"* 4 'i(, a la i=.uierda8 para volver a .uedarno, con el valor original2
mov a1,/A;E'
rol a1,; 0 A: ( A;E/'
rol a1,; 0 A: ( ;E/A'
rol a1,; 0 A: ( E/A;'
rol a1,; 0 A: ( /A;E'
#n,(ruccin << #n,(ruccin << #n,(ruccin << #n,(ruccin <<
3a in,(ruccin << (ro(acin a la derec*a) de,pla=a cada 'i( a la derec*a 7 copia al 'i( inferior
en la 'andera 9carreo 7 en la po,icin del 'i( ,uperior/ 6l forma(o de la in,(ruccin e, el mi,mo
.ue para !$32
#:6


6n lo, ,iguien(e, e>emplo,8 o',erve cmo ,e copia el 'i( inferior (an(o como en la 'andera
9carreo como en la po,icin del 'i( ,uperior del re,ul(ado2
mov al,"%' 0 A4 ( """""""%b
ror al,% 0 A4 ( %""""""", !$ ( %
ror al,% 0 A4 ( "%"""""", !$ ( "
M@ltiples rotaciones 9l u(ili=ar una cuen(a de ro(acione, ma7or .ue 18 la 'andera 9carreo
con(iene el Al(imo 'i( .ue ,e ro( *acia fuera de la po,icin del 'i( mB, ,ignifica(ivo2
mov al,"""""%""b
ror al,7 0 A4 (%""""""", !$ ( %
#n,(ruccione, <03 7 <0< #n,(ruccione, <03 7 <0< #n,(ruccione, <03 7 <0< #n,(ruccione, <03 7 <0<
3a in,(ruccin <03 (ro(acin a la i=.uierda con acarreo) de,pla=a cada 'i( a la i=.uierda8 copia
la 'andera 9carreo al 'i( meno, ,ignifica(ivo (3!") 7 copia el 'i( mB, ,ignifica(ivo (4!") a la
'andera 9carreo2

!i imaginamo, la 'andera 9carreo como un 'i( adicional .ue ,e agrega al e1(remo ,uperior del
operando <03 ,e ve como una operacin de ro(acin a la i=.uierda/ 6n el ,iguien(e e>emplo8 la
in,(ruccin 030 'orra la 'andera 9carreo/ 3a primera in,(ruccin <03 mueve el 'i( ,uperior de
"3 *acia la 'andera 9carreo 7 de,pla=a lo, o(ro, 'i(, a la i=.uierda/ 3a ,egunda in,(ruccin
<03 mueve la 'andea 9carreo *acia la po,icin del 'i( inferior 7 de,pla=a lo, o(ro, 'i(, a la
i=.uierda2
clc 0 !$ ( "
mov bl,##' 0 !$,E4 ( " %"""%"""b
rcl bl,% 0 !$, E4 ( % """%""""b
rcl bl,% 0 !$,E4 ( " ""%""""%b
.ecuperacin de un bit de la bandera Acarreo <03 puede recuperar un 'i( .ue ,e *a7a
de,pla=ado previamen(e a la 'andera 9carreo/ 6l ,iguien(e e>emplo comprue'a el 'i( inferior
de valprue'a valprue'a valprue'a valprue'a8 de,pla=ando ,u 'i( inferior *acia la 'andera 9carreo/ !i el 'i( inferior de
#:7

valprue'a e, 18 ,e reali=a un ,al(o[ ,i el 'i( inferior e, &8 <03 re,(aura el nAmero a ,u valor
original2
6data
valrpueba EF3E "%%"%"%"b
6code
s'r valprueba,% 0 desplaza 4SE 'acia la bandera Acarreo
c salir 0 termina si se activa la bandera Acarreo
rcl valprueba,% 0 en caso contrario, restaura el n?mero
'nstruccin .". 3a in,(ruccin <0< (<o(acin a la derec*a con acarreo) de,pla=a cada 'i( a
la derec*a8 copia la 'andera 9carreo al 'i( mB, ,ignifica(ivo8 7 copia el 'i( meno, ,ignifica(ivo a
la 'andera 9carreo2

0omo en el ca,o de <038 e, A(il vi,uali=ar el en(ero en e,(a figura como un valor de P 'i(,8 con
la 'andera 9carreo a la derec*a del 'i( meno, ,ignifica(ivo/
6n el ,iguien(e e>emplo8 !T0 ac(iva la 'andera 9carreo an(e, de ro(arla *acia el 4!" 7 an(e,
de ro(ar el 3!" *acia la 'andera 9carreo2
stc 0 !$ ( %
mov a',%"' 0 A\, ( !$ ( """%"""" %
rcr a',% 0 A\, ( !$ ( %""%""" "
5e,'ordamien(o con ,igno 5e,'ordamien(o con ,igno 5e,'ordamien(o con ,igno 5e,'ordamien(o con ,igno
3a 'andera 5e,'ordamien(o ,e ac(iva cuando al de,pla=ar o ro(ar un en(ero con ,igno por una
po,icin de 'i( ,e genera un valor fuera del rango de en(ero, con ,igno para el operando/
5ic*o de o(ra forma8 ,e invier(e el ,igno del nAmero/ 6n el ,iguien(e e>emplo8 un en(ero
po,i(ivo (E127) ,e vuelve nega(ivo (:2) cuando ,e ro(a a la i=.uierda2
mov al,L%.M 0 A4 ( "%%%%%%%b
rol al,% 0 O$ %, A4 ( %%%%%%%%b
5e manera ,imilar8 cuando el nAmero :128 ,e de,pla=a una po,icin a la derec*a8 ,e ac(iva la
'andera 5e,'ordamien(o/ 6l re,ul(ado en 93 (E64) (iene el ,igno opue,(o2
#:8

mov al,K%# 0 A4 ( %"""""""b
s'r al,% 0 O$ ( %, A4 ( "%""""""b
6l valor de la 'andera 5e,'ordamien(o e, indefinido cuando la cuen(a de de,pla=amien(o o
ro(acione, e, ma7or .ue 1/
#n,(ruccione, !$35G!$<5 #n,(ruccione, !$35G!$<5 #n,(ruccione, !$35G!$<5 #n,(ruccione, !$35G!$<5
3a, in,(ruccione, !$35 7 !$<5 ,e in(rodu>eron con el #n(el386/ 3a in,(ruccin !$35
(de,pla=amien(o do'le a la i=.uierda) de,pla=a un operando de de,(ino de cier(o nAmero de
'i(, a la i=.uierda/ 3a, po,icione, de 'i(, .ue ,e a'ren de'ido al de,pla=amien(o ,e llenan con
lo, 'i(, mB, ,ignifica(ivo, del operando de origen/
6,(e operando no ,e ve afec(ado8 pero la, 'andera, !igno8 0ero8 9u1iliar8 Paridad 7 9carreo ,-2
!$35 destino8 origen8 cuenta
3a in,(ruccin !$<5 (de,pla=amien(o do'le a la derec*a) de,pla=a un operando de de,(ino
cier(o nAmero de 'i(, a la derec*a/ 3a, po,icione, de 'i(, .ue ,e a'ren de'ido al
de,pla=amien(o ,e llenan con lo, 'i(, meno, ,ignifica(ivo, del operando de origen2
!$<5 destino8 origen8 cuenta
3o, ,iguien(e, forma(o, de in,(ruccione, ,e aplican (an(o a !$35 como a !$<5/ 6l operando
de destino puede ,er un regi,(ro u operando de memoria8 mien(ra, .ue el operando de origen
de'e ,er un regi,(ro/ 6l operando cuenta puede ,er el regi,(ro 03 o un operando inmedia(o de
8 'i(,2
!$35 reg/08reg/08"%BimmA
!$35 mem/08reg/08"%BimmA
!$35 reg238reg238"%BimmA
!$35 mem238reg238"%BimmA
6>emplo 1 3a, ,iguien(e, in,(ruccione, de,pla=an val% val% val% val% 4 'i(, a la i=.uierda8 e in,er(an lo, 4
'i(, ,uperiore, de 9H en la, 4 po,icione, de 'i(, inferiore, de val% val% val% val%2
6data
val= ,O-D +EA/'
6code
mov a1,"A!7/'
s'ld val=,a1,; 0 val= ( EA/A'
6l movimien(o de da(o, ,e mue,(ra en la ,iguien(e figura2
#:9


6>emplo 2 6n el ,iguien(e e>emplo8 9H ,e de,pla=a 4 'i(, a la derec*a8 7 lo, 4 'i(, inferiore, de
5H ,e de,pla=an *acia la, 4 po,icione, ,uperiore, de 9H2

mov a1,.7;E'
mov d1,M/<;'
s'rd a1,d1,; 0 A: ( ;.7;'
!$35 7 !$<5 pueden u,ar,e para manipular imBgene, de mapa, de 'i(,8 cuando vario,
grupo, de 'i(, de'en de,pla=ar,e a la i=.uierda 7 a la derec*a para repo,icionar imBgene, en
la pan(alla/ (ra aplicacin po(encial e, el cifrado de da(o,8 en donde el algori(mo de cifrado
re.uiere de,pla=amien(o de 'i(,/ Por Al(imo8 la, do, in,(ruccione, pueden u,ar,e al reali=ar
operacione, rBpida, de mul(iplicacin 7 divi,in con en(ero, mu7 grande,/
9plicacione, de de,pla=amien(o 7 ro(acin 9plicacione, de de,pla=amien(o 7 ro(acin 9plicacione, de de,pla=amien(o 7 ro(acin 9plicacione, de de,pla=amien(o 7 ro(acin
5e,pla=amien(o de varia, do'le, pala'ra, 5e,pla=amien(o de varia, do'le, pala'ra, 5e,pla=amien(o de varia, do'le, pala'ra, 5e,pla=amien(o de varia, do'le, pala'ra,
Para de,pla=ar un en(ero con preci,in e1(endida8 *a7 .ue dividirlo en un arreglo de '7(e,8
pala'ra, o do'le, pala'ra,/ Cna manera comAn de almacenar el nAmero en memoria e, con el
valor de menor orden en la direccin mB, 'a>a (a la cual ,e le conoce como orden %ittle6
endian)/ 3o, ,iguien(e, pa,o, no, mo,(rarBn cmo de,pla=ar un arreglo de e,(e (ipo a la
derec*a8 u,ando un arreglo de do'le, pala'ra, como e>emplo2
3amArreglo ( 7
6data
arreglo D,O-D 3amArreglo D9P(N)
1/ 6,(a'lecer 6!# con el de,pla=amien(o del arreglo/
#":

2/ 5e,pla=ar la do'le pala'ra de orden ,uperior en ^6!#E8_ ^6!#E8_ ^6!#E8_ ^6!#E8_ a la derec*a8 copiando en
forma au(omB(ica ,u 'i( inferior a la 'andera 9carreo/
3/ 5e,pla=ar el valor en ^6!#E4_ ^6!#E4_ ^6!#E4_ ^6!#E4_ a la derec*a/ !u 'i( ,uperior ,e llena de manera
au(omB(ica de la 'andera 9carreo8 7 ,u 'i( inferior ,e copia en la nueva 'andera
9carreo/
4/ 5e,pla=ar la do'le pala'ra de orden inferior en ^6!#E&_ ^6!#E&_ ^6!#E&_ ^6!#E&_ a la derec*a/ !u 'i( ,uperior ,e
llena de la 'andera 9carreo 7 ,u 'i( inferior ,e copia a la nueva 'andera 9carreo/
3a ,iguien(e figura mue,(ra el con(enido del arreglo 7 la, referencia, indirec(a,2

6l programa llamado 5e,p4ul(i/a,m implemen(a el ,iguien(e cdigo/ C(ili=ando <0< en e,(e
e>emplo8 pero podr-amo, u,ar la in,(ruccin !$<5 en ,u lugar2
6data
3amArreglo ( 7
arreglo D,O-D 3amArreglo dup(++++++++') 0 %""% %""%D
6code
mov esi,"
s'r arregloBesiL#C,% 0 doble palabra mIs alta
rcr arregloBesiL;C,% 0 doble palabra media, inclu5e bandera Acarreo
rcr arregloBesiC,% 0 doble palabra baa, inclu5e la bandera
Acarreo
3a ,alida del programa mue,(ra lo, nAmero, 'inario,8 an(e, 7 de,puD, del de,pla=amien(o2



4ul(iplicacin 'inaria 4ul(iplicacin 'inaria 4ul(iplicacin 'inaria 4ul(iplicacin 'inaria
3a, in,(ruccione, de mul(iplicacin 'inaria de la familia #9:32 (4C3 e #4C3) ,e con,ideran
len(a,8 en relacin con o(ra, in,(ruccione, de mB.uina/ 9 menudo8 lo, programadore, de
en,am'lador 'u,can me>ore, forma, de reali=ar la mul(iplicacin 'inaria8 7 e, eviden(e .ue el
de,pla=amien(o de 'i(, e, ,uperior/ 3a in,(ruccin !$3 reali=a la mul(iplicacin ,in ,igno con
%""% %""% %""% %""% %""% %""% %""% %""% %""% %""%D(etc6)
"%"" %%"" %%"" %%"" %%"" %%"" %%"" %%"" %%"" %%""D(etc6)
#""

eficiencia8 cuando el mul(iplicador e, una po(encia de 2/ 9l de,pla=ar un en(ero ,in ,igno n 'i(,
a la i=.uierda8 ,e mul(iplica por 2On/ 0ual.uier o(ro mul(iplicador puede e1pre,ar,e como la
,uma de po(encia, de 2/ Por e>emplo8 para mul(iplicar el valor de 69H ,in ,igno por 368
podemo, e,cri'ir el 36 como 2O5 E 2O2 7 u(ili=ar la propiedad di,(ri'u(iva de la mul(iplicacin2
69H J 36 R 69H J (32 E 4)
R (69H J 32) E (69H J 4)
3a ,iguien(e figura mue,(ra la mul(iplicacin 123 J 368 .ue produce 44288 el produc(o2

3o, 'i(, 2 7 5 ,e ac(ivan en el mul(iplicador (36) 7 (am'iDn ,on con(adore, de de,pla=amien(o
re.uerido,/ 6l ,iguien(e cdigo implemen(a e,(a mul(iplicacin8 median(e regi,(ro, de 32 'i(,2
6code
mov ea1,%.7
mov eb1,ea1
s'l ea1,< 0 multiplica por .h<
s'l eb1,. 0 multiplica por .h.
add ea1,eb1 0 suma los productos
+i,uali=acin de 'i(, 'inario, +i,uali=acin de 'i(, 'inario, +i,uali=acin de 'i(, 'inario, +i,uali=acin de 'i(, 'inario,
Cna (area comAn de programacin e, conver(ir un en(ero 'inario en cadena 9!0## 'inaria8 para
poder vi,uali=arla en pan(alla8 la in,(ruccin !$3 e, A(il para e,(o8 7a .ue copia el 'i( mB, al(o
de un operando a la 'andera 9carreo8 cada ve= .ue el operando ,e de,pla=a a la i=.uierda/ 6l
,iguien(e procedimien(o "in99,c e, una implemen(acin ,imple2
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
EinAAsc P-O!
0
0 !onvierte un entero binario de 7. bits a AS!II binario6
0 -ecibe* EA: ( entero binario, ESI apunta al b?fer
#"#

0 Devuelve* b?fer lleno de dAgitos AS!II binarios
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
pus' ec1
pus' esi
mov ec1,7. 0 n?mero de bits en EA:
4%* s'l ea1,% 0 desplaza el bit superior 'acia la bandera Acarreo
mov EF3E P3- BesiC,H"H 0 elie " como dAgito predeterminado
nc 4. 0 si no 'a5 Acarreo, salta a 4.
mov EF3E P3- BesiC,H%H 0 en caso contrario, mueve % al b?fer
4.* inc esi 0 siguiente posicin del b?fer
loop 4% 0 desplaza otro bit a la iz@uierda
pop esi
pop ec1
ret
EinAAS! E8DP

9i,l 9i,l 9i,l 9i,lamien(o de campo, de da(o, de amien(o de campo, de da(o, de amien(o de campo, de da(o, de amien(o de campo, de da(o, de arc*ivo arc*ivo arc*ivo arc*ivo, de 4! , de 4! , de 4! , de 4!: :: :5! 5! 5! 5!
0on frecuencia8 un '7(e o pala'ra con(iene mB, de un campo8 por lo .ue e, nece,ario e1(raer
,ecuencia, de 'i(, llamada, cadenas de bits/ Por e>emplo8 en modo direccionamien(o real8 la
funcin 57* de 5! devuelve la e,(ampa de fec*a de un arc*ivo en 5H/ (3a e,(ampa de fec*a
mue,(ra la fec*a de Al(ima modificacin .ue ,e reali=o a e,e arc*ivo)/ 3o, 'i(, del & al 4
repre,en(an un nAmero de d-a en(re 1 7 318 lo, 'i(, de 5 al 8 ,on el nAmero de me,8 7 lo, 'i(,
del P al 15 guardan el nAmero del a@o/ !upongamo, .ue la fec*a de la Al(ima modificacin de
un arc*ivo e, mar=o 1&81PPP/ 3a e,(ampa de fec*a del arc*ivo aparecer-a como ,e mue,(ra a
con(inuacin en el regi,(ro 5H (el nAmero de a@o e, rela(ivo a 1P8&)2

#"1

Para e1(raer un ,olo campo8 *a7 .ue de,pla=ar ,u, 'i(, *acia la par(e inferior de un regi,(ro 7
'orrar la, po,icione, de lo, 'i(, irrelevan(e,/ 6l ,iguien(e e>emplo de cdigo e1(rae el nAmero
del d-a/ !acando una copia de 53 7 enma,carando lo, 'i(, .ue no per(enecen al campo2
mov al, dl 0 saca una copia de D4
and al,"""%%%%%b 0 borra los bits <KM
mov dia, al 0 guarda en dAa
Para e1(raer el nAmero del me,8 de,pla=amo, lo, 'i(, del 5 al 8 en la par(e 'a>a de 938 an(e,
de enma,carar (odo, lo, demB, 'i(,/ 5e,puD,8 93 ,e copia a una varia'le2
mov a1,d1 0 saca una copia de D:
s'r a1,< 0 desplaza < bits a la derec'a
and al,""""%%%%b 0 borra los bits ;KM
mov mes,al 0 guarda en mes
6l nAmero de a@o ('i( del P al 15) ,e encuen(ra comple(amen(e den(ro del regi,(ro 5$/ 3o
copiamo, a 93 7 lo de,pla=amo, 1 'i( a la derec*a2
mov al,d' 0 saca una copia de D\
s'r al,% 0 desplaza una posicin a la derec'a
mov a'," 0 borra A\ 5 lo dea en ceros
add ea1,%+#" 0 el aJo es relativo a %+#"
mov anio,a1 0 guarda en el aJo
#n,(ruccio #n,(ruccio #n,(ruccio #n,(ruccione, de mul(iplicacin 7 divi,in ne, de mul(iplicacin 7 divi,in ne, de mul(iplicacin 7 divi,in ne, de mul(iplicacin 7 divi,in
3a, in,(ruccione, #4C3 e 4C3 reali=an operacione, de mul(iplicacin de en(ero, con 7 ,in
,igno8 re,pec(ivamen(e/ 3a in,(ruccin 5#+ reali=a la divi,in de en(ero, ,in ,igno8 e #5#+ reali=a
la divi,in de en(ero, con ,igno/
#n,(ruccin 4C3 #n,(ruccin 4C3 #n,(ruccin 4C3 #n,(ruccin 4C3
3a in,(ruccin 4C3 (mul(iplicacin ,in ,igno) viene en (re, ver,ione,2 la primera mul(iplica un
operando de 8 'i(, por 938 la ,egunda mul(iplica un operando de 16 'i(, por 9H 7 la (ercera
mul(iplica un operando de 32 'i(, por 69H/ 6l mul(iplicador 7 el mul(iplica(ivo ,on del mi,mo
(ama@o8 7 el produc(o e, el do'le de ,u (ama@o/ 3o, (re, forma(o, acep(an operando, de
regi,(ro 7 de memoria8 pero no operando, inmedia(o,2
4C3 rGm8
4C3 rGm16
#"3

4C3 rGm32
6l operando individual e, el mul(iplicador/ 3a ,iguien(e (a'la mue,(ra el mul(iplicando
prede(erminado 7 el produc(o8 dependiendo del (ama@o del mul(iplicador/ 0omo el operando
de de,(ino e, del do'le del (ama@o del mul(iplicando 7 del mul(iplicador8 no puede ocurrir
de,'ordamien(o/ 4C3 ac(iva la, 'andera, 9carreo 7 5e,'ordamien(o ,i la mi(ad ,uperior del
produc(o no e, igual a cero/ Por lo general8 la 'andera 9carreo ,e u(ili=a para ari(mD(ica ,in
,igno8 por lo .ue a.u- no, enfocamo, en e,o/ Por e>emplo8 cuando 9H ,e mul(iplica por un
operando de 16 'i(,8 el produc(o ,e almacena en 5H29H 3a 'andera 9carreo ,e ac(iva ,i 5H no
e, igual a cero/
perando, de 4C3/
4ul(iplicando 4ul(iplicando 4ul(iplicando 4ul(iplicando 4ul(iplicador 4ul(iplicador 4ul(iplicador 4ul(iplicador Produc(o Produc(o Produc(o Produc(o
93 rGm8 9H
9H rGm16 5H29H
69H rGm32 65H269H



6>emplo, de 4C3 6>emplo, de 4C3 6>emplo, de 4C3 6>emplo, de 4C3
3a, ,iguien(e, in,(ruccione, mul(iplican 93 por "38 almacenando el produc(o en 9H/ 3a
'andera 9carreo ,e 'orra (0F R &) de'ido a .ue 9$ (la mi(ad ,uperior del produc(o) e, igual a
cero2
mov al,<'
mov bl,%"'
mul bl 0 A: ( <"', !$ ( "
3a, ,iguien(e, in,(ruccione, mul(iplican el valor de 16 'i(, 2&&&* por 1&&*/ 0F R 18 7a .ue la
par(e ,uperior del produc(o en 5H no e, igual a cero2
6data
val% ,O-D ."""'
val. ,O-D "%""'
6code
mov a1,val% 0 A: ( ."""'
Dna buena razn para comprobar la bandera /carreo despu!s de ejecutar <DL& es para saber si la
mitad superior del producto puede ignorarse sin riesgos.
#"5

mul val. 0 D:*A: ( ""."""""', !$ ( %
3a, ,iguien(e, in,(ruccione, mul(iplican 12345* por 1&&&*8 7 el produc(o e, de 64 'i(,/ 0F R
&8 7a .ue 65H e, igual a cero2
mov ea1,%.7;<'
mov eb1,%"""'
mul eb1 0 ED:*EA: ( """"""""%.7;<"""', !$ ( "
#n,(ruccin #4C3 #n,(ruccin #4C3 #n,(ruccin #4C3 #n,(ruccin #4C3
3a in,(ruccin #4C3 (mul(iplicacin con ,igno) reali=a la mul(iplicacin de en(ero, con ,igno8
pre,ervando el ,igno del produc(o/ 6l con>un(o de in,(ruccione, #9:32 ,opor(a (re, forma(o,
para e,(a in,(ruccin2 un operando8 do, operando, 7 (re, operando,/ 6n el forma(o de un
operando8 el mul(iplicador 7 el mul(iplicando ,on del mi,mo (ama@o 7 el produc(o e, del do'le
de ,u (ama@o/ (3o, proce,adore, 8&86G8&88 ,lo ,opor(an el forma(o de un operando)/
8ormatos de un operando 3o, forma(o, de un operando almacenan el produc(o en el
acumulador (9H8 5H29H o 65H269H)2
#4C3 rGm8 [ 9H R 93 J rGm '7(e
#4C3 rGm16 [ 5H29H R 9H J rGm pala'ra
#4C3 rGm32 [ 65H269H R 69H J rGm do'le pala'ra
0omo en el ca,o de 4C38 el (ama@o de almacenamien(o del produc(o *ace .ue el
de,'ordamien(o ,ea impo,i'le en la in,(ruccin #4C3 de un operando/ 3a, 'andera, 9carreo 7
5e,'ordamien(o ,e ac(ivan ,i la mi(ad ,uperior del produc(o no e, una e1(en,in del ,igno de
la mi(ad inferior/ !e puede u(ili=ar e,(a informacin para decidir ,i ,e de'e ignorar o no la
mi(ad ,uperior del produc(o/
8ormato de dos operandos 3a ver,in de do, operando, de e,(a in,(ruccin almacena el
produc(o en el primer operando/ 6l primer operando de'e ,er un regi,(ro/ 6l ,egundo operando
puede ,er un regi,(ro8 operando de memoria o valor inmedia(o/ 9 con(inuacin ,e mue,(ran lo,
forma(o, de 16 'i(,2
#4C3 r168rGm16
#4C3 r168imm8
#4C3 r168imm16
9 con(inuacin ,e pre,en(an lo, forma(o, de 32 'i(,8 para demo,(rar .ue el mul(iplicador
puede ,er un regi,(ro de 32 'i(,8 un operando de memoria de 32 'i(, o un valor inmedia(o (de
8 o 32 'i(,)2
#4C3 r328rGm32
#"6

#4C3 r328imm8
#4C3 r328imm32
3o, forma(o, de do, operando, (runcan el produc(o a la longi(ud del de,(ino/ !i ,e pierden
d-gi(o, ,ignifica(ivo,8 ,e ac(ivan la, 'andera, 5e,'ordamien(o 7 9carreo/ !e de'e verificar una
de e,(a, 'andera, an(e, de reali=ar una operacin #4C3 con do, operando,/
8ormato de tres operandos 3o, forma(o, de (re, operando, almacenan el produc(o en el
primer operando/ Cn regi,(ro de 16 'i(, u operando de memoria puede mul(iplicar,e por un
valor inmedia(o de 8 o de 16 'i(,2
#4C3 r168rGm168imm8
#4C3 r168rGm168imm16
Cn regi,(ro de 32 'i(, u operando de memoria puede mul(iplicar,e por un valor inmedia(o de 8
o 32 'i(,2
#4C3 r328rGm328imm8
#4C3 r328rGm328imm32
!i ,e pierden d-gi(o, ,ignifica(ivo,8 ,e ac(ivan la, 'andera, 5e,'ordamien(o 7 9carreo/ !e de'e
revi,ar una de e,(a, 'andera, de,puD, de reali=ar una operacin #4C3 con (re, operando,/
4ul(iplicacin ,in ,igno 3o, forma(o, de #4C3 de do, 7 (re, operando, (am'iDn pueden
u(ili=ar,e para la mul(iplicacin ,in ,igno8 7a .ue la mi(ad inferior del produc(o e, igual para lo,
nAmero, con 7 ,in ,igno/ $a7 una pe.ue@a de,ven(a>a al *acer e,(o2 la, 'andera, 9carreo 7
5e,'ordamien(o no indican ,i la mi(ad ,uperior del produc(o e, 0ero/
6>emplo, de #4C3 6>emplo, de #4C3 6>emplo, de #4C3 6>emplo, de #4C3
3a, ,iguien(e, in,(ruccione, mul(iplican 48 por 48 produciendo E1P2 en 9H/ 6n el produc(o8 9$
no e, una e1(en,in del ,igno 938 por lo .ue ocurre un de,'ordamien(o con ,igno2
mov al,;#
mov bl,;
imul bl 0 A: ( ""!"', O$ ( %
3a, ,iguien(e, in,(ruccione, mul(iplican :4 por 48 produciendo :16 en 9H/ 9$ e, una e1(en,in
del ,igno de 93 en el produc(o8 por lo .ue la 'andera 5e,'ordamien(o ,e 'orra2
mov al,K;
mov bl,;
imul bl 0 A: ($$$"', O$ ( "
#"7

3a, ,iguien(e, in,(ruccione, mul(iplicando 48 por 88 produciendo :1P2 en 5H29H e, una
e1(en,in del ,igno de 9H8 por lo .ue no *a7 de,'ordamien(o con ,igno2
mov a1,;#
mov b1,;
imul b1 0 D:*A: ( """"""!"', O$ ( "
3a, ,iguien(e, in,(ruccione, reali=an una mul(iplicacin de 32 'i(, con ,igno (482424 J :423)8
produciendo :28&4&83&88352 en 65H269H/ 65H e, una e1(en,in de ,igno de 69H8 por lo .ue la
'andera de 5e,'ordamien(o ,e 'orra2
mov ea18E482424
mov eb1,;
imul eb1 0 ED:*EA: ( $$$$$$$#//7<D#"', O$ ( "
3a, ,iguien(e, in,(ruccione, demue,(ran lo, forma(o, de do, operando,2
6data
=ord% S,O-D ;
d=ord% S,O-D ;
6code
mov a1,K%/ 0 A: ( K%/
mov b1,. 0 E: ( .
imul b1,ea1 0 E: ( K7.
imul b1,. 0 E: ( K/;
imul b1,=ord% 0 E: ( K.</
mov ea1,K%/ 0 EA: ( K%/
mov eb1,. 0 EE: ( .
imul eb1,ea1 0 EE: ( K7.
imul eb1,. 0 EE: ( K/;
imul eb1,d=ord% 0 EE: ( K.</
3a, ,iguien(e, in,(ruccione, de do, operando, demue,(ra un de,'ordamien(o con ,igno8 7a
.ue :64&&& no puede a>u,(ar,e den(ro de un operando de de,(ino de 16 'i(,2
#"8

mov a1,K7."""
imul a1,. 0 O$ ( %
3a, ,iguien(e, in,(ruccione, demue,(ran lo, operando, de (re, forma(o,8 inclu7endo un
e>emplo de de,'ordamien(o con ,igno2
6data
=ord% S,O-D ;
d=ord% SD,O-D ;
6code
imul b1,=ord%,K%/ 0 E: ( K/;
imul eb1,d=ord, K%/ 0 EE: ( K/;
mul eb1,d=ord%,K.""""""""" 0 O$ ( %
6valuacin del rendimien(o de la, o 6valuacin del rendimien(o de la, o 6valuacin del rendimien(o de la, o 6valuacin del rendimien(o de la, operacione, de mul(iplicacin peracione, de mul(iplicacin peracione, de mul(iplicacin peracione, de mul(iplicacin
9*ora .ue *emo, vi,(o como ,e reali=a la mul(iplicacin median(e el de,pla=amien(o de 'i(, 7
la, in,(ruccione, 4C3 e #4C3 e,(Bndar8 e, in(ere,an(e comparar ,u rendimien(o rela(ivo/ 3o,
,iguien(e, procedimien(o, mul(iplican 69H por 368 u,ando lo, do, mD(odo,2
multTporTdesplazamiento P-O!
0
0 2ultiplica EA: por 7/ usando S\4, !9E83AT!I!4O veces6
mov ec1,!9E83AT!I!4O
4%*pus' ea1 0 guarda el valor original de EA:
mov eb1,ea1
s'l ea1,<
s'l eb1,.
add ea1,eb1
pop ea1 0 restaura EA:
loop 4%
ret
multTporTdesplazamiento E8DP
#"9

multTporT294 P-O!
0
0 2ultiplica EA: por 7/ usando 294, !9E83AT!I!4O veces6
mov ec1,!9E83AT!I!4O
4%*pus' ea1 0 guarda EA: original
mov eb1,7/
mul eb1
pop ea1 0 restaura EA:
loop 4%
ret
multTporT294 E8DP
+amo, a llamar a mul(SporSde,pla=amien(o mul(SporSde,pla=amien(o mul(SporSde,pla=amien(o mul(SporSde,pla=amien(o un gran nAmero de vece, 7 vamo, a regi,(rar el
(iempo de e>ecucin2
6data
!9E83AT!I!4O ( "$$$$$$$$'
6data
)alInt D,O-D <
tiempoInicial D,O-D N
6code
call Set2seconds 0 obtiene tiempo inicial
mov tiempoInicial,ea1
mov ea1,)alInt
call multTporTdesplazamiento 0 multiplica a'ora
call Set2seconds 0 obtiene tiempo final
sub ea1,tiempoInicial
call ,riteDec 0 muestra el tiempo transcurrido
##:

!uponiendo .ue llamamo, a mul(SporS4C3 mul(SporS4C3 mul(SporS4C3 mul(SporS4C3 de la mi,ma forma8 lo, (iempo, re,ul(an(e, en un
Pen(ium 4 de 4 Y$= ,on eviden(e,2 6l mD(odo !$3 ,e e>ecu(a en 6/&78 ,egundo, 7 el mD(odo
con 4C3 ,e e>ecu(a en 2&/718 ,egundo,/ 6n o(ra, pala'ra,8 `el u,o de la in,(ruccin 4C3
*ace .ue el cBlculo ,ea un 241 por cien(o mB, len(oa
#n,(ruccin 5#+ #n,(ruccin 5#+ #n,(ruccin 5#+ #n,(ruccin 5#+
3a in,(ruccin 5#+ (divi,in ,in ,igno) reali=a la divi,in de en(ero, ,in ,igno de 8 'i(,8 16 'i(, 7
32 'i(,/ 6l regi,(ro individual u operando de memoria e, el divi,or/ 3o, forma(o, ,on2
5#+ rGm8
5#+ rGm16
5#+ rGm32
3a ,iguien(e (a'la mue,(ra la relacin en(re el dividendo8 el divi,or8 el cocien(e 7 el re,iduo2

5ividendo 5ividendo 5ividendo 5ividendo 5ivi,or 5ivi,or 5ivi,or 5ivi,or 0ocien(e 0ocien(e 0ocien(e 0ocien(e <e,iduo <e,iduo <e,iduo <e,iduo
9H rGm8 93 9$
5H29H rGm16 5H 9H
65H269H rGm32 65H 69H

6>emplo, de 5#+ 6>emplo, de 5#+ 6>emplo, de 5#+ 6>emplo, de 5#+
3a, ,iguien(e, in,(ruccione, reali=an una divi,in ,in ,igno de 8 'i(, (83*G2)8 produciendo un
cocien(e de 41* 7 un re,iduo de 12
mov a1,""#7' 0 dividendo
mov bl,. 0 divisor
div bl 0 A4 ( ;%', A\ ( "%'
3a, ,iguien(e, in,(ruccione, reali=an una divi,in ,in ,igno de 16 'i(, (8&&3*G1&&*)8
produciendo un cocien(e de 8&* 7 un re,iduo de 38 5H con(iene la par(e ,uperior del dividendo8
por lo .ue ,e de'e 'orrar an(e, de e>ecu(ar la in,(ruccin 5#+2
mov d1," 0 borra dividendo, superior
mov a1,#""7' 0 dividendo, inferior
mov c1,%""' 0 divisor
##"

div c1 0 A: ( ""#"', D: ( """7'
3a ,iguien(e in,(ruccin reali=a una divi,in ,in ,igno de 32 'i(,8 u,ando un operando de
memoria como divi,or2
6data
dividendo R,O-D """""""#""7"""."'
divisor D,O-D """""%""'
6code
mov ed1,D,O-D P3- dividendoL; 0 doble palabra superior
mov ea1,D,O-D P3- dividendo 0 doble palabra inferior
div divisor 0 EA: ( "#""7"""', ED: ( """"""."'
5ivi,in de en(ero, ,in ,igno 5ivi,in de en(ero, ,in ,igno 5ivi,in de en(ero, ,in ,igno 5ivi,in de en(ero, ,in ,igno
3a divi,in de en(ero, con ,igno e, ca,i idDn(ica a la divi,in ,in ,igno8 con una impor(an(e
diferencia2 el dividendo implicado de'e (ener una e1(en,in comple(a del ,igno an(e, de
reali=ar la divi,in/ Primero veremo, la, in,(ruccione, para la e1(en,in de ,igno/ 5e,puD, la,
aplicaremo, a la in,(ruccin de divi,in de en(ero, con ,igno8 #5#+/
#n,(ruccione, para la e1(en,in del ,igno (0";8 0;58 05L) #n,(ruccione, para la e1(en,in del ,igno (0";8 0;58 05L) #n,(ruccione, para la e1(en,in del ,igno (0";8 0;58 05L) #n,(ruccione, para la e1(en,in del ,igno (0";8 0;58 05L)
9 menudo8 ,e de'e e1(ender el ,igno de lo, dividendo, de la, in,(ruccione, de divi,in de
en(ero, con ,igno para poder reali=ar la divi,in/ #n(el proporciona (re, in,(ruccione, A(ile, de
e1(en,in de ,igno2 0";8 0;5 7 05L/ 3a in,(ruccin 0"; (conver(ir '7(e a pala'ra) e1(iende el
'i( de ,igno de 93 *acia 9$8 pre,ervando el ,igno del nAmero/ 6n el ,iguien(e e>emplo8 P"* (en
93) 7 FFP"* (en 9H) ,on am'o, iguale, a :1&12
6data
valE5te SEF3E K%"% 0 +#'
6code
mov al,valE5te 0 A4 ( +#'
cb= 0 A: ( $$+E'
3a in,(ruccin 0;5 (conver(ir pala'ra a do'le pala'ra) e1(iende el 'i( de ,igno de 9H *acia 5H2
6data
val,ord S,O-D K%"% 0 $$+E'
6code
###

mov a1,val,ord 0 A: ( $$+E'
c=d 0 D:*A: ( $$$$$$+E'
3a in,(ruccin 05L (0onver(ir do'le pala'ra a pala'ra cuBdruple) e1(iende el 'i( de ,igno de
69H *acia 65H2
6data
valD=ord SD,O-D K%"% 0 $$$$$$+E'
6code
mov ea1,valD=ord
cd@ 0 ED:*EA: ( $$$$$$$$$$$$$$+E'
3a in,(ruccin #5#+ 3a in,(ruccin #5#+ 3a in,(ruccin #5#+ 3a in,(ruccin #5#+
3a in,(ruccin #5#+ (divi,in con ,igno) reali=a una divi,in de en(ero, con ,igno8 u,ando lo,
mi,mo, operando, .ue 5#+/ 9n(e, de e>ecu(ar la divi,in de oc*o 'i(,8 ,e de'e e1(ender por
comple(o el ,igno del dividendo (9H)/ 6l re,iduo ,iempre (iene el mi,mo ,igno .ue el dividendo/
jemplo / 3a, ,iguien(e, in,(ruccione, dividen :48 en(re 5/ 5e,puD, de e>ecu(ar #5#+8 el
cocien(e en 93 e, :P 7 el re,iduo en 9$ e, :32
6data
valE5te SEF3E K;#
6code
mov al,valE5te 0 dividendo
cb= 0 e1tiende A4 'acia A\
mov bl,L< 0 divisor
idiv bl 0 A4 ( K+, A\ ( K7
jemplo 3 3a divi,in de 16 'i(, re.uiere .ue ,e e1(ienda 9H *acia 5H/ 6l ,iguien(e e>emplo
divide :5&&& en(re 2562
6data
val,ord S,O-D K<"""
6code
mov a1,val,ord
##1

c=d 0 se e1tiende A: 'acia D:
mov b1,L.</ 0 divisor
idiv b1 0 cociente A: ( K%+, res D: ( K%7/
jemplo 2 3a divi,in de 32 'i(, re.uiere .ue ,e e1(ienda el ,igno de 69H *acia 65H/ 6l
,iguien(e e>emplo divide :5&&& en(re 2562
6data
valD=ord SD,O-D L <"""
6code
mov ea1,valD=ord 0 dividendo inferior
cd@ 0 e1tiende EA: 'acia ED:
mov eb1,K.</ 0 divisor
idiv eb1 0 cociente EA: ( K%+<, res ED: ( L#"


5e,'ordamien(o en la divi,in 5e,'ordamien(o en la divi,in 5e,'ordamien(o en la divi,in 5e,'ordamien(o en la divi,in
!i el operando de una divi,in produce un cocien(e .ue no ca'e en el operando de de,(ino8 ,e
produce una condicin de desbordamiento en la divisin/ 6,o produce una in(errupcin de la
0PC8 7 el programa ac(ual ,e de(iene/ Por e>emplo8 la, ,iguien(e, in,(ruccione, generan un
de,'ordamien(o en la divi,in de'ido a .ue el cocien(e (1&&*) no ca'e en el regi,(ro 932
mov a1,%"""'
mov bl,%"'
div bl
0uando e,(e cdigo ,e e>ecu(a en 4!:;indo%,8 mue,(ra el cuadro de diBlogo de error
re,ul(an(e8 producido por 4!:;indo%,2
4odos los valores de las banderas de estado aritm!ticas (uedan inde$inidos despu!s de ejecutar @IV e I@IV.
##3


9l e,cri'ir in,(ruccione, .ue in(en(en dividir en(re cero8 aparece una ven(ana de cuadro de
diBlogo ,imilar2
mov a1,dividendo
mov bl,"
div bl
6, recomenda'le u(ili=ar un divi,or de 32 'i(, para reducir la pro'a'ilidad de una condicin de
de,'ordamien(o en la divi,in/ Por e>emplo8
mov ea1,%"""'
cd@
mov eb1,%"'
div eb1 0 EA: ( """""%""'
Para evi(ar la divi,in en(re cero8 ,e evalAa el divi,or an(e, de la divi,in2
mov a1,dividendo
mov bl,divisor
cmp bl," 0 verifica el divisor
e 8oDivision!ero 0 c!eroN muestra error
div bl 0 no es cero* contin?a
##5

6
6
8oDivision!ero 0 (muestra OIntento de dividir entre ceroP)
#mplemen(acin de e1pre,ione, ari(mD(ica, #mplemen(acin de e1pre,ione, ari(mD(ica, #mplemen(acin de e1pre,ione, ari(mD(ica, #mplemen(acin de e1pre,ione, ari(mD(ica,
6n el cap-(ulo 4 ,e demo,(r cmo implemen(ar e1pre,ione, ari(mD(ica, median(e la ,uma 7 la
re,(a/ 9*ora podemo, incluir la mul(iplicacin 7 la divi,in/ 9l principio8 la implemen(acin de
e,a, e1pre,ione, parece ,er una ac(ividad mB, adecuada para lo, e,cri(ore, de compiladore,8
pero *a7 muc*o .ue o'(ener a (ravD, del e,(udio prBc(ico/ Podemo, aprender de .uD manera
lo, compiladore, op(imi=an el cdigo/ 9demB,8 ,e puede implemen(ar una me>or
compro'acin de error .ue un compilador ordinario8 compro'ando el (ama@o del produc(o
re,ul(an(e de la, operacione, de mul(iplicacin/ 3a ma7or-a de lo, compiladore, de lengua>e,
de al(o nivel ignoran lo, 32 'i(, ,uperiore, de produc(o8 cuando mul(iplican do, operando, de
32 'i(,/ !in em'argo8 en lengua>e en,am'lador8 podemo, u,ar la, 'andera, 9carreo 7
5e,'ordamien(o para ,a'er cuando el produc(o no ca'e en 32 'i(,/ 6n el cap-(ulo 7 ,e e1plic
el u,o de e,(a, 'andera,/
$a7 do, forma, ,encilla, de ver el cdigo en,am'lador generado por un compilador de 0EE2
a'rir una ven(ana de de,en,am'lado mien(ra, ,e depura un programa en 0EE8 o generar un
arc*ivo de li,(ado en lengua>e en,am'lador/ Por e>emplo8 en 4icro,of( +i,ual 0EE el
in(errup(or de l-nea de comando, GF9 genera un arc*ivo de li,(ado en lengua>e en,am'lador/
6>emplo 1 #mplemen(emo, la ,iguien(e in,(ruccin de 0EE en el lengua>e en,am'lador8
u,ando en(ero, de 32 'i(, ,in ,igno2
var; ( (var% L var.) & var70
Z,(e e, un pro'lema ,imple8 7a .ue podemo, (ra'a>ar de i=.uierda a derec*a (primero la
,uma8 de,puD, la mul(iplicacin)/ 5e,puD, de la ,egunda in,(ruccin8 69H con(iene la ,uma de
var1 var1 var1 var1 7 var2 var2 var2 var2/ 6n la (ercera in,(ruccin8 69H ,e mul(iplica por var3 var3 var3 var3 7 el produc(o ,e almacena en
69H2
mov ea1,var%
add ea1,var.
mul var7 0 EA: ( EA: & var7
c mu5Srande 0 cdesbordamiento con signoN
mov var;,ea1
mp siguiente
mu5Srande* 0 muestra un mensae de error
##6

!i la in,(ruccin 4C3 genera un produc(o ma7or .ue 32 'i(,8 la in,(ruccin F08 no, env-a a una
e(i.ue(a .ue mane>a el error/
jemplo 3 implemen(emo, la ,iguien(e in,(ruccin en 0EE8 u,ando en(ero, de 32 'i(, ,in
,igno2
var; ( (var% & <) V (var. _ 7)0
6n e,(e e>emplo8 *a7 do, ,u'e1pre,ione, den(ro de lo, parDn(e,i,/ 6l lado i=.uierdo puede
a,ignar,e a 65H269H8 por lo .ue no e, nece,ario compro'ar ,i *a7 de,'ordamien(o/ 6l lado
derec*o ,e a,igna 6"H8 7 la divi,in final comple(a la e1pre,in2
mov ea1,var% 0 lado iz@uierdo
mov eb1,<
mul eb1 0 ED:*EA: ( producto
mov eb1,var. 0 lado derec'o
sub eb1,7
div eb1 0 divisin final
mov var;,ea1
jemplo 2 #mplemen(emo, la ,iguien(e in,(ruccin en 0EE8 u,ando en(ero, de 32 'i(, con
,igno2
var; ( (var% & K<) V (Kvar. Y var7)0
6,(e e>emplo e, un poco mB, enga@o,o .ue lo, an(eriore,/ Podemo, empe=ar con la e1pre,in
del lado derec*o 7 almacenar ,u valor en 6"H/ 0omo lo, operando, (ienen ,igno8 e, impor(an(e
e1(ender el ,igno del dividendo *acia 65H 7 u(ili=ar la in,(ruccin #5#+2
mov ea1,var. 0 empieza lado derec'o
neg ea1
cd@ 0 dividendo con signo e1tendido
idiv var7 0 ED: ( residuo
mov eb1,ed1 0 EE: ( lado derec'o
9 con(inuacin8 calculamo, la e1pre,in del lado i=.uierdo8 almacenando el produc(o en
65H269H2
mov ea1,K< 0 empieza lado iz@uierdo
imul var% 0 ED:*EA: ( lado iz@uierdo
##7

Por Al(imo8 el lado i=.uierdo (65H269H) ,e divide en(re el lado derec*o (6"H)2
idiv eb1 0 divisin final
mov var;,ea1 0 cociente
!uma 7 re,(a e1(endida, !uma 7 re,(a e1(endida, !uma 7 re,(a e1(endida, !uma 7 re,(a e1(endida,
6l proce,o de !uma y resta con precisin extendida ,e refiere a la ,uma 7 re,(a de nAmero,
.ue (engan un (ama@o ca,i ilimi(ado/ !upongamo, .ue no, piden e,cri'ir un programa en 0EE
para ,umar do, en(ero, de 1&24 'i(, `3a ,olucin no ,erB fBcila Pero en el lengua>e
en,am'lador8 la, in,(ruccione, 950 (,uma con acarreo) 7 !"" (re,(a con prD,(amo) ,e
adap(an mu7 'ien a e,(e (ipo de pro'lema,/
#n,(ruccin 950 #n,(ruccin 950 #n,(ruccin 950 #n,(ruccin 950
3a in,(ruccin 950 (,uma con acarreo) ,uma un operando de origen 7 el con(enido de la
'andera 9carreo a un operando de de,(ino/ 3o, forma(o, de la, in,(ruccione, ,on iguale, .ue
para la in,(ruccin 9552
AD" reg?reg
AD" mem?reg
AD9 reg?mem
AD" mem?imm
AD" reg?imm
Por e>emplo8 la, ,iguien(e, in,(ruccione, ,uman do, en(ero, de 8 'i(, (FF* E FF*)8
produciendo una ,uma en 532938 .ue e, &1F6*2
mov dl,"
mov al,"$$'
add al,"$$' 0 A4 ( $E
adc dl," 0 D4 ( "%
5e manera ,imilar8 la, ,iguien(e, in,(ruccione, ,uman do, en(ero, de 32 'i(, (FFFFFFFF* E
FFFFFFF*)8 produciendo una ,uma de 64 'i(, en 65H269H2 &&&&&&&1FFFFFFF6*
mov ed1,"
mov ea1,"$$$$$$$$'
add ea1,"$$$$$$$$'
adc ed1,"
##8

6>emplo de ,uma e1(endida 6>emplo de ,uma e1(endida 6>emplo de ,uma e1(endida 6>emplo de ,uma e1(endida
6l ,iguien(e procedimien(o !umaS61(endida !umaS61(endida !umaS61(endida !umaS61(endida ,uma do, en(ero, e1(endido, del mi,mo (ama@o/
C(ili=a un ciclo para ,umar cada par de do'le, pala'ra,8 guarda la 'andera 9carreo e inclu7e el
acarreo con cada par ,u',iguien(e de do'le, pala'ra,2
pus'ad
clc 0 borra la bandera Acarreo
4%* mov ea1,BesiC 0 obtiene el primer entero
adc ea1,BEDIC 0 suma el segundo entero
pus'fd 0 guarda la bandera Acarreo
mov Beb1C,ea1 0 almacena la suma parcial
add esi,; 0 avanza los 7 apuntadores
add edi,;
add eb1,;
popfd 0 restaura la bandera Acarreo
loop 4% 0 repite el ciclo
mov d=ord ptr Beb1C," 0 borra doble palabra superior de suma
adc d=ord ptr Beb1C," 0 suma cual@uier acarreo restante
popad
ret
SumaTE1tendida E8DP
6l ,iguien(e e1(rac(o de !uma61/a,m llama a !umaS61(endida !umaS61(endida !umaS61(endida !umaS61(endida 7 le pa,a do, en(ero, de 64
'i(,/ 5e'emo, (ener cuidado de a,ignar una do'le pala'ra e1(ra para la ,uma2
6data
op% R,O-D "A.E.A;"/M;+#%.7;'
op. R,O-D "#"%"#M"""".7;<".'
suma D,O-D 7 dup("$$$$$$$$') 0 ( """""""%..!7.E"/M;EE<M7/
6code
main P-O!
##9

mov esi,O$$SE3 op% 0 primer operando
mov edi,O$$SE3 op. 0 segundo operando
mov eb1,O$$SE3 suma 0 operando de suma
mov ec1,. 0 n?mero de dobles palabras
call SumaTE1tendida
0 2uestra la suma
mov ea1,suma L # 0 muestra doble palabra de orden superior
call ,rite\e1
mov ea1,suma L ; 0 muestra doble palabra intermedia
call ,rite\e1
mov ea1,suma 0 muestra doble palabra de orden inferior
call !rlf
e1it
main E8DP
6l programa produce el ,iguien(e re,ul(ado/ 3a ,uma produce un acarreo2
&&&&&&&122032"&674""5736
#n,(ruccin !"" #n,(ruccin !"" #n,(ruccin !"" #n,(ruccin !""
3a in,(ruccin !"" (re,(a con prD,(amo) re,(a un operando de origen 7 el valor de la 'andera
9carreo a un operando de de,(ino/ 3o, po,i'le, operando, ,on lo, mi,mo, .ue para la
in,(ruccin 950/
6l ,iguien(e cdigo de e>emplo reali=a una re,(a de 64 'i(,/ 6,(a'lece 65H269H a
&&&&&&&1&&&&&&&&*
K re,(a uno a e,(e valor/ 3o, 32 'i(, inferiore, ,e re,(an primero8 con lo .ue ,e ac(iva la
'andera 9carreo/ 5e,puD, ,e re,(an lo, 32 'i(, ,uperiore,8 inclu7endo la 'andera 9carreo2
mov ed1,% 0 mitad superior
mov ea1," 0 mitad inferior
sub ea1,% 0 resta %
sbb ed1," 0 resta la mitad superior
#1:

3a diferencia de 64 'i(, en 65H269H e, &&&&&&&&FFFFFFFF*/
9ri(mD(ica 9!0## 7 con 9ri(mD(ica 9!0## 7 con 9ri(mD(ica 9!0## 7 con 9ri(mD(ica 9!0## 7 con decimale, de,empa.ue(ado, decimale, de,empa.ue(ado, decimale, de,empa.ue(ado, decimale, de,empa.ue(ado,
3a ari(mD(ica de en(ero, .ue *emo, mo,(rado *a,(a a*ora8 ,lo *a (ra(ado con valore,
'inario,/ 3a 0PC calcula en 'inario8 pero (am'iDn puede reali=ar ari(mD(ica con cadena, 9!0##
de decimale,/ 6l u,uario puede in(roducir en forma convenien(e e,(a, cadena, 7 ,e pueden
mo,(rar en la ven(ana de la con,ola8 ,in nece,idad de .ue ,e convier(an a 'inario/
!upongamo, .ue un programa de'e reci'ir como en(rada do, nAmero, del u,uario8 para
,umarlo,/ 9 con(inuacin ,e mue,(ra un e>emplo del re,ul(ado8 en donde el u,uario in(rodu>o
lo, nAmero, 34&2 7 12562
Escriba el primer n?mero* 7;".
Escriba el segundo n?mero* %.</
4a suma es* ;/<#
Tenemo, do, opcione, al calcular 7 mo,(rar la ,uma2
1/ 0onver(ir am'o, operando, a 'inario8 ,umar lo, valore, 'inario, 7 conver(ir la ,uma de
'inario a cadena, de d-gi(o, 9!0##/
2/ !umar la, cadena, de d-gi(o, direc(amen(e8 median(e una ,uma ,uce,iva de cada par
de d-gi(o, 9!0## (2 E 68 & E 58 4 E 2/ 3 E 1)/ 3a ,uma e, una cadena de d-gi(o, 9!0##8
por lo .ue puede mo,(rar,e direc(amen(e en pan(alla/
3a ,egunda opcin re.uiere del u,o de in,(ruccione, e,peciali=ada, para a>u,(ar la ,uma
de,puD, de ,umar cada par de d-gi(o, 9!0##/ 9 con(inuacin ,e mue,(ran la, cua(ro
in,(ruccione, .ue (a(an con la ,uma8 re,(a8 mul(iplicacin 7 divi,in 9!0##2
999 (9>u,(e 9!0## de,puD, de la ,uma)
99! (9>u,(e 9!0## de,puD, de la re,(a)
994 (9>u,(e 9!0## de,puD, de la
mul(iplicacin)
995 (9>u,(e 9!0## an(e, de la divi,in)
A!"'' decimal y decimal desempa+uetado 3o, 4 'i(, ,uperiore, de un en(ero decimal
de,empa.ue(ado ,iempre ,on cero,8 mien(ra, .ue lo, mi,mo, 'i(, en un nAmero decimal
9!0## ,on iguale, a &&11'/ 6n cual.uier ca,o8 am'o, (ipo, de en(ero, almacenan un d-gi(o por
'7(e/ 6l ,iguien(e e>emplo mue,(ra cmo ,e almacenar-a 34&2 en am'o, forma(o,2
Forma(o 9!0##2
33 34 3& 32
5e,empa.ue(ado2
#1"

&3 &4 && &2
(Todo, lo, valore, ,on en *e1adecimal)
9un.ue la ari(mD(ica 9!0## ,e e>ecu(a con mB, len(i(ud .ue la ari(mD(ica 'inaria8 (iene do,
ven(a>a,2
No e, nece,aria la conver,in de,de el forma(o de cadena an(e, de reali=ar la,
operacione, ari(mD(ica,/
6l u,o de un pun(o decimal ,upue,(o permi(e la, operacione, ,o're nAmero, reale,8
,in peligro de errore, de redondeo8 .ue ,e producen con lo, nAmero, de pun(o
flo(an(e/
3a ,uma 7 re,(a 9!0## permi(en .ue lo, operando, e,(Dn en forma(o 9!0## o en forma(o
decimal de,empa.ue(ado/ !lo pueden u,ar,e nAmero, decimale, de,empa.ue(ado, para la
mul(iplicacin 7 divi,in/
#n,(ruccin 999 #n,(ruccin 999 #n,(ruccin 999 #n,(ruccin 999
3a in,(ruccin 999 (a>u,(e 9!0## de,puD, de la ,uma) a>u,(a el re,ul(ado 'inario de una
in,(ruccin 955 o 950/ !uponiendo .ue 9H con(iene un valor 'inario .ue ,e produce al ,umar
do, d-gi(o, 9!0##8 999 convier(e 9H en do, d-gi(o, decimale,8 de,empa.ue(ado,/ Cna ve= en
forma(o de,empa.ue(ado8 9$ 7 93 pueden conver(ir,e fBcilmen(e en 9!0##8 ,i ,e le, aplica un
< con 3&*/
6l ,iguien(e e>emplo mue,(ra cmo ,umar lo, d-gi(o, 9!0## 8 7 2 de manera correc(a8 u,ando
la in,(ruccin 999/ $a7 .ue de>ar 9$ en cero an(e, de reali=ar la ,uma8 7a .ue de lo con(rario
el re,ul(ado devuel(o por 999 ,e verB influenciado/ 3a Al(ima in,(ruccin convier(e a 9$ 7 93 en
d-gi(o, 9!0##2
mov a',"
mov al,H#H 0 A: ( ""7#'
add al,. 0 A: ( ""/A
aaa 0 A: ( %"" (resultado del auste AS!II)
or a1,7"7"' 0 A: ( 7%7"' ( G%"H (se convierte a AS!II)
!uma de vario, '7(e, median(e el u,o de 999 !uma de vario, '7(e, median(e el u,o de 999 !uma de vario, '7(e, median(e el u,o de 999 !uma de vario, '7(e, median(e el u,o de 999
+amo, a ver un procedimien(o .ue ,uma valore, decimale, 9!0## con pun(o, decimale,
impl-ci(o,/ 3a implemen(acin e, un poco mB, comple>a de lo .ue uno podr-a imaginar8 7a .ue
el acarreo de la ,uma de cada d-gi(o de'e propagar,e a la ,iguien(e po,icin mB, al(a/ 6n el
,iguien(e ,eudocdigo8 el nom're acc ,e refiere a un regi,(ro acumulador de 8 'i(,2
esi (Andice) ( longitud de primerTnumero _ %
#1#

edi (Andice) ( longitud de primerTnumero
ec1 ( longitud de primerTnumero
establece valor de acarreo en "
Itera
acc ( primerTnumeroBesiC
suma acarreo anterior a acc
guarda acarreo en acarreo%
acc L( segundoTnumeroBesiC
O- entre acarreo 5 acarreo%
sumaBediC acc
dec edi
'asta @ue ec1 (( "
Almacena el ?ltimo dAgito de acarreo en la suma
6l d-gi(o de acarreo ,iempre de'e conver(ir,e en 9!0##/ 9l ,umar el d-gi(o de acarreo con el
primer operando8 *a7 .ue a>u,(ar el re,ul(ado con 999/ $e a.u- el li,(ado2
6data
DE!I2A4TO$$SE3 ( <
6data
decimalTone EF3E i%""%.7;</M#+M/<i 0 %""%.7;</M6#+M/<
decimalTt=o EF3E i+"";"."M/<"."%<i 0 +"";"."M/<6"."%<
sum EF3E (SI[EO$ decimalTone L %) D9P("),"

6code
main P-O!
0 Empieza en la posicin del ?ltimo dAgito6
mov esi,SI[EO$ decimalTone K %
mov edi,SI[EO$ decimalTone
#11

mov ec1,SI[EO$ decimalTone
mov b'," 0 establece el valor de acarreo a cero
4%*mov a'," 0 borra A\ antes de la suma
mov al,decimalToneBesiC 0 obtiene el primer dAgito
add al,b' 0 suma el acarreo anterior
aaa 0 austa la suma (A\ ( acarreo)
mov b',a' 0 guarda el acarreo en acarreo%
or b',7"' 0 lo convierte en AS!II
add al,decimalTt=oBesiC 0 suma el Segundo dAgito
aaa 0 austa la suma (A\ ( acarreo)
or b',a' 0 O- al acarreo con acarreo%
or b',7"' 0 lo convierte en AS!II
or al,7"' 0 convierte a A4 de vuelta en AS!II
mov sumBediC,al 0 lo guarda en suma
dec esi 0 retrocede un dAgito
dec edi
loop 4%
mov sumBediC,b' 0 guarda el ?ltimo dAgito
0 2uestra la suma como una cadena6
mov ed1,O$$SE3 sum
call ,riteString
call !rlf
e1it
main E8DP
E8D main
#n,(ruccin 99! #n,(ruccin 99! #n,(ruccin 99! #n,(ruccin 99!
#13

3a in,(ruccin 99! (a>u,(e 9!0## de,puD, de la re,(a) va de,puD, de una in,(ruccin !C" o !""
.ue re,(a un valor decimal de,empa.ue(ado de o(ro8 7 almacena el re,ul(ado en 93/ $ace .ue
el re,ul(ado en 93 ,ea con,i,(en(e con la repre,en(acin de d-gi(o, 9!0##/ 6l a>u,(e e,
nece,ario ,lo cuando la re,(a genera un re,ul(ado nega(ivo/ Por e>emplo8 la, ,iguien(e,
in,(ruccione, re,(an al P del 8 9!0##2
6data
val% EF3E G#H
val. EF3E G+H
6code
mov a',"
mov a',val% 0 A: ( ""7#'
sub al,val. 0 A: ( ""$$'
aas 0 A: ( $$"+'
pus'f 0 guarda la bandera Acarreo
or al,7"' 0 A: ( $$7+'
popf 0 restaura la bandera Acarreo
5e,puD, de la in,(ruccin !C"8 9H e, igual a &FF*/ 3a in,(ruccin 9!! convier(e a 93 en &P* 7
re,(a 1 de 9$8 con lo .ue lo e,(a'lece en FF* 7 ac(iva la 'andera 9carreo/
#n,(ruccin 994 #n,(ruccin 994 #n,(ruccin 994 #n,(ruccin 994
3a in,(ruccin 994 (a>u,(e 9!0## de,puD, de la mul(iplicacin) convier(e el produc(o 'inario
producido por 4C3 a decimal empa.ue(ado/ 3a mul(iplicacin ,lo puede u,ar decimale,
de,empa.ue(ado,/ 6n el ,iguien(e e>emplo8 mul(iplicamo, 5 por 6 7 a>u,(amo, el re,ul(ado en
9H/ 5e,puD, del a>u,(e8 9H R 3&&*8 la repre,en(acin de 3& en decimal de,empa.ue(ado2
6data
valAsc EF3E "<',"/'
6code
mov bl,)alAsc 0 primer operando
mov al,B)alAS!L%C 0 segundo operando
mul bl 0 A: ( ""%E'
mul bl 0 A: ( "7""'
#15

aam
#n,(ruccin 995 #n,(ruccin 995 #n,(ruccin 995 #n,(ruccin 995
3a in,(ruccin 955 (a>u,(e 9!0## an(e, de la divi,in) convier(e un dividendo decimal
de,empa.ue(ado en 9H a 'inario8 en preparacin para e>ecu(ar la in,(ruccin 5#+/ 6l ,iguien(e
e>emplo convier(e el nAmero &3&7* de,empa.ue(ado a 'inario8 7 de,puD, lo divide en(re 5/
5#+ produce un cocien(e de &7* en 93 7 un re,iduo de &2* en 9$2
6data
cociente EF3E N
residuo EF3E N
6code
mov a1,"7"M' 0 dividendo
aad
mov bl,< 0 divisor
div bl 0 A: ( "."M
mov cociente,al
mov residuo,a'
9 99 9ri(mD(ica con decimale, empa.ue(ado, ri(mD(ica con decimale, empa.ue(ado, ri(mD(ica con decimale, empa.ue(ado, ri(mD(ica con decimale, empa.ue(ado,
3o, en(ero, decimale, empa.ue(ado, almacenan do, d-gi(o, decimale, por '7(e/ 0ada d-gi(o
,e repre,en(a median(e cua(ro 'i(,/ !i *a7 un nAmero impar de d-gi(o,8 el ni''le mB, al(o ,e
llena con un cero/ 3o, (ama@o, de almacenamien(o pueden variar2
bcd% R,O-D .7;</M7+.#M7M.#<' 0 .,7;<,/M7,+.#,M7M,.#< decimal
bcd. D,O-D %.7;</M#' 0 %.,7;<,/M# decimal
bcd7 D,O-D "#M.7/<;' 0 #,M.7,/<; decimal
bcd; ,O-D +7;<' 0 +,7;< decimal
bcd< EF3E 7;' 0 7; decimal
6l almacenamien(o de decimale, empa.ue(ado, (iene por lo meno, do, pun(o, fuer(e,2
3o, nAmero, pueden (ener ca,i cual.uier nAmero de d-gi(o, ,ignifica(ivo,/ 6,(o *ace
po,i'le reali=ar cBlculo, con muc*a preci,in/
3a conver,in de nAmero, decimale, empa.ue(ado, a 9!0## (7 vicever,a) re,
rela(ivamen(e ,imple/
#16

5o, in,(ruccione,8 599 (a>u,(e decimal de,puD, de ,uma) 7 59! (a>u,(e decimal de,puD, de
re,(a)8 a>u,(an el re,ul(ado de una operacin de ,uma o re,(a con decimale, empa.ue(ado,/
Por de,gracia8 no e1i,(en in,(ruccione, a,- para la mul(iplicacin 7 la divi,in/ 6n e,o, ca,o,8 el
nAmero de'e de,empa.ue(ar,e8 mul(iplicar,e o dividir,e8 7 luego volver a empa.ue(ar,e/
#n,(ruccin 599 #n,(ruccin 599 #n,(ruccin 599 #n,(ruccin 599
3a in,(ruccin 599 (a>u,(e decimal de,puD, de la ,uma) convier(e una ,uma 'inaria producida
por 955 o 950 en 938 a forma(o decimal empa.ue(ado/ Por e>emplo8 la, ,iguien(e,
in,(ruccione, ,uman lo, decimale, empa.ue(ado, 35 7 48/ 3a ,uma 'inaria (75*) ,e a>u,(a a
83*8 la ,uma decimal empa.ue(ada de 35 7 48/
mov al,7<'
add al,;#' 0 A4 ( MD'
daa 0 A4 ( #7 (resultado austado)
3a lgica in(erna de 599 ,e documen(a en el 4anual de referencia del con>un(o de
in,(ruccione, #9:32/
jemplo 6l ,iguien(e programa ,uma do, en(ero, decimale, empa.ue(ado, de 16 'i(, 7
almacena la ,uma en una do'le pala'ra empa.ue(ada/ 3a ,uma re.uiere .ue la varia'le ,uma
con(enga e,pacio para un d-gi(o mB, .ue lo, operando,/
3I34E Eemplos con decimales empa@uetados (SumaEmpa@uetado6asm)
0 Demuestra la suma de decimales empa@uetados6
0 ]ltima actualizacin* "/V"%V.""/
I8!49DE Irvine7.6inc
6data
empa@uetadoT% ,O-D ;<7/'
empa@uetadoT. ,O-D M."M'
suma D,O-D N
6code
main P-O!
0 Inicializa suma e Andice6
mov suma,"
mov esi,"
#17

0 Suma los b5tes inferiores6
mov al,EF3E P3- empa@uetadoT%BesiC
add al,EF3E P3- empa@uetadoT.BesiC
daa
mov EF3E P3- sumaBesiC,al
0 Suma los b5tes superiores, inclu5e el acarreo6
inc esi
mov al,EF3E P3- empa@uetadoT%BesiC
adc al,EF3E P3- empa@uetadoT.BesiC
daa
mov EF3E P3- sumaBesiC,al
0 Suma el acarreo final, si 'a56
inc esi
mov al,"
adc al,"
mov EF3E P3- sumaBesiC,al
0 2uestra la suma en 'e1adecimal6
mov ea1,suma
call ,rite\e1
call !rlf
e1it
main E8DP
E8D main
!in nece,idad de decirlo8 el programa con(iene cdigo repe(i(ivo .ue ,ugiere el u,o de un ciclo/
#n,(ruccin 59! #n,(ruccin 59! #n,(ruccin 59! #n,(ruccin 59!
#18

3a in,(ruccin 59! (a>u,(e decimal de,puD, de la re,(a) convier(e el re,ul(ado 'inario de una
in,(ruccin !C" o !"" en 938 a forma(o decimal empa.ue(ado/ Por e>emplo8 la, ,iguien(e,
in,(ruccione, re,(an lo, decimale, de,empa.ue(ado, 48 7 858 7 a>u,(an el re,ul(ado2
mov bl,;#'
mov al,#<'
sub al,bl 0 A4 ( 7D'
das 0 A4 ( 7M' (resultado austado)
3a lgica in(erna de 59! ,e documen(a en el manual de referencia del con>un(o de
in,(ruccione, #9:32
8 Procedimien(o, avan=ado, 8 Procedimien(o, avan=ado, 8 Procedimien(o, avan=ado, 8 Procedimien(o, avan=ado,
4arco, de pila 4arco, de pila 4arco, de pila 4arco, de pila
Cn marco de pila ( o regi,(ro de ac(ivacin) e, el Brea de la pila .ue ,e apar(a para lo,
argumen(o, .ue ,e pa,an8 la direccin de re(orno de la, ,u'ru(ina,8 la, varia'le, locale, 7 lo,
regi,(ro, almacenado,/ 6l marco de pila ,e crea median(e lo, ,iguien(e, pa,o, ,ecuenciale,2
3o, argumen(o, .ue ,e pa,an8 en ca,o de *a'er8 ,e me(en en la pila/
!e *ace la llamada a la ,u'ru(ina8 lo cual provoca .ue la direccin de re(orno de la
mi,ma ,e me(a en la pila/
6n cuan(o la ,u'ru(ina ,e empie=a a e>ecu(ar8 6"P ,e coloca en la pila/
6"P ,e *ace igual a 6!P/ 5e e,(e pun(o en adelan(e8 6"P ac(Aa como una referencia
'a,e para (odo, lo, parBme(ro, de la ,u'ru(ina/
!i *a7 varia'le, locale,8 6!P ,e decremen(a para re,ervar e,pacio para la, varia'le,
en la pila/
!i *a7 .ue guardar algAn regi,(ro8 ,e me(e en la pila/
ParBme(ro, de pila ParBme(ro, de pila ParBme(ro, de pila ParBme(ro, de pila
61i,(en do, (ipo, 'B,ico, de parBme(ro, de ,u'ru(ina,2 los par*metros de registro y los
par*metros de pila/ 6n e,(a ,eccin veremo, cmo declarar 7 u(ili=ar parBme(ro, de pila/



3a ,u'ru(ina .ue ,e llam accede a lo, argumen(o, .ue ,e me(en en la pila al momen(o de ,u
llamada/ 3o, parBme(ro, de regi,(ro e,(Bn op(imi=ado, para la velocidad de e>ecucin de un
programa/ Por de,gracia8 (ienden a crear amon(onamien(o de cdigo en lo, programa, .ue
*acen llamada,/ 9 menudo *a7 .ue guardar el con(enido e1i,(en(e de lo, re,ul(ado, an(e, de
Los valores (ue un programa pasa a una subrutina (ue llama se conocen como argumentos.
-uando la subrutina a la (ue se llam recibe los valores& se les llama parmetros.
#19

.ue ,e puedan cargar con lo, valore, de lo, argumen(o,/ Tal el ca,o de cuando ,e *ace una
llamada a 5ump4em 5ump4em 5ump4em 5ump4em8 por e>emplo2
pus'ad
mov esi, O$$SE3 arreglo 0 desplazamiento (O$$SE3) inicial
mov ec1,4E8S3\O$ 0 tamaJo, en unidades
mov eb1,3FPE arreglo 0 formato de doble palabra
call Dump2em
popad
3o, parBme(ro, de pila ofrecen un mD(odo mB, fle1i'le/ Fu,(o an(e, de la llamada a la
,u'ru(ina8 lo, argumen(o, ,e me(en en la pila/ Por e>emplo8 ,i 5ump4em 5ump4em 5ump4em 5ump4em u(ili=ara parBme(ro,
de pila8 lo llamar-amo, u,ando el ,iguien(e cdigo2
pus' 3FPE arreglo
pus' 4E8S3\O$ arreglo
pus' O$$SE3 arreglo
call Dump2E2
5uran(e la, llamada, a ,u'ru(ina,8 ,e me(en en la pila do, (ipo, generale, de argumen(o,2
9rgumen(o, de valor (lo, valore, de la, varia'le, 7 con,(an(e,)/
9rgumen(o, de referencia (la, direccione, de la, varia'le,)/
Paso por valor 0uando un argumen(o ,e pa,a por valor8 ,e me(e una copia del valor en la
pila8 ,upongamo, .ue llamamo, a una ,u'ru(ina de nom're !umar5o, !umar5o, !umar5o, !umar5o, 7 le pa,amo, do,
en(ero, de 32 'i(,2
6data
val% D,O-D <
val. D,O-D /
6code
pus' val.
pus' val%
call SumarDos

#3:





9 con(inuacin ,e mue,(ra una imagen de la pila >u,(o an(e, de la in,(ruccin 09332

Cna llamada a una funcin e.uivalen(e en 0EE ,er-a2
int suma ( SumarDos (val%, val.)0
',ervamo, .ue lo, argumen(o, ,e me(en en la pila en orden inver,o8 lo cual e, la norma para
lo, lengua>e, 0 7 0EE/
Paso por referencia Cn argumen(o .ue ,e pa,a por referencia con,i,(e en la direccin
(de,pla=amien(o) de un o'>e(o/ 3a, ,iguien(e, in,(ruccione, llaman a #n(ercam'iar #n(ercam'iar #n(ercam'iar #n(ercam'iar 7 le pa,an
lo, do, argumen(o, por referencia2
pus' O$$SE3 val.
pus' O$$SE3 val%
call Intercambiar
9 con(inuacin ,e mue,(ra una imagen de la pila8 >u,(o an(e, de la llamada #n(ercam'iar2

#3"

3a llamada a funcin e.uivalen(e en 0G0EE pa,ar-a la, direccione, de lo, argumen(o, val1 7
val22
#n(ercam'iar(ival18 ival2 )[
Paso de arreglos $a7 una impor(an(e e1cepcin a la regla .ue aca'amo, de pre,en(ar8
relacionada con el pa,o por valor/ 9l pa,ar un arreglo8 lo, programa, de lengua>e de al(o nivel
,iempre lo pa,an por referencia/ No e, prBc(ico pa,ar una e1(en,a can(idad de da(o, por valor8
7a .ue *a'r-a .ue me(er lo, da(o, direc(amen(e en la pila/ $acer e,(o reducir-a la velocidad de
e>ecucin del programa 7 ocupar-a el valio,o e,pacio de la pila/ Por e>emplo8 la, ,iguien(e,
in,(ruccione, pa,an el de,pla=amien(o de arreglo arreglo arreglo arreglo a una ,u'ru(ina llama 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo2
6data
arreglo D,O-D <" D9P(N)
6code
pus' O$$SE3 arreglo
call 4lenarArreglo
9cce,o a lo, parBme(ro, de pila (0G0EE) 9cce,o a lo, parBme(ro, de pila (0G0EE) 9cce,o a lo, parBme(ro, de pila (0G0EE) 9cce,o a lo, parBme(ro, de pila (0G0EE)
3o, programa, de 0 7 0EE (ienen forma e,(Bndar de iniciali=ar 7 acceder a lo, parBme(ro,
duran(e la, llamada, a funcione,/ 6mpie=an con un prlogo .ue con,i,(e en in,(ruccione, .ue
guardan el regi,(ro 6"P8 7 lo e,(a'lecen en la par(e ,uperior de la pila/ 5e manera opcional8
pueden me(er cier(o, regi,(ro, en la pila8 cu7o, valore, ,e re,(auren cuando la funcin
regre,e/ 6l final de la funcin con,i,(e en un eplogo8 en el cual ,e re,(aura un regi,(ro 6"P 7 la
funcin <6T regre,a de la funcin8 7 'orra lo, parBme(ro, de la pila/
jemplo2 !umarDos 3a ,iguien(e funcin !umar5o, !umar5o, !umar5o, !umar5o,8 e,cri(a en 08 reci'e do, (enero, .ue ,e
pa,an por valor 7 devuelve ,u ,uma2
int SumaDos (int 1, int 5)
e
return 1 L 50
f
+amo, a crear una implemen(acin e.uivalen(e en lengua>e en,am'lador/ 6n ,u prlogo8
!umar5o, !umar5o, !umar5o, !umar5o, me(e a 6"P en la pila para pre,ervar ,u valor e1i,(en(e2
SumarDos P-O!
Pus' ebp
#3#

9 con(inuacin8 6"P ,e e,(a'lece con el mi,mo valor .ue 6!P8 de manera .ue 6"P pueda ,er
el apun(ador 'a,e para el marco de la pila de !umar5o,2
SumarDos P-O!
Pus' ebp
mov ebp,esp
3a ,iguien(e figura mue,(ra el con(enido del marco de pila de,puD, de e>ecu(ar la, do,
in,(ruccione, an(eriore,/ 0ada en(rada en la pila e, una do'le pala'ra2

!umar5o, podr-a me(er regi,(ro, adicionale, en la pila8 ,in al(erar lo, de,pla=amien(o, de lo,
parBme(ro, de pila de 6"P/ 6!P cam'iarB ,u valor8 pero 6"P no/
Acceso a los par*metros de pila 3a, funcione, en 0 7 0EE u(ili=an el direccionamien(o 'a,e:
de,pla=amien(o para acceder a lo, parBme(ro, de pila/ 6"P e, el regi,(ro 'a,e 7 el
de,pla=amien(o e, una con,(an(e/ Por lo general8 lo, valore, de 32 'i(, ,e devuelven en 69H/
3a ,iguien(e implemen(acin de !umar5o, ,uma lo, parBme(ro, 7 devuelve ,u ,uma en 69H2
SumarDos P-O!
pus' ebp
mov ebp, esp 0 base del marco de pila
mov ea1,Bebp L %.C 0 segundo parImetro
add ea1,Bebp L #C 0 primer parImetro
pop ebp
ret
SumarDos E8DP
3impie=a de la pila 3impie=a de la pila 3impie=a de la pila 3impie=a de la pila
#31

5e'e *a'er una manera para .ue lo, parBme(ro, ,e eliminen de la pila8 al momen(o en .ue ,e
regre,e una ,u'ru(ina/ 5e no ,er a,- ,e produce una fuga de memoria8 7 la pila ,e vuelve
corrup(a/ Por e>emplo8 ,upongamo, .ue la, ,iguien(e, in,(ruccione, en main main main main llaman a
!umar5o, !umar5o, !umar5o, !umar5o,2
pu,* 5
pu,* 6
call !umar5o,
$e a.u- una imagen de la pila8 de,puD, de regre,ar de la llamada2

5en(ro de main8 podemo, ignorar el pro'lema 7 e,perar .ue el programa (ermine en forma
normal/ !i llamamo, a !umar5o, den(ro de un ciclo8 la pila podr-a de,'ordar,e de'ido a .ue
cada llamada con,ume 8 '7(e, de memoria/ !e produce un pro'lema mB, ,erio ,i llamamo, a
6>emplo1 6>emplo1 6>emplo1 6>emplo1 de,de main main main main8 .ue a ,u ve= llama a !umar5o, !umar5o, !umar5o, !umar5o,2
main P-O!
call Eemplo%
e1it
main E8DP
Eemplo% P-O!
pus' <
pus' /
call SumarDos
ret 0 la pila estI corruptad
Eemplo% E8DP
0uando la in,(ruccin <6T en el e>emplo1 e,(B a pun(o de e>ecu(ar,e8 6!P apun(a al en(ero 58
en ve= de apun(ar a la direccin de re(orno .ue no, regre,a a main main main main/ 6viden(emen(e el
programa ,e 'ifurca a la u'icacin 5 7 falla2
#33



Cna ,olucin ,imple para e,(e pro'lema e, ,umar un valor a 6!P .ue *aga .ue apun(e a la
direccin de re(orno/ 6n el e>emplo ac(ual8 podemo, colocar una in,(ruccin 955 de,puD, de
09332
Eemplo% P-O!
pus' <
pus' /
call SumarDos
add esp,# 0 elimina argumentos de la pila
ret
Eemplo% E8DP
Z,(a e, la accin .ue (oman lo, programa, en 0 7 0EE/
"onvencin de llamadas de !-D"A%% (ra forma comAn de mane>ar el pro'lema de la
limpie=a de la pila e, u(ili=ar una conver,in llamada !T50933/ Podemo, ,umini,(rar un
parBme(ro en(ero a la in,(ruccin <6T den(ro de !umar!u' para corregir a 6!P/ 6l en(ero de'e
,er igual al nAmero de '7(e, del e,pacio .ue con,umen en la pila lo, parBme(ro, de la
,u'ru(ina2
SumarDos P-O!
pus' ebp
mov ebp,esp 0 base del marco de pila
mov ea1,eebpL%.f 0 segundo parImetro
add ea1,BebpL#C 0 primer parImetro
pop ebp
#35

ret # 0 limpia la pila
SumarDos E8DP
6n(once, la pregun(a ,implemen(e ,er-a8 Q.uiDn ,erB el re,pon,a'le de limpiar la pilaM Q6l
cdigo .ue llama a una ,u'ru(ina8 o la mi,ma ,u'ru(inaM 61i,(en conce,ione,/ Por una par(e8
!T50933 reduce la can(idad de cdigo .ue ,e genera para la, llamada, a la, ,u'ru(ina, (por
una in,(ruccin) 7 a,egura .ue lo, procedimien(o, .ue *acen la, llamada, nunca olviden
limpiar la pila/ Por o(ra par(e8 la convencin de llamada, de 0 permi(e .ue la, ,u'ru(ina,
declaren un nAmero varia'le de parBme(ro,/ 6l procedimien(o .ue *ace la llamada decide
cuBn(o, argumen(o, va a pa,ar/ Cn e>emplo e, la funcin prin(f prin(f prin(f prin(f8 cu7o nAmero de argumen(o,
depende del nAmero de e,pecificadore, de forma(o en el argumen(o de cadena inicial2
int 1 ( <0
float 5 ( 76.0
c'ar z (H[H0
printf(OImprimiendo valores* Yd, Yf, Yc, 1, 5, z)0
Cn compilador de 0 me(e lo, argumen(o, en la pila en orden inver,o8 ,eguido, de un
argumen(o de cuen(a8 .ue ind-ca el nAmero de argumen(o, ac(uale,/ 3a funcin o'(iene la
cuen(a de argumen(o, 7 accede a D,(o,8 uno por uno/ 3a implemen(acin de la funcin no
(iene una manera convenien(e de codificar una con,(an(e en la in,(ruccin <6T para limpia la
pila8 por lo .ue la re,pon,a'ilidad ,e de>a al proce,o .ue *ace la llamada/



Pa,o de argumen(o, de Pa,o de argumen(o, de Pa,o de argumen(o, de Pa,o de argumen(o, de 8 7 16 'i(, a la pila 8 7 16 'i(, a la pila 8 7 16 'i(, a la pila 8 7 16 'i(, a la pila
9l pa,ar a la pila argumen(o, de lo, procedimien(o, en modo pro(egido8 e, me>or me(er
operando, de 32 'i(,/ 9un.ue ,e pueden me(er operando, de 16 'i(,8 e,(o impide .ue 6!P ,e
alinee en un l-mi(e de do'le pala'ra8 Puede ocurrir un fallo de pBgina 7 ,e puede degradar el
rendimien(o en (iempo de e>ecucin/ Por e,o de'emo, e1pandirlo, a 32 'i(, an(e, de me(erlo,
en la pila/
6l ,iguien(e procedimien(o 4a7A,cula reci'e un argumen(o (ipo carBc(er 7 devuelve ,u
e.uivalen(e en ma7A,cula en 932
2a5uscula P-O!
pus' ebp
mov ebp,esp
@e a(u% en adelante& asumiremos (ue se utiliza =4@-/LL en todos los ejemplos de procedimientos& a
menos (ue se indi(ue eCpl%citamente lo contrario. 4ambi!n nos re$erimos a las subrutinas como
procedimientos& 'a (ue nuestros ejemplos est.n escritos en lenguaje ensamblador.
#36

mov al,BebpL#C 0 A4 ( carIcter
cmp al,HaH 0 ces menor @ue GaHN
b 4% 0 si* no 'ace nada
cmp al,HzH 0 ces ma5or @ue GzHN
a 4% 0 si* no 'ace nada
sub al,7. 0 no* lo convierte
4%* pop ebp
ret ; 0 limpia la pila
2a5uscula E8DP
!i pa,amo, una li(eral (ipo carBc(er a 4a7A,cula,8 la in,(ruccin PC!$ e1pande en forma
au(omB(ica el carBc(er a 32 'i(,2
pus' G1H
call 2a5uscula
Para pa,ar una varia'le (ipo carBc(er ,e re.uiere mB, cuidado8 7a .ue la in,(ruccin PC!$ no
permi(e operando, de 8 'i(,2
6data
val!ar EF3E G1H
6code
pus' )al!ar 0 error de sinta1isd
call 2a5uscula
6n ,u lugar8 u(ili=amo, 4+IH para e1pandir *acia 69H2
movz1 ea1,val!ar 0 mueve con e1tensin
pus' ea1
call 2a5uscula
jemplo de argumento de /0 bits !upongamo, .ue .ueremo, pa,ar do, en(ero, de 16 'i(,
al procedimien(o !umar5o, .ue vimo, an(e,/ 6l procedimien(o e,pera valore, de 32 'i(,8 por
lo .ue la ,iguien(e llamada producirB un error2
/da(a
#37

pala'ra1 ;<5 1234*
pala'ra2 ;<5 4111*
/code
pu,* pala'ra1
pu,* pala'ra2
call !umar5o, [ `6rrora
6n ,u lugar8 podemo, e1(ender con cero, cada argumen(o8 an(e, de me(erlo en la pila/ 6l
,iguien(e cdigo llama a !umar5o, en forma correc(a2
mov=1 ea18pala'ra1
pu,* ea1
mov=1 ea18pala'ra2
pu,* ea1
call !umar5o, [ la ,uma e,(B en 69H



Pa,o de argumen(o, mul(ipala'ra, Pa,o de argumen(o, mul(ipala'ra, Pa,o de argumen(o, mul(ipala'ra, Pa,o de argumen(o, mul(ipala'ra,
9l pa,ar en(ero, mul(ipala'ra, a lo, procedimien(o, median(e el u,o de la pila8 (al ve= ,ea
convenien(e me(er la par(e de ma7or orden primero8 para pa,ar de,puD, a la par(e de menor
orden/ 9l *acer e,(o8 el en(ero ,e coloca en la pila en orden %ittle endian (el '7(e de menor
orden en la direccin mB, 'a>a)/ 6l ,iguien(e procedimien(o 6,cri'ir$e164 6,cri'ir$e164 6,cri'ir$e164 6,cri'ir$e164 reci'e un en(ero de
64 'i(, en la pila 7 lo mue,(ra en *e1adecimal2
Escribir\e1/; P-O!
pus' ebp
mov ebp,esp
mov ea1,BebpL%.C 0 doble palabra superior
call ,rite\e1
mov ea1,BebpL#C 0 doble palabra inferior
call ,rite\e1
;l procedimiento (ue llama a otro debe asegurarse de (ue los argumentos (ue pase sean
consistentes con los par.metros (ue espera el procedimiento al (ue llam. ;n el caso de los
par.metros de pila& el orden ' el tamaEo de los par.metros son importantes.
#38

pop ebp
ret #
Escribir\e1/; E8DP
3a llamada a 6,cri'ir$e164 me(e la mi(ad ,uperior de val3ong val3ong val3ong val3ong8 ,eguida de la mi(ad inferior2
6data
val4ong DR %.7;</M#""AE!DE$'
6code
pus' D,O-D P3- val4ong L ; 0 doble palabra superior
pus' D,O-D P3- val4ong 0 doble palabra inferior
call Escribir\e1/;
3a ,iguien(e figura mue,(ra una imagen del marco de la pila8 de,puD, de me(er 6"P den(ro de
6,cri'ir$e164/
4arco de la pila de,puD, de me(er 6"P/


0omo guardar 7 re,(aurar regi,(ro, 0omo guardar 7 re,(aurar regi,(ro, 0omo guardar 7 re,(aurar regi,(ro, 0omo guardar 7 re,(aurar regi,(ro,
9 menudo8 la, ,u'ru(ina, guardan el con(enido ac(ual de lo, regi,(ro, en la pila an(e, de
modificarlo,8 para poder re,(aurar lo, valore, originale, >u,(o an(e, de regre,ar/ 3o ideal e,
.ue lo, regi,(ro, en cue,(in ,e me(an a la pila >u,(o an(e, de e,(a'lecer 6"P a 6!P8 7 >u,(o
de,puD, de re,ervar e,pacio para la, varia'le, locale,/ 6,(o no, a7uda a evi(ar cam'iar lo,
de,pla=amien(o, de lo, parBme(ro, e1i,(en(e, en la pila/ Por e>emplo8 ,upongamo, .ue el
,iguien(e procedimien(o 4i!u' 4i!u' 4i!u' 4i!u' (iene un parBme(ro en la pila/ 4e(e a 60H 7 a 65H de,puD, de
a,ignar a 6"P la 'a,e del marco de pila8 7 carga el parBme(ro de la pila en 69H2
#39

2iSub P-O!
pus' ebp 0 guarda apuntador base
mov ebp,esp 0 base del marco de pila
pus' ec1
pus' ed1 0 guarda ED:
pus' ea1,BebpL#C 0 obtiene el parImetro de la pila
6
6
pop ed1 0 restaura los registros guardados
pop ec1
pop ebp 0 restaura apuntador base
ret 0 limpia la pila
2iSub E8DP
5e,puD, de iniciali=ar,e8 el con(enido de 6"P permanece fi>o a lo largo de la ,u'ru(ina/ !i ,e
me(en 60H 7 65H8 no ,e ve afec(ado el de,pla=amien(o de,de 6"P de lo, parBme(ro, .ue 7a ,e
encuen(ran en la pila8 7a .ue D,(a crece de'a>o de 6"P/
4arco de pila para el procedimien(o 4i!u'/

0omo el operador C!6! afec(a la pila 0omo el operador C!6! afec(a la pila 0omo el operador C!6! afec(a la pila 0omo el operador C!6! afec(a la pila
#5:

6l operador C!6! (cap-(ulo 5) li,(a lo, nom're, de lo, regi,(ro, .ue ,e van a guardar al
principio de un procedimien(o8 7 .ue ,e van a re,(aurar cuando el procedimien(o (ermine/
49!4 genera en forma au(omB(ica la, in,(ruccione, PC!$ 7 PP apropiada, para cada
regi,(ro con nom're/ Precaucin2 lo, procedimien(o, .ue u(ili=an parBme(ro, de pila e1pl-ci(o, Precaucin2 lo, procedimien(o, .ue u(ili=an parBme(ro, de pila e1pl-ci(o, Precaucin2 lo, procedimien(o, .ue u(ili=an parBme(ro, de pila e1pl-ci(o, Precaucin2 lo, procedimien(o, .ue u(ili=an parBme(ro, de pila e1pl-ci(o,
de'en evi(ar el operando C!6! de'en evi(ar el operando C!6! de'en evi(ar el operando C!6! de'en evi(ar el operando C!6!/ +eamo, un e>emplo .ue mue,(ra por .uD/ 6l ,iguien(e
procedimien(o 4i!u'1 emplea el operador C!6! para guardar 7 re,(aurar a 60H 7 65H2
2isub% P-O! 9SES ec1 ed1
ret
2iSub% E8DP
6l ,iguien(e cdigo lo genera 49!4 cuando en,am'la a 4i!u'1 4i!u'1 4i!u'1 4i!u'12
pus' ec1
pus' ed1
pop ed1
pop ec1
ret
!upongamo, .ue com'inamo, C!6! con un parBme(ro de pila8 como en el ,iguien(e
procedimien(o 4i!u'2/
!e e,pera .ue ,u parBme(ro ,e encuen(re en la pila8 6"PE82
2iSub. P-O! 9SES ec1 ed1
pus' ebp 0 guarda apuntador base
pus' ebp,esp 0 base del marco de pila
mov ea1,BebpL#C 0 obtiene el parImetro de pila
pop ebp 0 restaura apuntador base
ret ; 0 limpia la pila
2iSub. E8DP
$e a.u- el cdigo corre,pondien(e8 generado por 49!4 para 4i!u'2 4i!u'2 4i!u'2 4i!u'22
pus' ec1
pus' ed1
pus' ebp
#5"

mov ebp,esp
mov ea1,d=ord ptr BebpL#C 0 jubicacin incorrectad
pop ebp
pop ed1
pop ec1
ret ;
!e produce un error8 7a .ue 49!4 in,er(o la, in,(ruccione, PC!$ para 60H 7 65H al principio
del procedimien(o8 al(erando el de,pla=amien(o del parBme(ro de pila/ la ,iguien(e figura
mue,(ra cmo de'e *acer,e referencia a*ora al parBme(ro de la pila como ^6"P E 16_/ C!6!
modifica la pila an(e, de guardar 6"P8 lo cual va con(ra del cdigo prlogo e,(Bndar para la,
,u'ru(ina,/ mB, adelan(e veremo, la direc(iva P<0 .ue (iene una ,in(a1i, de al(o nivel para
declarar parBme(ro, de pila/ 6n e,e con(e1(o8 el operador C!6! no cau,a pro'lema,/

+aria'le, locale, +aria'le, locale, +aria'le, locale, +aria'le, locale,
6n lo, programa, de lengua>e de al(o nivel8 la, varia'le, .ue ,e crean8 u,an 7 de,(ru7en den(ro
de una ,ola ,u'ru(ina ,e conocen como variables locales/ Cna varia'le local (iene di,(in(a,
ven(a>a,8 en comparacin la, varia'le, .ue ,e declaran fuera de la, ,u'ru(ina,2
!lo la, in,(ruccione, den(ro de la ,u'ru(ina .ue encierra a una varia'le local pueden
ver o modificar e,a varia'le/ 6,(a carac(er-,(ica evi(a lo, errore, en lo, programa,
oca,ionado, por modificar varia'le, de,de muc*a, u'icacione, di,(in(a, en el cdigo
fuen(e de un programa/
6l e,pacio de almacenamien(o .ue u(ili=a la, varia'le, ,e li'era cuando (ermina la
,u'ru(ina/
#5#

Cna varia'le local puede (ener un mi,mo nom're .ue una varia'le local en o(ra
,u'ru(ina8 ,in crear un conflic(o de nom're,8 6,(a carac(er-,(ica e, A(il en lo,
programa, e1(en,o,8 cuando e, pro'a'le .ue do, varia'le, (engan el mi,mo nom're/
3a, varia'le, locale, ,on e,enciale, al e,cri'ir ,u'ru(ina, recur,iva,8 a,- como
,u'ru(ina, e>ecu(ada, por vario, ,u'proce,o, de e>ecucin/
3a, varia'le, locale, ,e crean en la pila en (iempo de e>ecucin8 por lo general8 de'a>o del
apun(ador 'a,e (6"P)/ 9un.ue no pueden reci'ir valore, prede(erminado en (iempo de
en,am'lado8 pueden iniciali=ar,e en (iempo de e>ecucin/ Podemo, crear varia'le, locale, en
lengua>e en,am'lador median(e el u,o de la, mi,ma, (Dcnica, .ue en 0 7 0EE/
6>emplo 3a ,iguien(e funcin en 0EE declara la, varia'le, locale, H 7 K2
void 2iSub()
e
int : ( %"0
int F ( ."0
f
Podemo, u,ar el programa en 0EE compilado como gu-a8 mo,(rando cmo el compilador de
0EE a,igna la, varia'le, locale,/ 0ada en(rada en la pila (iene una longi(ud prede(erminada de
32 'i(,8 por lo .ue el (ama@o de almacenamien(o de cada varia'le ,e redondea *acia arri'a8 a
un mAl(iplo de 4/ !e re,erva una (o(al de 8 '7(e, para la, do, varia'le, locale,2
+aria'le +aria'le +aria'le +aria'le "7(e, "7(e, "7(e, "7(e, 5e,pla=amien(o de la pila 5e,pla=amien(o de la pila 5e,pla=amien(o de la pila 5e,pla=amien(o de la pila
H 4 6"P \ 4
K 4 6"P : 8

6l ,iguien(e de,en,am'lado (mo,(rado por un depurador) de la funcin 4i!u' mue,(ra la
forma en .ue un programa en 0EE crea varia'le, locale,8 a,igna valore, 7 elimina la, varia'le,
de la pola/ C(ili=a la convencin de llamada, de 02
2iSub P-O!
pus' ebp
mov ebp,esp
sub esp,# 0 crea las variables
mov D,O-D P3- BebpK;C,%" 0 :
#51

mov D,O-D P3- BebpK#C,." 0 F
mov esp,ebp 0 elimina las variables de la pila
pop ebp
ret
2iSub E8DP
3a ,iguien(e figura mue,(ra el marco de la pila de la funcin8 de,puD, de iniciali=ar la,
varia'le, locale,/
4arco de pila8 de,puD, de crear la, varia'le, locale,/

9n(e, de (erminar8 la funcin re,(a'lece el apun(ador de la pila8 a,ignBndole el valor de 6"P8 6l
efec(o e, li'erar la, varia'le, locale, de la pila2
mov esp,ebp 0 elimina las variables locales de la pila
!i ,e omi(iera e,(e pa,o8 la in,(ruccin PP 6"P a,ignar-a 2& a 6"P 7 la in,(ruccin <6T ,e
'ifurcar-a a la u'icacin de memoria 1&8 *aciendo .ue el programa ,e de(enga con una
e1cepcin del proce,ador/ Tal e, el ca,o de la ,iguien(e ver,in de 4i!u'2
2iSub P-O!
pus' ebp
mov ebp,esp
sub esp,# 0 crea las variables
mov D,O-D P3- BebpK;C,%" 0 :
mov D,O-D P3- BebpK#C,." 0 F
pop ebp
#53

ret
2iSub E8DP
!mbolos de las variables locales 0on el fin de facili(ar la legi'ilidad de lo, programa,
podemo, definir un ,-m'olo para el de,pla=amien(o de cada varia'le local 7 u(ili=arlo en
nue,(ro cdigo2
:Tlocal ER9 D,O-D P3- BebpK;C
FTlocal ER9 D,O-D P3- BebpK#C
2isub P-O!
pus' ebp
mov ebp,esp
sub esp,# 0 reserva espacio para las variables
locales
mov :Tlocal,%" 0 :
mov FTlocal,." 0 F
mov esp,ebp 0 elimina las variables de la pila
pop ebp
ret
2iSub E8DP
9cce,o a lo, parBme(ro, por referencia 9cce,o a lo, parBme(ro, por referencia 9cce,o a lo, parBme(ro, por referencia 9cce,o a lo, parBme(ro, por referencia
Por lo general8 la, ,u'ru(ina, acceden a lo, parBme(ro, por referencia median(e el u,o de
direccionamien(o 'a,e:de,pla=amien(o (de 6"P)/ 0omo cada parBme(ro por referencia e, un
apun(ador8 por lo general8 ,e carga en un regi,(ro para u,arlo como operando indirec(o/ Por
e>emplo8 ,upongamo, .ue un apun(ador a un arreglo ,e encuen(ra en la direccin de pila ^e'p
E 12_/ 3a ,iguien(e in,(ruccin copia el apun(ador a 6!#2
mov esi,BebpL%.C 0 apunta al arreglo
jemplo2 %lenarArreglo 6l procedimien(o 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo8 .ue vamo, a ver a con(inuacin8 llena
un arreglo con una ,ecuencia ,eudoalea(oria de en(ero, de 16 'i(,/ <eci'e do, argumen(o,2
un apun(ador al arreglo 7 la longi(ud del arreglo/ 6l primero ,e pa,a por referencia 7 el ,egundo
,e pa,a por valor/ $e a.u- una llamada de e>emplo2
6data
#55

cuenta ( %""
arreglo D,O-D cuenta D9P (N)
6code
pus' O$$SE3 arreglo
pus' !9E83A
call 4lenarArreglo
5en(ro de 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo8 el ,iguien(e cdigo de prlogo iniciali=a el apun(ador de pila (6"P)2
4lenarArreglo P-O!
pus' ebp
mov ebp, esp
9*ora el marco de pila con(iene el de,pla=amien(o del arreglo8 la cuen(a8 la direccin de
re(orno 7 el regi,(ro 6"P .ue ,e guardo2

3lenar9rreglo 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo guarda lo, regi,(ro, de prop,i(o general8 o'(iene lo, parBme(ro, 7 llena el
arreglo2
4lenarArreglo P-O!
pus' ebp
mov ebp,esp
pus'ad 0 guarda los registros
mov esi,BebpL%.C 0 desplazamiento del arreglo
mov ec1,BebpL#C 0 tamaJo del arreglo
#56

cmp ec1," 0 E!:((" N
e 4. 0 sA* omite el ciclo
4%*
mov ea1,%""""' 0 obtiene un valor al azar entre " 5 $$$$'
call -andom-ange 0 de la biblioteca de enlace
mov BesiC,a1 0 inserta un valor en el arreglo
add esi, 3FPE ,O-D 0 mueve al siguiente elemento
loop 4%
4.* popad 0 restaura los registros
pop ebp
ret # 0 limpia la pila
4lenarArreglo E8DP
#n,(ruccin 369 #n,(ruccin 369 #n,(ruccin 369 #n,(ruccin 369
3a in,(ruccin 369 devuelve el de,pla=amien(o de un operando indirec(o/ 0omo lo, operando,
indirec(o, con(ienen uno o mB, regi,(ro,8 ,u de,pla=amien(o, ,e calculan en (iempo de
e>ecucin/ Para mo,(rar cmo puede u(ili=ar,e 3698 veamo, el ,iguien(e programa en 0EE8 .ue
declara un arreglo local de carac(ere, 7 *ace referencia a mi0adena mi0adena mi0adena mi0adena al a,ignar valore,/
)oid crearArreglo()
e
!'ar micadenaB7"C0
$or( int i("0 i W 7"0 iLL)
mi!adenaBiC ( G&H 0
6l cdigo e.uivalen(e en lengua>e en,am'lador a,igna e,pacio para mi0adena en la pila8 7
a,igna la direccin a 6!#8 un operando indirec(o/ 9un.ue el arreglo ,lo e, de 3& '7(e,8 6!P ,e
decremen(a por 32 para man(enerlo alineado en un l-mi(e de do'le pala'ra/ ',ervemo,
cmo ,e u(ili=a 369 para a,ignar la direccin del arreglo a 6!#2
crearArreglo P-O!
pus' ebp
mov ebp,esp
#57

sub esp,7. 0 mi!adena estI en EEPK7.
lea esi,*e+p,3-. / cara direcci01 de miCade1a
mov ec1, 7" 0 contador de ciclo
4%* mov EF3E P3- BesiC,H&H 0 llena una posicin
Inc esi 0 mueve a la siguiente posicin
4oop 4% 0 contin?a 'asta @ue E!: ( "
add esp,7. 0 elimina el arreglo (restaura ESP)
pop ebp
ret
crearArreglo E8DP
No e, po,i'le u(ili=ar FF!6T para o'(ener la direccin de un parBme(ro de la pila 7a .ue
FF!6T ,li funciona con la, direccione, .ue ,e conocen en (iempo de compilacin/ 3a
,iguien(e in,(ruccin no ,e en,am'lar-a2
2ov esi,O$$SE3 BebpK7"C 0 error
#n,(ruccione, #n,(ruccione, #n,(ruccione, #n,(ruccione, 6NT6< 7 369+6 6NT6< 7 369+6 6NT6< 7 369+6 6NT6< 7 369+6
3a in,(ruccin 6NT6< crea una manera au(omB(ica un marco de pila para un procedimien(o al
.ue ,e llam/ <e,erva e,pacio en la pila para varia'le, locale, 7 guarda a 6"P en la pila/ 6n
e,pec-fico8 reali=a (re, accione,2
4e(e a 6"P en la pila (push ebp)/
6,(a'lece 6"P a la 'a,e del marco de pila (mov ebp? esp)/
<e,erva e,pacio para la, varia'le, locale, (,u' e,p8 num'7(e,)/
6NT6< (iene do, operando,2 6l primero e, una con,(an(e .ue e,pecifica el nAmero de '7(e, de
e,pacio a re,ervar en la pila para la, varia'le, locale,8 7 el ,egundo e,pecifica el nivel de
anidamien(o lD1ico del procedimien(o2
6NT6< numbytes? nivelanidamiento
9m'o, operando, ,on valore, inmedia(o,/ (umbytes ,iempre ,e redondea *acia arri'a a un
mAl(iplo de 48 para man(ener 6!P en un l-mi(e de do'le pala'ra/ Nivelanidamien(o de(ermina
el nAmero de apun(adore, al marco de la pila .ue ,e copian en el marco de pila ac(ual8
provenien(e, del marco de pila del procedimien(o al .ue ,e llam/
jemplo / 6l ,iguien(e e>emplo declara un procedimien(o ,in varia'le, locale,2
2iSub P-O!
#58

Enter ","
6,(o e, e.uivalen(e a la, ,iguien(e, in,(ruccione,2
2iSub P-O!
pus' ebp
mov ebp,esp
jemplo 3 3a in,(ruccin 6NT6< re,erva 8 '7(e, de almacenamien(o en la pila par a la,
varia'le, locale,2
2iSub P-O!
enter #,"
6,(o e, e.uivalen(e a la, ,iguien(e, in,(ruccione,2
2iSub P-O!
pus' ebp
mov ebp,esp
sub esp,#
3a ,iguien(e figura mue,(ra an(e, 7 de,puD, de e>ecu(ar 6NT6</





=i se utiliza la instruccin ;F4;R& es imprescindible (ue se utilice tambi!n la instruccin
L;/V; al $inal del mismo procedimiento. =i no es as%& tal vez no se libere el espacio de
almacenamiento (ue *a'a creado para las variables locales. ;sto *ar. (ue la instruccin R;4
sa(ue la direccin de retorno incorrecta de la pila.
#59

'nstruccin %A5 3a in,(ruccin 369+6 (ermina el marco de pila para un procedimien(o/
#nvier(e la accin de la in,(ruccin 6NT6< an(erior8 re,(aurando 6!P 7 6"P a lo, valore, .ue
(en-an a,ignado, cuando ,e *i=o la llamada al procedimien(o/ !i u(ili=amo, el e>emplo del
procedimien(o 4i!u' 4i!u' 4i!u' 4i!u' de nuevo8 podemo, e,cri'ir lo ,iguien(e2
2iSub P-O!
enter #,"
6
6
leave
ret
2iSub E8DP
6l ,iguien(e con>un(o e.uivalen(e de in,(ruccione, invier(e 7 de,car(a 8 '7(e, del e,pacio para
la, varia'le, locale,2
2iSub P-O!
pus' ebp
mov ebp,esp
sub esp,#
6
6
mov esp, ebp
pop ebp
ret
2iSub E8DP
5irec(iva 3093 5irec(iva 3093 5irec(iva 3093 5irec(iva 3093
Podemo, ,uponer .ue 4icro,of( cre la direc(iva 3093 como un ,u,(i(u(o de al(o nivel para la
in,(ruccin 6NT6</ 3093 declara ,lo una o mB, varia'le, locale, por nom're8 7 le, a,igna
a(ri'u(o, de (ama@o/ Por o(ra par(e8 6NT6< ,lo re,erva un ,olo 'lo.ue ,in nom're de e,pacio
en la pila para la, varia'le, locale,/ !i ,e u(ili=a8 3093 de'e aparecer en la l-nea .ue va >u,(o
de,puD, de la direc(iva P<0/ !u ,in(a1i, e,2
4O!A4 lista$ars
#6:

listavars e, una li,(a de definicione, de varia'le,8 ,eparada, por coma,8 .ue de manera
opcional a'arcan varia, l-nea,/ 0ada definicin de varia'le (oma la ,iguien(e forma2
eti@ueta*tipo
3a e(i.ue(a puede ,er cual.uier iden(ificador vBlido8 7 el (ipo puede ,er cual.uier (ipo e,(Bndar
(;<58 5;<58 e(c/) o un (ipo definido por el u,uario/
6>emplo, 6l procedimien(o 4i!u' 4i!u' 4i!u' 4i!u' con(iene una varia'le local llamada var18 de (ipo "KT6/
2iSub P-O!
4O!A4 var%*EF3E
6l procedimien(o rdena"ur'u>a rdena"ur'u>a rdena"ur'u>a rdena"ur'u>a con(iene una varia'le (ipo do'le pala'ra llamada (emp (emp (emp (emp 7 una
varia'le llamada #n(ercam'ia"andera #n(ercam'ia"andera #n(ercam'ia"andera #n(ercam'ia"andera de (ipo "KT62
OrdenaEurbua P-O!
4O!A4 temp*D,O-D, IntercambiaEandera*EF3E
6l procedimien(o 4e=clar 4e=clar 4e=clar 4e=clar con(iene una varia'le local PT< ;<5 llamada p9rreglo p9rreglo p9rreglo p9rreglo8 la cual e,
un apun(ador a un en(ero de 16 'i(,2
2ezclar P-O!
4O!A4 pArreglo*P3- ,O-D
3a varia'le local 9rregloTemp 9rregloTemp 9rregloTemp 9rregloTemp e, un arreglo de 1& do'le, pala'ra,2
4O!A4 Arreglo3empB%"C*D,O-D
Yeneracin de cdigo en 49!4 Yeneracin de cdigo en 49!4 Yeneracin de cdigo en 49!4 Yeneracin de cdigo en 49!4
6, convenien(e anali=ar el cdigo generado por 49!4 cuando ,e u(ili=a la direc(iva 3093[
para e,(o ,e puede ver un de,am'lado/ 6l ,iguien(e procedimien(o 6>emplo1 6>emplo1 6>emplo1 6>emplo1 (iene una ,ola
varia'le local de (ipo do'le pala'ra2
Eemplo% P-O!
4O!A4 temp*D,O-D
mov ea1,temp
ret
Eemplo% E8DP
49!4 genera el ,iguien(e cdigo para e>emplo18 mo,(rando cmo ,e decremen(a 6!P por 48
para a,- de>ar e,pacio a la varia'le (ipo do'le pala'ra2
#6"

pus' ebp
mov ebp,esp
add esp,"$$$$$$$!' 0 suma K; a ESP
mov ea1,BebpK;C
leave
ret
$e a.u- un diagrama del marco de pila del 6>emplo12


+aria'le, locale, .ue no ,on de do'le pala'ra +aria'le, locale, .ue no ,on de do'le pala'ra +aria'le, locale, .ue no ,on de do'le pala'ra +aria'le, locale, .ue no ,on de do'le pala'ra
3a direc(iva 3093 (iene un compor(amien(o in(ere,an(e cuando ,e declaran varia'le, locale,
de di,(in(o, (ama@o,/ 9 cada una ,e le, a,igna un e,pacio de acuerdo a ,u (ama@o2 una
varia'le de 8 'i(, ,e a,igna el ,iguien(e '7(e di,poni'le8 una varia'le de 16 'i(, ,e le a,igna a
la ,iguien(e direccin par (alineada por pala'ra)8 7 a una varia'le de 32 'i(, ,e le a,igna el
,iguien(e l-mi(e alineado por do'le pala'ra/
+eamo, uno, cuan(o, e>emplo,/ 6n primer lugar8 el procedimien(o 6>emplo1 6>emplo1 6>emplo1 6>emplo1 con(iene una
varia'le local llamada var1 var1 var1 var1 de (ipo "KT62
Eemplo% P-O!
4ocal var%*EF3E
mov al,var% 0 BEEP _ %C
ret
Eemplo% E8DP
0omo el de,pla=amien(o prede(erminado de la pila e, de 32 'i(,8 uno podr-a e,perar .ue var1 var1 var1 var1
,e encon(rara en 6"P \ 4/ 6n ,u lugar8 como ,e mue,(ra en la ,iguien(e figura/ 49!4
decremen(a a 6!P por 4 7 coloca a var1 var1 var1 var1 en 6"P \ 18 de>ando lo, (re, '7(e, de'a>o de e,(a
u'icacin ,in u,ar (e,(Bn marcado, con la le(ra un)/
#6#

0reacin de varia'le, locale, (Procedimien(o 6>emplo1)/

6l procedimien(o 6>emplo2 6>emplo2 6>emplo2 6>emplo2 con(iene una do'le pala'ra8 ,eguida de un '7(e2
Eemplo. P-O!
4O!A4 temp*D,O-D, IntercambiaEandera*EF3E
6
6
-et
Eemplo. E8DP
6l ,iguien(e cdigo lo genera 49!4 para el 6>emplo2/ 3a in,(ruccin 955 ,uma :8 a 6!P8
creando una a'er(ura en la pila en(re 6!P 7 6"P8 para la, do, varia'le, locale,2
pus' ebp
mov ebp,esp
add esp,"$$$$$$$#' 0 suma K# a ESP
mov ea1,BebpK;C 0 temp
mov ea1,BebpK<C 0 IntercambiaEandera
9un.ue #n(ercam'ia"andera #n(ercam'ia"andera #n(ercam'ia"andera #n(ercam'ia"andera e, ,lo un '7(e8 6!P ,e redondea *acia a'a>o8 a la ,iguien(e
u'icacin (ipo do'le pala'ra de la pila/ 6n la ,iguien(e figura ,e mue,(ra una vi,(a de(allada de
la pila8 en forma de '7(e individuale,8 para indicar la u'icacin e1ac(a de #n(ercam'ia"andera
7 el e,pacio ,in u,ar de'a>o de D,(a (e(i.ue(ado con un)/
0reacin de e,pacio en el e>emplo 2 para varia'le, locale,/
#61


.eservacin de espacio extra en la pila/ !i ,e planea crear arreglo, mB, grande, .ue uno,
cuan(o, cien(o, de '7(e, como varia'le, locale,8 de'emo, a,egurarno, de re,ervar el e,pacio
adecuado para la pila en (iempo de e>ecucin8 u,ando la direc(iva !T90?2
6S3A!> ;"+/
!i la, llamada, a procedimien(o, e,(Bn anidada,8 la pila en (iempo de e>ecucin de'e ,er lo
'a,(an(e grande como para guardar la ,uma de (oda, la, varia'le, locale, ac(iva, en
cual.uier pun(o de la e>ecucin del programa8 ,upongamo, .ue !u'1 !u'1 !u'1 !u'1 llama a !u'2 !u'2 !u'2 !u'2 7 !u'2 !u'2 !u'2 !u'2
llama a !u'3 !u'3 !u'3 !u'3/ 0ada uno de e,(o, procedimien(o, podr-a (ener una varia'le local (ipo arreglo2
Sub% P-O!
4O!A4 arregloB<"C*D,O-D 0 ."" b5tes
6
6
Sub. P-O!
4O!A4 arreglo.B#"C*D,O-D 0 %/" b5tes
6
6
Sub7 P-O!
4O!A4 arreglo7B7""C*EF3E 0 7"" b5tes
#63

0uando el programa en(ra a !u'3 !u'3 !u'3 !u'38 la pila en (iempo de e>ecucin guarda la, varia'le, locale,
de ,u'1 ,u'1 ,u'1 ,u'18 ,u'2 ,u'2 ,u'2 ,u'2 7 ,u'3 ,u'3 ,u'3 ,u'3/ 3a pila re.uerir-a 66& '7(e, u(ili=ado, por la, varia'le, locale,8 mB, la,
do, direccione, de re(orno de lo, procedimien(o, (8'7(e,)8 7 cual.uier regi,(ro .ue puediera
*a'er me(ido a la pila den(ro de lo, procedimien(o,/
<ecur,ividad <ecur,ividad <ecur,ividad <ecur,ividad
Cna ,u'ru(ina recur,iva e, una .ue ,e llama a ,i mi,ma8 7a ,ea en forma direc(a o indirec(a/
%a recursividad8 .ue e, la prBc(ica de llamar funcione, recur,iva,8 puede ,er una podero,a
*erramien(a al (ra'a>ar con e,(ruc(ura, de da(o, .ue (ienen pa(rone, repe(i(ivo,/ 9lguno,
e>emplo, ,on la, li,(a, enla=ada, 7 vario, (ipo, de grBfico, conec(ado,8 en lo, .ue un
programa de'e volver a (ra=ar ,u ru(a/
.ecursividad sin fin 6l (ipo mB, o'vio de recur,ividad ocurre cuando una ,u'ru(ina ,e llama
a ,- mi,ma/ Por e>emplo8 el ,iguien(e programa (iene un procedimien(o llamado ,inf ,inf ,inf ,infi ii in nn n8 el cual
,e llama a ,- mi,mo repe(ida, vece, ,in de(ener,e2
3I34E -ecursividad sin fin (Sin$in6asm)
I8!49DE Irvine7.6inc
6data
cadSin$in EF3E OEsta recursividad nunca terminaP,"
6code
main P-O!
call sinfAn
e1it
main E8DP
Sin$in P-O!
mov ED:,offset cadSin$in
call ,riteString
call sinfAn
ret 0 nunca llega a esta lAnea
Sin$in E8DP
E8D main
#65

5e,de luego .ue e,(e e>emplo no (iene ningAn valor prBc(ico/ 0ada ve= .ue el procedimien(o
,e llama a ,- mi,mo8 u(ili=a 4 '7(e, de e,pacio en la pila cuando la in,(ruccin 0933 me(e la
direccin de re(orno/ 3a in,(ruccin <6T nunca ,e e>ecu(a/
0alculo recur,ivo de una ,uma 0alculo recur,ivo de una ,uma 0alculo recur,ivo de una ,uma 0alculo recur,ivo de una ,uma
3a, ,u'ru(ina, recur,iva, A(ile, ,iempre con(ienen una condicin de (erminacin/ 0uando e,(a
condicin de (erminacin ,e vuelve verdadera8 la pila ,e limpia cuando el programa e>ecu(a
(oda, la, in,(ruccione, <6T pendien(e,/ Para ilu,(rar e,(o8 vamo, a con,iderar el
procedimien(o recur,ivo llamado 0alc!uma 0alc!uma 0alc!uma 0alc!uma8 .ue ,uma lo, en(ero, de 1 a n8 en donde n e, un
parBme(ro de en(rada .ue ,e pa,a en 60H/ 0alc!uma devuelve la ,uma en 69H2
3I34E Suma de enteros (!suma6asm)
I8!49DE Irvine7.6inc
6code
main P-O!
mov ec1,%" 0 cuenta ( %"
mov ea1," 0 guarda la suma
call !alcSuma 0 calcula la suma
4%* call ,riteDec 0 muestra EA:
call !rlf 0 nueva lAnea
e1it
main E8DP
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
!alcSuma P-O!
0 !alcula la suma de una lista de enteros
0 -ecibe* E!: ( !uenta
0 Devuelve* EA: ( suma
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
cmp ec1," 0 comprueba el valor del contador
z 4. 0 termina si es cero
add ea1,ec1 0 en caso contrario, le agrega a la suma
#66

dec ec1 0 decrementa el contador
call !alcSuma 0 llamada recursiva
4.* ret
calcSuma E8DP
E8D 2ain
3a, primera, do, l-nea, de 0alc!uma 0alc!uma 0alc!uma 0alc!uma comprue'an el con(ador 7 ,alen del procedimien(o
cuando 60H R &/ 6l cdigo pa,a por al(o la, ,u',iguien(e, llamada, recur,iva,/ 0uando ,e
llega a la in,(ruccin <6T por primera ve=8 regre,a a la llamada an(erior a 0alc!uma8 la cual
regre,a a ,u llamada an(erior 7 a,- ,uce,ivamen(e/ 3a ,iguien(e (a'la mue,(ra la, direccione,
de re(orno (como e(i.ue(a,) .ue ,e me(en en la pila median(e la in,(ruccin 09338 >un(o con
lo, valore, concurren(e, de 60H (con(ador) 7 69H (,uma)/
#nclu,o *a,(a un ,imple procedimien(o recur,ivo *ace u,o de la pila/ 0omo m-nimo8 ,e u(ili=an
cua(ro '7(e, de e,pacio de la pila cada ve= .ue ,e reali=a una llamada al procedimien(o8 7a
.ue la direccin de re(orno de'e guardar,e en la pila/
!e me(i en la pila !e me(i en la pila !e me(i en la pila !e me(i en la pila +alor en 60H +alor en 60H +alor en 60H +alor en 60H +alor en 69H +alor en 69H +alor en 69H +alor en 69H
31 5 &
32 4 5
32 3 P
32 2 12
32 1 14
32 & 15

0Blculo de una fac(orial 0Blculo de una fac(orial 0Blculo de una fac(orial 0Blculo de una fac(orial
9 menudo8 la, llamada, recur,iva, almacenan lo, da(o, (emporale, en el parBme(ro de pila/
0uando la, llamada, recur,iva, ,e limpian8 lo, da(o, en la pila pueden ,er A(ile,/ 6l ,iguien(e
e>emplo .ue vamo, a anali=ar calcula la fac(orial de un en(ero n/ 6l algori(mo factorial calcula
nC8 en donde n e, un en(ero ,in ,igno/ 3a primera ve= .ue ,e llama a la funcin fac(orial fac(orial fac(orial fac(orial8 el
parBme(ro n e, el nAmero inicial8 .ue ,e mue,(ra programado a con(inuacin en ,in(a1i, de
0G0EEGFava2
int function factorial(int n)
e
#67

if(n (( ")
return %0
else
return n & factorial(nK%)0
f
5ado cual.uier nAmero n8 a,umimo, .ue podemo, calcular la fac(orial de n 6// !i e, a,-8
podemo, con(inuar reduciendo n *a,(a .ue ,ea igual a cero/ Por definicin8 &a e, igual a 1/ 6n
el proce,o de re(roceder *a,(a la e1pre,in original nC8 acumulamo, el produc(o de cada
mul(iplicacin/ Por e>emplo8 calcular 5a8 el algori(mo recur,ivo de,ciende a lo largo de la
columna i=.uierda de la ,iguien(e figura 7 re(rocede a lo largo de la columna derec*a/
3lamada, recur,iva, a la funcin Fac(orial/

Programa de ejemplo 6l ,iguien(e programa en lengua>e en,am'lador con(iene un
procedimien(o llamado Fac(orial Fac(orial Fac(orial Fac(orial8 el cual u(ili=a la recur,ividad para calcular un fac(orial/
Pa,amo, n (un en(ero ,in ,igno en(re el & 7 12) en la pila al procedimien(o Fac(orial Fac(orial Fac(orial Fac(orial8 7 ,e
devuelve un valor en 69H/ 0omo ,e u(ili=a un regi,(ro de 32 'i(,8 el ma7or fac(orial .ue puede
guardar e, 12a (47P8&&186&&)/
3I34E !Ilculo de un factorial ($act6asm)
I8!49DE Irvine7.6inc
6code
#68

main P-O!
pus' %. 0 calcula el factorial de %.
call $actorial 0 calcula factorial (EA:)
-etorno2ain*
call ,riteDec 0 lo muestra
call !rlf
e1it
main E8DP
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
$actorial P-O!
0 !alcula un factorial6
0 -ecibe BEEPL#C ( n, el n?mero a calcular
0 Devuelve* ea1 ( el factorial de n
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
pus' ebp
mov ebp,esp
mov ea1,BebpL#C 0 obtiene n
cmp ea1," 0 n X "N
a 4% 0 sA* contin?a
mov ea1,% 0 no* regresa a %
mp 4.
4%* dec ea1
pus' ea1 0 $actorial (nK%)
call $actorial
0 4as instrucciones a@uA en adelante se eecutan cuando
0 regresa cada una de las llamadas recursivas6
#69

-etorno$act*
mov eb1,BebpL#C 0 obtiene n
mul eb1 0 ED:* EA: ( EA: & EE:
4.* pop ebp 0 devuelve EA:
ret ; 0 limpia la pila
$actorial E8DP
E8D main
0uando ,e *ace la llamada a Fac(orial Fac(orial Fac(orial Fac(orial8 el de,pla=amien(o de la ,iguien(e in,(ruccin de,puD,
de la llamada ,e me(e en la pila/ 5e,de main main main main8 D,(e e, el de,pla=amien(o de la e(i.ue(a
<e(orno4ain <e(orno4ain <e(orno4ain <e(orno4ain[ de,de Fac(orial Fac(orial Fac(orial Fac(orial8 e, el de,pla=amien(o de la e(i.ue(a <e(ornoFac( <e(ornoFac( <e(ornoFac( <e(ornoFac(/
5irec(iva /4563 5irec(iva /4563 5irec(iva /4563 5irec(iva /4563
49!4 u(ili=a la direc(iva /4563 para de(erminar varia, carac(er-,(ica, impor(an(e, de un
programa2 ,u (ipo de modelo de memoria8 el e,.uema de nomencla(ura de procedimien(o,8 7
la convencin para el pa,o de parBme(ro,/ 3o, Al(imo, do, ,on en e,pecial impor(an(e,
cuando lo, programa, e,cri(o, en o(ro lengua>e de programacin llaman al lengua>e
en,am'lador/ 3a ,in(a1i, de la direc(iva /4563 e,2
62ODE4 modelomemoria B,opcionesmodeloC
Modelo de memoria 6l campo modelomemoria puede ,er uno de lo, modelo, de,cri(o, en la
,iguien(e (a'la8 Todo, lo, modo,8 con la e1cepcin del plano8 ,e u(ili=an cuando ,e programa
en modo direccionamien(o real de 16 'i(,/
4odelo 4odelo 4odelo 4odelo 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
Tin7 (diminu(o) Cn ,olo ,egmen(o8 con(iene cdigo 7 da(o,/ 6,(e modelo lo
u(ili=an lo, programa, .ue (ienen la e1(en,in /com en ,u
nom're de arc*ivo/
!mall (pe.ue@o) Cn ,egmen(o de cdigo 7 un ,egmen(o de da(o,/ Todo el cdigo
7 lo, da(o, ,on cercano,8 de manera prede(erminada/
4edium (mediano) +ario, ,egmen(o, de cdigo 7 un ,olo ,egmen(o de da(o,/
0ompac( (compac(o) Cn ,egmen(o de cdigo 7 vario, ,egmen(o, de da(o,/
3arge (grande) +ario, ,egmen(o, de cdigo 7 de da(o,/
$uge (enorme) #gual .ue el modelo grande (large)8 pero lo, elemen(o,
individuale, de da(o, pueden ,er mB, grande, .ue un ,olo
#7:

,egmen(o/
Fla( (plano) 4odo pro(egido/ C(ili=a de,pla=amien(o, de 32 'i(, para el
cdigo 7 lo, da(o,/ Todo, lo, da(o, 7 el cdigo (inclu7endo lo,
recur,o, del ,i,(ema) ,e encuen(ran en un ,olo ,egmen(o de
32 'i(,/

Todo, lo, programa, en modo de direccionamien(o real .ue *emo, mo,(rado *a,(a a*ora8
u(ili=an el modelo de memoria pe.ue@o8 7a .ue man(iene (odo el cdigo den(ro de un ,olo
,egmen(o8 7 (odo, lo, da(o, (inclu7endo la pila) den(ro de un ,olo ,egmen(o/ 0omo re,ul(ado8
,lo (enemo, .ue manipular lo, de,pla=amien(o, de cdigo 7 da(o,8 7 lo, ,egmen(o, nunca
cam'ian/
3o, programa, en modo pro(egido u(ili=an el modelo de memoria plana8 en el cual lo,
de,pla=amien(o, ,on de 32 'i(,8 7 el cdigo 7 lo, da(o, pueden ,er *a,(a de 4 Y"/ Por e>emplo
#rvine32/inc con(iene la ,iguien(e direc(iva / 45632
62ODE4 flat,S3D!A44
#pciones de modelo 6l campo opcionesmodelo en la direc(iva /4563 puede con(ener un
e,pecificador de lengua>e 7 una di,(ancia de pila/ 6l especificador de lenguaje de(ermina la,
convencione, de llamada, 7 de nomencla(ura para lo, procedimien(o, 7 ,-m'olo, pA'lico,/ 3a
distancia de pila puede ,er N69<!T90? (el valor prede(erminado) o F9<!T90?/
6,pecificadore, de lengua>e 6,pecificadore, de lengua>e 6,pecificadore, de lengua>e 6,pecificadore, de lengua>e
+amo, a ver mB, de cerca lo, e,pecificadore, de lengua>e u(ili=ado, en la direc(iva /4563/
3a, opcione, ,on 08 "9!#08 F<T<9N8 P9!0938 !K!0933 7 !T50933/ 3o, e,pecificadore, 08
"9!#08 F<T<9N 7 P9!093 permi(en a lo, programadore, de lengua>e en,am'lador crear
procedimien(o, .ue ,ean compa(i'le, con e,(o, lengua>e,/ 3o, e,pecificadore, !K!0933 7
!T50933 ,on variacione, de lo, o(ro, e,pecificadore, de lengua>e/ 6n e,(e re,umen8
demo,(raremo, lo, e,pecificadore, 0 7 !T50933/ 0ada uno de ello, ,e mue,(ra a
con(inuacin8 con el modelo plano de memoria2
6model flat, !
6model flat, S3D!A44
!T50933 !e u(ili=a en la ma7or-a de nue,(ro, programa, de e>emplo/ 6, el e,pecificador de
lengua>e .ue ,e u(ili=a al llamar a la, funcione, de 4! ;indo%,/ 4B, adelan(e u(ili=aremo, el
e,pecificador de lengua>e 08 al enla=ar el cdigo de lengua>e en,am'lador con lo, programa,
en 0 7 0EE/
!T50933 !T50933 !T50933 !T50933
#7"

6l e,pecificador de lengua>e !T509338 *ace .ue lo, argumen(o, de una ru(ina ,e me(an en la
pila en orden inver,o (del Al(imo al primero)/ !upongamo, .ue e,cri'imo, la ,iguien(e llamada
a una funcin en lengua>e de al(o nivel2
SumarDos( <, /)0
6l ,iguien(e cdigo en lengua>e en,am'lador e, e.uivalen(e
pus' /
pus' <
call SumarDos
(ra con,ideracin impor(an(e e, la forma en .ue lo, argumen(o, ,e ,acan de la pila8 de,puD,
de la, llamada, a procedimien(o,/ !T50933 re.uiere .ue ,e proporcione un operando
con,(an(e en la in,(ruccin <6T/ 6,(e operando indica el valor .ue ,e ,uma a 6!P de,puD, de
.ue <6T ,aca la direccin de re(orno de la pila2
SumarDos Proc
pus' ebp
mov ebp,esp
mov ea1,Bebp L %.C 0 primer parImetro
mov ea1,Bebp L #C 0 segundo parImetro
pop ebp
ret #
SumarDos E8DP
9l ,umar 8 al apun(ador de la pila8 lo re,(a'lecemo, al valor .ue (en-a an(e, de me(er lo,
argumen(o, en la pila median(e el programa .ue *ace la llamada/
Por Al(imo !T50933 modifica lo, nom're, de lo, procedimien(o, e1por(ado, (pu'lic)8 7 lo,
almacena en el ,iguien(e forma(o2
TnombreZnn
!e agrega un guin 'a>o a la i=.uierda del nom're del procedimien(o 7 ,e coloca un en(ero
de,puD, del ,igno X8 indicando el nAmero de '7(e, u(ili=ado, por lo, parBme(ro, del
procedimien(o (,e redondean *acia arri'a8 a un mAl(iplo de 4)/ Por e>emplo8 ,upongamo, .ue
el procedimien(o !umar5o, !umar5o, !umar5o, !umar5o, (iene do, parBme(ro, de (ipo do'le pala'ra/ 6l nom're .ue pa,a el
en,am'lador al enla=ador e, S!um S!um S!um S!umar5o,X8 ar5o,X8 ar5o,X8 ar5o,X8/

La *erramienta LIFK1#.;Z; es sensible al uso de ma')sculas ' min)sculas& por lo (ue R<I=DBh8 es
distinto a R<i=ubh8. 5ara ver todos los nombres de los procedimientos dentro de un arc*ivo .ABK&
podemos usar la *erramienta @D<5BIF (ue se proporciona en Visual =tudio.
#7#



6,pecificador 0 6,pecificador 0 6,pecificador 0 6,pecificador 0
6l e,pecificador de lengua>e 0 re.uiere .ue lo, argumen(o, del procedimien(o ,e me(an en la
pila8 del Al(imo al primero8 de igual forma .ue !T50933/ 0on re,pec(o a la eliminacin de
argumen(o, de la pila de,puD, de la llamada a un procedimien(o8 el e,pecificador de lengua>e
0 de>a e,a re,pon,a'ilidad al .ue *ace la llamada/ 6n el programa .ue *ace la llamada8 ,e
,uma una con,(an(e en 6!P8 con lo cual ,e re,(a'lece el valor .ue (en-a an(e, de me(er lo,
argumen(o,2
pus' / 0 segundo argumento
pus' < 0 primer argumento
call SumarDos
add esp,# 0 lAmpia la pila
6l e,pecificador de lengua>e 0 ad>un(a un carBc(er de guin 'a>o a la i=.uierda de lo, nom're
del procedimien(o, e1(erno,/ Por e>emplo2
S!umar5o,
#N+?68 955<8 P<0 #N+?68 955<8 P<0 #N+?68 955<8 P<0 #N+?68 955<8 P<0 K P<T K P<T K P<T K P<T
3a, direc(iva, #N+?68 955<8 P<0 7 P<T ,on *erramien(a, podero,a, para definir 7 llamar
a lo, procedimien(o,/ 6n muc*o, ,en(ido,8 ,e apro1iman a la conveniencia .ue ofrecen lo,
lengua>e, de programacin de al(o nivel/ 5e,de un pun(o de vi,(a pedaggico8 ,u u,o e,
con(rover,ial 7a .ue enma,caran la e,(ruc(ura ,u'7acen(e de la pila en (iempo de e>ecucin/
$a7 una ,i(uacin en la .ue el u,o de direc(iva, de procedimien(o, avan=ado, conlleva a una
me>or programacin2 cuando el programa e>ecu(a llamada, a procedimien(o, a (ravD, de lo,
l-mi(e, de lo, mdulo,/ 6n (ale, ca,o, la direc(iva P<T a7uda al en,am'lador a validar la,
llamada, a lo, procedimien(o,8 para lo cual ,e comparan la, li,(a, de lo, argumen(o, con la,
declaracione, de lo, procedimien(o,/ 6,(a carac(er-,(ica alien(a a lo, programadore, de
lengua>e en,am'lador a aprovec*ar la conveniencia .ue ofrecen la, direc(iva, avan=ada, de
49!4/
5irec(iva #N+?6 5irec(iva #N+?6 5irec(iva #N+?6 5irec(iva #N+?6
3a direc(iva #N+?6 me(e argumen(o, en la pila (en el orden e,pecificado por el e,pecificador
de lengua>e de la direc(iva 4563) 7 llama a un procedimien(o/ #N+?6 e, un reempla=ado
convenien(e para la in,(ruccin 09338 7a .ue no, permi(e pa,ar vario, argumen(o, en una ,ola
l-nea de cdigo/ $e a.u- la ,in(a1i, general2
I8)O>E nombreProcedimiento B, lista%rg#mentosC
#71

%istaArgumentos e, una li,(a opcional delimi(ada por coma,8 de lo, argumen(o, .ue ,e pa,an
al procedimien(o/ Por e>emplo8 median(e el u,o de la in,(ruccin 0933 podr-amo, llamar a
5ump4em de,puD, de e>ecu(ar varia, in,(ruccione, PC!$
pus' 3FPE arreglo
pus' 4E8S3\O$ arreglo
pus' O$$SE3 arreglo
call Dump2em
3a in,(ruccin e.uivalen(e median(e el u,o de #N+?6 ,e reduce a una ,ola l-nea8 en la cual
lo, argumen(o, ,e li,(an en orden inver,o (a,umiendo .ue !T50933 e,(B en efec(o)
I8)O>E Dump2em, O$$SE3 arreglo, 4E8S3\O$ arreglo, 3FPE arreglo
#N+?6 permi(e ca,i cual.uier nAmero de argumen(o,8 7 lo, argumen(o, individuale, pueden
aparecer en l-nea, de cdigo ,eparada,/ 3a ,iguien(e in,(ruccin #N+?6 inclu7e comen(ario,
A(ile,2
I8)O>E Dump2em,
O$$SE3 arreglo 0 muestra un blo@ue de memoria
4ES3\O$ arreglo 0 apunta al arreglo
3FPE arreglo 0 tamaJo de los componentes del arreglo
3o, (ipo, de argumen(o, ,e li,(an en la ,iguien(e (a'la2
Tipo Tipo Tipo Tipo 6>emplo, 6>emplo, 6>emplo, 6>emplo,
+alor inmedia(o 1&83&&&*8 FF!6T mili,(a8 TKP6 arreglo
61pre,in en(era (1& J 2&)8 0C6NT9
+aria'le mi3i,(a8 arreglo8 miPala'ra8
mi5o'lePala'ra
61pre,in de direccin
amiListaO#e&aebCOesie
<egi,(ro ea18 'l8 edi
955< nom're 955< mi3i,(a
FF!6T FF!6T mi3i,(a

#73

!obre escritura de A9 y D9 !i ,e pa,an argumen(o, menore, de 32 'i(, a un
procedimien(o8 #N+?6 oca,iona con frecuencia .ue el en,am'lador ,o're e,cri'a el
con(enido de 69H 7 65H al ampliar lo, argumen(o, an(e, de me(erlo, en la pila/ Podemo,
evi(ar e,(e compor(amien(o pa,ando ,iempre argumen(o, de 32 'i(, a #N+?68 o podemo,
guardar 7 re,(aurar 69H 7 65H an(e, 7 de,puD, de la llamada al procedimien(o/
perador 955< perador 955< perador 955< perador 955<
6l operador 955< puede u(ili=ar,e para pa,ar un argumen(o (ipo apun(ador al llamar a un
procedimien(o u,ando #N+?6/ Por e>emplo8 la ,iguien(e in,(ruccin #N+?6 pa,a la direccin
de mi9rreglo mi9rreglo mi9rreglo mi9rreglo al procedimien(o 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo 3lenar9rreglo2
I8)O>E 4lenarArreglo, ADD- miArreglo
6l argumen(o .ue ,e pa,a a 955< de'e ,er una con,(an(e en (iempo de en,am'lado/ 3a
,iguien(e e1pre,in e, un error2
I8)O>E miSub, ADD- BebpL%.C 0 error
6l operador 955< ,lo puede u,ar,e en con>un(o con #N+?6/ 3a ,iguien(e e1pre,in e, un
error2
mov esi, ADD- miArreglo 0 error
955< pa,a un apun(ador cercano o le>ano8 dependiendo de lo .ue ,e llame median(e el
modelo de memoria del programa/ 6n lo, programa, en modo pro(egido8 955< 7 FF!6T
pa,an de,pla=amien(o, de 32 'i(,/
jemplo 3a ,iguien(e direc(iva #N+?6 llama a #n(ercam'iar #n(ercam'iar #n(ercam'iar #n(ercam'iar 7 le pa,a la, direccione, de lo,
primero, do, elemen(o, en un arreglo de do'le, pala'ra,2
6data
Arreglo D,O-D ." D9P(N)
6code
D
I8)O>E Intercambiar,
ADD- Arreglo,
ADD- BArregloL;C
$e a.u- el cdigo corre,pondien(e .ue genera el en,am'lador8 ,uponiendo .ue !T50933 e,(B
en efec(o2
pus' O$$SE3 Arreglo
#75

pus' O$$SE3 ArregloL;
call Intercambiar
5irec(iva P<0 5irec(iva P<0 5irec(iva P<0 5irec(iva P<0
!in(a1i, de la direc(iva P<0 !in(a1i, de la direc(iva P<0 !in(a1i, de la direc(iva P<0 !in(a1i, de la direc(iva P<0
3a direc(iva P<0 (iene la ,iguien(e ,in(a1i, 'B,ica2
eti@ueta P-O! BatributosC B9SES listaregsC, listaTParImetros
ti+ueta e, una e(i.ue(a definida por el u,uario8 .ue ,igue la, regla, para lo, iden(ificadore,
.ue e1plicamo,/ Atributos ,e refiere a cual.uiera de lo, ,iguien(e,2
BdistanciaC BtipolengC BvisibildadC BprlogoC
La siguiente tabla describe cada uno de los atributos.
Atributo ,escripcin
@istancia F;/R +cercana, o 2/R +lejana,. Indica el tipo de instruccin R;4 +R;4 o R;42,
(ue genera el ensamblador.
4ipoleng ;speci$ica la convencin de llamada +convencin de paso de par.metros, tal
como -& 5/=-/L o =4@-/LL. Ignora el lenguaje especi$icado en directiva
.<A@;L
Visibilidad Indica la visibilidad del procedimiento para con los otros mdulos. Las
operaciones son 5RIV/4;& 5DBLI- +predeterminada, ' ;Z5AR4. =i la visibilidad
es ;Z5AR4& el enlazador coloca el nombre del procedimiento en la tabla de
eCportacin para los ejecutables segmentados. ;Z5AR4 tambi!n *abilita la
visibilidad 5DBLI-.
5rlogo ;speci$ica los argumentos (ue a$ectan la generacin del cdigo prlogo ' del
ep%logo.
Lista de parmetros
La directiva 5RA- nos permite declarar un procedimiento con una lista separada por comas de
par.metros con nombre. ;l cdigo de implementacin se puede re$erir a los par.metros por
nombre& en vez de *acerlo por los desplazamientos calculados de la pila como aebpO8e:
eti@ueta P-O! BatributosC B9SES listaregsC,
parImetroT%,
parImetroT.,
#76

6
6
parImetroTn
5odemos observar las comas re(ueridas antes del primer par.metro& estas pueden pasarse por
alto de manera inadvertida. La lista de par.metros puede aparecer en la misma l%nea:
eti(ueta 5RA- aatributose& par.metroR"& par.metroR#& . . .& par.metroRn
Dn par.metro individual tiene la siguiente sintaCis:
nombreParam* tipo
;ombre*aram es un nombre arbitrario (ue se asigna al par.metro. =u alcance est. limitado al
procedimiento actual +lo (ue se conoce como alcance local,. ;l mismo nombre de par.metro
puede usarse en m.s de un procedimiento& pero no puede ser el nombre de una variable global o
eti(ueta de cdigo. Tipo puede ser uno de los siguientes: BJ4;& =BJ4;& >AR@& =>AR@& @>AR@&
=@>AR@& 2>AR@& _>AR@ o 4BJ4;.
4ambi!n puede ser un tipo calificado& como un apuntador a un tipo eCistente. / continuacin se
muestran ejemplos de tipos cali$icados:
54R BJ4; 54R =BJ4;
54R >AR@ 54R =>AR@
54R @>AR@ 54;R =@>AR@
54R _>AR@ 54R 4BJ4;
/un(ue es posible agregar atributos F;/R ' 2/R a estas eCpresiones& slo son relevantes en
aplicaciones m.s espec%$icas. 4ambi!n pueden crearse tipos cali$icados mediante el uso de las
directivas 4J5;@;2 ' =4RD-4& (ue se eCplicar. m.s adelante.
8jemplo 1 ;l procedimiento =umar@os recibe dos valores tipo doble palabra ' devuelve su suma en
;/Z:
SumarDos P-O!,
val%*D,O-D,
val.*D,O-D
mov ea1,val%
add ea1,val.
#77

ret
SumarDos E8DP
;l lenguaje ensamblador (ue genera </=< al ensamblar =umar@os muestra cmo se traducen los
nombres de los par.metros a desplazamientos desde ;B5. =e genera un operando constante para
la instruccin R;4& 'a (ue =4@-/LL est. en e$ecto:
SumarDos P-O!
pus' ebp
mov ebp,esp
mov ea1,d=ord ptr BebpL#C
add ea1,d=ord ptr BebpL"c'C
leave
ret #
SumarDos E8DP
8jemplo ;l procedimiento Llenar/rreglo recibe un apuntador a un arreglo de b'tes:
4lenarArreglo P-O!,
pArreglo* P3- EF3E
6 6 6
4lenarArreglo E8DP
8jemplo 2 ;l procedimiento Intercambiar recibe dos apuntadores a dobles palabras:
Intercambiar P-O!,
p)al:*P3- D,O-D,
p)alF*P3- D,O-D
6 6 6
Intercambiar E8DP
8jemplo < ;l procedimiento LeerR/rc*ivo recibe un apuntador a b'te llamado pBu$er. 4iene una
variable local tipo doble palabra llamado manejadorArc6ivo& ' guarda dos registros en la pila +;/Z
' ;BZ,:
#78

4eerTArc'ivo P-O! 9SES ea1 eb1,
pEufer*P3- EF3E
4O!A4 maneadorArc'ivo*D,O-D
mov esi,pEufer
mov maneadorArc'ivo,ea1
6
6
ret
4eerTArc'ivo E8DP
;l cdigo (ue genera </=< para LeerR/rc*ivo muestra como se reserva el espacio en la pila para
la variable local +manejador/rc*ivo, antes de meter ;/Z ' ;BZ +especi$icadas en la cl.usula D=;=,:
4eerTArc'ivo P-O!
pus' ebp
mov ebp,esp
add esp,"$$$$$$$!' 0 crea maneadorArc'ivo
pus' ea1 0 guarda EA:
pus' eb1 0 guarda EE:
mov esi,d=ord ptr BebpL#C 0 pEufer
mov d=ord ptr BebpK;C,ea1 0 maneadorArc'ivo
leave
ret ;
4eerTArc'ivo E8DP
Instruccin 18T modificada por *196 -uando 5RA- se utiliza con uno o m.s par.metros '
=4@-/LL es el protocolo est.ndar& </=< genera el siguiente cdigo de entrada ' salida&
asumiendo (ue 5RA- tiene n par.metros:
pus' ebp
mov ebp,esp
#79

6
6
leave
ret (n&;)
La constante (ue aparece en la instruccin R;4 es el n)mero de par.metros multiplicado por 3 +'a
(ue cada par.metro es una doble palabra,. =4@-/LL es la convencin de llamada utilizada para
todas las llamadas a $unciones de la /5I de >indo?s.
Especi'icacin del protocolo de paso de parmetros
Dn programa podr%a llamar a los procedimientos de la biblioteca Irvine1# '& a su vez& contener
procedimientos (ue puedan llamarse desde programas en -OO. 5ara proveer esta $leCibilidad& el
campo atributos de la directiva 5RA- nos permite especi$icar la convencin de lenguaje para el
paso de par.metros. ;ste campo rede$ine la convencin de lenguaje predeterminado (ue se
especi$ica en la directiva .<A@;L. ;l siguiente ejemplo declara un procedimiento con la
convencin de llamadas de -:
Eemplo% P-O! !,
parm%*D,O-D, parm.*D,O-D
=i ejecutamos el ;jemplo " usando IFVAK;& el ensamblador genera cdigo consistente con la
convencin de llamadas de -. @e manera similar& si declaramos ;jemplo usando =4@-/LL& IFVAK;
genera cdigo consistente con esa convencin de lenguaje:
Eemplo% P-O! S3D!A44,
parm%*D,O-D, parm.*D,O-D
,irectiva !R8-8
La directiva 5RA4A crea un prototipo para un procedimiento eCistente. Dn prototipo declara el
nombre ' la lista de par.metros de un procedimiento. Fos permite llamar a un procedimiento
antes de de$inirlo ' veri$icar (ue el n)mero ' tipos de argumentos concuerden con la de$inicin
del procedimiento. Los lenguajes - ' -OO utilizan prototipos de $unciones para validar las llamadas
a $unciones en tiempo de compilacin.
</=< re(uiere un prototipo para cada procedimiento llamado por IFVAK;. 5RA4A debe aparecer
primero& es decir antes (ue IFVAK;. ;n otras palabras& el orden est.ndar de estas directivas es:
2iSub P-O3O 0 prototipo de procedimiento
I8)O>E 2iSub 0 llamada a procedimiento
#8:

2iSub P-O! 0 implementacin de procedimiento
6
6
2iSub E8DP
;s posible un escenario alternativo: La implementacin del procedimiento puede aparecer en el
programa& antes de la ubicacin de la instruccin IFVAK; para ese procedimiento. ;n ese caso&
5RA- act)a como su propio prototipo:
2iSub P-O! 0 definicin del procedimiento
6
6
2iSub E8DP
I8)O>E 2iSub 0 llamada a procedimiento
=uponiendo (ue 'a se *a escrito un procedimiento espec%$ico& se puede crear un prototipo con
$acilidad copiando la instruccin 5RA- ' *aciendo los siguientes cambios:
-ambiamos la palabra 5RA- a 5RA4A
;liminamos el operador D=;= si lo *a'& junto con su lista de registros.
5or ejemplo& supongamos (ue 'a *emos creado el procedimiento +umaArreglo.
SumaArreglo P-O! 9SES esi ec1,
ptrArreglo*P3- D,O-D, 0 apunta al arreglo
tamArreglo*D,O-D 0 tamaJo del arreglo
6
6
SumaArreglo E8DP
gsta es la declaracin 5RA4A correspondiente:
SumarArreglo P-O3O,
ptrArreglo*P3- D,O-D, 0 apunta al arreglo
tamArreglo*D,O-D 0 tamaJo del arreglo
#8"

La directiva 5RA4A nos permite rede$inir el protocolo de paso de par.metros predeterminado en
la directiva .<A@;L. =e debe ser consistente con la declaracin 5RA- del procedimiento:
Eemplo% P-O3O !,
parm%*D,O-D, parm.*D,O-D
Comprobacin de argumentos en tiempo de ensamblado
La directiva 5RA4A a'uda al ensamblador a comparar una lista de argumentos en una llamada al
procedimiento& con la de$inicin del mismo. La calidad de la comprobacin de errores no es tan
buena como la de - ' -OO. ;n vez de ello& </=< comprueba el n)mero correcto de par.metros '&
*asta cierto punto& relaciona los tipos de los argumentos con los tipos de los par.metros. 5or
ejemplo& supongamos (ue el prototipo para +ub1 se declara as%:
Sub% P-O3O, p%*EF3E, p.*,O-D, p7*P3- EF3E
Vamos a de$inir las siguientes variables:
6data
b5teT% EF3E %"'
palabT% ,O-D ."""'
palabT. D,O-D 7"""'
dipalabT% D,O-D %.7;</M#'
La siguiente llamada a =ub" es v.lida:
I8)O>E S9E,% b5teT%, palabT%, ADD- b5teT%
;l cdigo (ue genera </=< para esta instruccin IFVAK; muestra (ue los argumentos se meten
en la pila en orden inverso:
pus* 3:3:::* \ apuntador a b'teR"
sub esp&# \ rellena la pila con # b'tes
pus* ?ord ptr ds:a::3:3::"e \ valor de palabR"
mov al&b'te ptr ds:a::3:3:::*e \ valor de b'teR"
pus* eaC
call ::3:":7"
;/Z se sobrescribe ' la instruccin sub espH4 rellena la subsiguiente entrada de la pila *asta 1#
bits.
#8#

8rrores detectados por M=>M =i un argumento eCcede el tamaEo de un par.metro declarado&
</=< genera un error:
I8)O>E Sub%, pala+2), palabT., ADD- b5teT% 0 error en arg %
</=< genera errores si invocamos a =ub" usando mu' pocos o demasiados argumentos:
I8)O>E Sub%, b5teT%, palabT. 0 error* mu5 pocos argumentos
I8)O>E Sub%, b5teT%, palabT., ADD- b5teT%, pala+2- 0 error*
demasiados argumentos
;rrores (ue </=< no detecta =i el tipo de un argumento es m.s pe(ueEo (ue un par.metro
declarado </=< no detecta un error:
I8)O>E Sub%, b5teT%, +3te2), ADD- b5teT%
;n vez de ello& </=< eCpande el argumento m.s pe(ueEo *asta el tamaEo del par.metro
declarado. ;n el siguiente cdigo generado por nuestro ejemplo de IFVAK;& el segundo
argumento +b'teR", se eCpande *asta ;/Z& antes de meterlo en la pila:
pus' ;";""' 0 direccin de b5teT%
mov al,b5te ptr ds*B"";";"""'C 0 valor de b5teT%
movz1 ea1,al 0 lo e1pande 'asta EA:
pus' ea1 0 lo mete en la pila
mov al,b5te ptr ds*B"";";"""'C 0 valor de b5teT%
pus' ea1 0 lo mete en la pila
call "";"%"M% 0 llama a Sub%
=i se pasa una doble palabra cuando se espera un apuntador& no se detecta un error. 5or lo
general& este tipo de error produce un error en tiempo de ejecucin& cuando la subrutina trata de
utilizar el par.metro de pila como apuntador:
I8)O>E Sub%, b5teT%, palabT., dpala+2) 0 no se detecta un error
Ejemplo: +umaArreglo
Vamos a revisar el procedimiento =uma/rreglo& (ue calcula la suma de un arreglo de dobles
palabras. ;n un principio& pas.bamos los argumentos en registros\ a*ora podemos usar la directiva
5RA- para declarar los par.metros de pila:
SumarArreglo P-O! 9SES esi ec1,
#81

ptrArreglo* P3- D,O-D, 0 apunta al arreglo
tamArreglo*D,O-D 0 tamaJo del arreglo
mov esi,ptrArreglo 0 direccin del arreglo
mov ec1,tamArreglo 0 tamaJo del arreglo
mov ea1," 0 establece la suma a cero
cmp ec1," 0 clongitud ( ceroN
e 4. 0 si* termina
4%* add ea1,BesiC 0 agrega cada entero a la suma
add esi,; 0 apunta al siguiente entero
loop 4% 0 repite para el tamaJo del arreglo
4.* ret 0 la suma estI en ea1
SumaArreglo E8DP
La instruccin IFVAK; llama =uma/rreglo ' le pasa la direccin de un arreglo& junto con el n)mero
de elementos (ue contiene:
6data
arreglo D,O-D %""""',.""""',7""""',;""""',<""""'
laSuma D,O-D N
6code
main P-O!
I8)O>E SumaArreglo,
ADD- arreglo, 0 direccin del arreglo
4E8S3\O$ arreglo 0 n?mero de elementos
mov laSuma,ea1 0 almacena la suma
Clasi'icaciones de parmetros
5or lo general& los par.metros de los procedimientos se clasi$ican de acuerdo con la direccin de la
trans$erencia de datos entre el programa (ue *ace la llamada ' el procedimiento al cual se llamo:
#83

Entrada: un par.metro de entrada son los datos (ue el programa (ue *izo la llamada pasa
al procedimiento. ;l procedimiento al (ue se llam no debe modi$icar la variable
correspondiente al par.metro '& a)n si lo *ace& la modi$icacin (ueda con$inada al propio
procedimiento.
Salida: un par.metro de salida se crea cuando un programa (ue llama pasa la direccin de
la variable a un procedimiento& el cual utiliza la direccin para localizar ' asignar datos a la
variable. 5or ejemplo& la Biblioteca de consola >in1# tiene una $uncin llamada
ReadConsole& la cual lee una cadena de caracteres desde el teclado. ;l programa (ue *ace
la llamada a un procedimiento pasa un apuntador a un bu$$er de cadena& en el (ue
Read-onsole almacena el teCto escrito por el usuario:
.data
b)$er BJ4; 8: @D5+`,
manejador;ntrada @>AR@ `
.code
IFVAK; Read-onsole& manejador;ntrada& /@@R b)$er& +etc.,
". Entrada-Salida: un par.metro de entrada0salida es id!ntico a un par.metro de salida& con
una eCcepcin: el procedimiento (ue se llam espera una variable a la (ue *ace re$erencia
el par.metro contenga datos. 4ambi!n se espera (ue el procedimiento modi$i(ue la
variable a trav!s del apuntador.
Ejemplo: Intercambio de dos enteros
;l siguiente programa intercambia el contenido de dos enteros de 1# bits. ;l procedimiento
intercambiar tiene dos par.metros de entrada0salida llamados p$al9 ' p$al;& los cuales contienen
las direcciones de los datos (ue se van a intercambiar:
3I34E Eemplo del procedimiento Intercambiar (Intercambiar6asm)
I8!49DE Irvine7.6inc
Intercambiar P-O3O, p)al:*P3- D,O-D, p)alF*P3- D,O-D
6data
Arreglo D,O-D %""""',.""""'
6code
main P-O!
0 2uestra el arreglo antes del intercambio*
mov esi,O$$SE3 Arreglo
mov ec1,. 0 cuenta ( .
mov eb1, 3FPE Arreglo
#85

call Dump2em 0 vacAa los valores del arreglo
I8)O>E Intercambiar, ADD- Arreglo, ADD- BArregloL;C
0 2uestra el arreglo despu^s del intercambio*
call Dump2em
e1it
main E8DP
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Intercambiar P-O! 9SES ea1 esi edi,
p)al:*P3- D,O-D, 0 apuntador al primer entero
p)alF*P3- D,O-D 0 apuntador al segundo entero
0
0 Intercambia los valores de dos enteros de 7. bits
0 Devuelve* nada
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
mov esi,p)al: 0 obtiene los apuntadores
mov edi,p)alF
mov ea1,BesiC 0 obtiene el primer entero
1c'g ea1,BediC 0 lo intercambia con el segundo
mov BesiC,ea1 0 sustitu5e el primer entero
ret 0 P-O! genera -E3 #
Intercambiar E8DP
E8D main
Los dos par.metros en el procedimiento Intercambiar& p$al9 ' p$al;& son par.metros de entrada0
salida. =us valores eCistentes entran al procedimiento& ' sus nuevos valores tambi!n salen del
procedimiento. -omo estamos usando 5RA- son par.metros& el ensamblador cambia la
instruccin R;4 al $inal de intercambiar a RE- > +suponiendo (ue =4@-/LL es la convencin de
llamadas,.
Creacin de programas con varios mdulos
#86

Los arc*ivos de cdigo eCtenso son di$%ciles de manipular ' lentos para ensamblarse. 5odemos
dividir un solo arc*ivo en varios arc*ivos de inclusin& pero la modi$icacin a cual(uiera de los
arc*ivos de cdigo $uente de todas maneras re(uerir%a (ue se vuelvan a ensamblar todos los
arc*ivos. Dn mejor m!todo es dividir un programa en mdulos +unidades ensambladas,. -ada
mdulo se ensambla de manera independiente& por lo (ue un cambio en el cdigo de $uente de un
mdulo slo re(uiere (ue se vuelva a ensamblar ese mdulo individual. ;l enlazador combina
todos los mdulos ensamblados +arc*ivos ABK, en un solo arc*ivo ejecutable con bastante rapidez.
5ara enlazar grandes cantidades de mdulos objeto se re(uiere muc*o menos tiempo (ue
ensamblar el mismo n)mero de arc*ivos de cdigo de $uente.
a' dos m!todos generales para crear varios mdulos: ;l primero es el tradicional& en el (ue se
utiliza la directiva ;Z4;RF& la cual es m.s o menos portable a trav!s de distintos ensambladores
del 8:C86. ;l segundo m!todo es utilizar la directiva avanzada IFVAK; ' 5RA4A de <icroso$t& (ue
simpli$ica las llamadas a procedimientos ' ocultan ciertos detalles de bajo nivel.
8cultar C e7portar nombres de procedimientos
@e manera predeterminada& </=< *ace todos los procedimientos p)blicos& con lo cual se pueden
llamar desde cual(uier otro mdulo dentro del mismo programa. 5odemos rede$inir este
comportamiento mediante el cali$icador 5RIV/4;:
miSub P-O! P-I)A3E
/l *acer los procedimientos privados& utilizamos el principio de encapsulamiento para ocultar los
procedimientos dentro de mdulos ' evitar con$lictos de nombres potenciales& cuando los
procedimientos en distintos mdulos tienen los mismos nombres.
@irectiva A54IAF 5RA-:5RIV/4; Atra manera de ocultar procedimientos dentro de un mdulo de
cdigo $uente es colocar la directiva A54IAF 5RA-:5RIV/4; en la parte superior del arc*ivo. 4odos
los procedimientos se volver.n privados de manera predeterminada. @espu!s& podemos usar la
directiva 5DBLI- para identi$icar cual(uier procedimiento (ue se desee eCportar:
OP3IO8 P-O!*P-I)A3E
P9E4I! 2iSub
La directiva 5DBLI- recibe una lista de nombres delimitados por comas:
P9E4I! sub%,sub.,sub7
@e manera alternativa& podemos designar procedimientos individuales como p)blicos:
miSub P-O! P9E4I!
6
miSub E8DP
#87

=i utilizamos A54IAF 5RA-:5RIV/4; en el mdulo de arran(ue de nuestro programa& debemos
asegurarnos de asignar nuestro procedimiento de arran(ue +main, como 5DBLI-& o el cargador del
sistema operativo no podr. encontrarlo. 5or ejemplo&
main P-O! P9E4I!
Llamadas a procedimientos e7ternos
La directiva ;Z4;RF& (ue se utiliza al llamar a un procedimiento (ue est. $uera del mdulo&
identi$ica el nombre ' el tamaEo del marco de pila de ese procedimiento. ;l siguiente ejemplo
llama a sub1& (ue se encuentra en un mdulo eCterno:
I8!49DE Irvine7.6inc
E:3E-8 Sub%Z"*P-O!
6code
main P-O!
call sub%Z"
e1it
main E8DP
E8D main
-uando el ensamblador descubre (ue $alta un procedimiento en un arc*ivo de cdigo $uente
+identi$icado mediante una instruccin -/LL,& su comportamiento predeterminado es generar un
mensaje de error. ;n vez de ello ;Z4;RF indica al ensamblador (ue debe crear una direccin en
blanco para el procedimiento. ;l enlazador resuelve la direccin $altante al crear el arc*ivo
ejecutable del programa.
;l su$ijo In al $inal del nombre un procedimiento identi$ica el espacio total de la pila utilizando los
par.metros declarados. =i se utiliza la directiva 5RA- b.sica sin par.metros declarados& el su$ijo en
cada nombre de procedimiento en ;Z4;RF ser. I#. =i se declara un procedimiento usando la
directiva 5RA-& debemos agregar 3 b'tes por cada par.metro. =upongamos (ue declaramos a
+umar,os con dos par.metros tipo doble palabra:
SumarDos P-O!,
val%*D,O-D
val.*D,O-D
D
SumarDos E8DP
#88

La correspondiente directiva ;Z4;RF es E9-ER* +umar,osI>:!R8C. =i se planea llamar a
=umar@os mediante IFVAK;& se debe usar la directiva 5RA4A en vez de ;Z4;RF:
SumarDos P-O3O,
val%*D,O-D,
val.*D,O-D
Bso de variables C s&mbolos a travFs de los l&mites de los mdulos
E7portacin de variables C s&mbolos
@e manera predeterminada& las variables ' los s%mbolos son privados para los mdulos en los (ue
se de$inen. 5odemos utilizar la directiva 5DBLI- para eCportar nombres espec%$icos& como en el
siguiente ejemplo:
P9E4I! cuenta, SI2%
SI2% ( %"
6data
cuenta D,O-D "
Acceso a las variables C s&mbolos e7ternos
5odemos utilizar la directiva ;Z4;RF para acceder a las variables ' s%mbolos de$inidos en mdulos
eCternos:
E:3E-8 nombre * tipo
5ara los s%mbolos +de$inidos con ;_D ' M,& tipo debe ser /B=. 5ara variables& tipo puede ser un
atributo de de$inicin de datos como BJ4;& >AR@& @>AR@ o =@>AR@& inclu'endo 54R. e a(u%
algunos ejemplos:
E:3E-8 uno*,O-D, dos*SD,O-D, tres*P3- EF3E, cuatro*AES
Bso de un arc6ivo I*CLB,E con E9-ER*,E@
</=< cuenta con la )til directiva llamada ;Z4;RF@;2& la cual sustitu'e tanto a 5DBLI- como a
;Z4;RF. 5uede colocarse en un arc*ivo de teCto ' copiarse en cada uno de los mdulos del
programa& mediante el uso de la directiva IF-LD@;. 5or ejemplo& vamos a de$inir un arc*ivo
llamado vars-inc (ue contiene la siguiente declaracin:
0 vars6inc
E:3E-8DE$ cuenta*D,O-D, SI2*AES
#89

/*ora vamos a crear un arc*ivo de cdigo de $uente llamado sub1-asm& (ue contenga a cuenta '
+I%1& ' una instruccin IF-LD@; para copiar vars.inc al $lujo de compilacin.
3I34E sub%6asm
67#/
6model flat,S3D!A44
I8!49DE vars6inc
SI2% ( %"
6data
cuenta D,O-D "
E8D
-omo !ste no es el mdulo de arran(ue del programa& omitimos una eti(ueta de punto de
entrada al programa en la directiva ;F@& ' no necesitamos declarar una pila en tiempo de
ejecucin.
/ continuacin& vamos a crear un mdulo llamado main.asm (ue inclu'a a vars.inc ' *aga
re$erencia a cuenta ' =I<":
3I34E main6asm
I8!49DE Irvine7.6inc
I8!49DE )ars6inc
6code
main P-O!
mov cuenta,."""'
mov ea1,SI2%
e1it
main E8DP
E8D main
;ste mdulo contiene una pila en tiempo de ejecucin& (ue se declara con la directiva .=4/-K
dentro de Irvine1#.inc& tambi!n de$ine el punto de entrada del programa en la directiva ;F@.
Ejemplo: programa +umaArreglo
#9:

;l programa >uma=rreglo& es un programa (ue puede separarse $.cilmente en mdulos. 5ara un
breve repaso del diseEo de programa& vamos a analizar el diagrama de estructura.

Los rect.ngulos sombreados se re$ieren a los procedimientos en la biblioteca Irvine. ;l
procedimiento main llama a !edirEntero& (ue a su vez llama a >rite=tring ' ReadInt. 5or lo
general& es m.s sencillo llevar la cuenta de los diversos arc*ivos en un programa con varios
mdulos si creamos un directorio separado en el disco para los arc*ivos.



P 0adena, 7 9rreglo, P 0adena, 7 9rreglo, P 0adena, 7 9rreglo, P 0adena, 7 9rreglo,
#n(roduccin #n(roduccin #n(roduccin #n(roduccin
!i aprendemo, a proce,ar cadena, 7 arreglo, con eficiencia8 podremo, dominar el Brea mB,
comAn de op(imi=acin de cdigo/ 3o, e,(udio, *an demo,(rado .ue la ma7or-a de lo,
programa, invier(en P&f de ,u (iempo e>ecu(ando el 1&f de ,u cdigo/ !in duda8 el 1&f
ocurre con frecuencia en lo, ciclo,8 7 D,(o, ,e re.uieren al proce,ar cadena, 7 arreglo,/ 6n
e,(e cap-(ulo mo,(raremo, la, (Dcnica, para proce,ar cadena, 7 arreglo,8 con el o'>e(ivo de
e,cri'ir cdigo eficien(e/
6mpe=aremo, con la, in,(ruccione, primi(iva, de cadena op(imi=ada, de #n(el di,e@ada, para
mover8 comparar8 cargar 7 almacenar 'lo.ue, de da(o,/ 9 con(inuacin pre,en(aremo, vario,
procedimien(o, para el mane>o de cadena, en la 'i'lio(eca #rvine32/ !u, implemen(acione,
,on 'a,(an(e ,imilare, al cdigo .ue podr-amo, ver en una implemen(acin de la 'i'lio(eca de
cadena, e,(Bndar de 0/
Programa de
,uma (main)
0lr,cr Pedir6n(ero,
;ri(e!(ring <ead#n(
!uma9rreglo 4o,(rar!uma
;ri(e!(ring ;ri(e#n(
#9"

#n,(ruccione, primi(iva, de cadena, #n,(ruccione, primi(iva, de cadena, #n,(ruccione, primi(iva, de cadena, #n,(ruccione, primi(iva, de cadena,
6l con>un(o de in,(ruccione, #9:32 (iene cinco grupo, de in,(ruccione, para proce,ar arreglo,
de '7(e,8 pala'ra, 7 do'le, pala'ra,/ 9un.ue ,e llaman primitivas de cadenas8 no ,e limi(an a
lo, arreglo, de cadena,/ 0ada in,(ruccin en la ,iguien(e (a'la u(ili=a en forma impl-ci(a a 6!#8
65# o am'o, regi,(ro, para direccionar la memoria/ 3a, referencia, al acumulador implican el
u,o de 938 9H o 69H8 dependiendo del (ama@o de lo, da(o, de la in,(ruccin/ 3a, primi(iva, de
cadena, ,e e>ecu(an con eficiencia8 7a .ue ,e repi(en e incremen(an lo, -ndice, de lo, arreglo,
de manera au(omB(ica/
#n,(ruccione, primi(iva, de cadena,/
#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
4+!"8 4+!;8 4+!5 4over da(o, de cadena 4over da(o, de cadena 4over da(o, de cadena 4over da(o, de cadena2 copia lo, da(o, de la
memoria direccionada por 6!# a la memoria
direccionada por 65#
04P!"8 04P!;8 04P!5 0omparar cadena,2 0omparar cadena,2 0omparar cadena,2 0omparar cadena,2 compara el con(enido de
do, u'icacione, de memoria direccionada,
por 6!# 7 65#
!09!"8 !09!;8 !09!5 61plorar cadena2 61plorar cadena2 61plorar cadena2 61plorar cadena2 compara el acumulador (938
9H o 69H) con el con(enido de la memoria
direccionada por 65#
!T!"8 !T!;8 !T!5 9lmacenar da(o, de cadena2 9lmacenar da(o, de cadena2 9lmacenar da(o, de cadena2 9lmacenar da(o, de cadena2 almacena el
con(enido del acumulador en la memoria
direccionada por 65#
35!"8 35!;8 35!5 0argar acumulador de,de cadena2 0argar acumulador de,de cadena2 0argar acumulador de,de cadena2 0argar acumulador de,de cadena2 carga la
memoria direccionada por 6!# al acumulador

6n lo, programa, en modo pro(egido8 6!# e, de manera au(omB(ica un de,pla=amien(o en el
,egmen(o direccionado por 5!2 7 65# e, de manera au(omB(ica un de,pla=amien(o en el
,egmen(o di,eccionado por 6!8 5! 7 6! ,iempre ,e e,(a'lecen en el mi,mo valor8 7 no ,e
pueden cam'iar/ Por o(ro lado8 en el modo direccionamien(o real8 lo, programadore, de 9!4
manipulan con frecuencia a 6! 7 5!/




;n el modo direccionamiento real& las primitivas de cadenas usan los registros =I ' @I para
direccionar la memoria. =I es un desplazamiento desde @=& ' @I es un desplazamiento desde ;=. 5or
lo general& ;= se establece al mismo valor de segmento (ue @=& al principio de main:
main P-O!
mov a1,Zdata 0 obtiene direccionamiento del seg de datos
mov ds,a1 0 inicializa DS
mov es,a1 0 inicializa ES
#9#




Uso de un prefijo de repeticin Por ,- ,ola8 una in,(ruccin de primi(iva de cadena ,lo
proce,a un ,olo valor de memoria o un par de valore,/ !i agregamo, un prefijo de repeticin8
la in,(ruccin ,e repi(e u,ando a 60H como con(ador/ 6l prefi>o de repe(icin no, permi(e
proce,ar un arreglo comple(o median(e una ,ola in,(ruccin/ !e u(ili=an lo, ,iguien(e, prefi>o,
de repe(icin2
<6P <epi(e mien(ra, .ue 60H V &
<6PI8 <6P6 <epi(e mien(ra, la 'andera 0ero e,(D en uno 7 60H V &
<6PNI8 <6PN6 <epi(e mien(ra, la 'andera 0ero e,(D en cero 7 60H V &

jemplo2 copiar una cadena 6l ,iguien(e e>emplo8 4+!" ,e mueve 1& '7(e, a par(ir de
cadena1 cadena1 cadena1 cadena18 *acia cadena2 cadena2 cadena2 cadena2/ 6l prefi>o de repe(icin primero evalAa 60H V & an(e, de e>ecu(ar la
in,(ruccin 4+!"/
!i 60H R &8 la in,(ruccin ,e ignora 7 el con(rol pa,a a la ,iguien(e l-nea en el programa/ !i 60H
V &8 60H ,e decremen(a 7 la in,(ruccin ,e repi(e2
cld [ 'orra la 'andera 5ireccin
mov e,i8FF!6T cadena1 [ 6!# apun(a al origen
mov edi8FF!6T cadena2 [ 65# apun(a al de,(ino
mov ec181& [ e,(a'lece el con(ador a 1&
rep mov,' [ ,e mueve 1& '7(e,
6!# 7 65# ,e incremen(an de manera au(omB(ica cuando 4+!" ,e repi(e/ 6,(e
compor(amien(o ,e con(rola median(e la 'andera 5ireccin de la 0PC
$andera Direccin 3a in,(ruccione, primi(iva, de cadena, incremen(an o decremen(an a 6!#
7 65#8 ,egAn el e,(ado de la 'andera 5ireccin ((a'la ,iguien(e)/ 6,(a 'andera puede
modificar,e en forma e1pl-ci(a u,ando la, in,(ruccione, 035 7 !T52
035 [ 'orra la 'andera 5ireccin (direccin de avance)
!T5 [ ac(iva la 'andera de direccin (direccin de
re(roce,o)
#91

!i olvidamo, ac(ivar la 'andera 5ireccin an(e, de una in,(ruccin primi(iva de cadena8
podemo, (ener grande, pro'lema,/ 6l cdigo re,ul(an(e ,e e>ecu(a de manera incon,i,(en(e8
,egAn el e,(ado ar'i(rario de la 'andera 5ireccin/
C,o de la 'andera 5ireccin en in,(ruccione, primi(iva, de cadena/
+alor de la 'andera 5ireccin +alor de la 'andera 5ireccin +alor de la 'andera 5ireccin +alor de la 'andera 5ireccin 6fec(o ,o're 6!# 7 65# 6fec(o ,o're 6!# 7 65# 6fec(o ,o're 6!# 7 65# 6fec(o ,o're 6!# 7 65# !ecuencia de direccione, !ecuencia de direccione, !ecuencia de direccione, !ecuencia de direccione,
0ero !e incremen(a "a>o:al(o
Cno !e decremen(a 9l(o:'a>o

4+!"8 4+!; 4+!"8 4+!; 4+!"8 4+!; 4+!"8 4+!; 7 4+!5 7 4+!5 7 4+!5 7 4+!5
3a in,(ruccin 4+!"8 4+!; 7 4+!5 copian da(o, de la u'icacin de memoria a la .ue
apun(a 6!#8 *a,(a la u'icacin de memoria a la .ue apun(an 65#/ 3o, do, regi,(ro, ,e
incremen(an o decremen(an en forma au(omB(ica (,egAn el valor de la 'andera 5ireccin)2
4+!" 4ueve (copia) '7(e,
4+!; 4ueve (copia) pala'ra,
4+!5 4ueve (copia) do'le, pala'ra,

Podemo, u(ili=ar un prefi>o de repe(icin con 4+!"8 4+!; 7 4+!5/ 3a 'andera 5ireccin
de(ermina ,i 6!# 7 65# ,e van a incremen(ar o decremen(ar/ 6l (ama@o del incremen(o o
decremen(o ,e mue,(ra en la ,iguien(e (a'la2
#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin +alor .ue ,e agrega o re,(a a 6!# 7 +alor .ue ,e agrega o re,(a a 6!# 7 +alor .ue ,e agrega o re,(a a 6!# 7 +alor .ue ,e agrega o re,(a a 6!# 7
65# 65# 65# 65#
4+!" 1
4+!; 2
4+!5 4
jemplo1 copiar arreglo de dobles palabras !upongamo, .ue .ueremo, copiar 2& en(ero,
(ipo do'le pala'ra8 de origen origen origen origen a de,(ino de,(ino de,(ino de,(ino/ Cna ve= .ue ,e copia el arreglo8 6!# 7 65# apun(an una
po,icin (4 '7(e,) mB, le>o, del final de cada arreglo2
6data
origen D,O-D ." D9P("$$$$$$$$')
destino D,O-D ." D9P(N)
#93

6code
cld 0 direccin ( avance
mov ec1, 4E8S3\O$ origen 0 establece contador -EP
mov esi, O$$SE3 origen 0 ESI apunta al origen
mov edi, O$$SE3 destino 0 EDI apunta al destino
rep movsd 0 copia dobles palabras
04P!"8 04P!; 7 04P!5 04P!"8 04P!; 7 04P!5 04P!"8 04P!; 7 04P!5 04P!"8 04P!; 7 04P!5
3a, in,(ruccione, 04P!"8 04P!; 7 04P!5 comparan un operando de memoria al .ue
apun(a 6!#8 con un operando de memoria al .ue apun(a 65#2
04P!" 0ompara '7(e,
04P!; 0ompara pala'ra,
04P!5 0ompara do'le,
pala'ra,
Podemo, u,ar un prefi>o de repe(icin con 04P!"8 04P!; 7 04P!5/ 3a 'andera 5ireccin
de(ermina el incremen(o o decremen(o de 6!# 7 65#/












2orma eCpl%cita de -<5=: en otra $orma de la instruccin de comparacin de cadenas
llamada $orma eCpl%cita& se suministran dos operandos indirectos. ;l operando 54R
aclara los tamaEos de los operandos. 5or ejemplo:
cmps D,O-D P3- BesiC,BediC
5ero -<5= es engaEoso& 'a (ue el ensamblador nos permite suministrar operandos
errneos:
cmps D,O-D P3- Bea1C,Beb1C
=in importar (u! operandos se utilicen& -<5= compara el contenido de la memoria a
la (ue apunta ;=I con la memoria (ue apunta ;@I. Abservamos (ue el orden de los
operandos -<5= es opuesta a la instruccin -<5=& m.s conocida:
!2P destino, origen
!2PS origen, destino
e a(u% otra $orma de recordar la di$erencia: -<5 implica restar el origen del destino&
-<5= implica restar el destino del origen. =e sugiere evitar el uso de -<5= ' utilizar
las versiones espec%$icas +-<5=B& -<5=>& -<5=@,.
#95

jemplo1 comparacin de dobles palabras !upongamo, .ue de,eamo, comparar un par
de do'le, pala'ra, median(e el u,o de 04P!5/ 6n el ,iguien(e e>emplo8 origen origen origen origen (iene un valor
menor .ue de,(ino de,(ino de,(ino de,(ino/ 0uando ,e e>ecu(a F98 el ,al(o condicional no ,e lleva a ca'o[ en ve= de ello
,e e>ecu(a la in,(ruccin F4P2
6data
origen D,O-D %.7;'
destino D,O-D </M#'
6code
mov esi O$$SE3 origen
mov edi O$$SE3 destino
cmpsd 0 compara dobles palabras
a 4% 0 salta si origen X destino
mp 4. 0 salta, 5a @ue origen W( destino
Para comparar varia, do'le, pala'ra,8 de'emo, 'orrar la 'andera 5ireccin8 iniciali=amo, 60H
como con(ador 7 u(ili=amo, un prefi>o repe(ido con 04P!52
mov esi, O$$SE3 origen
mov edi, O$$SE3 destino
cld
mov ec1,4E8S3\O$ origen 0 contador de repeticin
repe cmpsd 0 repite mientras sea igual
6l prefi>o <6P6 repi(e la comparacin e incremen(a a 6!# 7 65# de manera au(omB(ica *a,(a
.ue 60H ,ea igual a cero8 o *a,(a .ue un par de do'le, pala'ra, ,ea di,(in(o/
6>emplo2 comparacin de do, cadena, 6>emplo2 comparacin de do, cadena, 6>emplo2 comparacin de do, cadena, 6>emplo2 comparacin de do, cadena,
Por lo general8 la, cadena, ,e comparan relacionando carac(ere, individuale, en ,ecuencia8
empe=ando al principio de la, cadena,/ Por e>emplo8 lo, primero, (re, carac(ere, de ]99"0W 7
]99""W ,on idDn(ico,/ 6n la cuar(a po,icin8 el cdigo 9!0## para ]0W (en la primera cadena) e,
ma7or .ue el cdigo 9!0## para ]"W (en la ,egunda cadena)/ Por ende8 la primera cadena ,e
con,idera ma7or .ue la ,egunda/ 5e manera ,imilar8 ,i la, cadena, ]99"W 7 ]99""W ,e
comparan8 la ,egunda cadena (iene un valor mB, grande/ 3o, primero, carac(ere, ,on
idDn(ico,8 pero e1i,(e un carBc(er adicional en la ,egunda cadena/
#96

6l ,iguien(e programa u(ili=a 04P!" para comparar do, cadena, de igual longi(ud/ 6l prefi>o
<6P6 *ace .ue 04P!"8 con(inAe incremen(ando a 6!# 7 65#8 7 .ue compare lo, carac(ere, uno
a uno *a,(a encon(rar una diferencia en(re la, do, cadena,2
3I34E !omparacin de cadenas (!mpsb6asm)
0 Este programa utiliza a !2PSE para comprobar dos cadenas
0 de la misma longitud6
I8!49DE Irvine7.6inc
6data
origen EF3E O2A-3I8 O
dest EF3E O2A-3I8E[P
cad% EF3E O4a cadena de origen es mIs c'icaP,"d',"a',"
cad. EF3E O4a cadena de origen no es mIs c'icaP,"d',"a',"
6code
main P-O!
cld 0 direccin ( avance
mov esi,O$$SE3 origen
mov edi,O$$SE3 dest
mov ec1,4E8S3\O$ origen
repe cmpsb
b origenTmasTc'ico
mov ed1,O$$SE3 cad.
mp listo
origenTmasTc'ico*
mov ed1,O$$SE3 cad%
listo*
call ,riteString
e1it
#97

main E8DP
E8D main
9l u(ili=ar lo, da(o, de prue'a proporcionado,8 aparece el men,a>e ]3a cadena de origen e,
ma, c*icaW/ 6!# 7 65# .uedan apun(ando a una po,icin mB, le>o, del pun(o en el .ue ,e
encon(r .ue la, do, cadena, difer-an/ !i la, cadena, *u'ieran ,ido idDn(ica,8 6!# 7 65#
*u'ieran apun(ado una po,icin mB, le>o, del final de ,u, re,pec(iva, cadena,/
3a comparacin de do, cadena, con 04P!" ,lo funciona cuando ,on de la mi,ma longi(ud/
6,(o e1plica por .uD era nece,ario en el e>emplo an(erior rellenar ]49<T#NW con e,pacio, a la
derec*a8 para .ue fuera de la mi,ma longi(ud .ue ]49<T#N6IW/ 6l proce,o de rellenar cadena,
con e,pacio, impone una re,(riccin para el mane>o de la, cadena,/
!09!"8 !09!;8 !09!"8 !09!;8 !09!"8 !09!;8 !09!"8 !09!;8 !09!5 !09!5 !09!5 !09!5
3a, in,(ruccione, !09!"8 !09!; 7 !09!5 comparan un valor en 93G9HG69H con un '7(e8
pala'ra o do'le pala'ra8 re,pec(ivamen(e8 la cual e,(B direccionada por 65#/ 3a, in,(ruccione,
,on A(ile, cuando ,e 'u,ca un valor individual en una cadena o arreglo/ !i ,e com'inan con el
prefi>o <6P6 (o <6PI)8 la cadena o arreglo ,e e1plora mien(ra, 60H V &8 7 el valor en 93G9HG69H
coincida con cada valor ,u',iguien(e en memoria/ 6l prefi>o <6PN6 e1plora *a,(a .ue
93G9HG69H coincida con un valor en memoria8 o cuando 60H R &/
xplorar en busca de un car*cter +ue coincida 6n el ,iguien(e e>emplo 'u,camo, la le(ra F
en la cadena alfa alfa alfa alfa/ !i ,e encuen(ra la le(ra8 65# apun(a una po,icin mB, allB del carBc(er .ue
coincidi/ !i no ,e encuen(ra la le(ra FNI (ermina el programa2
6data
alfa EF3E OAE!DE$S\P,"
6code
mov edi, O$$SE3 alfa 0 EDI apunta a la cadena
mov al,H$H 0 busca la letra $
mov ec1, 4E8S3\O$ alfa 0 establece la cuenta de b?s@ueda
cld 0 direccin ( avance
repne scasb 0 repite mientras no sea igual
nz salir 0 termina si no se encontr la letra
dec edi 0 se encontr* retrocede EDI
FNI ,e agreg de,puD, del ciclo para evaluar la po,i'ilidad de .ue el ciclo ,e de(uviera de'ido
a 60H R &8 7 .ue no ,e encon(rara el carBc(er en 93/
#98

!T!"8 !T!; 7 !T!5 !T!"8 !T!; 7 !T!5 !T!"8 !T!; 7 !T!5 !T!"8 !T!; 7 !T!5
3a, in,(ruccione, !T!"8 !T!; 7 !T!5 almacenan el con(enido de 93G9HG69H8
re,pec(ivamen(e8 en el de,pla=amien(o al .ue apun(a 65#/ 65# ,e incremen(a o decremen(a
con 'a,e en el e,(ado de la 'andera 5ireccin/ 0uando ,e u(ili=a con el prefi>o <6P8 e,(a,
in,(ruccione, ,on A(ile, para rellenar (odo, lo, elemen(o, de una cadena o arreglo con un ,olo
valor/ Por e>emplo8 el ,iguien(e cdigo iniciali=a cada '7(e en cadena1 cadena1 cadena1 cadena1 con &FF*2
6data
!uenta ( %""
cadena% EF3E !uenta D9P(N)
6code
mov al, "$$' 0 valor a guardar
mov edi,O$$SE3 cadena% 0 EDI apunta al destino
mov ec1,!uenta cuenta de caracteres
cld 0 direccin ( avance
rep stosb 0 llena con el contenido de A4
35!"8 35!; 7 35!5 35!"8 35!; 7 35!5 35!"8 35!; 7 35!5 35!"8 35!; 7 35!5
3a, in,(ruccione, 35!"8 35!; 7 35!5 cargan un '7(e o pala'ra de memoria en 6!#8 *acia
93G9HG69H8 re,pec(ivamen(e/ 6!# ,e incremen(a o decremen(a ,egAn el e,(ado de la 'andera
5ireccin/ 6l prefi>o <6P ,e u(ili=a rara, vece, con 35!8 7a .ue cada nuevo valor .ue ,e carga
en el acumulador ,o're,cri'e ,u con(enido an(erior/ 6n ve= de ello8 35! ,e u(ili=a para cargar
un ,olo valor/ 6n el ,iguien(e e>emplo8 35!" ,u,(i(u7e a la, do, in,(ruccione, ,iguien(e,
(,uponiendo .ue la 'andera 5ireccin e,(B en cero)2
mov al,BesiC 0 mueve b5te 'acia A4
inc esi 0 apunta al siguiente b5te
jemplo de multiplicacin de arreglos 6l ,iguien(e programa mul(iplica cada elemen(o de
un arreglo de do'le, pala'ra, por un valor con,(an(e/ 35!5 7 !T!5 (ra'a>an en con>un(o2
3I34E 2ultiplicacin de un arreglo (2ult6asm)
0 este programa multiplica cada elemento de un arreglo
0 de enteros de 7. bits por un valor constante6
I8!49DE Irvine7.6inc
#99

6data
arreglo D,O-D %,.,7,;,<,/,M,#,+,%" 0 datos de prueba
multiplicador D,O-D %" 0 datos de prueba
6code
main P-O!
cld
mov esi,O$$SE3 arreglo 0 Andice de origen
mov edi,esi 0 Andice de destino
mov ec1, 4E8S3\O$ arreglo 0 contador de ciclo
4%* lodsd 0 copia BESIC 'acia EA:
mul multiplicador 0 multiplica por un valor
stosd 0 guarda EA: en BEDIC
loop 4%
e1it
main E8DP
E8D main
9rreglo, 'idimen,ionale, 9rreglo, 'idimen,ionale, 9rreglo, 'idimen,ionale, 9rreglo, 'idimen,ionale,
rdenamien(o de fila 7 rdenamien(o de fila 7 rdenamien(o de fila 7 rdenamien(o de fila 7 columna, columna, columna, columna,
5e,de la per,pec(iva de un programador de lengua>e en,am'lador8 un arreglo 'idimen,ional
e, una a',(raccin de al(o nivel de un arreglo unidimen,ional/ 3o, lengua>e, de al(o nivel
,eleccionan uno de do, mD(odo, para ordenar la, fila, 7 columna, en memoria2 orden por filas
Dro&6majorE 7 orden por columnas Dcolumn6majorE/ 0uando ,e u(ili=a el orden por fila, (el mB,
comAn)8 la primera fila aparece al principio del 'lo.ue de memoria/ 6l Al(imo elemen(o en la
primera fila va ,eguido en la memoria por el primer elemen(o de la ,egunda fila/ 0uando ,e
u(ili=a el orden por columna,8 lo, elemen(o, en la primera columna aparecen al principio del
'lo.ue de memoria/ 6l Al(imo elemen(o en la primera columna va ,eguido en la memoria por el
primer elemen(o de la ,egunda columna/
rden por fila, 7 por columna,
9rreglo lgico2
1::

1& 2& 3& 4& 5&
6& 7& 8& P& 9&
"& 0& 5& 6& F&

rden por fila,
1& 2& 3& 4& 5& 6& 7& 8& P& 9& "& 0& 5& 6& F&

rden por columna,
1& 6& "& 2& 7& 0& 3& 8& 5& 4& P& 6& 5& 9& F&

!i ,e implemen(a un arreglo 'idimen,ional en el lengua>e en,am'lador8 podemo, elegir
cual.uiera de lo, do, mD(odo, de ordenamien(o/
6l con>un(o de in,(ruccione, #9:32 inclu7e do, (ipo, de operando, ('a,e:-ndice 7 'a,e:-ndice:
de,pla=amien(o)8 am'o, adecuado, para la, aplicacione, con arreglo,/ 61aminaremo, amo, 7
mo,(raremo, e>emplo, de cmo podemo, u(ili=arlo, de forma efec(iva/
perando, 'a,e perando, 'a,e perando, 'a,e perando, 'a,e: :: :-ndice -ndice -ndice -ndice
Cn operando 'a,e:-ndice ,uma lo, valore, de do, regi,(ro, (llamado, 'a,e e -ndice)8
produciendo una direccin de de,pla=amien(o2
Bbase L AndiceC
3o, corc*e(e, ,on nece,ario,/ 6n modo de 32 'i(,8 cual.uier regi,(ro de prop,i(o general de
32 'i(, puede ,er regi,(ro 'a,e o -ndice/ 6n modo de 16 'i(,8 el regi,(ro de'e ,er "H o "P/ (!e
recomienda evi(ar u,ar "P o 6"P8 e1cep(o al direccionar la pila)/ 6l regi,(ro -ndice de ,er !# o
5#/ $e a.u- un e>emplo de varia, com'inacione, en modo de 32 'i(,2
6data
arreglo ,O-D %"""',."""',7"""'
6code
mov eb1,O$$SE3 arreglo
mov esi,.
mov a1,Beb1LesiC 0 A: ( ."""'
1:"


mov edi,O$$SE3 arreglo
mov ec1,;
mov a1,BediLec1C 0 A: ( 7"""'

mov ebp,O$$SE3 arreglo
mov esi,"
mov ea1,BebpLesiC 0 A: ( %"""'
Arreglo bidimensional 9l acceder a un arreglo 'idimen,ional en orden por fila,8 el
de,pla=amien(o de fila ,e guarda en el regi,(ro 'a,e 7 el de,pla=amien(o de columna, e,(B en
el regi,(ro -ndice/ Por e>emplo8 la ,iguien(e (a'la (iene (re, fila, 7 cinco columna,2
tablaE EF3E %"', ."', 7"', ;"', <"'
3am$ila ( (U K tablaE)
EF3E /"', M"', #"', +"', "A'
EF3E "E"', "!"', "D"', "E" "$"'
3a (a'la e,(B en orden por fila, 7 el valor TamFila con,(an(e lo calcula el en,am'lador como el
nAmero de '7(e, en cada fila de la (a'la/ !upongamo, .ue de,eamo, locali=ar una en(rada
e,pec-fica en la (a'la8 u,ando coordenada, de fila 7 de columna/ !uponiendo .ue la,
coordenada, (ienen 'a,e &8 la en(rada en la fila 18 columna 2 con(iene 8&*/ 6,(a'lecemo,
6"H al de,pla=amien(o de la (a'la8 ,umamo, (TamFila J -ndiceSfila) para calcular el
de,pla=amien(o de la fila 7 e,(a'lecemo, 6!# al -ndice de columna2
AndiceTfila ( %
AndiceTcolumna ( .
mov eb1,O$$SE3 tablaE 0 desplazamiento de la tabla
add eb1,3am$ila & AndiceTfila 0 desplazamiento de la fila
mov esi,AndiceTcolumna
mov al,Beb1 L esiC 0 A4 ( #"'
0Blculo de la ,uma de una fila 0Blculo de la ,uma de una fila 0Blculo de la ,uma de una fila 0Blculo de la ,uma de una fila
6l direccionamien(o 'a,e -ndice ,implifica muc*a, vece, (area, a,ociada, con lo, arreglo,
'idimen,ionale,/ Por e>emplo8 podr-amo, ,umar lo, elemen(o, en una fila .ue per(ene=can a
1:#

una ma(ri= de en(ero,/ 6l ,iguien(e procedimien(o llama calcS,umaSfila8 calcula la ,uma de
una fila ,eleccionada8 en una ma(ri= de en(ero, de 8 'i(,2
calcTsumaTfila P-O! uses eb1 ec1 ed1 esi
0 !alcula la suma de una fila en una matriz de b5tes6
0 -ecibe* EE: ( desplazamiento de la tabla, EA: ( Andice de fila,
0 E!: ( tamaJo de la fila en b5tes6
0 Devuelve* EA: guarda la suma6
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
mul ec1 * Andice de fila & tamaJo de fila
add eb1,ea1 0 desplazamiento de fila
mov ea1," 0 acumulador
mov esi," 0 Andice de columna
4%* movz1 ed1, EF3E P3-Beb1 L esiC 0 obtiene un b5te
add ea1,ed1 0 lo suma al acumulador
inc esi 0 siguiente b5te de la fila
loop 4%
ret
calcTsumaTfila E8DP
!e re.uiri el u,o de "KT6 PT< para aclarar el (ama@o del operando de la in,(ruccin 4+IH/
Fac(ore, Fac(ore, Fac(ore, Fac(ore, de e,cala de e,cala de e,cala de e,cala
!i ,e e,cri'e cdigo para un arreglo de valore, (ipo ;<58 de'emo, mul(iplicar el operando
por un fac(or de e,cala de 2/ 6l ,iguien(e e>emplo locali=a el valor en la fila 18 columna2/
tabla, EF3E %"', ."', 7"', ;"', <"'
3am$ila, ( (U K tablaE)
EF3E /"', M"', #"', +"', "A'
EF3E "E"', "!"', "D"', "E" "$"'
AndiceTfila ( %
1:1

AndiceTcolumna ( .
mov eb1,O$$SE3 tabla, 0 desplazamiento de la tabla
add eb1,3am$ila, & AndiceTfila 0 desplazamiento de la fila
mov esi,AndiceTcolumna
mov a1,Beb1 L esi & 3FPE tabla,C 0 A: ( #"'
6l fac(or de e,cala .ue ,e u(ili=a en e,(e e>emplo (TKP6 (a'la;) e, igual a 28 de manera
,imilar8 *a7 .ue u(ili=ar un fac(or de e,cala de 4 ,i el arreglo con(iene do'le, pala'ra,/
perando, 'a,e perando, 'a,e perando, 'a,e perando, 'a,e: :: :-ndi -ndi -ndi -ndice ce ce ce: :: :de,pla=amien(o de,pla=amien(o de,pla=amien(o de,pla=amien(o
Cn operando 'a,e:-ndice:de,pla=amien(o com'ina un de,pla=amien(o8 un regi,(ro 'a,e8 un
regi,(ro -ndice 7 un fac(or de e,cala opcional para producir una direccin efec(iva/ $e a.u- lo,
forma(o,2
Bbase L Andice L desplazamientoC
desplazamiento L AndiceC
5e,pla=amien(o puede ,er el nom're de la varia'le o e1pre,in con,(an(e/ 6n modo de 32
'i(,8 puede u(ili=ar,e cual.uier regi,(ro de prop,i(o general de 32 'i(, para la 'a,e 7 el -ndice/
6n modo de 16 'i(,8 el operando 'a,e de'e ,er "H o "P 7 el operando -ndice de'e ,er !# o 5#/
3o, operando, 'a,e:-ndice:de,pla=amien(o ,e adap(an mu7 'ien al procedimien(o de arreglo,
'idimen,ionale,/ 6l de,pla=amien(o puede ,er el nom're de un arreglo8 el operando 'a,e
puede guardar el de,pla=amien(o de la fila 7 el operando -ndice puede guardar el
de,pla=amien(o de la columna/
jemplo con arreglo de dobles palabras 6l ,iguien(e arreglo 'idimen,ional guarda (re, fila,
de cinco do'le, pala'ra,2
tablaD D,O-D %"', ."', 7"', ;"', <"'
3am$ila, ( (U K tablaE)
D,O-D /"', M"', #"', +"', "A'
D,O-D "E"', "!"', "D"', "E" "$"'
TamFila e, igual a 2& (14*)/ !uponiendo .ue la, coordenada, e,(Dn con 'a,e cero8 la en(rada
en la fila 18 columna 2 con(iene 8&*/ Para acceder a e,(a en(rada8 e,(a'lecemo, 6"H al -ndice
de fila 7 6!# al -ndice de columna2
mov eb1,3am$ila 0 Andice de fila
mov esi,. 0 Andice de columna
1:3

mov ea1,tablaDBeb1 / esi & 3FPE tablaDC
"A,.ueda 7 ordenamien(o de arreglo, de en(ero, "A,.ueda 7 ordenamien(o de arreglo, de en(ero, "A,.ueda 7 ordenamien(o de arreglo, de en(ero, "A,.ueda 7 ordenamien(o de arreglo, de en(ero,
3o, cien(-fico, de la compu(acin *an inver(ido una gran can(idad de (iempo 7 energ-a para
encon(rar me>ore, forma, de 'u,car 7 ordenar con>un(o, de da(o, ma,ivo,/ !e *a demo,(rado
.ue e, mB, A(il elegir el me>or algori(mo para una aplicacin e,pec-fica .ue comprar una
compu(adora mB, rBpida/ 3a ma7or-a de lo, e,(udian(e, aprenden lo, mD(odo, de 'A,.ueda 7
ordenamien(o u,ando el lengua>e de al(o nivel8 como 0EE 7 Fava/ 6l lengua>e en,am'lador
pre,en(a una per,pec(iva diferen(e para el e,(udio de lo, algori(mo,8 7a .ue no, permi(e ver
lo, de(alle, de implemen(acin de 'a>o nivel/ 6, in(ere,an(e o',ervar .ue uno de lo, au(ore,
de algori(mo, mB, no(a'le, del ,iglo vein(e8 5onald ?nu(*8 u(ili= lengua>e en,am'lador para
,u, e>emplo, de programa, pu'licado,/
3a 'A,.ueda 7 ordenamien(o no, dan la opor(unidad de pro'ar lo, modo, de
direccionamien(o/ 6n e,pecial8 el direccionamien(o inde1ado por la 'a,e re,ul(a ,er A(il8 7a .ue
podemo, apun(ar un regi,(ro (como 6"H) a la 'a,e de un arreglo 7 u(ili=ar o(ro regi,(ro (como
6!#) para inde1ar *acia cual.uier o(ra u'icacin del arreglo/
rdenamien(o de 'ur'u>a rdenamien(o de 'ur'u>a rdenamien(o de 'ur'u>a rdenamien(o de 'ur'u>a
6l ordenamien(o de 'ur'u>a compara pare, de valore, de arreglo, empe=ando en la,
po,icione, & 7 1/ !i lo, valore, comparado, e,(Bn en orden inver,o8 ,e in(ercam'ian/ 3a
,iguien(e figura mue,(ra el progre,o de una e>ecucin (pa,ada) a (ravD, de un arreglo de
en(ero,/
Primera e>ecucin a (ravD, de un arreglo (rdenamien(o de 'ur'u>a)/

5e,puD, de una e>ecucin8 el arreglo aAn no e,(B ordenado8 pero el valor mB, grande ,e
encuen(ra a*ora en la po,icin del -ndice mB, al(o/ 6l ciclo e1(erno empie=a o(ra e>ecucin a
(ravD, del arreglo/ 5e,puD, de n F / e>ecucione,8 ,e garan(i=a .ue el arreglo .uedarB
ordenado/
1:5

6l ordenamien(o de 'ur'u>a funciona 'ien con arreglo, pe.ue@o,8 pero ,e vuelve dema,iado
ineficien(e para lo, arreglo, mB, grande,/ 6, un algori(mo (nO2)8 lo .ue ,ignifica .ue el
(iempo de ordenamien(o ,e incremen(a en forma cuadrB(ica8 en relacin con el nAmero de
elemen(o, del arreglo (n)/ !upongamo,8 por e>emplo8 .ue ,e re.uieren &/1 ,egundo, para
ordenar 1&&& elemen(o,/ 9 medida .ue el nAmero de elemen(o, ,e incremen(a por un fac(or
de 1&8 el (iempo re.uerido para ordenar ,e incremen(a por un fac(or de 1&O2 (1&&)/ 3a
,iguien(e (a'la mue,(ra lo, (iempo, de ordenamien(o para vario, (ama@o, de arreglo,8
,uponiendo .ue pueden ordenar,e 1&&& elemen(o, en &/1 ,egundo,2

Tama@o del arreglo Tama@o del arreglo Tama@o del arreglo Tama@o del arreglo Tiempo (en ,egundo,) Tiempo (en ,egundo,) Tiempo (en ,egundo,) Tiempo (en ,egundo,)
1/&&& &/1
1&/&&& 1&/&
1&&/&&& 1&&&
1/&&&/&&& 1&&/&&& (27878 *ora,)

6l ordenamien(o de 'ur'u>a no ,erB un 'uen mD(odo de ordenamien(o para un arreglo de 1
milln de en(ero,8 7a .ue `,e re.uerir-an mB, de 27 *ora, para (erminara Pero e,(B 'ien para
uno, cuan(o, cien(o, de en(ero,/
!eudocdigo 6, A(il crear una ver,in ,implificada del ordenamien(o de 'ur'u>a8 u,ando
,eudocdigo .ue ,ea ,imilar al lengua>e en,am'lador/ C(ili=ando N NN N para repre,en(ar el (ama@o
del arreglo8 c11 c11 c11 c11 para repre,en(ar el con(ador de ciclo e1(erno 7 c12 c12 c12 c12 para repre,en(ar el
con(ador de ciclo in(erno2
c1% ( 8 K%
='ile (c1% X ")
e
esi ( addr(arreglo)
c1. ( c1%
='ile ( c1. X ")
e
if(arregloBesiC W arregloBesiL;C
intercambiar( arregloBesiC, arregloBesiL;C )
1:6

add esi,;
dec c1.
f
dec c1%
f
%enguaje ensamblador 5el ,eudocdigo podemo, generar con facilidad una implemen(acin
.ue coincida en lengua>e en,am'lador8 colocBndola en un procedimien(o con parBme(ro, 7
varia'le, locale,2
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
OrdenEurbua P-O! 9SES ea1 ec1 esi,
pArreglo* P3- D,O-D 0 apuntador a un arreglo
!uenta* D,O-D 0 tamaJo del arreglo
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
mov ec1, !uenta
dec ec1 0 decrementa la cuenta en %
4%* pus' ec1 0 guarda cuenta del ciclo e1terno
mov esi, pArreglo 0 apunta al primer valor
4.* mov ea1,BesiC 0 obtiene el valor del arreglo
cmp BesiL;C,ea1 0 compara un par de valores
ge 47
1c'g ea1,BesiL;C 0 intercambia el par
mov BesiC,ea1
47* add esi,; 0 mueve ambos apuntadores 'acia adelante
loop 4. 0 ciclo interno
pop ec1 0 obtiene cuenta del ciclo e1terno
loop 4% 0 en cual@uier otro caso, repite el ciclo
e1terno
1:7

4;* ret
OrdenEurbua E8DP
"A,.ueda 'inaria "A,.ueda 'inaria "A,.ueda 'inaria "A,.ueda 'inaria
3a, 'A,.ueda, en lo, arreglo, ,on alguna de la, operacione, mB, comune, en la
programacin ordinaria/ Para un arreglo pe.ue@o (1&&& elemen(o, o meno,)8 e, mB, fBcil
reali=ar una b@s+ueda secuencial8 en la .ue ,e empie=a al principio del arreglo 7 ,e e1amina
cada elemen(o en ,ecuencia8 *a,(a encon(rar uno .ue coincida/ Para un arreglo de n
elemen(o,8 una 'A,.ueda ,ecuencial re.uiere un promedio de nB3 comparacione,/ !i ,e
'u,ca en un arreglo pe.ue@o8 el (iempo de e>ecucin e, m-nimo/ Por o(ro lado8 para 'u,car en
un arreglo de 1 milln de elemen(o, ,e re.uiere una can(idad mB, con,idera'le de (iempo de
proce,amien(o/
6l algori(mo de b@s+ueda binaria e, en e,pecial eficien(e cuando ,e 'u,ca un elemen(o
individual en un arreglo grande/ Tiene una condicin previa impor(an(e2 lo, elemen(o, de
arreglo de'en ordenar,e en forma a,cenden(e o de,cenden(e/ $e a.u- una de,cripcin
informal del algori(mo2
9n(e, de comen=ar la 'A,.ueda8 pedir al u,uario .ue in(rodu=ca un en(ero8 al cual llamaremo,
val$us+ueda
1/ 6l rango del arreglo en el .ue ,e va a 'u,car ,e indica median(e lo, ,u'-ndice,
llamado, primero 7 @ltimo/ !i primero V @ltimo8 (erminar la 'A,.ueda8 indicando .ue
no ,e pudo encon(rar una coincidencia/
2/ 0alcular el pun(o medio del arreglo8 en(re ,u'-ndice, primero 7 @ltimo/
3/ 0omparar val$us+ueda con el en(ero .ue e,(B en el pun(o medio del arreglo2
o !i lo, valore, ,on iguale,8 regre,ar del procedimien(o con el pun(o medio 69H/
6,(e valor de re(orno indica .ue encon(r una coincidencia en el arreglo/
o Por o(ro lado8 ,i val$us+ueda e, ma7or .ue el nAmero en el pun(o medio8
re,(a'lecer primero a una po,icin mB, al(a .ue el pun(o medio/
o 8 ,i val"u,.ueda e, menor .ue el pun(o medio8 re,(a'lece @ltimo a una
po,icin mB, 'a>a .ue el pun(o medio/
4/ <egre,ar pa,o1/
3a 'A,.ueda 'inaria e, e1(raordinariamen(e eficien(e8 7a .ue u(ili=a una e,(ra(egia llamada
dividir y vencer/ 6l rango de valore, ,e divide a la mi(ad con cada i(eracin del ciclo/ 6n
general8 ,e de,cri'e como un algori(mo (log n)8 lo .ue ,ignifica .ue8 a medida .ue ,e
incremen(a el nAmero de elemen(o, del rango por un fac(or n8 el (iempo de 'A,.ueda
promedio ,e incremen(a en (an ,olo por un fac(or de log n/ 0omo el nAmero real de
comparacione, puede variar8 la ,iguien(e (a'la regi,(ra el nAmero mB1imo de comparacione,
re.uerida, para vario, (ama@o, de arreglo,2
Tama@o del arreglo (n) Tama@o del arreglo (n) Tama@o del arreglo (n) Tama@o del arreglo (n) 0omparacione, mB1ima, 0omparacione, mB1ima, 0omparacione, mB1ima, 0omparacione, mB1ima,
64 6
1:8

18&24 1&
658536 17
18&488576 21
482P48P6782P6 33


6l nAmero mB1imo de comparacione, ,e calcula como log2(nE1)8 redondeando al ,iguien(e
en(ero mB, grande/
1& 6,(ruc(ura, 7 macro, 1& 6,(ruc(ura, 7 macro, 1& 6,(ruc(ura, 7 macro, 1& 6,(ruc(ura, 7 macro,
6,(ruc(ura, 6,(ruc(ura, 6,(ruc(ura, 6,(ruc(ura,
Cna estructura e, una plan(illa o pa(rn .ue ,e proporciona a un grupo de varia'le,
relacionada, en forma lgica/ 9 la, varia'le, en una e,(ruc(ura ,e le, llama campos/ 3a,
in,(ruccione, de un programa pueden acceder a la e,(ruc(ura como una ,ola en(idad8 o
pueden acceder a lo, campo, individuale,/ 0on frecuencia8 la, e,(ruc(ura, con(ienen campo,
de (ipo, di,(in(o,/ Cna unin (am'iDn agrupa a vario, iden(ificadore,8 pero D,(o, (ra,lapan la
mi,ma Brea en memoria/
3a e,(ruc(ura proporciona una forma fBcil de agrupar da(o, 7 pa,arlo, de un procedimien(o a
o(ro/ !upongamo, .ue lo, parBme(ro, de en(rada para un procedimien(o con,i,(en en 2&
unidade, di,(in(a, de da(o, relacionado, con una unidad del di,co/ No ,er-a prBc(ico llamar al
procedimien(o 7 pa,ar lo, argumen(o, re.uerido, en forma correc(a/ 6n ve= de ello8 podr-amo,
colocar (odo, lo, da(o, de en(rada en una e,(ruc(ura 7 pa,ar la direccin de e,a e,(ruc(ura al
procedimien(o/ ,e u(ili=ar-a un m-nimo e,pacio en la pila (una direccin) 7 el procedimien(o
llamado podr-a modificar el con(enido de la e,(ruc(ura/
6n el lengua>e en,am'lador8 la, e,(ruc(ura, ,on en e,encia la, mi,ma, .ue en 0 7 0EE/ 0on
un pe.ue@o e,fuer=o de (raduccin8 podemo, (omar cual.uier e,(ruc(ura de la 'i'lio(eca 9P#
de 4! ;indo%, 7 *acerla .ue funcione en lengua>e en,am'lador/ la ma7or-a de lo,
depuradore, pueden mo,(rar lo, campo, individuale, de la, e,(ruc(ura,/
6,(ruc(ura 0<5 la e,(ruc(ura 0<5 .ue ,e define en la 9P# de ;indo%, iden(ifica a la,
coordenada, de pan(alla H 7 K/ 6l campo H (iene un de,pla=amien(o de cero8 rela(ivo al
principio de la e,(ruc(ura 7 el de,pla=amien(o del campo K e, 2[
!OO-D S3-!93
: ,O-D N 0 desplazamiento "%
F ,O-D N 0 desplazamiento ".
1:9

!OO-D E8DS
Para u,ar una e,(ruc(ura ,e re.uieren (re, pa,o, ,ecuenciale,2
1/ 5efinir la e,(ruc(ura/
2/ 5eclarar una o mB, varia'le, del (ipo de la e,(ruc(ura8 a la, cuale, ,e le, llama
variables de estructura/
3/ 6,cri'ir in,(ruccione, en (iempo de e>ecucin para acceder a lo, campo, de la
e,(ruc(ura/
5efinicin de e,(ruc(ura, 5efinicin de e,(ruc(ura, 5efinicin de e,(ruc(ura, 5efinicin de e,(ruc(ura,
Cna e,(ruc(ura ,e define median(e el u,o de la, direc(iva, !T<C0T 7 6N5!/ 5en(ro de la
e,(ruc(ura8 ,e definen campo, u,ando la mi,ma ,in(a1i, para la, varia'le, ordinaria,/ 3a,
e,(ruc(ura, pueden con(ener ca,i cual.uier nAmero de campo,2
nombre S3-9!3
declaracin de campos
nombre E8DS
'nicializadores de campo 0uando lo, campo, de una e,(ruc(ura (ienen iniciali=adore,8 lo,
valore, ,e a,ignan cuando ,e la, crean varia'le, de la e,(ruc(ura/ Podemo, u(ili=ar vario, (ipo,
de iniciali=adore, de campo,2
#ndefinido #ndefinido #ndefinido #ndefinido2 el operador M de>a el con(enido del campo indefinido/
3i(erale, de cadena 3i(erale, de cadena 3i(erale, de cadena 3i(erale, de cadena2 la, cadena, de carac(ere, ,e encierran en(re comilla,/
6n(ero, 6n(ero, 6n(ero, 6n(ero,2 la, con,(an(e, 7 e1pre,ione, en(era,/
9rreglo, 9rreglo, 9rreglo, 9rreglo,2 el operador 5CP puede iniciali=ar elemen(o, de arreglo,/
3a ,iguien(e e,(ruc(ura llamada 6mpleado 6mpleado 6mpleado 6mpleado de,cri'e la informacin de un empleado8 con
campo, como nAmero de iden(ificacin (#5)8 apellido8 a@o, de ,ervicio 7 un arreglo de valore,
del *i,(orial de ,u ,alario/ 3a ,iguien(e definicin de'e aparecer an(e, de la declaracin de
varia'le, 6mpleado 6mpleado 6mpleado 6mpleado2
Empleado S3-9!3
8umID EF3E O"""""""""P
Apellido EF3E 7" D9P(")
Anios ,O-D "
\istorialSalario D,O-D ",",","
Empleado E8DS
Z,(a e, una repre,en(acin lineal de la di,(ri'ucin de memoria de la e,(ruc(ura2
1":


9lineacin de lo, campo, de una e,(ruc(ura 9lineacin de lo, campo, de una e,(ruc(ura 9lineacin de lo, campo, de una e,(ruc(ura 9lineacin de lo, campo, de una e,(ruc(ura
Para el me>or rendimien(o de 6G! de memoria8 lo, miem'ro, de una e,(ruc(ura de'en
alinear,e a direccione, .ue coincidan con ,u, (ipo, de da(o,/ 5e no ,er a,-8 la 0PC re.uerirB
mB, (iempo para acceder a lo, miem'ro,/ Por e>emplo8 un miem'ro (ipo do'le pala'ra de'e
alinear,e en un l-mi(e de do'le pala'ra/ 3a ,iguien(e (ala pre,en(a la, alineacione, .ue u,an
lo, compiladore, 0 7 0EE de 4icro,of(8 7 la, funcione, de la 9P# ;in32/ 6n lengua>e
en,am'lador8 la direc(iva 93#YN e,(a'lece la alineacin de la direccin del ,iguien(e campo o
varia'le2
A4IS8 tipodedatos
6l ,iguien(e e>emplo8 alinea mi+ar mi+ar mi+ar mi+ar a un l-mi(e de do'le pala'ra2
6data
A4IS8 D,O-D
mi)ar D,O-D N
+amo, a definir de manera correc(a la e,(ruc(ura 6mpleada8 u,ando 93#YN para colocar 9nio, 9nio, 9nio, 9nio,
en un l-mi(e ;<5 7 a $i,(orial!alario $i,(orial!alario $i,(orial!alario $i,(orial!alario en l-mi(e 5;<5/ 3o, (ama@o, de lo, campo, aparecen
como comen(ario,/
Empleado S3-9!3
numID EF3E O"""""""""P 0 +
Apellido EF3E 7" D9P(") 0 7"
A4IS8 ,O-D 0 se agreg % b5te
Anios ,O-D " 0 .
A4IS8 D,O-D 0 se agreg . b5tes
\istorialSalario D,O-D ",","," 0 %/
Empleado E8DS 0 /" en total
9lineacin de lo, miem'ro, de una e,(ruc(ura/
1""

Tipo de miem'ro Tipo de miem'ro Tipo de miem'ro Tipo de miem'ro 9lineacin 9lineacin 9lineacin 9lineacin
"KT68 !"KT6 !e alinea en un l-mi(e de 8 'i(, ('7(e)
;<58!;<5 !e alinea en un l-mi(e de 16 'i(, (pala'ra)
5;<58 !5;<5 !e alinea en un l-mi(e de 32 'i(, (do'le pala'ra)
L;<5 !e alinea en un l-mi(e de 64 'i(, (pala'ra cuBdruple)
<6934 !e alinea en un l-mi(e de 32 'i(, (do'le pala'ra)
<6938 !e alinea en un l-mi(e de 64 'i(, (pala'ra cuBdruple)
6,(ruc(ura 6l re.uerimien(o de alineacin mB, grande de
cual.uier miem'ro
Cnin 6l re.uerimien(o de alineacin del primer miem'ro
5eclaracin de varia'le, de e,(ruc(ura 5eclaracin de varia'le, de e,(ruc(ura 5eclaracin de varia'le, de e,(ruc(ura 5eclaracin de varia'le, de e,(ruc(ura
3a, varia'le, de una e,(ruc(ura pueden declarar,e e iniciali=ar,e de manera opcional con
valore, e,pec-fico,/ Z,(a e, la ,in(a1i,8 en la .ue 7a ,e *a definido tipostructura median(e la
direc(iva !T<C0T2
identi&icador tipoEstructura W listaKinicializadores X
6l identificador ,igue la, mi,ma, regla, .ue lo, demB, nom're, de varia'le, en 49!4/ 3a
lista6inicializadores e, opcional8 pero ,i ,e u(ili=a8 e, una li,(a ,eparada por coma, de
con,(an(e, en (iempo de en,am'lado .ue coinciden con lo, (ipo, de da(o, de lo, campo,
e,pec-fico, de una e,(ruc(ura2
inicializador B, inicializadorC D
3o, ,igno, de ma7or 7 menor .ue (UV) vac-o, *acen .ue la e,(ruc(ura con(enga lo, valore,
prede(erminado, de lo, campo,8 provenien(e, de la definicin de la e,(ruc(ura/ 5e manera
al(erna(iva8 podemo, in,er(ar nuevo, valore, en lo, campo, ,eleccionado,/ 3o, valore, ,e
in,er(an en lo, campo, de la e,(ruc(ura8 en orden de i=.uierda a derec*a8 coincidiendo con el
orden de lo, campo, en la declaracin de la e,(ruc(ura/ 9 con(inuacin ,e mue,(ran e>emplo,
de am'o, mD(odo,8 u,ando la, e,(ruc(ura, 0<5 0<5 0<5 0<5 7 6mpleado 6mpleado 6mpleado 6mpleado2
6data
punto% !OO-D W<,%"X 0 : ( <, F ( %"
punto. !OO-D W."X 0 : ( .", F ( N
punto. !OO-D WX 0 : ( N, 5 ( N
trabaador Empleado WX 0 (inicializadores predeterminados)
1"#

6, po,i'le redefinir ,lo lo, iniciali=adore, de lo, campo,8 prede(erminado,/ 3a ,iguien(e
declaracin redefine ,lo el campo Num#5 Num#5 Num#5 Num#5 de la e,(ruc(ura 6mpleado 6mpleado 6mpleado 6mpleado8 a,ignando lo, valore,
prede(erminado, a lo, campo, re,(an(e,2
persona% Empleado WP<<<..7777PX
Cna forma de no(acin al(erna(iva u(ili=a llave, jdk en ve= de lo, ,igno, UV2
persona. Empleado eO<<<..7777Pf
0uando el iniciali=ador para un campo de cadena e, mB, cor(o .ue el campo8 el re,(o de la,
po,icione, ,e rellenan con e,pacio,/ No ,e in,er(a de manera au(omB(ica un '7(e nulo al final
de un campo de cadena/ Podemo, omi(ir campo, de la e,(ruc(ura in,er(ando coma, como
marcadore, de po,icin/ Por e>emplo8 la ,iguien(e in,(ruccin omi(e el campo Num#5 Num#5 Num#5 Num#5 e
iniciali=a el campo 9pellido 9pellido 9pellido 9pellido2
Persona7 Empleado W,Pd`onesPX
Para un campo de arreglo8 de'emo, u(ili=ar el operador 5CP para iniciali=ar alguno, o (odo,
lo, elemen(o, del arreglo/ !i el iniciali=ador e, mB, cor(o .ue el campo8 el re,(o de la,
po,icione, ,e rellena con cero,/ 6n el ,iguien(e e>emplo8 iniciali=amo, lo, primero, do, valore,
de $i,(orial!alario $i,(orial!alario $i,(orial!alario $i,(orial!alario 7 e,(a'lecemo, el re,(o a cero2
Persona; Empleado W,,,. D9P(."""")X
Arreglo de estructuras C,amo, el operador 5CP para crear un arreglo de e,(ruc(ura,/ 6n el
,iguien(e e>emplo8 lo, campo, H 7 K de cada elemen(o en Todo,3o,Pun(o, Todo,3o,Pun(o, Todo,3o,Pun(o, Todo,3o,Pun(o, ,e iniciali=an con
cero,2
8umPuntos ( 7
3odos4osPuntos !OO-D 8umPuntos D9P (W","X)
9li 9li 9li 9lineacin de neacin de neacin de neacin de varia'le, de e,(ruc(ura varia'le, de e,(ruc(ura varia'le, de e,(ruc(ura varia'le, de e,(ruc(ura
Para un me>or rendimien(o del proce,ador8 ,e de'en alinear la, varia'le, de e,(ruc(ura en un
l-mi(e de memoria iguale, al miem'ro mB, grande de la e,(ruc(ura/ 3a e,(ruc(ura 6mpleado
con(iene campo, 5;<58 por lo .ue la ,iguien(e definicin u(ili=a e,a alineacin2
6data
A4IS8 D,O-D
persona Empleado WX
<eferencia a varia'le, de e,(ruc(ura <eferencia a varia'le, de e,(ruc(ura <eferencia a varia'le, de e,(ruc(ura <eferencia a varia'le, de e,(ruc(ura
3a, referencia, a la, varia'le, de e,(ruc(ura 7 lo, nom're, de e,(ruc(ura pueden *acer,e
u(ili=ando operadore, TKP6 7 !#I6F/ Por e>emplo8 vamo, a regre,ar a la e,(ruc(ura 6mpleado 6mpleado 6mpleado 6mpleado
.ue vimo, an(eriormen(e2
1"1

Empleado S3-9!3
8umId EF3E O"""""""""P 0 +
Apellido EF3E 7" D9P(") 0 7"
A4IS8 ,O-D 0 se agreg % b5te
Anios ,O-D " 0 .
A4IS8 D,O-D 0 se agregaron . b5tes
\istorialSalario D,O-D 0 %/
Empleados E8DS 0 /" en total
5ada la ,iguien(e definicin de da(o,2
6data
3rabaador Empleado WX
0ada una de la, ,iguien(e, e1pre,ione, devuelve el mi,mo valor2
3FPE Empleado 0 /"
SI[EO$ Empleado 0 /"
SI[EO$ trabaador 0 /"
<eferencia a lo, miem'ro, <eferencia a lo, miem'ro, <eferencia a lo, miem'ro, <eferencia a lo, miem'ro,
3a, referencia, a lo, miem'ro, de e,(ruc(ura con nom're re.uieren una varia'le de e,(ruc(ura
como calificador/ 3a, ,iguien(e, e1pre,ione, con,(an(e, pueden generar,e en (iempo de
en,am'lado8 u,ando la e,(ruc(ura 6mpleado 6mpleado 6mpleado 6mpleado2
3FPE Empleado6\istorialSalario 0 ;
4E8S3\O$ Empleado6\istorialSalario 0 ;
SI[EO$ Empleado6\istorialSalario 0 %/
3FPE Empleado6Anios 0 .
3a, ,iguien(e, ,on referencia, en (iempo de e>ecucin a (ra'a>ador (ra'a>ador (ra'a>ador (ra'a>ador8 un 6mpleado2
6data
trabaador Empleado WX
6code
1"3

mov d1,trabaador6Anios
mov trabaador6\istorialSalario,."""" 0 primer salario
mov Btrabaador6\istorialSalarioL;C,7""" 0 segundo salario
Uso del operador #88!- Podemo, u(ili=ar el operador FF!6T para o'(ener la direccin de
un campo den(ro de una varia'le de e,(ruc(ura2
mov ed1,O$$SE3 trabaador6Apellido
perando, indirec(o, e inde1ado, perando, indirec(o, e inde1ado, perando, indirec(o, e inde1ado, perando, indirec(o, e inde1ado,
3o, operando, indirec(o, permi(en el u,o de un regi,(ro (como 6!#) para direccionar lo,
miem'ro, de la e,(ruc(ura/ 6l direccionamien(o indirec(o proporciona fle1i'ilidad8 en e,pecial
al pa,ar la direccin de una e,(ruc(ura a un procedimien(o8 o al u(ili=ar un arreglo de
e,(ruc(ura,/ 0uando ,e *ace referencia a lo, operando, indirec(o, ,e re.uiere el operador
PT<2
mov esi, O$$SE3 trabaador
mov a1,(Empleado P3- BesiC)6Anios
3a ,iguien(e in,(ruccin no ,e en,am'la8 7a .ue 9nio, 9nio, 9nio, 9nio, por ,- ,ola no iden(ifica la e,(ruc(ura a
la @ue pertenece*
mov a1,BesiC6 Anios 0 invIlida
#perandos indexados Podemo, u(ili=ar operando, inde1ado, para acceder a lo, arreglo, de
e,(ruc(ura,/ !upongamo, .ue depar(amen(o depar(amen(o depar(amen(o depar(amen(o e, un arreglo de cinco o'>e(o, 6mpleado/ 3a,
,iguien(e, in,(ruccione, acceden al campo 9nio 9nio 9nio 9nio del empleado en la po,icin de -ndice 12
6data
departamento Empleado < D9P(WX)
6code
mov esi, 3FPE Empleado 0 Andice ( %
mov departamentoBesiC6Anios, ;
'teracin a travGs de un arreglo Puede u(ili=ar,e un ciclo con el direccionamien(o indirec(o o
direc(o para manipular un arreglo de e,(ruc(ura,/ 6l ,iguien(e programa
(Todo,3o,Pun(o,/a,m) a,igna coordenada, al arreglo Todo,3o,Pun(o, Todo,3o,Pun(o, Todo,3o,Pun(o, Todo,3o,Pun(o,2
3I34E Iterar a trav^s de un arreglo (3odos4osPuntos6asm)
I8!49DE Irvine7.6inc
1"5

8umPuntos ( 7
6data
A4IS8 ,O-D
3odos4osPuntos !OO-D 8umPuntos D9P(W","X)
6code
main P-O!
mov edi," 0 Andice del arreglo
mov ec1,8umPuntos 0 contador de ciclo
mov a1,% 0 valores :, F iniciales
4%* mov (!OO-D P3- 3odos4osPuntosBediC)6:,a1
mov (!OO-D P3- 3odos4osPuntosBediC)6F,a1
add edi,3FPE !OO-D
inc a1
loop 4%
e1it
main E8DP
E8D main
6>emplo2 mo,(rar la *ora del ,i,(ema 6>emplo2 mo,(rar la *ora del ,i,(ema 6>emplo2 mo,(rar la *ora del ,i,(ema 6>emplo2 mo,(rar la *ora del ,i,(ema
4! ;indo%, cuen(a con funcione, de con,ola .ue e,(a'lecen la po,icin del cur,or en la
pan(alla 7 o'(ienen la *ora del ,i,(ema/ Para u,ar e,(a, funcione,8 *a7 .ue crear in,(ancia, de
do, e,(ruc(ura, predefinida,2
!OO-DS 5 SFS3E23I2E*
!OO-D S3-9!3
: ,O-D N
F ,O-D N
!OO-DS E8DS
SFS3E23I2E S3-9!3
1"6

=Anio ,O-D N
=2es ,O-D N
=DiaDe4aSemana ,O-D N
=Dia ,O-D N
=\ora ,O-D N
=2inuto ,O-D N
=Segundo ,O-D N
=2ilisengundos ,O-D N
SFS3E23I2E E8DS
Para o'(ener la *ora del ,i,(ema (a>u,(ada para la =ona *oraria local)8 de'emo, llamar a la
funcin Ye(3ocalTime Ye(3ocalTime Ye(3ocalTime Ye(3ocalTime de 4! ;indo%, 7 pa,arle la direccin de e,(ruc(ura !K!T64T#462
6data
'oraS5s SFS3E23I2E WX
6code
I8)O>E Set4ocal3ime, ADD- 'oraS5s
9*ora o'(enemo, lo, valore, apropiado, de la e,(ruc(ura !K!T64T#462
movz1 ea1,'oraS5s6=Anio
call ,riteDec
0uando un programa ;in32 produce re,ul(ado, en pan(alla8 llama a la funcin Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle
de 4! ;indo%, para o'(ener el mane>ador de ,alida de con,ola e,(Bndar (un en(ero)2
6data
maneador!onsola D,O-D N
6code
I8)O>E SetStd\andle, S3DTO93P93T\A8D4E
mov maneador!onsola,ea1
Para e,(a'lecer la po,icin del cur,or8 de'emo, llamar la funcin !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion de
4! ;indo%,8 pa,Bndole el mane>ador de ,alida de con,ola 7 una varia'le de e,(ruc(ura
0<5 .ue con(enga carac(ere, de la, coordenada, H8K2
1"7

6data
pos:F !OO-D W%",<X
6code
I8)O>E Set!onsole!ursorPosition, maneador!onsola, pos:F
3i,(ado del programa 6l ,iguien(e programa (Mostrar<ora7asm) o'(iene la *ora del ,i,(ema 7
lo, mue,(ra en una u'icacin de pan(alla ,eleccionada/ !lo ,e e>ecu(a en modo pro(egido2
3I34E 2ostrar la 'ora (2ostrar\ora6AS2)
I8!49DE Irvine7.6inc
6data
'oraS5s SFS3E23I2E WX
pos:F !OO-D W%",<X
maneador!onsola D,O-D N
cadDosPuntos EF3E O*P,"

6code
main P-O!
0 Obtiene el maneador de salida estIndar para la consola ,in7.6
I8)O>E SetStd\andle, S3DTO93P93T\A8D4E
mov maneador!onsola,ea1
0 Establece la posicin del cursor 5 obtiene la zona 'oraria local6
I8)O>E Set!onsole!ursorPosition, maneador!onsola, pos:F
I8)O>E Set4ocal3ime, ADD- 'oraS5s
0 2uestra la 'ora del sistema (''*mm*ss)6
movz1 ea1,'oraS5s6=\our 0 'oras
call ,riteDec
movz1 ea1,'oraS5s6=2inuto 0 minutos
call ,riteDec
1"8

call ,riteString
movz1 ea1,'oraS5s6=Second 0 segundos
call ,riteDec
call !rlf
call ,ait2sg
e1it
main E8DP
E8D main
6,(e programa u(ili=a definicione, de !mall;in/inc (#rvine32/inc la, inclu7e de manera
au(omB(ica)
6,(ruc( 6,(ruc( 6,(ruc( 6,(ruc(ura, .ue con(ienen e,(ruc(ura, ura, .ue con(ienen e,(ruc(ura, ura, .ue con(ienen e,(ruc(ura, ura, .ue con(ienen e,(ruc(ura,
3a, e,(ruc(ura, pueden con(ener in,(ancia, de o(ra, e,(ruc(ura,/ Por e>emplo8 un rec(Bngulo
puede definir,e en (Drmino, de ,u, e,.uina, ,uperior i=.uierda e inferior derec*a8 am'a,
e,(ruc(ura, 0<52
-ectangulo S3-9!3
SupIz@ !OO-D WX
InfDer !OO-D WX
-ectangulo E8DS
3a, varia'le, de rec(Bngulo pueden declarar,e ,in redefinicione,8 o redefiniendo campo,
individuale, de 0<5/ 9 con(inuacin ,e mue,(ran forma, al(erna(iva,2
rect% -ectangulo WX
rect. -ectangulo e f
rect7 -ectangulo e e%",%"f, e<", ."f f
rect; -ectangulo W W%",%"X, W<",."X X
9 con(inuacin ,e mue,(ra una referencia direc(a a un campo de la e,(ruc(ura2
mov rect%6SupIz@61, ."
Podemo, acceder al campo de una e,(ruc(ura median(e un operando indirec(o/ 6l ,iguien(e
e>emplo mueve 1& a la coordenada K de la e,.uina ,uperior i=.uierda de la e,(ruc(ura a la .ue
apun(a 6!#2
1"9

mov esi, O$$SE3 rect%
mov (-ectangulo P3- BesiC6SupIz@)6F, %"
6l operador FF!6T puede regre,ar apun(adore, a campo, individuale, de una e,(ruc(ura8
inclu7endo lo, campo, anidado,2
mov edi,O$$SE3 rect.6InfDer
mov (!OO-D P3- BediC)6:,<"
mov edi,O$$SE3 rect.6InfDer6:
mov ,O-D P3- BediC, <"
5eclaracin 7 u,o de unione, 5eclaracin 7 u,o de unione, 5eclaracin 7 u,o de unione, 5eclaracin 7 u,o de unione,
4ien(ra, .ue cada campo en una e,(ruc(ura (iene un de,pla=amien(o rela(ivo al primer '7(e de
la e,(ruc(ura8 (odo, lo, campo, en una unin comien=an en el mi,mo de,pla=amien(o/ 6l
(ama@o de almacenamien(o de una unin e, igual a la longi(ud de ,u campo mB, grande/
0uando no forma par(e de una e,(ruc(ura8 una unin ,e declara median(e la, direc(iva, CN#N
7 6N5!2
nombreunin 98IO8
camposKdeKlaKestructura
nombreunin E8DS
!i la unin ,e anida den(ro de una e,(ruc(ura8 la ,in(a1i, e, un poco di,(in(a2
nombreestruct S3-9!3
camposKdeKlaKestructura
98IO8 nombreunin
camposKdeKlaKunin
E8DS
nombreestruct E8DS
3a, declaracione, de lo, campo, en una unin ,iguen la, mi,ma, regla, .ue para la,
e,(ruc(ura,8 con la e1cepcin de .ue cada campo ,lo puede (ener un iniciali=ador/ Por
e>emplo8 la unin 6n(ero 6n(ero 6n(ero 6n(ero (iene (re, a(ri'u(o, de (ama@o di,(in(o para lo, mi,mo, da(o,8 e
iniciali=a (odo, lo, campo, con cero2
Entero 98IO8
D D,O-D "
1#:

, ,O-D "
E EF3E "
Entero E8DS
Debemos ser consistentes !# u(ili=amo, lo, iniciali=adore,8 de'emo, (ener valore,
con,i,(en(e,/ !upongamo, .ue 6n(ero ,e declara con di,(in(o, iniciali=adore,2
Entero 98IO8
D ,O-D %
, ,O-D <
E EF3E #
Entero E8DS
6n(once, declarar-amo, una varia'le 6n(ero llamada mi6n( mi6n( mi6n( mi6n(8 u,ando lo, iniciali=adore,
prede(erminado,2
6data
miEnt Entero WX
3o, valore, de mi6n(/58 mi6n(/; 7 mi6n(/" ,er-an (odo, iguale, a 1/ 6l en,am'lador ignorar-a
iniciali=adore, declarado, para lo, campo, ; 7 "/
structura +ue contiene una unin Podemo, pro'ar una unin den(ro de una e,(ruc(ura8
u,ando el nom're de la unin en una declaracin8 como *emo, *ec*o a con(inuacin para el
campo #59rc*ivo #59rc*ivo #59rc*ivo #59rc*ivo den(ro de la e,(ruc(ura #nfo9rc*ivo/
InfoArc'ivo S3-9!3
IDArc'ivo EnteroWX
8ombreArc'ivo EF3E /; D9P(N)
InfoArc'ivo E8DS
o podemo, declarar una unin direc(amen(e den(ro de una e,(ruc(ura8 como *emo, *ec*o a
con(inuacin para el campo #59rc*ivo #59rc*ivo #59rc*ivo #59rc*ivo2
InfoArc'ivo S3-9!3
98IO8 IDArc'ivo
D D,O-D N
, ,O-D N
1#"

E EF3E N
E8DS
8ombreArc'ivo EF3E /; D9P(N)
InfoArc'ivo E8DS
Declaracin y uso de variables de unin Cna varia'le de unin ,e declara 7 ,e iniciali=a en
forma mu7 parecida a una varia'le de e,(ruc(ura8 con una impor(an(e diferencia2 no ,e permi(e
mB, de un iniciali=ador/ 9 con(inuacin ,e mue,(ran e>emplo, de varia'le (ipo 6n(ero2
val% Entero W%.7;</M#'X
val. Entero W%""'X
val7 Entero WX
Para u(ili=ar una varia'le de unin en una in,(ruccin e>ecu(a'le8 de'emo, ,umini,(rar el
nom're de uno de lo, campo, varian(e,/ 6n el ,iguien(e e>emplo8 a,ignamo, valore, de lo,
regi,(ro, a lo, campo, de la unin 6n(ero 6n(ero 6n(ero 6n(ero/ ',ervamo, la fle1i'ilidad .ue (enemo, al poder
u,ar di,(in(o, (ama@o, de operando,2
mov val76E, al
mov val76,, a1
mov val76D, ea1
3a, unione, (am'iDn pueden con(ener e,(ruc(ura,/ 3a ,iguien(e e,(ruc(ura llamada
#NPCTS<60<5 la u(ili=an alguna, funcione, de en(rada de con,ola de 4! ;indo%,/ 0on(iene
una unin llamada 6ven( 6ven( 6ven( 6ven(8 la cual ,elecciona uno de vario, (ipo, de e,(ruc(ura predefinida,/ 6l
campo 6ven(T7pe 6ven(T7pe 6ven(T7pe 6ven(T7pe indica el (ipo de regi,(ro .ue aparece en la unin/ 0ada e,(ruc(ura (iene una
di,(ri'ucin 7 (ama@o di,(in(o8 pero ,olo ,e u(ili=a una a la ve=2
I8P93T-E!O-D S3-9!3
Event35pe ,O-D N
A4IS8 D,O-D
98IO8 Event
>EFTE)E83T-E!O-D WX
2O9SETE)E83T-E!O-D WX
,I8DO,STE9$$E-TSI[ET-E!O-D WX
2E89TE)E83T-E!O-D WX
1##

$O!9STE)E83T-E!O-D WX
E8DS
I8P93T-E!O-S E8DS
9 menudo8 la 9P# ;in32 inclu7e la pala'ra <60<5 al nom'ra la, e,(ruc(ura,/ Z,(a e, la
definicin de una e,(ruc(ura ?6KS6+6NTS<60<52
>EFTE)E83T-E!O-D S3-9!3
b>e5Do=n D,O-D N
=-epeat!ount ,O-DN
=)irtual>e5!ode ,O-D N
=)irtualScan!ode ,O-D N
98IO8 u!'ar
9nicode!'ar ,O-D N
Ascii!'ar EF3E N
E8DS
d=!ontrol>e5State D,O-D N
>EFTE)E83T-E!O-D E8DS
6l re,(o de la, definicione, !T<C0T de #NPCTS<60<5 pueden ,er encon(rada, en
!mall;in/inc/
4acro, 4acro, 4acro, 4acro,
Yeneralidade, Yeneralidade, Yeneralidade, Yeneralidade,
Cn macro procedimiento e, un 'lo.ue con nom're de in,(ruccione, en lengua>e en,am'lador/
Cna ve= definido8 puede invocar,e (llamar,e) (oda, la, vece, .ue ,e de,ee en un programa/ 9l
invocar a un macro procedimien(o8 ,e in,er(a una copia de ,u cdigo direc(amen(e en el
programa8 en la u'icacin en la .ue ,e invoc/ !e aco,(um'ra u(ili=ar el (Drmino llamar a un
macro procedimien(o8 aun.ue (Dcnicamen(e no *a7 una in,(ruccin 0933 implicada/


Declaracin 3o, macro, (procedimien(o,) ,e definen de manera direc(a al principio de un
programa de cdigo fuen(e8 o ,e colocan en un arc*ivo ,eparado 7 ,e copian en un programa
median(e una direc(iva #N03C56/ 3o, macro, ,e e1panden duran(e el pa,o del
;l t!rmino macro procedimiento se utiliza en el manual de <icroso$t /ssembler para identi$icar a los
macros (ue no devuelven un valor. 4ambi!n *a' macro funciones (ue devuelven un valor. ;ntre
programadores& por lo general se entiende (ue la palabra macro signi$ica lo mismo (ue macro
procedimiento. @e a(u% en adelante& utilizaremos la $orma m.s corta.
1#1

preprocesamiento del en,am'lador/ 6N e,(e pa,o8 el preproce,ador lee la definicin de un
macro 7 e1plora el re,(o del cdigo fuen(e en el programa/ 6n cada pun(o en el .ue ,e *ace
una llamada al macro8 el en,am'lador in,er(a una copia del cdigo de fuen(e en el programa/
6l en,am'lador de'e encon(rar la definicin de un macro an(e, de (ra(ar de en,am'lar
cual.uier llamada del macro/ !i un programa define a un macro pero nunca lo llama8 el cdigo
de e,e macro no aparece en el programa compilado/
6n el ,iguien(e e>emplo8 un macro llamado #mprimirH #mprimirH #mprimirH #mprimirH con(iene una ,ola in,(ruccin .ue llama
al procedimien(o ;ri(e0*ar ;ri(e0*ar ;ri(e0*ar ;ri(e0*ar de #rvine32 o #rvine16/ Por lo general8 e,(a definicin ,e coloca
>u,(o an(e, del ,egmen(o de da(o,2
#mprimirH 490<
mov al,H:H
call ,rite!'ar
E8D2
9 con(inuacin8 en el ,egmen(o de cdigo llamamo, al macro2
6code
Imprimir:
0uando el preproce,ador e1plora e,(e programa 7 de,cu're la llamada a #mprimirH #mprimirH #mprimirH #mprimirH8 ,u,(i(u7e
la llamada al macro con la, ,iguien(e, in,(ruccione,2
mov al,H:H
call ,rite!'ar
!e *a llevado a ca'o la ,u,(i(ucin de (e1(o/ !i 'ien el macro no e, mu7 fle1i'le8 pron(o
mo,(raremo, cmo pa,ar argumen(o, a lo, macro,8 para .ue ,ean muc*o mB, A(ile,
5efinicin de macro,
Cn macro ,e define u,ando la, direc(iva, 490< 7 6N5/ 3a ,in(a1i, e,2
nombremacro 2A!-O parImetroK%, parImetroK.D
listaKinstrucciones
E8D2
No *a7 una regla fi>a en relacin con la ,angr-a8 pero ,e recomienda aplicar ,angr-a a la,
in,(ruccione, en(re nombremacro 7 6N54/ Tam'iDn podr-a ,er convenien(e colocar prefi>o, en
lo, nom're, de lo, macro, con la le(ra m8 para crear nom're, reconoci'le, como
m0olocar0ar m0olocar0ar m0olocar0ar m0olocar0ar8 m6,cri'ir0adena m6,cri'ir0adena m6,cri'ir0adena m6,cri'ir0adena 7 mYo(o17 mYo(o17 mYo(o17 mYo(o17/ 3a, in,(ruccione, en(re la direc(iva 490< 7 6N54
1#3

no ,e en,am'lan ,ino *a,(a .ue ,e llama al macro/ Puede *a'er cual.uier nAmero de
parBme(ro, en la definicin del macro8 ,eparado, por coma,/
Par*metros 3o, parBme(ro, de lo, macro, ,on recep(Bculo, para lo, argumen(o, de (e1(o
.ue ,e pa,an al procedimien(o .ue *ace la llamada/ 5e *ec*o8 lo, argumen(o, pueden ,er
en(ero,8 nom're, de varia'le, u o(ro, valore,8 pero el preproce,ador lo, (ra(a como (e1(o/ 3o,
parBme(ro, no (ienen (ipo8 por lo .ue el preproce,ador no comprue'a lo, (ipo, de argumen(o,
para ver ,i ,on correc(o,/ !i ocurre un conflic(o de (ipo,8 el en,am'lador lo a(rapa de,puD, de
.ue ,e e1pande el macro/
jemplo1 m"olocar"ar 6l ,iguien(e macro llama m0ol m0ol m0ol m0olocar0ar ocar0ar ocar0ar ocar0ar reci'e un ,olo parBme(ro de
en(rada llamado car car car car 7 lo mue,(ra en con,ola8 median(e una llamada a ;ri(e0*ar ;ri(e0*ar ;ri(e0*ar ;ri(e0*ar de la
'i'lio(eca de enlace del li'ro2
m!olocar!ar 2A!-O car
pus' ea1
mov al,car
call ,rite!'ar
pop ea1
E8D2
#nvocacin de macro,
Para llamar (invocar) a un macro ,e in,er(a ,u nom're en el programa8 po,i'lemen(e ,eguido
de lo, argumen(o, del macro/ 3a ,in(a1i, para llamar a un macro e,
nombremacro argumentoK%, argumentoK., D
(ombremacro de'e ,er el nom're de un macro definido an(e, de e,(e pun(o en el cdigo de
fuen(e/ 0ada argumen(o e, un valor de (e1(o .ue ,u,(i(u7e a un parBme(ro en el macro/ 6l
orden de lo, argumen(o, de'e corre,ponder al orden de lo, parBme(ro,8 pero el nAmero de
argumen(o, no (iene .ue coincidir con el nAmero de parBme(ro,/ !i ,e pa,an dema,iado,
argumen(o,8 el en,am'lador genera una adver(encia/ !i ,e pa,an mu7 poco, argumen(o, a un
macro8 lo, parBme(ro, fal(an(e, ,e de>an en 'lanco/
'nvocacin de m"olocar"ar 6n la par(e an(erior definimo, al marco m0olocar0ar m0olocar0ar m0olocar0ar m0olocar0ar/ 9l
invocarlo8 podemo, pa,arle cual.uier carBc(er o cdigo 9!0##/ 3a ,iguien(e in,(ruccin invoca a
m0olocar0ar 7 le pa,a la le(ra 92
m!olocar!ar GAH
6l preproce,ador del en,am'lador e1pande la in,(ruccin en el ,iguien(e cdigo8 mo,(rando en
el arc*ivo de li,(ado2
1#5

% pus' ea1
% mov al,HAH
% call ,rite!'ar
% pop ea1
6l 1 en la columna i=.uierda indica el nivel de e1pan,in del macro8 .ue ,e incremen(a cuando
,e *acen llamada, a o(ro, macro, den(ro de un macro/ 6l ,iguien(e ciclo mue,(ra la, primera,
2& le(ra, del alfa'e(o2
mov al,HAH
mov ec1,."
4%*
m!olocar!ar al 0 llamada al macro
inc al
loop 4%
6l preproce,ador e1pande nue,(ro ciclo en el ,iguien(e cdigo (vi,i'le en el arc*ivo de li,(ado
de cdigo fuen(e)/ 3a llamada al macro ,e mue,(ra >u,(o an(e, de ,u e1pan,in2
mov al,HAH
mov ec1,."
4%*
m!olocar!ar al 0 llamada al macro
% pus' ea1
% mov al,al
% call ,rite!'ar
% pop ea1
inc al
loop 4%



;n general& los macros se ejecutan con m.s rapidez (ue los procedimientos& 'a (ue !stos tienen la
sobrecarga adicional de las instrucciones -/LL ' R;4. =in embargo& eCiste la desventaja en cuanto
al uso de los macros: el uso repetido de macros eCtensos tiende a incrementar el tamaEo de un
programa& 'a (ue cada llamada a un macro inserta una nueva copia de las instrucciones del macro
en el programa.
1#6


0arac(er-,(ica, adicionale, de lo, macro, 0arac(er-,(ica, adicionale, de lo, macro, 0arac(er-,(ica, adicionale, de lo, macro, 0arac(er-,(ica, adicionale, de lo, macro,
ParBme(ro, re.uerido, ParBme(ro, re.uerido, ParBme(ro, re.uerido, ParBme(ro, re.uerido,
4edian(e el u,o del calificador <6L8 podemo, e,pecificar .ue un parBme(ro de un macro e,
re.uerido/ !i el macro ,e llama ,in un argumen(o .ue coincida con el parBme(ro re.uerido8 el
en,am'lador mue,(ra un men,a>e de error/ !i un macro (iene vario, parBme(ro, re.uerido,8
cada uno de'e incluir el calificador <6L/ 6n el ,iguien(e macro m0olocar0ar m0olocar0ar m0olocar0ar m0olocar0ar8 ,e re.uiere el
parBme(ro car car car car2
m!olocar!ar 2A!-O car*-ER
pus' ea1
mov al,car
call ,rite!'ar
pop ea1
E8D2
0omen(ario, en lo, macro, 0omen(ario, en lo, macro, 0omen(ario, en lo, macro, 0omen(ario, en lo, macro,
3a, l-nea, de comen(ario, ordinaria, .ue aparecen en la definicin de macro8 aparecen cada
ve= .ue D,(a ,e e1pande/ !i de,eamo, (ener comen(ario, en el macro .ue no apare=can en la,
e1pan,ione,8 de'emo, empe=arlo, con do'le ,igno de pun(o 7 coma ([[)2
m!olocar!ar 2A!-O car*-ER 00 recordatorio* car debe ser de # bits
pus' ea1
mov al,car
call ,rite!'ar
pop ea1
E8D2
5irec(iva 60 5irec(iva 60 5irec(iva 60 5irec(iva 60$ $ $ $
3a direc(iva 60$ mue,(ra un men,a>e en la con,ola8 a medida .ue D,(e ,e en,am'la/ 6n la
,iguien(e ver,in de m0olocar0ar m0olocar0ar m0olocar0ar m0olocar0ar8 aparece el men,a>e ]61pandiendo el macro m0olocar0arW
en la con,ola duran(e el en,am'lado2
m!olocar!ar 2A!-O car*-ER
E!\O E1pandiendo el macro m!olocar!ar
1#7

pus' ea1
mov al,car
call ,rite!'ar
pop ea1
E8D2
5irec(iva 3093 5irec(iva 3093 5irec(iva 3093 5irec(iva 3093
9 menudo8 la, definicione, de lo, macro, con(ienen e(i.ue(a, 7 *acen au(orreferencia, a e,a,
e(i.ue(a, en ,u cdigo/ Por e>emplo8 el ,iguien(e macro cr cr cr crear0adena ear0adena ear0adena ear0adena declara una varia'le
llamada cadena cadena cadena cadena 7 la iniciali=a con un arreglo de carac(ere,2
crear!adena 2A!-O te1to
6data
cadena EF3E te1to,"
E8D2
!upongamo, .ue invocamo, el macro do, vece,2
0rear0adena ]$olaW
0rear0adena ]9dio,W
!e produce un error8 7a .ue el en,am'lador no permi(e redefinir la e(i.ue(a cadena cadena cadena cadena2
crear!adena O\olaP
% 6data
% cadena EF3E O\olaP,"
!rear!adena OAdiosP
% 6data
% cadena EF3E OAdiosP," 0 jerrord
Uso de %#"A% para evi(ar lo, pro'lema, oca,ionado, por la, redefinicione, de e(i.ue(a,8
podemo, aplicar la direc(iva 3093 a la, e(i.ue(a, den(ro de la definicin de un macro/
0uando una e(i.ue(a ,e marca como 30938 el preproce,ador convier(e el nom're de e,a
e(i.ue(a en un iden(ificador Anico8 cada ve= .ue ,e e1pande el macro/ $e a.u- una ver,in de
crear0adena crear0adena crear0adena crear0adena en la .ue ,e u(ili=a a 30932
crear!adena 2A!-O te1to
1#8

4O!A4 cadena
6data
cadena EF3E te1to,"
E8D2
!i invocamo, al macro do, vece, como an(e,8 el cdigo .ue genera el preproce,ador ,u,(i(u7e
cada ocurrencia de cadena cadena cadena cadena con un iden(ificador Anico2
crear!adena O\olaP
% 6data
% NN"""" EF3E O\olaP,"
crear!adena OAdiosP
% 6data
% NN"""% EF3E OAdiosP,"
3o, nom're, de la, e(i.ue(a, producido, por el en,am'lador (oman la forma HHnnnn8 en
donde nnnn e, un en(ero Anico/ 3a direc(iva 3093 (am'iDn de'e u,ar,e para la, e(i.ue(a, de
cdigo en lo, macro,/
4acro, .ue con(ienen cdigo 7 da(o, 4acro, .ue con(ienen cdigo 7 da(o, 4acro, .ue con(ienen cdigo 7 da(o, 4acro, .ue con(ienen cdigo 7 da(o,
9 menudo8 lo, macro, con(ienen (an(o cdigo como da(o,/ Por e>emplo8 el ,iguien(e macro
m6,cri'ir m6,cri'ir m6,cri'ir m6,cri'ir (m;ri(e) mue,(ra una cadena li(eral en la con,ola2
m,rite 2A!-O te1to
4O!A4 cadena 00 datos locales
cadena EF3E te1to," 00 define la cadena
6code
pus' ed1
mov ed1,O$$SE3 cadena
call ,riteString
pop ed1
E8D2
1#9

3a, ,iguien(e, in,(ruccione, invocan al macro do, vece,8 7 le pa,an di,(in(a, li(erale, de
cadena2
m,rite OPor favor escriba su nombre de pilaP
m,rite OPor favor escriba su apellidoP
3a e1pan,in .ue *ace el en,am'lador de la, do, in,(ruccione, mue,(ra .ue a cada cadena
,e le, a,igna una e(i.ue(a Anica 7 la, in,(ruccione, mov ,e a>u,(an de manera acorde2
mWrite 4Por fa5or escri+a su 1om+re de pila6
% 6data
% NN"""" EF3E OPor favor escriba su nombre de pilaP,"
% 6code
% pus' ed1
% mov ed1, O$$SE3 NN""""
% call ,riteString
% pop ed1
mWrite 4Por fa5or escri+a su apellido6
% 6data
% NN"""% EF3E OPor favor escriba su apellidoP,"
% 6code
% pus' ed1
% mov ed1, O$$SE3 NN"""%
% call ,riteString
% pop ed1
4acro, anidado, 4acro, anidado, 4acro, anidado, 4acro, anidado,
9 un macro .ue ,e invoca de,de o(ro macro ,e le conoce como macro anidado/ 0uando el
preproce,ador del en,am'lador encuen(ra una llamada a un macro anidado8 lo e1pande en
e,e lugar/ 3o, parBme(ro, .ue ,e pa,an a un macro .ue encierra a o(ro macro8 ,e pa,an
direc(amen(e a ,u, macro, anidado,/
jemplo m=rite%n 6l ,iguien(e macro m;ri(e3n m;ri(e3n m;ri(e3n m;ri(e3n e,cri'e una li(eral de cadena en la con,ola 7
la ad>un(a a un fin de l-nea/ #nvoca m;ri(e m;ri(e m;ri(e m;ri(e 7 llama al procedimien(o 0rlf 0rlf 0rlf 0rlf2
11:

m,rite4n 2A!-O te1to
m,rite te1to
call !rlf
E8D2
6l parBme(ro (e1(o ,e pa,a direc(amen(e a m;ri(e m;ri(e m;ri(e m;ri(e8 !upongamo, .ue la ,iguien(e in,(ruccin
invoca a m;ri(e3n2
m,rite4n O2i programa de eemplo de macrosP
6n la e1pan,in de cdigo re,ul(an(e8 el nivel de anidamien(o (2) en,eguida de la,
in,(ruccione, indica .ue ,e *a invocado a un macro anidado2
m,rite4n O2i programa de eemplo de macrosP
. 6data
. NN""". EF3E O2i programa de eemplo de macrosP,"
. 6code
. pus' ed1
. mov ed1,O$$SE3 NN""".
. call ,riteString
. pop ed1
% call !rlf
5irec(iva, de en,am'lado cond 5irec(iva, de en,am'lado cond 5irec(iva, de en,am'lado cond 5irec(iva, de en,am'lado condicional icional icional icional
Podemo, u(ili=ar una varia'le de direc(iva, de en,am'lado condicional di,(in(a, en con>un(o
con lo, macro,8 para .ue D,(o, ,ean mB, fle1i'le,/ 3a ,in(a1i, general para la, direc(iva, de
en,am'lado condicional e,2
#F condicin
in,(ruccione,
^6l,e
in,(ruccione,_
6N5#F

Las directivas constantes (ue se muestran no deben con$undirse con las directivas en tiempo de
ejecucin& como .I2 ' .;F@I2. ;stas )ltimas eval)an eCpresiones con base en los valores en tiempo de
ejecucin almacenados en registros ' variables.
11"



3a ,iguien(e (a'la li,(a la, direc(iva, de en,am'lado condicional mB, comune,/ 0uando la,
de,cripcione, indican .ue una direc(iva permite el ensamblado8 ,ignifica .ue (oda, la,
in,(ruccione, ,u',iguien(e, ,e en,am'lan *a,(a la ,iguien(e direc(iva 63!6 o 6N5#F/ $a7 .ue
enfa(i=ar .ue la, direc(iva, .ue ,e li,(an en la (a'la ,e evalAan en (iempo de en,am'lado8 no
en (iempo de e>ecucin/
5irec(iva 5irec(iva 5irec(iva 5irec(iva 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
#F expresin Permi(e el en,am'lado ,i el valor de expresin e, verdadero
(di,(in(o de cero)/ 3o, po,i'le, operadore, relacionado, ,on 3T8
YT8 6L8 N68 36 7 Y6
#F" IargumentoJ Permi(e el en,am'lado ,i argumento e,(B en 'lanco/ 6l nom're
del argumen(o de'e ir encerrado en(re lo, ,igno, UV
#FN" IargumentoJ Permi(e el en,am'lado ,i argumento no e,(B en 'lanco/ 6l
nom're del argumen(o de'e ir encerrado en(re ,igno, UV
#F#5N Iarg/J?Iarg3J Permi(e el en,am'lado ,i lo, do, argumen(o, ,on iguale,/ C,a
una comparacin ,en,i'le a ma7A,cula, 7 minA,cula,
#F#5N# Iarg/J?Iarg3J Permi(e el en,am'lado ,i lo, do, argumen(o, ,on iguale,/ C,a
una comparacin in,en,i'le a ma7A,cula, 7 minA,cula,
#F5#F Iarg/J?Iarg3J Permi(e el en,am'lado ,i lo, do, argumen(o, no ,on iguale,/
C,a una comparacin ,en,i'le a ma7A,cula, 7 minA,cula,
#F5#F# Iarg/J?Iarg3J Permi(e el en,am'lado ,i lo, do, argumen(o, no ,on iguale,/
C,a una comparacin in,en,i'le a ma7A,cula, 7 minA,cula,
#F56F nombre Permi(e el en,am'lado ,i nombre e,(B definido
#FN56F nombre Permi(e el en,am'lado ,i nombre no e,(B definido
6N5#F Termina un 'lo.ue .ue ,e empe= con una de la, direc(iva, de
en,am'lado condicional
63!6 Termina el en,am'lado de la, in,(ruccione, an(eriore, ,i la
condicin e, +erdadera/ !i la condicin e, fal,a/ 63!6
en,am'la la, in,(ruccione, *a,(a la ,iguien(e in,(ruccin 6N5#F
63!6#F expresin 6n,am'la (oda, la, in,(ruccione, *a,(a 6N5#F ,i la condicin
e,pecificada por una direc(iva condicional an(erior e, fal,a 7 el
valor de la e1pre,in ac(ual e, verdadero
11#

6H#T4 !ale del macro inmedia(amen(e8 evi(ando .ue ,e e1pandan
(oda, la, in,(ruccione, ,iguien(e, del macro

0ompro'acin de argumen(o, fal(an(e, 0ompro'acin de argumen(o, fal(an(e, 0ompro'acin de argumen(o, fal(an(e, 0ompro'acin de argumen(o, fal(an(e,
Cn macro puede compro'ar ,i alguno de ,u, argumen(o, e,(B en 'lanco/ 9 menudo8 ,i un
macro reci'e un argumen(o en 'lanco8 ,e producen in,(ruccione, invBlida, cuando el
preproce,ador e1pande el macro/ Por e>emplo8 ,i invocamo, el macro m;ri(e!(ring m;ri(e!(ring m;ri(e!(ring m;ri(e!(ring ,in pa,arle
un argumen(o8 el macro ,e e1pande con una in,(ruccin invBlida al mover el de,pla=amien(o
de la cadena a 65H/ 9 con(inuacin ,e mue,(ran in,(ruccione, generada, por el en,am'lador8
.ue de(ec(a el operando fal(an(e 7 genera un men,a>e de error2
m,riteString
% pus' ed1
% mov ed1,O$$SE3
2acro.6asm(%#) * error A."#%* missing operand after unar5 operator
% call ,riteString
% pop ed1
Para evi(ar lo, errore, oca,ionado, por operando, fal(an(e,8 podemo, u,ar la direc(iva #F" (si
est* en blanco)8 la cual devuelve verdadero ,i un argumen(o del macro e,(B en 'lanco/
(am'iDn podemo, u,ar el operador #FN" (si no est* en blanco)8 el cual devuelve verdadero ,i
el argumen(o de un macro no e,(B en 'lanco/ +amo, a crear una ver,in al(erna(iva de
m;ri(e!(ring m;ri(e!(ring m;ri(e!(ring m;ri(e!(ring .ue mue,(ra un men,a>e de error duran(e el en,am'lado2
m,riteString 2A!-O cadena
I$E WcadenaX
E!\O KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
E!\O & Error* falta un parImetro en m,riteString
E!\O & (no se genero cdigo)
E!\O KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
E:I32
E8DI$
pus' ed1
111

mov ed1,O$$SE3 cadena
call ,riteString
pop ed1
E8D2
0omo vimo, la direc(iva 60$ e,cri'e un men,a>e en la con,ola mien(ra, ,e en,am'la un
programa/ 3a direc(iva 6H#T4 indica al preproce,ador .ue de'e ,alir del macro ,in e1pandir
mB, in,(ruccione, de la mi,ma/
#niciali=adore, de argumen(o, prede(erminado, #niciali=adore, de argumen(o, prede(erminado, #niciali=adore, de argumen(o, prede(erminado, #niciali=adore, de argumen(o, prede(erminado,
3o, macro, pueden (ener iniciali=adore, de argumen(o, prede(erminado,/ !i fal(a un
argumen(o del macro cuando ,e *ace la llamada a D,(a8 ,e u(ili=a el argumen(o
prede(erminado/ 3a ,in(a1i, e,2
nombreParam *( WargumentoX
(3o, e,pacio, an(e, 7 de,puD, de lo, operando, ,on opcionale,)/ Por e>emplo8 el macro
m;ri(e3n m;ri(e3n m;ri(e3n m;ri(e3n puede proporcionar una cadena .ue con(enga un ,olo e,pacio como argumen(o
prede(erminado/ !i ,e llama ,in argumen(o,8 de (oda, forma, imprime un e,pacio8 ,eguido de
un fin de l-nea2
m,rite4n 2A!-O te1to*(WP OX
m,rite te1to
call !rlf
E8D2
6l en,am'lador genera un error ,i ,e u(ili=a una cadena nula (]W) como argumen(o
prede(erminado8 por lo .ue de'emo, in,er(ar cuando meno, un e,pacio en(re comilla,/
61pre,ione, 'ooleana, 61pre,ione, 'ooleana, 61pre,ione, 'ooleana, 61pre,ione, 'ooleana,
6l en,am'lador no, permi(e u(ili=ar lo, ,iguien(e, operadore, relacionale, en e1pre,ione,
'ooleana, con,(an(e, .ue con(enga a #F 7 o(ra, direc(iva, condicionale,2
43 2enor @ue
S3 2a5or @ue
ER Igual @ue
8E Distinto @ue
4E 2enor o igual @ue
113

SE ma5or o igual @ue
5irec(iva, #F8 63!6 7 6N5#F 5irec(iva, #F8 63!6 7 6N5#F 5irec(iva, #F8 63!6 7 6N5#F 5irec(iva, #F8 63!6 7 6N5#F
3a direc(iva #F de'e ir ,eguida de una e1pre,in 'ooleana con,(an(e/ 3a e1pre,in puede
con(ener con,(an(e, en(era,8 ,im'lica, o argumen(o, de macro con,(an(e,8 pero no puede
con(ener regi,(ro ni nom're, de varia'le,/ Cn forma(o de ,in(a1i, u(ili=a ,olo a #F 7 6N5#F2
I$ e1presin
listaKinstrucciones
E8DI$
Otro formato utiliza a I$, E4SE 5 E8DI$*
I$ e1presin
listaKinstrucciones
E4SE
listaKinstrucciones
E8DI$
jemplo1 el macro m)otoxy"onst 6l macro mY(o17 mY(o17 mY(o17 mY(o17 u(ili=a lo, operadore, 3T 7 YT para
reali=ar la compro'acin de rango, en lo, argumen(o, .ue ,e pa,an al macro/ 3o, argumen(o,
H 7 K de'en ,er con,(an(e,/ (ro ,-m'olo con,(an(e llamado 6<<! cuen(a el nAmero de errore,
encon(rado,/ 5ependiendo del valor de H8 podemo, e,(a'lecer 6<<! a 1/ 5ependiendo del
valor de K8 podemo, ,umar 1 a 6<<!/ Por Al(imo8 ,i 6<<! e, ma7or .ue cero8 la direc(iva
6H#T4 (ermina el macro2
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
mSoto15!onst 2A!-O :*-ER, F*-ER
0 Establece la posicin del cursor en la columna :, fila F6
0 -e@uiere @ue las coordenadas : 5 F sean e1presiones constantes
0 en los rangos " W( : W #" 5 " W( F W .;
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
4O!A4 E--S 00 constante local
E--S ( "
I$ (: 43 ") O- (: S3 M+)
115

E!\O Advertencia* El primer argumento para mSoto15 (:) estI fuera de
rango6
E!\O &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
E--S ( %
E8DI$
I$ ( F 43 ") O- (F S3 .;)
E!\O Advertencia* El segundo argumento para mSoto15 (F) estI fuera de
rango6
E!\O &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
E--S ( E--S L %
E8DI$
I$ E--S S3 " 00 sA se encontraron errores,
E:I32 00 sale del macro
E8DI$
pus' ed1
mov d',F
mov dl,:
call Soto15
pop ed1
E8D2
3a, direc(iva, #F#5N e #F#5N# 3a, direc(iva, #F#5N e #F#5N# 3a, direc(iva, #F#5N e #F#5N# 3a, direc(iva, #F#5N e #F#5N#
3a direc(iva #F#5N# reali=a una comparacin in,en,i'le a ma7A,cula, 7 minA,cula en(re do,
,-m'olo, (inclu7endo lo, nom're, de lo, parBme(ro, del macro) 7 devuelve verdadero ,i ,on
iguale,/ 3a direc(iva #F#5N reali=a una comparacin ,en,i'le a ma7A,cula, 7 minA,cula,/ 6,(a
Al(ima e, A(il cuando de,eamo, a,egurarno, de .ue el procedimien(o .ue llam al macro no
*a7a u(ili=ado un argumen(o de regi,(ro .ue pueda e,(ar en conflic(o con el u,o de lo,
regi,(ro, den(ro del macro/ 3a ,in(a1i, para #F#5N# e,
I$ID8I WsAmboloX, WsAmboloX
instrucciones
116

E8DI$
3a ,in(a1i, para #F#5N e, idDn(ica/ Por e>emplo8 en el ,iguien(e macro m<ead"uf m<ead"uf m<ead"uf m<ead"uf8 el ,egundo
argumen(o no puede ,er 65H 7a .ue ,e ,o're,cri'irB cuando el de,pla=amien(o de "Afer "Afer "Afer "Afer ,e
mueva a 65H/ 3a ,iguien(e ver,in revi,ada del macro mue,(ra un men,a>e de adver(encia ,i
no ,e cumple con e,(e re.uerimien(o2
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
m-eadEuf 2A!-O apuntEufer, ma1!ars
0
0 4ee de la entrada estIndar 'acia un b?fer6
0 -ecibe* desplazamiento del b?fer, cuenta del n?mero mI1imo
0 de caracteres @ue pueden introducirse6 El segundo argumento no
0 puede ser ed1 ni ED:
I$ID8I Wma1!arsX , WED:X
E!\O Advertencia* ED: no puede ser el segundo argumento para m-eadEuf6
E!\O &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
E:I32
E8DI$
pus' ec1
pus' ed1
mov ed1,apuntEufer
mov ec1,ma1!ars
call -eadString
pop ed1
pop ec1
E8D2
3a ,iguien(e in,(ruccin *ace .ue el macro genere un men,a>e de adver(encia 7a .ue 65H e,
el ,egundo argumen(o2
m-eadEuf O$$SE3 b?fer,ed1
117

peradore, e,peciale, peradore, e,peciale, peradore, e,peciale, peradore, e,peciale,
$a7 cua(ro operadore, en en,am'lador .ue *acen a lo, macro, mB, fle1i'le,/
i perador de ,u,(i(ucin
UV perador de (e1(o:li(eral
a perador de carBc(er:li(eral
f perador de e1pan,in

perador de ,u,(i(ucin perador de ,u,(i(ucin perador de ,u,(i(ucin perador de ,u,(i(ucin
6l operador de sustitucin DKE re,uelve la, referencia, am'igua, a lo, nom're, de lo,
parBme(ro, den(ro de un macro/ 6l macro m!*o%<egi,(er m!*o%<egi,(er m!*o%<egi,(er m!*o%<egi,(er mue,(ra el nom're 7 el con(enido en
*e1adecimal de un regi,(ro de 32 'i(,/ 9 con(inuacin ,e mue,(ra una llamada de e>emplo2
6code
mS'o=-egister E!:
$e a.u- un e>emplo de lo, re,ul(ado, generado, por la llamada m!*o%<egi,(er2
60H R
&&&&&1&1
Podr-a definir,e una varia'le de cadena .ue con(enga el nom're del regi,(ro den(ro del macro2
mS'o=-egister 2A!-O nombre-eg
6data
cad3emp EF3E O1om+reRe76,"
Pero el preproce,ador a,umir-a .ue nom're<eg nom're<eg nom're<eg nom're<eg e, par(e de una li(eral de cadena8 7 no lo
,u,(i(uir-a con el valor del argumen(o .ue reci'e el macro/ 6n ve= de ello8 ,i agregamo, el
operador i8 el preproce,ador ,e ve o'ligado a in,er(ar el argumen(o del macro (como 60H) en
la li(eral de cadena/ 6l ,iguien(e e>emplo mue,(ra cmo definir cadTemp cadTemp cadTemp cadTemp2
mS'o=-egister 2A!-O nombre-eg
6data
cad3emp EF3E O81om+reRe76,"
perador de e1pan,in (f) perador de e1pan,in (f) perador de e1pan,in (f) perador de e1pan,in (f)
118

6l operador de expansin DLE e1pande macro, de (e1(o o convier(e e1pre,ione, con,(an(e, en
,u, pre,en(acione, de (e1(o/ $ace e,(o de varia, forma,/ 0uando ,e u(ili=a con T6HT6LC8 el
operador f evalAa una e1pre,in con,(an(e 7 convier(e el re,ul(ado en un en(ero/ 6n el
,iguien(e e>emplo8 el operador f evalAa la e1pre,in ( 5 E cuen(a) 7 devuelve el en(ero 15
(como (e1(o)2
cuenta ( %"
valSuma 3E:3ER9 Y(< L cuenta) 0 ( O%<P
!i un macro re.uiere un argumen(o en(ero con,(an(e8 el operador f no, da la fle1i'ilidad de
pa,ar una e1pre,in en(era/ 3a e1pre,in ,e evalAa a ,u valor en(ero8 el cual ,e pa,a a
con(inuacin del macro/ Por e>emplo8 al invocar mYo(o170on,( mYo(o170on,( mYo(o170on,( mYo(o170on,(8 la, ,iguien(e, e1pre,ione, ,e
evalAan como 5& 7 72
mSoto15!onst Y(< & %"), Y(7 L;)
6l preproce,ador produce la, ,iguien(e, in,(ruccione,2
% pus' ed1
% mov d',M
% mov dl,<"
% call Soto15
% pop ed1
L al principio de la lnea cuando el operador e1pre,in (f) e, el primer carBc(er en una l-nea
de cdigo fuen(e8 in,(ru7e al preproce,ador para .ue e1panda (odo, lo, macro, de (e1(o 7 la,
macrofuncione, .ue encuen(re en la mi,ma l-nea/ por e>emplo8 ,upongamo, .ue de,eamo,
mo,(rar el (ama@o de un arreglo en la pan(alla duran(e el en,am'lado/ 3o, ,iguien(e, in(en(o,
no producirBn el re,ul(ado de,eado2
/da(a
arreglo 5;<5 182838485868788
/code
60$ 6l arreglo con(iene (!#I6F arreglo) '7(e,
60$ 6l arreglo con(iene f(!#I6F arreglo) '7(e,
6l re,ul(ado en pan(alla ,er-a inA(il2


6l arreglo con(iene (!#I6F arreglo) '7(e,
6l arreglo con(iene f(!#I6F arreglo) '7(e,
119


!i en ve= de ello u(ili=amo, T6HT6LC para crear un macro .ue con(enga (!#I6F arreglo)8 D,(a
puede e1pandir,e en la ,iguien(e l-nea2
cadTemp T6HT6LC f(!#I6F arreglo)
f 60$ 6l arreglo con(iene 0adTemp '7(e,
!e produce el ,iguien(e re,ul(ado
6l arreglo con(iene 32 '7(e,
5isualizacin de un n@mero de lnea 6l ,iguien(e macro 4ul32 4ul32 4ul32 4ul32 mul(iplica ,u, primero, do,
argumen(o, en(re ,-8 7 devuelve el produc(o en el (ercer argumen(o/ !u, parBme(ro, pueden
,er regi,(ro,8 operando, de memoria 7 operando, inmedia(o, (e1cep(o el produc(o)2
2947. 2A!-O op%, op., producto
I$ID8I Wop.X,WEA:X
8924I8EA 3E:3ER9 Y(Z4I8E)
E!\O KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Y E!\O & Error en la lAnea 8924I8EA* EA: no puede ser el segundo
E!\O & argumento cuando se invoca al macro 2947.6
E!\O KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
E:I32
E8DI$
pus' ea1
mov ea1,op%
mul op.
mov producto,ea1
pop ea1
E8D2
4ul32 4ul32 4ul32 4ul32 comprue'a un impor(an(e re.uerimien(o2 69H no puede ,er el ,egundo argumen(o/ 3o
in(ere,an(e ,o're e,(e macro e, .ue mue,(ra el nAmero de l-nea de,de el cual ,e llam8 para
facili(ar el ra,(reo 7 la correccin del pro'lema/ Primero ,e define el macro de (e1(o NC43#N69/
13:

Z,(a *ace referencia a X3#N68 un operador predefinido del en,am'lador .ue devuelve el
nAmero de l-nea de cdigo ac(ual2
8924I8EA 3E:3ER9 Y(Z4I8E)
9 con(inuacin8 el operador de e1pan,in(f) en la primera columna de la l-nea .ue con(iene la
in,(ruccin 60$ *ace .ue NC43#N69 ,e e1panda2
Y E!\O & Error en lAnea 8924I8EA* EA: no puede ser el segundo
perador de (e1(o perador de (e1(o perador de (e1(o perador de (e1(o: :: :li(eral li(eral li(eral li(eral (UV) (UV) (UV) (UV)
6l operador de texto6literal DIJE agrupa uno o mB, carac(ere, 7 ,-m'olo, en una ,ola li(eral de
(e1(o/ 6vi(a .ue el preproce,ador in(erpre(e lo, miem'ro, de la li,(a como argumen(o,
,eparado,/ 6,(e operador e, mu7 A(il cuando una cadena con(iene carac(ere, e,peciale,8
como coma,8 ,igno, de porcen(a>e (f)8 ,igno, i8 7 ,igno, de pun(o 7 coma ([)8 .ue de o(ra
manera ,e in(erpre(ar-an como delimi(adore, u o(ro, operadore,/ Por e>emplo8 el macro
m;ri(e m;ri(e m;ri(e m;ri(e reci'e una li(eral de cadena como ,u Anico argumen(o/ !i le pa,amo, la ,iguien(e
cadena8 al preproce,ador la in(erpre(arB como (re, argumen(o, de macro ,eparado,2
m,rite O4Anea tresP, "d', "a'
6l (e1(o de,puD, de la primera coma ,e de,car(ar-a8 7a .ue el macro ,lo e,pera un
argumen(o/ Por o(ro lado ,i encerramo, la cadena con el operador de (e1(o:li(eral8 el
preproce,ador con,idera .ue (odo el (e1(o en(re lo, ,igno, U V e, ,lo un argumen(o de
macro2
m,rite WP4inea tresP, "d', "a'X
perador de carBc(er perador de carBc(er perador de carBc(er perador de carBc(er: :: :li(eral (a) li(eral (a) li(eral (a) li(eral (a)
6l operador de car*cter6literal ,e inven( por la mi,ma ra=n .ue el operador de (e1(o:li(era2
o'liga al preproce,ador a (ra(ar un operador predefinido como un carBc(er ordinario/ 6n la
,iguien(e definicin T6HT6LC8 el operador a evi(a .ue el ,-m'olo V ,ea un delimi(ador de (e1(o2
)alorFIncorrecto 3E:3ER9 Wadvertencia* 4a coordenada F es dX .;X
jemplo de mensaje de advertencia 6l ,iguien(e e>emplo mue,(ra cmo funcionan lo,
operadore, f8 i 7 a en con>un(o/ +amo, a ,uponer .ue definimo, el ,-m'olo +alorK#ncorrec(o +alorK#ncorrec(o +alorK#ncorrec(o +alorK#ncorrec(o/
Podemo, crear un macro llamado 4o,(rar9dver(encia 4o,(rar9dver(encia 4o,(rar9dver(encia 4o,(rar9dver(encia .ue reci'a un argumen(o de (e1(o8 lo
encierre en(re comilla, 7 pa,e la li(eral al macro m;ri(e m;ri(e m;ri(e m;ri(e/ ',ervamo, el u,o del operador de
,u,(i(ucin (i)2
2ostrarAdvertencia 2A!-O mensae
m,rite OgmensaeP
E8D2
13"

9 con(inuacin invocamo, a 4o,(rar9dver(encia 4o,(rar9dver(encia 4o,(rar9dver(encia 4o,(rar9dver(encia 7 le pa,amo, la e1pre,in f+alorK#ncorrec(o/
6l operador f evalAa (de,referencia) a +alorK#ncorrec(o +alorK#ncorrec(o +alorK#ncorrec(o +alorK#ncorrec(o 7 produce una cadena e.uivalen(e2
6code
2ostrarAdvertencia Y)alorFIncorrecto
0omo era de e,perar,e8 el programa ,e e>ecu(a 7 mue,(ra el men,a>e de adver(encia2
9dver(encia2 3a coordenada K e, V 24
4acrofuncione, 4acrofuncione, 4acrofuncione, 4acrofuncione,
Cna macrofuncin e, ,imilar a un macroprocedimien(o8 en cuan(o a .ue ,e a,igna un nom're
a una li,(a de in,(ruccione, en lengua>e en,am'lador/ 3a diferencia e, .ue ,iempre devuelve
una con,(an(e (en(ero o cadena) a (ravD, de la direc(iva 6H#T4/ 6n el ,iguien(e e>emplo8 la
macro 6,(a5efinido 6,(a5efinido 6,(a5efinido 6,(a5efinido devuelve verdadero (:1) ,i ,e *a definido un ,-m'olo, dado[ en ca,o
con(rario8 devuelve fal,o (&)2
EstaDefinido 2A!-O sAmbolo
I$DE$ sAmbolo
E:I3 WK%X 00 )erdadero
E4SE
E:I32 W"X 00 $also
E8D2
3a direc(iva 6H#T4 (,alir de macro) de(iene el re,(o de la e1pan,in de la macro/
%lamada a una microfuncin 9l llamar a una microfuncin8 ,u li,(a de argumen(o, de'e ir
encerrada en(re parDn(e,i,/ Por e>emplo8 podemo, llamar a la macro 6,(a5efinido 6,(a5efinido 6,(a5efinido 6,(a5efinido 7 pa,arle
<eal4ode <eal4ode <eal4ode <eal4ode8 el nom're de un ,-m'olo .ue puede o no e,(ar definido2
I$ EstaDefinido( -eal2ode)
mov a1,Zdata
mov ds,a1
E8DI$
!i el en,am'lador 7a *a encon(rado una definicin de <eal4ode <eal4ode <eal4ode <eal4ode an(e, de e,(e pun(o en el
proce,o de en,am'lado8 en,am'la la, do, in,(ruccione,2
mov a1,Zdata
mov ds,a1
13#

Puede colocar,e la mi,ma direc(iva #F den(ro de una macro llamada #nicio #nicio #nicio #nicio2
Inicio 2A!-O
I$ EstaDefinido (-eal2ode)
mov a1,Zdata
mov ds,a1
E8DI$
E8D2
Cn macro como 6,(a5efinido 6,(a5efinido 6,(a5efinido 6,(a5efinido puede ,er A(il cuando ,e di,e@an programa, para vario, mdulo,
de memoria/ Por e>emplo8 podemo, u,arla para de(erminar .uD arc*ivo de inclu,in de'emo,
u,ar2
I$ EstaDefinido (-eal2ode)
I8!49DE Irvine%/6inc
E4SE
I8!49DE Irvine7.6inc
E8DI$
Definicin de smbolo .ealMode Todo lo .ue re,(a e, encon(rar una manera de definir el
,-m'olo <eal4ode <eal4ode <eal4ode <eal4ode/ Cna forma e, colocar la ,iguien(e l-nea al principio de un programa2
-eal2ode ( %
5e manera al(erna(iva8 la l-nea de comando, del en,am'lador (iene una opcin para definir
,-m'olo,8 u,ando el modificador \5/ 6l ,iguien(e comando 43 define el ,-m'olo <eal4ode 7 le
a,igna un valor de 12
24 _c _D-eal2ode(% miProg6asm
6l comando 43 corre,pondien(e para lo, programa, en modo pro(egido no define el ,-m'olo
de <eal4ode2
24 _c miProg6asm
5efinicin de 'lo.ue, de repe(icin 5efinicin de 'lo.ue, de repe(icin 5efinicin de 'lo.ue, de repe(icin 5efinicin de 'lo.ue, de repe(icin
49!4 cuen(a con una variedad de direc(iva, de i(eracin para generar 'lo.ue, repe(ido, de
in,(ruccione,2 ;$#368 <6P69T8 F< 7 F<0/ 9 diferencia de la in,(ruccin 3P8 e,(a,
direc(iva, funcionan ,lo en (iempo de en,am'lado8 u,ando valore, con,(an(e, como
condicione, 7 con(adore, de ciclo2
131

3a direc(iva ;$#36 repi(e un 'lo.ue de in,(ruccione, con 'a,e en una e1pre,in
'ooleana/
la direc(iva <6P69T repi(e un 'lo.ue de in,(ruccione, con 'a,e en el valor de un
con(ador/
3a direc(iva F< repi(e un 'lo.ue de in,(ruccione, i(erando a (ravD, de una li,(a de
,-m'olo,/
5irec(iva F<0 repi(e un 'lo.ue de in,(ruccione, i(erando a (ravD, de una cadena de
carac(ere,/
5irec(iva 5irec(iva 5irec(iva 5irec(iva ;$#36 ;$#36 ;$#36 ;$#36
3a direc(iva ;$#36 repi(e un 'lo.ue de in,(ruccione,8 ,iempre 7 cuando una e1pre,in
con,(an(e e,pec-fica ,ea verdadera/ 3a ,in(a1i, e,
,\I4E e1presin!onst
instrucciones
E8D,
6l ,iguien(e cdigo mue,(ra cmo generar nAmero, de Fi'onacci en(re 1 7 F&&&&&&&* como
una ,erie de con,(an(e, en (iempo de en,am'lado2
6data
val% ( %
val. ( %
D,O-D val% 0 primeros dos valores
D,O-D val.
val7 ( val% L val.
,\I4E val7 43 "$"""""""'
D,O-D val7
val% ( val.
val. ( val7
val7 ( val% L val.
E8D2
3o, valore, generado, por e,(e cdigo pueden ver,e en un arc*ivo de li,(ado (/3!T)
5irec(iva <6P69T 5irec(iva <6P69T 5irec(iva <6P69T 5irec(iva <6P69T
133

3a direc(iva <6P69T repi(e un 'lo.ue de in,(ruccione, un nAmero fi>o de vece, en (iempo de
en,am'lado/ 3a ,in(a1i, e,2
-EPEA3 expresinConst
instrucciones
E8D2
xpresin"onst8 una e1pre,in en(era con,(an(e ,in ,igno8 de(ermina el nAmero de
repe(icione,/
<6P69T puede u,ar,e en forma ,imilar a 5CP para crear un arreglo/ 6n el ,iguien(e e>emplo8 la
e,(ruc(ura #ndicadore,0lima con(iene una cadena llamada u'icacin8 ,eguida por un arreglo
de indicadore, de lluvia 7 *umedad2
SE2A8ASTPO-TA8IO ( <.
Indicadores!lima S3-9!3
ubicacion EF3E <" D9P(")
-EPEA3 SE2A8ASTPO-TA8IO
4O!A4 lluvia, 'umedad
lluvia D,O-D N
'umedad D,O-D N
E8D2
Indicadores!lima E8DS
!e u(ili= la direc(iva 3093 para evi(ar lo, errore, oca,ionado, por la redefinicin de lluvia 7
*umedad8 cuando ,e repi(a el ciclo en (iempo de en,am'lado/
5irec(iva F< 5irec(iva F< 5irec(iva F< 5irec(iva F<
3a direc(iva F< repi(e un 'lo.ue de in,(ruccione, al i(erar a (ravD, de una li,(a de ,-m'olo,
delimi(ado, por coma,/ 0ada ,-m'olo en la li,(a produce una i(eracin de ciclo/ 3a ,in(a1i, e,2
$O- parImetro, Warg%,arg.,arg7,DX
Instrucciones
E8D2
6n la primera i(eracin del ciclo8 par*metro (oma el valor de arg/[ en la ,egunda i(eracin8
par*metro (oma el valor de arg3[ 7 a,- ,uce,ivamen(e *a,(a el Al(imo argumen(o en la li,(a/
135

jemplo de inscripcin de estudiantes +amo, a crear un e,cenario de in,cripcin de
e,(udian(e,8 en el .ue (endremo, una e,(ruc(ura llamada 0C<!8 la cual con(iene el nAmero
del cur,o 7 ,u nAmero de crDdi(o,/ Cna e,(ruc(ura !646!T<6 con(iene un arreglo de ,ei,
cur,o, 7 un con(ador llamado Num0ur,o, Num0ur,o, Num0ur,o, Num0ur,o,2
!9-SO S3-9!3
8umero EF3E + D9P(N)
!reditos EF3E N
!9-SO E8DS
0 9n semestre contiene un arreglo de cursos6
SE2ES3-E S3-9!3
!urso !9-SO / D9P(WX)
8um!ursos ,O-D N
SE2ES3-E E8DS
Podemo, u,ar un ciclo F< para definir cua(ro o'>e(o, !646!T<68 cada uno de lo, cuale,
(iene un nom're di,(in(o8 ,eleccionado de la li,(a de ,-m'olo, en(re lo, ,igno, UV2
6data
$O- nomSem,WOtonio%+++, Primavera.""", )erano.""", Otonio."""X
nomSem SE2ES3-E WX
E8D2
!i in,peccionamo, el arc*ivo de li,(ado8 encon(raremo, la, ,iguien(e, varia'le,2
6data
Otonio%+++ SE2ES3-E WX
Primavera.""" SE2ES3-E WX
)erano.""" SE2ES3-E WX
Otonio.""" SE2ES3-E WX
5irec(iva F<0 5irec(iva F<0 5irec(iva F<0 5irec(iva F<0
3a direc(iva F<0 repi(e un 'lo.ue de in,(ruccione, a i(erar a (ravD, de una cadena de
carac(ere,/ 0ada carBc(er en la cadena provoca una i(eracin del ciclo/ 3a ,in(a1i, e,
136

$O-! parImetro, WcadenaX
instrucciones
E8D2
6n la primera i(eracin de ciclo8 par*metro e, igual al primer carBc(er en la cadena[ en la
,egunda i(eracin8 par*metro e, igual al ,egundo carBc(er en la cadena[ 7 a,- ,uce,ivamen(e8
*a,(a el final de la cadena/ 6l ,iguien(e e>emplo crea una (a'la de 'A,.ueda de carac(ere, .ue
con,i,(e en vario, carac(ere, no alfa'D(ico,/ ',ervamo, .ue U7V de'e ir precedido, por el
operador de carBc(er:li(eral (a) para evi(ar .ue violen la ,in(a1i, de la direc(iva P<02
Delimitadores 4AEE4 EF3E
$O-! code,WZkUYhg&dWdXX
EF3E OgcodeP
E8D2
!e genera la ,iguien(e (a'la de da(o,8 .ue podemo, ver en el arc*ivo de li,(ado2
"""""""" ;"% EF3E OZP
"""""""% .7% EF3E OkP
""""""". .;% EF3E OUP
D
D
"""""""/ .A% EF3E O&P
"""""""M 7!% EF3E OWP
"""""""# 7E% EF3E OXP
11 11 11 11 Programacin en 4! Programacin en 4! Programacin en 4! Programacin en 4!: :: :;indo%, ;indo%, ;indo%, ;indo%,
9n(eceden(e, 9n(eceden(e, 9n(eceden(e, 9n(eceden(e,
0uando ,e inicia una aplicacin ;indo%,8 crea una ven(ana de con,ola o una ven(ana grBfica/
$emo, e,(ado u,ando la ,iguien(e opcin con el comando 3#N? en el arc*ivo de
proce,amien(o por lo(e, ma;e7bat8 el cual indica al enla=ador .ue de'e crear una aplicacin
'a,ada en con,ola2
VS9ESFS3E2*!O8SO4E
137

Cn programa de con,ola ,e ve 7 ,e compor(a como una ven(ana de 4!:5!8 con alguna,
me>ora, .ue veremo, adelan(e/ 3a con,ola (iene un ,olo 'Afer de en(rada 7 uno o mB, 'Afere,
de pan(alla2
6l b@fer de entrada con(iene una cola de registros de entrada8 cada uno de lo, cuale,
con(iene da(o, acerca de un even(o de en(rada/ 9lguno, e>emplo, de even(o de
en(rada ,on2 en(rada del (eclado8 clic, del ra(n 7 cuando el u,uario cam'ia el (ama@o
de la ven(ana de con,ola/
Cn b@fer de pantalla e, un arreglo 'idimen,ional de da(o, de carac(ere, 7 colore,8 .ue
afec(an la apariencia del (e1(o en la ven(ana de con,ola/
#nformacin de referencia de la 9P# ;in32 #nformacin de referencia de la 9P# ;in32 #nformacin de referencia de la 9P# ;in32 #nformacin de referencia de la 9P# ;in32
8unciones 9 lo largo de e,(a ,eccin8 ,lo podemo, pre,en(ar una variedad de funcione, de
la 9P# ;in32 7 proporcionar uno, cuan(o, e>emplo,/ 61i,(en muc*o, de(alle, .ue no podemo,
cu'rir a.u-/ Para averiguar mB, podemo, vi,i(ar el ,i(io ;e' de 4icro,of( 4!5N
(%%%/m,dn/micro,of(/com %%%/m,dn/micro,of(/com %%%/m,dn/micro,of(/com %%%/m,dn/micro,of(/com)/
"onstantes 9 menudo8 cuando ,e lea la documen(acin para la, funcione, de la 9P# ;in328
encon(raremo, nom're, con,(an(e, como T#46SIN6S#5SCN?N;N/ 6n alguno, ca,o,8 la
con,(an(e 7a e,(arB definida en !mall;in/inc/ Pero ,u no ,e encuen(ra a*-8 podemo, 'u,car
en el ,i(io ;e' del li'ro/ Por e>emplo8 un arc*ivo de enca'e=ado llamado ;inNT/* define a
T#46SIN6S#5SCN?N;N >un(o con la, con,(an(e, relacionada,2
kdefine 3I2ET[O8ETIDT98>8O,8 "
kdefine 3I2ET[O8ETIDTS3A8DA-D %
kdefine 3I2ET[O8ETIDTDAF4IS\3 .
C,ando e,(a informacin8 podemo, agregar lo ,iguien(e a !mall;in/* o a nue,(ro propio
arc*ivo de inclu,in2
3I2ET[O8ETIDT98>8O,8 ( "
3I2ET[O8ETIDTS3A8DA-D ( %
3I2ET[O8ETIDTDAF4IS\3 ( .
0on>un(o de cara 0on>un(o de cara 0on>un(o de cara 0on>un(o de carac(ere, 7 funcione, de la 9P# de ;indo%, c(ere, 7 funcione, de la 9P# de ;indo%, c(ere, 7 funcione, de la 9P# de ;indo%, c(ere, 7 funcione, de la 9P# de ;indo%,
9l llamar a la, funcione, en la 9P# ;in328 ,e u(ili=an do, (ipo, de con>un(o, de carac(ere,[ el
con>un(o de carac(ere, 9!0##G9N!# de 8 'i(, 7 el con>un(o Cnicode 16 'i(, (di,poni'le en
;indo%, NT8 2&&& 7 HP)/ 3a, funcione, de ;in32 .ue (ienen .ue ver con (e1(o8 por lo general8
,e proporcionan en do, ver,ione,8 una .ue (ermina con la le(ra 9 (para carac(ere, 9N!# 8 'i(,)
7 la o(ra .ue (ermina en ; (para lo, con>un(o, de carac(ere, extensos8 inclu7endo Cnicode)/
Cna de e,(a, funcione, e, ;ri(e0on,ole2
;ri(e0on,ole9/
138

;ri(e0on,ole;/
;indo%, P5 o P8 no ,opor(a lo, nom're, de la, funcione, .ue (erminan en ;/ Por o(ro lado8
en ;indo%, NT8 2&&& 7 HP8 Cnicode e, el con>un(o de carac(ere, na(ivo/ Por e>emplo8 ,i
llamamo, a una funcin como ;ri(e0on,ole9 ;ri(e0on,ole9 ;ri(e0on,ole9 ;ri(e0on,ole98 el ,i,(ema opera(ivo convier(e lo, carac(ere, de
9N!# a Cnicode 7 llama a ;ri(e0on,ole; ;ri(e0on,ole; ;ri(e0on,ole; ;ri(e0on,ole;/
6n la documen(acin de "i'lio(eca de 4icro,of( 4!5N para funcione, como ;ri(e0on,ole8 la
le(ra 9 o ; a la derec*a ,e omi(e del nom're/ 6n el arc*ivo de inclu,in para lo, programa, de
e,(e li'ro8 redefinimo, lo, nom're, de la, funcione, como ;ri(e0on,ole9 ;ri(e0on,ole9 ;ri(e0on,ole9 ;ri(e0on,ole92
,rite!onsole ER9 W,rite!onsoleAX
6,(a definicin *ace .ue ,ea po,i'le llamar a ;ri(e0on,ole u,ando ,u nom're genDrico/

9cce,o de al(o 7 'a>o nivel 9cce,o de al(o 7 'a>o nivel 9cce,o de al(o 7 'a>o nivel 9cce,o de al(o 7 'a>o nivel
$a7 do, nivele, de acce,o a la con,ola8 .ue permi(en conce,ione, en(re ,implicidad 7 con(rol
comple(o2
3a, funcione, de con,ola de al(o nivel leen un flu>o de carac(ere, del 'Afer de en(rada
de la con,ola/ 6,cri'en da(o, (ipo carBc(er al 'Afer de pan(alla de la con,ola/ Tan(o la
en(rada como la ,alida puede redirigir,e para leer o e,cri'ir enGde,de arc*ivo, de
(e1(o/
3a, funcione, de con,ola de 'a>o nivel o'(ienen informacin de(allada acerca de lo,
even(o, de (eclado 7 de ra(n8 7 la, in(eraccione, del u,uario con la ven(ana de
con,ola (arra,(rar8 cam'iar de (ama@o8 e(cD(era)/ 6,(a, funcione, (am'iDn permi(en un
con(rol de(allado del (ama@o 7 po,icin de la ven(ana8 a,- como lo, colore, de (e1(o/
Tipo, de da(o, de ;indo%, Tipo, de da(o, de ;indo%, Tipo, de da(o, de ;indo%, Tipo, de da(o, de ;indo%,
3a, funcione, ;in32 ,e documen(an u,ando la, declaracione, de funcione, para
programadore, de 0G0EE/ 6n e,(a, declaracione,8 lo, (ipo, de (odo, lo, parBme(ro, de la,
funcione, ,e 'a,an en lo, (ipo, e,(Bndar de 0 o en uno de lo, (ipo, predefinido, de 4!:
;indo%, (a con(inuacin ,e mue,(ra una li,(a parcial)/ 6, impor(an(e diferenciar lo, valore, de
da(o, de lo, apun(adore, a lo, valore,/ 6l nom're de un (ipo .ue empie=a con la le(ra 3P e, un
apuntador largo DlongE a algAn o'>e(o/
Tipo de 4! Tipo de 4! Tipo de 4! Tipo de 4!: :: :;indo%, ;indo%, ;indo%, ;indo%, Tipo de Tipo de Tipo de Tipo de
49!4 49!4 49!4 49!4
5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
"38 "369N 5;<5 Cn valor 'ooleano (T<C6 o F93!6)
"KT6 "KT6 Cn en(ero de 8 'i(, ,in ,igno
0$9< "KT6 Cn carBc(er 9N!# de ;indo%, de 8 'i(,
139

03<<6F 5;<5 Cn valor de 32 'i(, .ue ,e u,a como valor de color
5;<5 5;<5 Cn en(ero de 32 'i(, ,in ,igno
$9N536 5;<5 4ane>ador de un o'>e(o
$F#36 5;<5 4ane>ador de un arc*ivo a'ier(o median(e penFile
#NT !5;<5 Cn en(ero de 32 'i(, con ,igno
3NY !5;<5 Cn en(ero de 32 'i(, con ,igno
3P9<94 5;<5 ParBme(ro de men,a>e8 u,ado por lo, procedimien(o, de
ven(ana 7 la, funcione, de devolucin de llamada (call'acb)
3P0!T< PT< "KT6 Cn apun(ador de 32 'i(, a una cadena con,(an(e con
(erminacin nula de carac(ere, ;indo%, (9N!#) de 8 'i(,
3P0+#5 5;<5 9pun(ador a una con,(an(e de cual.uier (ipo
3P!T< PT< "KT6 Cn apun(ador de 32 'i(, a una cadena con (erminacin nula
de carac(ere, ;indo%, (9N!#) de 8 'i(,
3P0T!T< PT< ;<5 Cn apun(ador de 32 'i(, a una cadena de carac(ere,
con,(an(e,8 .ue e, por(a'le para Cnicode 7 lo, con>un(o, de
carac(ere, de do'le '7(e
3PT!T< PT< ;<5 Cn apun(ador de 32 'i(, a una cadena de carac(ere, .ue e,
por(a'le para Cnicode 7 lo, con>un(o, de carac(ere, de do'le
'7(e
3P+#5 5;<5 Cn apun(ador de 32 'i(, a un (ipo no e,pecificado
3<6!C3T 5;<5 Cn valor de 32 'i(, devuel(o de un procedimien(o de ven(ana
o funcin de devolucin de llamada (call'acb)
!#I6ST 5;<5 6l nAmero mB1imo de '7(e, a lo, .ue puede apun(ar un
apun(ador
C#NT 5;<5 Cn en(ero de 32 'i(, ,in ,igno
;N5P<0 5;<5 Cn apun(ador de 32 'i(, a un procedimien(o de ven(ana
;<5 ;<5 Cn en(ero de 16 'i(, ,in ,igno
;P9<94 5;<5 Cn valor de 32 'i(, .ue pa,a como parBme(ro a un
procedimien(o de ven(ana o funcin de devolucin de
llamada (call'acb)

15:

9rc*ivo de inclu,in !mall;in/inc 9rc*ivo de inclu,in !mall;in/inc 9rc*ivo de inclu,in !mall;in/inc 9rc*ivo de inclu,in !mall;in/inc
!mall=in7inc8 e, un arc*ivo de inclu,in .ue con(iene definicione, de con,(an(e,8
a,ociacione, de (e1(o 7 pro(o(ipo, de funcione, para la programacin con la 9P# ;in32/ !e
inclu7e de manera au(omB(ica en lo, programa, median(e #rvine32/inc8 .ue *emo, e,(ado
u,ando a lo largo de e,(e re,umen/ 6l arc*ivo ,e encuen(ra/ 6l arc*ivo ,e encuen(ra en la
carpe(a en donde ,e in,(al lo, programa, de e>emplo de e,(e re,umen/ 6ncon(raremo, la
ma7or-a de la, con,(an(e, en ;indo%,/*8 un arc*ivo de enca'e=ado .ue ,e u(ili=a para
programar en 0 7 0EE/ 9 pe,ar de ,u nom're8 !mall;in/inc e, 'a,(an(e e1(en,o8 por lo .ue
veremo, ,olo una ,in(a1i,2
DOT8O3TS\A-E ( "
8944 ( "
3-9E ( %
$A4SE ( "
0 maneadores de consola ,in7.
S3DTI8P93T\A8D4E ER9 K%"
S3DTO93P93 \A8D4E ER9 K%%
S3DTE--O-T\A8D4E ER9 K%.
6l (ipo $9N5368 un al-a, para 5;<58 a7uda a nue,(ro, pro(o(ipo, de funcin a ,er mB,
con,i,(en(e con la documen(acin de 4icro,of( ;in322
\A8D4E 3E:3ER9 WD,O-DX
!mall;in/inc (am'iDn inclu7e la, definicione, de la, e,(ruc(ura, u(ili=ada, en la, llamada, a
;in32/ Cna de e,(a, mue,(ra a con(inuacin2
!OO-D S3-9!3
: ,O-D N
F ,O-D N
!OO-DS E8DS
Por Al(imo8 !mall;in/inc con(iene lo, pro(o(ipo, de funcin para (oda, la, funcione, de ;in32
.ue ,e documen(an en e,(e cap-(ulo/
4ane>adore, de con,ola 4ane>adore, de con,ola 4ane>adore, de con,ola 4ane>adore, de con,ola
0a,i (oda, la, funcione, de la con,ola de ;in32 re.uieren reci'ir un mane>ador como primer
argumen(o/ Cn manejador e, un en(ero de 32 'i(, ,in ,igno .ue iden(ifica en forma Anica a un
15"

o'>e(o8 como un mapa de 'i(,8 una pluma de di'u>o o cual.uier o(ro di,po,i(ivo de
en(radaG,alida2
S3DTI8P93T\A8D4E entrada estIndar
S3DTO93P93T\A8D4E salida estIndar
S3DTE--O-T\A8D4E salida de error estIndar
3o, Al(imo, do, mane>adore, ,e u(ili=an al e,cri'ir en el 'uffer de pan(alla ac(ivo de la
con,ola/
3a funcin Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle devuelve un mane>ador para un flu>o de la con,ola2 en(rada8 ,alida o
,alida de error/ Nece,i(amo, un mane>ador para poder reali=ar operacione, de en(radaG,alida
en un programa 'a,ado en la con,ola/ $e a.u- el pro(o(ipo de funcin2
SetStd\andle P-O3O,
nStd\andle*\A8D4E 0 tipo de maneador
n!(d$andle puede ,er !T5S#NPCTS$9N5368 !T5SCTPCTS$9N536 o !T5S6<<<S$9N536/
3a funcin devuelve el mane>ador en 69H8 .ue de'e copiar,e a una varia'le por pro(eccin/ $e
a.u- una llamada de e>emplo2
6data
maneadorEntrada \A8D4E N
6code
I8)O>E SetStd\andle, S3DTI8P93T\A8D4E
mov maneadorEntrada, ea1
Funcione, de la con,ola ;in32 Funcione, de la con,ola ;in32 Funcione, de la con,ola ;in32 Funcione, de la con,ola ;in32
3a ,iguien(e (a'la con(iene una referencia rBpida al con>un(o comple(o de funcione, de
con,ola ;in32/ !e puede encon(rar una de,cripcin comple(a de cada funcin en la 'i'lio(eca
4!5N8 en %%%/m,dn/micro,of(/com
Tip Tip Tip Tip2 3a funcin de la 9P# ;in32 no pre,ervan 69H8 6"H8 60H 7 65H8 por lo .ue de'emo, me(er
7 ,acar e,(o, regi,(ro, por nue,(ra cuen(a/
Funcione, de con,ola ;in32/
Funcin Funcin Funcin Funcin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
9lloc0on,ole 9,igna una nueva con,ola para el proce,o .ue *ace la llamada
15#

0rea(e0on,ole!creen"uffer 0rea un 'Afer de pan(alla de con,ola
61i(Proce,, Termina un proce,o 7 (odo, ,u, ,u'proce,o,
Fill0on,oleu(pu(9((ri'u(e 6,(a'lece lo, a(ri'u(o, de (e1(o 7 color de fondo para un nAmero
e,pec-fico de celda, de carac(ere,
Fill0on,oleu(pu(0*arac(er 6,cri'e un carBc(er en el 'uffer de pan(alla8 un nAmero
e,pecificado de vece,
Flu,*0on,ole#npu("uffer +ac-a el 'uffer de en(rada de la con,ola
Free0on,ole 5e,conec(a el proce,o .ue *i=o la llamada de la con,ola
Yenera(e0on,ole0(rl6ven( 6nv-a una ,e@al e,pecificada a un grupo de proce,o de con(rol
.ue compar(e la con,ola a,ociada con el proce,o .ue *i=o la
llamada
Ye(0on,ole0P '(iene la pBgina de cdigo de en(rada u(ili=ada por la con,ola
a,ociada con el proce,o .ue *i=o la llamada
Ye(0on,ole0ur,or#nfo '(iene informacin acerca del (ama@o 7 la vi,i'ilidad del cur,or
para el 'Afer de pan(alla de con,ola e,pecificado/
Ye(0on,ole4ode '(iene el modo de en(rada ac(ual del 'Afer de en(rada de una
con,ola8 o el modo de ,alida ac(ual de un 'uffer de pan(alla de
con,ola
Ye(0on,oleu(pu(0P '(iene la pBgina de cdigo de ,alida .ue u(ili=a la con,ola
a,ociada con el proce,o .ue *i=o la llamada
Ye(0on,ole!creen"uffer#nfo '(iene informacin acerca del 'Afer de pan(alla de con,ola
e,pecificado
Ye(0on,oleTi(le '(iene la cadena de la 'arra de (-(ulo para la ven(ana de con,ola
ac(ual
Ye(0on,ole;indo% '(iene el mane>ador de ven(ana u(ili=ado por la con,ola
a,ociada con el proce,o .ue *i=o la llamada
Ye(3arge,(0on,ole;indo%!i=e '(iene el (ama@o de la ven(ana de con,ola mB, grande po,i'le
Ye(Num'erf0on,ole#npu(6ven(, '(iene el nAmero de regi,(ro, de en(rada no le-do, en el 'Afer
de en(rada de la con,ola
Ye(Num'erf0on,ole4ou,e"u((on, '(iene el nAmero de 'o(one, en el ra(n8 u(ili=ado, por la
con,ola ac(ual
Ye(!(d$andle '(iene un mane>ador para la en(rada e,(Bndar8 la ,alida
151

e,(Bndar o el di,po,i(ivo de error e,(Bndar
$andler<ou(ine Cna funcin definida por la aplicacin8 .ue ,e u(ili=a con la
funcin !e(0on,ole0(rl$andler
Peeb0on,ole#npu( 3ee da(o, del 'Afer de en(rada de con,ola e,pecificado8 ,in
eliminarlo, del 'Afer
<ead0on,ole 3ee la en(rada de carac(ere, del 'Afer de en(rada de la con,ola 7
la elimina del 'Afer
<ead0on,ole#npu( 3ee da(o, de un 'Afer de en(rada de con,ola 7 lo, elimina del
'Afer
<ead0on,oleu(pu( 3ee lo, da(o, de lo, carac(ere, 7 a(ri'u(o, de color de un 'lo.ue
rec(angular de celda, de carac(ere, en un 'Afer de pan(alla de
con,ola
<ead0on,ole!creen"uffer 4ueve un 'lo.ue de da(o, en un 'Afer de pan(alla
!e(0on,ole9c(ive!creen"uffer 6,(a'lece el 'Afer de cdigo de en(rada u(ili=ada por la con,ola
a,ociada con el proce,o .ue *i=o la llamada
!e(0on,ole0(rl$andler 9grega o elimina una funcin $andler<ou(ine definida por una
aplicacin8 de la li,(a de funcione, mane>adora, para el proce,o
.ue *i=o la llamada
!e(0on,ole0ur,or#nfo 6,(a'lece el (ama@o 7 vi,i'ilidad del cur,or para el 'Afer de
pan(alla de con,ola e,pecificado
!e(0on,ole0ur,orPo,i(ion 6,(a'lece la po,icin del cur,or en el 'Afer de pan(alla de con,ola
e,pecificado
!e(0on,ole4ode 6,(a'lece el modo de en(rada del 'Afer de en(rada de una
con,ola8 o el modo de ,alida de un 'Afer de pan(alla de con,ola
!e(0on,ole4odeu(pu(0P 6,(a'lece la pBgina de cdigo de ,alida u(ili=ada por la con,ola
a,ociada con el proce,o .ue *i=o la llamada
!e(0on,ole!creen"uffer!i=e 4odifica el (ama@o del 'uffer de pan(alla de con,ola e,pecificado
!e(0on,oleTe1(9((ri'u(e 6,(a'lece lo, a(ri'u(o, de color de (e1(o 7 de fondo de lo,
carac(ere, .ue ,e e,cri'en en el 'Afer de pan(alla
!e(0on,oleTi(le 6,(a'lece la cadena de la 'arra de (-(ulo para la ven(ana de
con,ola ac(ual
!e(0on,ole;indo%#nfo 6,(a'lece el (ama@o 7 po,icin ac(uale, de la ven(ana de un
153

'uffer de pan(alla de con,ola
!e(!(d$andle 6,(a'lece el mane>ador para la en(rada e,(Bndar8 la ,alida
e,(Bndar o el di,po,i(ivo de error e,(Bndar
;ri(e0on,ole 6,cri'e una cadena de carac(ere, en un 'Afer de pan(alla de
con,ola8 empe=ando en la po,icin ac(ual del cur,or
;ri(e0on,ole#npu( 6,cri'e da(o, direc(amen(e en el 'Afer de en(rada de con,ola
;ri(e0on,oleu(pu( 6,cri'e lo, da(o, de lo, carac(ere, 7 a(ri'u(o, de color en un
'lo.ue rec(angular e,pecificado de celda, de carac(ere, de un
'Afer de pan(alla de con,ola
;ri(e0on,oleu(pu(9((ri'u(e 0opia un nAmero de a(ri'u(o, de color de (e1(o 7 de fondo en la,
celda, con,ecu(iva, de un 'Afer de pan(alla de con,ola
;ri(e0on,oleu(pu(0*arac(er 0opia un nAmero de carac(ere, en la, celda, con,ecu(iva, en un
'Afer de pan(alla de con,ola

+i,uali=acin de un cuadro de men,a>e +i,uali=acin de un cuadro de men,a>e +i,uali=acin de un cuadro de men,a>e +i,uali=acin de un cuadro de men,a>e
Cna de la, manera, mB, ,encilla, de generar re,ul(ado, en una aplicacin ;in32 e, llamar a
la funcin 4e,,age"o19 4e,,age"o19 4e,,age"o19 4e,,age"o192
2essageEo1A P-O3O,
',nd*D,O-D, 0 maneador para la ventana (puede ser
nulo)
lp3e1t*P3- EF3E, 0 cadena, dentro del cuadrado
lp!aption* P3- EF3E, 0 cadena, titulo del cuadrado de diIlogo
u35pe*D,O-D 0 contenido 5 comportamiento
6n la, aplicacione, 'a,ada, en con,ola8 podemo, e,(a'lecer h=nd a NC338 indicando .ue el
cuadro de men,a>e no (iene propie(ario/ 6l parBme(ro lp-ext e, un apun(ador a la cadena con
(erminacin nula .ue de,eamo, colocar en el cuadro de men,a>e/ 6l parBme(ro 'p"aption
apun(a a una cadena con (erminacin nula para el (-(ulo del cuadro del diBlogo/ 6l parBme(ro
u-ype e,pecifica el con(enido e,pecifica el con(enido 7 compor(amien(o del cuadro de diBlogo/
"ontenido y comportamiento 6l parBme(ro u-ype guarda un en(ero con a,ignacin de 'i(,
.ue con(iene (re, (ipo, de opcione,2 lo, 'o(one, a vi,uali=ar8 lo, -cono, 7 la opcin del 'o(n
prede(erminada/ $a7 varia, com'inacione, de 'o(one, po,i'le,2
4"S?
155

4"S?09N063
4"SK6!N
4"SK6!N09N063
4"S<6T<K09N063
4"S9"<T<6T<K#YN<6
4"S09N063T<K0NT#NC6
$otn predeterminado Podemo, elegir .ue 'o(n ,e ,eleccionarB de manera au(omB(ica ,i
el u,uario pre,iona #n(ro/ 3a, opcione, ,on 4"S56F"CTTN1 (la prede(erminada)8
4"S56F"CTTN28 4"S56F"CTTN3 7 56F"CTTN4/ 3o, 'o(one, e,(Bn numerado, a par(ir
de la i=.uierda8 comen=ando con 1/
'conos $a7 cua(ro opcione, de -cono, di,poni'le,/ 9lguna, vece, mB, de una con,(an(e
produce el mi,mo -cono2
!igno de al(o2 4"S#0N!TP8 4"S#0N$9N5 o 4"S#0N6<<<
!igno de in(errogacin (M)2 4"S#0NLC6!T#N
!-m'olo de informacin (i)2 4"S#0N#NF<49T#N8 4"S#0N9!T6<#!?
!igno de e1clamacin (a)2 4"S#0N6H03949T#N8 4"S#0N;9<N#NY
5alor de retorno !i 4e,,age"o19 falla8 devuelve cero/ 6n cual.uier o(ro ca,o8 devuelve un
en(ero .ue e,pecifica .ue 'o(n oprimi el u,uario al cerrar el cuadrado/ 3a, opcione, ,on
#59"<T8 #509N0638 #50NT#NC68 #5#YN<68 #5N8 #5?8 #5<6T<K8 #5T<K9Y9#N e #5K6!/
Toda, e,(Bn definida, en !mall;in/inc
!mall;in/inc redefine a 4e,,age"o19 4e,,age"o19 4e,,age"o19 4e,,age"o19 como 4e,,age"o1 4e,,age"o1 4e,,age"o1 4e,,age"o18 el cual parece un nom're mB,
amiga'le para el u,uario/

Programa de demo,(racin
3I34E Demostracin de 2essageEo1A (2essageEo16asm)
I8!49DE Irvine7.6inc
6data
le5enda EF3E OIntento de dividir entre ceroP,"
advertencia2s EF3E OPor favor revise su denominador6P,"
le5endaP EF3E OPreguntaP,"
Pregunta2s EF3E ODeseas saber mi nombreNP,"
mostrar2i8ombre EF3E O2i nombre es 2AS2P,"d',"a',"
le5enda! EF3E OInformacionP,"
156

info2s EF3E OSu arc'ivo se elimino6P,"d',"a'
EF3E O8otificar al admin del sistema, o restaurar copia de
respaldoNP,"
6code
main P-O!
0 2uestra un mensae de advertencia6
I8)O>E 2essageEo1, 8944, ADD- Advertencia2s, ADD- le5endaA,
2ETO> L 2ETI!O8E:!4A2A3IO8
0 \ace una pregunta, eval?a la respuesta6
I8)O>E 2essageEo1, 8944, ADD- Pregunta2s,
ADD- le5endaP, 2ETFES8O L 2ETI!O8R9ES3IO8
cmp ea1,IDFES 0 c'izo clic en el botn SlN
ne 4.
0 escribe el nombre en la ventana de consola6
mov ed1,O$$SE3 mostrar2i8ombre
call ,riteString
4.*
0 !onunto de botones mIs compleo6 !onfunde al usuario6
I8)O>E 2essageEo1, 8944, ADD- info2s,
ADD- le5enda!, 2ETFES8O!A8!E4 L 2ETI!O8E:!4A2A3IO8 Q L
2ETDE$E933O8.
e1it
main E8DP
E8D main
!i de,eamo, .ue nue,(ra ven(ana de cuadro de men,a>e flo(e por encima de (oda, la, demB,
ven(ana, en nue,(ro e,cri(orio8 podemo, agregar la opcin 4"S!K!T644593 a lo, valore,
del Al(imo argumen(o (el parBme(ro u-ype)/
6n(rada de con,ola 6n(rada de con,ola 6n(rada de con,ola 6n(rada de con,ola
157

Para e,(o, momen(o,8 7a *emo, u,ado lo, procedimien(o, <ead!(ring <ead!(ring <ead!(ring <ead!(ring 7 <ead0*ar <ead0*ar <ead0*ar <ead0*ar de la
'i'lio(eca de enlace una, cuan(a, vece,/ 6,(o, procedimien(o, ,e di,e@aron para ,er ,imple,
7 direc(o,8 de manera .ue podamo, concen(rarno, en o(ra, cue,(ione,/ 9m'o, procedimien(o,
,on envol(ura, de <ead0on,ole8 una funcin de ;in32/ Cn procedimien(o de envoltura ocul(a
alguno, de lo, de(alle, de o(ro procedimien(o/
$@fer de entrada de consola 3a con,ola ;in32 (iene un 'Afer de en(rada .ue con(iene un
arreglo de regi,(ro, de even(o, de en(rada/ 0ada even(o de en(rada8 como una pul,acin de
(ecla8 movimien(o del ra(n o clic del 'o(n del ra(n8 crea un regi,(ro de en(rada en el 'uffer
de en(rada de la con,ola/ 3a, funcione, de en(rada de al(o nivel como <ead0on,ole fil(ran 7
proce,an lo, da(o, de en(rada8 7 devuelven ,lo un flu>o de carac(ere,/
Func Func Func Funcin <ead0on,ole in <ead0on,ole in <ead0on,ole in <ead0on,ole
3a funcin <ead0on,ole <ead0on,ole <ead0on,ole <ead0on,ole proporciona una manera convenien(e de leer la en(rada de (e1(o 7
colocarla en un 'Afer/ $e a.u- el pro(o(ipo2
<ead0on,ole P<T8
*0on,ole#npu(2$9N5368 [ mane>ador de en(rada
lp"uffer2PT< "KT6 [ apun(ador al 'Afer
nNum'erf0*ar,To<ead25;<58 [ nAmero de carac(ere, a leer
lpNum'erf0*ar,<ead2PT< 5;<58 [ apun(ador al nAm/ de car,/ leer
lp<e,erved25;<5 [ (no ,e u(ili=a)
h"onsole'nput e, un mane>ador de en(rada de con,ola vBlido devuel(o por la funcin
Ye(! Ye(! Ye(! Ye(!(d$andle (d$andle (d$andle (d$andle/ 6l parBme(ro lp$uffer e, el de,pla=amien(o de un arreglo de carac(ere,/
n(umber#f"hars-o.ead e, un en(ero de 32 'i(, .ue e,pecifica el mB1imo nAmero de
carac(ere, a leer/ lp(umber#f"hars.ead e, un apun(ador a una do'le pala'ra .ue permi(e
.ue la funcin llene8 al regre,ar8 una cuen(a del nAmero de carac(ere, colocado, en el 'Afer/
6l Al(imo parBme(ro no ,e u(ili=a8 por lo .ue ,e pa,a el valor de cero/
9l llamar a <ead0on,ole8 *a7 .ue incluir do, '7(e, e1(ra, en el 'Afer de en(rada para lo,
carac(ere, de fin de l-nea/ !i de,eamo, .ue el 'Afer de en(rada con(enga una cadena con
(erminacin nula8 de'emo, ,u,(i(uir el '7(e .ue con(iene &5* con un '7(e nulo/ 6,(o e, lo .ue
*ace e1ac(amen(e el procedimien(o <ead!(ring <ead!(ring <ead!(ring <ead!(ring de #rvine32/li'/
Programa de ejemplo Para leer lo, carac(ere, in(roducido, por el u,uario8 ,e *ace una
llamada a Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle para o'(ener el mane>ador de en(rada e,(Bndar de la con,ola 7 ,e
*ace una llamada a <ead0on,ole <ead0on,ole <ead0on,ole <ead0on,ole8 u,ando el mi,mo mane>ador de en(rada/ 6l ,iguien(e
programa con <ead0on,ole demue,(ra e,(a (Dcnica/ ',ervamo, .ue la, llamada, a la 9P#
;in32 ,on compa(i'le, con la 'i'lio(eca #rvine328 por lo .ue podemo, llamar a 5ump<eg, al
mi,mo (iempo .ue llamamo, a la, funcione, ;in322
3I34E 4ee de la consola (-ead!onsole6asm)
158

I8!49DE Irvine7.6inc
3amEuf ( #"
6data
bufer EF3E 3amEuf D9P(N),","
maneadorEntStd \A8D4E N
b5tes4eidos D,O-D N
6code
main P-O!
0 obtiene el maneador para la entrada estIndar
I8)O>E SetStd\andle, S3DTI8P93T\A8D4E
mov maneadorEntStd,ea1
0 Espera la entrada del usuario
I8)O>E -ead!onsole, maneadorEntStd, ADD- bufer,
3amEuf _ ., ADD- b5tes4eidos,"
0 2uestra el bufer
mov esi,O$$SE3 bufer
mov ec1,b5tes4eidos
mov eb1,3FPE bufer
call Dump2em
e1it
main E8DP
E8D main
!i el u,uario e,cri'e ]a'cdefgW8 el programa genera lo, ,iguien(e, re,ul(ado,/ !e in,er(an
nueve '7(e, en el 'Afer2 ]a'cdefgW mB, &5* 7 &9*/
0ompro'acin de errore, 0ompro'acin de errore, 0ompro'acin de errore, 0ompro'acin de errore,
!i una funcin 9P# de ;indo%, devuelve un valor de error (como NC33)8 podemo, llamar a la
funcin Ye(3a,(6rror Ye(3a,(6rror Ye(3a,(6rror Ye(3a,(6rror de la 9P# para o'(ener mB, informacin acerca del error/ 5evuelve un
cdigo de error en(ero de 32 'i(, en 69H2
159

6data
id2ensae D,O-DN
6code
call Set4astError
mov id2ensae,ea1
4!:;indo%, (iene muc*o, cdigo, de error8 por lo .ue (al ve= ,ea convenien(e o'(ener una
cadena de memoria .ue e1pli.ue el error/ Para ello8 *a7 .ue llamar a la funcin
Forma(4e,,age Forma(4e,,age Forma(4e,,age Forma(4e,,age2
$ormat2essage P-O3O, 0 da formato a un mensae
d=$lags*D,O-D, 0 opciones de formato
lpSource*D,O-D, 0 ubicacin de definicin de mensae
d=2sgID*D,O-D, 0 identificador de mensae
d=4enguaeID*D,O-D, 0 identificador de lenguae
lpEuffer*P3-, 0 apuntador de b?fer @ue recibe la cadena
nSize*D,O-D, 0 tamaJo del b?fer
vaTlist*D,O-D, 0 apuntador a la lista de argumentos
!u, parBme(ro, ,on algo complicado,8 a,- .ue (endremo, .ue leer la documen(acin del !5?
para o'(ener el panorama comple(o/ 9 con(inuacin ,e mue,(ra un 'reve li,(ado de lo, valore,
.ue no, parecen mB, A(ile,8 (odo, ,on parBme(ro, de en(rada e1cep(o lp$uffer8 un parBme(ro
de ,alida2
d&8lags8 en(ero (ipo do'le pala'ra .ue guarda opcione, de forma(o8 inclu7endo cmo
in(erpre(ar el parBme(ro lp!ource/ 6,pecifica cmo mane>ar la, in(errupcione, de l-nea8
a,- como la anc*ura mB1ima de una l-nea de ,alida con forma(o/ 3o, valore,
recomendado, ,on F<49TS46!!9Y6S93309T6S"CFF6< 7
F<49TS46!!9Y6SF<4S!K!T64/
lp!ource8 un apun(ador a la u'icacin de la definicin del men,a>e/ 5ada la
configuracin de d%Flag, .ue recomendamo,8 *a7 .ue e,(a'lecer lp!ource a NC33 (&)/
d&Msg'D8 el en(ero (ipo do'le pala'ra devuel(o por la llamada Ye(3a,(6rror/
d&%enguaje'D8 un iden(ificador de lengua>e8 !i lo e,(a'lecemo, a cero8 el men,a>e ,erB
neu(ral al lengua>e8 o corre,ponderB a la configuracin regional prede(erminada del
u,uario/
lp$uffer Dpar*metro de salidaE8 un apun(ador a un 'uffer .ue reci'e la cadena de
men,a>e con (erminacin nulo/ 0omo u(ili=amo, la opcin
F<49TS46!!9Y6S93309T6S"CFF6<8 el 'Afer ,e a,igna de manera au(omB(ica/
16:

n!ize8 .ue puede u,ar,e para e,pecificar un 'Afer para guardar la cadena de men,a>e/
Podemo, e,(a'lecer e,(e parBme(ro a & ,i u,amo, la, opcione, par d%Flag, an(e,
,ugerida,/
vaMlist8 un apun(ador a un arreglo de valore, .ue pueden in,er(ar,e en un men,a>e con
forma(o/ 0omo no damo, forma(o a lo, men,a>e, de error8 e,(e parBme(ro puede ,er
NC33 (&)/
9 con(inuacin ,e mue,(ra una llamada de e>emplo a Forma(4e,,age2
6data
id2ensae D,O-D N
p2sError D,O-D N
6code
call Set4astError
mov id2ensae,ea1
I8)O>E $ormat2essage, $O-2A3T2ESSASETA44O!A3ETE9$E- L Q
$O-2A3T2ESSASET$-O2TSFS3E2, 8944, id2ensae, ",
ADD- p2sError, ", 8944
5e,puD, de llamar a Forma(4e,,age8 *a7 .ue llamar a 3ocalFree para li'erar el e,pacio de
almacenamien(o por Forma(4e,,age2
I8)O>E 4ocal$ree, p2sError
6n(rada de un ,olo carBc(er 6n(rada de un ,olo carBc(er 6n(rada de un ,olo carBc(er 6n(rada de un ,olo carBc(er
3a en(rada de un ,olo carBc(er en modo de con,ola e, un poco enga@o,a/ 4!:;indo%,
proporciona un con(rolador de di,po,i(ivo para el (eclado .ue e,(B in,(alado au(omB(icamen(e/
0uando ,e oprime una (ecla8 ,e (ran,mi(e un cdigo de exploracin de 8 'i(, al puer(o del
(eclado de la compu(adora/ 0uando ,e ,uel(a la (ecla8 ,e (ran,mi(e un ,egundo cdigo de
e1ploracin/ 4!:;indo%, u(ili=a un programa con(rolador de di,po,i(ivo para (raducir el cdigo
de e1ploracin en un cdigo de tecla virtual de 16 'i(,8 un valor independien(e del di,po,i(ivo
.ue define 4!:;indo%,8 7 ,irve para iden(ificar el prop,i(o de la (ecla/ 4!:;indo%, crea un
men,a>e .ue con(iene el cdigo de e1ploracin8 el cdigo de (ecla vir(ual 7 ademB, informacin
relacionada/ 6l men,a>e ,e coloca en la cola de men,a>e, de 4!:;indo%,8 7 en un momen(o
dado encuen(ra ,u camino *acia el ,u'proce,o del programa .ue ,e encuen(ra en e>ecucin(al
cual iden(ificamo, median(e el mane>ador de en(rada de con,ola)/ !i de,eamo, aprender mB,
acerca del proce,o de in(roduccin de da(o, median(e el (eclado8 podemo, leer el (ema About
4eyboard 'nput (Acerca de la entrada del teclado) en la documen(acin del !5? de la
pla(aforma/
16"

Procedimientos de teclado de irvine23 3a 'i'lio(eca #rvine32 (iene do, procedimien(o,
relacionado,2
<ead0*ar <ead0*ar <ead0*ar <ead0*ar e,pera .ue ,e (eclee un carBc(er 9!0## en el (eclado 7 devuelve ,u carBc(er
en 93/
6l procedimien(o <ead?e7 <ead?e7 <ead?e7 <ead?e7 reali=a una compro'acin ,in e,pera del (eclado/ !i no *a7
(ecla e,perando en el 'Afer de en(rada de con,ola8 ,e ac(iva la 'andera 0ero/ !i ,e
encuen(ra una (ecla8 la 'andera 0ero ,e 'orra 7 93 con(iene cero o un cdigo 9!0##/ 3a,
mi(ade, ,uperiore, 69H 7 65H ,e ,o're,cri'en/
6n <ead?e78 ,i 93 con(iene cero8 el u,uario puede *a'er oprimido una (ecla e,pecial ((ecla
funcin8 flec*a del cur,or8 e(cD(era/)/ 6l regi,(ro 9$ con(iene el cdigo de e1ploracin del
(eclado8 el cual ,e puede relacionar con la (a'la a con(inuacin/ 5H con(iene el cdigo de (ecla
vir(ual 7 6"H con(iene informacin acerca de lo, e,(ado, de la, (ecla, de con(rol de (eclado/
T6039! 56 FCN0#lN T6039! 56 FCN0#lN T6039! 56 FCN0#lN T6039! 56 FCN0#lN
Tecla Tecla Tecla Tecla Normal Normal Normal Normal 0on 0on 0on 0on
ma7A,cula ma7A,cula ma7A,cula ma7A,cula
0on 0(rl 0on 0(rl 0on 0(rl 0on 0(rl 0on 9l( 0on 9l( 0on 9l( 0on 9l(
F1 3" 54 56 68
F2 30 55 5F 6P
F3 35 56 6& 69
F4 36 57 61 6"
F5 3F 58 62 60
F6 4& 5P 63 65
F7 41 5m 64 66
F8 42 5" 65 6F
FP 43 50 66 7&
F1& 44 55 67 71
F11 85 87 8P 8"
F12 86 88 89 80

Tecla Tecla Tecla Tecla !ola !ola !ola !ola 0on (ecla 0(rl 0on (ecla 0(rl 0on (ecla 0(rl 0on (ecla 0(rl
#nicio 47 77
16#

Fin 4F 75
9vPBg 4P 84
<epBg 51 76
#mprPan( 37 72
Flec*a i=.uierda 4" 73
Flec*a derec*a 45 74
Flec*a arri'a 48 85
Flec*a a'a>o 5& P1
#n, 52 P2
!upr 53 P3
<e(roce,o (a' &F P4
E gri, 46 P&
: gri, 49 86
6n la ,iguien(e (a'la ,e podrB ver una li,(a de valore, de la, (ecla, de con(rol/ 5e,puD, de
llamar a <ead?e78 podemo, u,ar la in,(ruccin T6!T para compro'ar lo, diver,o, valore, de
la, (ecla,/ 3a implemen(acin de <ead?e7 e, 'a,(an(e e1(en,a/
+alore, de e,(ado de la, (ecla, de con(rol del (eclado
+alor +alor +alor +alor !ignificado !ignificado !ignificado !ignificado
09P!30?SN 3a lu= 09P! 30? e,(B encendida
6N$9N065S?6K 3a (ecla e, me>orada
36FTS93TSP<6!!65 !e oprimi la (ecla 93T i=.uierda
36FTS0T<3SP<6!!65 !e oprimi la (ecla 0T<3 i=.uierda
NC430?SN 3a lu= NC4 30? e,(B encendida
<#Y$TS93TSP<6!!65 !e oprimi la (ecla 93T derec*a
<#Y$TS0T<3SP<6!!65 !e oprimi la (ecla 0T<3 derec*a
!0<330?SN 3a lu= !0<33 30? e,(B encendida
!$#FTSP<6!!65 !e oprimi la (ecla 49Kn!
161


Programa de prueba .ead4ey 6l ,iguien(e programa prue'a el procedimien(o <ead?e78
para lo cual e,pera a .ue el u,uario oprima una (ecla 7 de,puD, informa ,i la (ecla "lo.
4a7A,cula e,(B oprimida o no/ 0omo mencionamo, an(eriormen(e8 ,e de'e incluir un fac(or de
re(ra,o al llamar a <ead?e78 para dar (iempo a .ue 4!:;indo%, proce,e ,u ciclo de men,a>e,2
3I34E prueba de -ead>e5 (Prueba-ead>e56asm)
I8!49DE Irvine7.6inc
I8!49DE 2acros6inc
6code
main P-O!
4%* mov ea1,%"
call Dela5 0 retraso para el procesamiento de
mensaes
-ead>e5 0 espera una pulsacin de tecla
z 4%
test eb1,!APS4O!>TO8
z 4.
m,rite WPElo@ 2a5us esta A!3I)ADAP,"d',"a'X
mp 47
4.* m,rite WPElo@ 2a5us esta DESA!3I)ADAP,"d',"a'X
47* e1it
main E8DP
E8D main
'(encin del e,(ado del (eclado '(encin del e,(ado del (eclado '(encin del e,(ado del (eclado '(encin del e,(ado del (eclado
Podemo, pro'ar el e,(ado de la, (ecla, individuale, del (eclado8 para averiguar cuale, e,(Bn
oprimida, en e,e momen(o/ Para ello *a7 .ue llamar a la funcin Ye(?e7! Ye(?e7! Ye(?e7! Ye(?e7!( (( (a(e a(e a(e a(e de la 9P#2
Set>e5State P-O3O, n3ecla)irt*D,O-D
6,(a funcin reci'e un valor de (ecla vir(ual8 como lo, .ue ,e mue,(ra en la ,iguien(e (a'la/
Nue,(ro programa de'e pro'ar el valor devuel(o en 69H/ !egAn lo indica la mi,ma (a'la/
163

Prue'a de la, (ecla, con Ye(?e7!(a(e/
Tecla Tecla Tecla Tecla !-m'olo de (ecla vir(ual !-m'olo de (ecla vir(ual !-m'olo de (ecla vir(ual !-m'olo de (ecla vir(ual "i( .ue ,e evalAa en 69H "i( .ue ,e evalAa en 69H "i( .ue ,e evalAa en 69H "i( .ue ,e evalAa en 69H
"lo. NAm +?SNC430? &
"lo. 5e,pl +?S!0<33 &
4a7A, #=. +?S3!$#FT 15
4a7A, 5er +?S<!$#FT 15
0(rl #=. +?S30NT<3 15
0(rl 5er +?S<0NT<3 15
4enA #=. +?S346NC 15
4enA 5er +?S<46NC 15

6l ,iguien(e programa de e>emplo demue,(ra la funcin Ye(?e7!(a(e al compro'ar lo, e,(ado,
de la, (ecla, "lo. NAm 7 5epl #=.2
3I34E 3eclas alternantes del teclado (3eclado6asm)
I8!49DE Irvine7.6inc
I8!49DE 2acros6inc
0 Set>e5State activa el bit " en EA: si una tecla
0 alternante estI activada (Elo@ 2a5?s, Elo@ 8?m, Elo@ Despl6
0 Activa el bit %< en EA: si otra de las teclas especificadas
0 estI oprimida6
6code
main P-O!
I8)O>E Set>e5State, )>T8924O!>
test al,%
6I$ d[eroN
m,rite WP4a tecla Elo@ 8um esta A!3I)ADAP,"d',"a'X
6E8DI$
165

I8)O>E Set>e5State, )>T4S\I$3
test al,#"'
6I$ d[eroN
m,rite WP4a tecla 2a5us Iz@ esta oprimida en este momentoP,"d',"a'X
6E8DI$
e1it
main E8DP
E8D main
!alida de con,ola !alida de con,ola !alida de con,ola !alida de con,ola
6n lo, primero, cap-(ulo, (ra(amo, de *acer la ,alida de la con,ola lo mB, ,encilla po,i'le/ 6l
procedimien(o ;ri(e!(ring ;ri(e!(ring ;ri(e!(ring ;ri(e!(ring en la 'i'lio(eca de enlace #rvine32 ,lo re.uer-a un argumen(o8 el
de,pla=amien(o de una cadena en 65H/ ;ri(e!(ring e, en realidad e, una envol(ura a una
llamada mB, de(allada a una funcin ;in32 llamada ;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole/
No o',(an(e8 aprenderemo, a reali=ar llamada, direc(a, a la, funcione, ;in32 como
;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole 7 ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er/ 3a, llamada, direc(a, implican un conocimien(o
mB, de(allado8 pero (am'iDn no, ofrecen mB, fle1i'ilidad .ue lo, procedimien(o, de la
'i'lio(eca #rvine32/
6,(ruc(ura, de da(o, 6,(ruc(ura, de da(o, 6,(ruc(ura, de da(o, 6,(ruc(ura, de da(o,
+aria, funcione, de la con,ola ;in32 u(ili=an e,(ruc(ura, de da(o, predefinida,8 #nclu7endo
0<5 7 !4933S<60T/ la e,(ruc(ura 0<5 guarda la, coordenada, de una celda de
carac(ere, en el 'Afer de pan(alla de con,ola/ 6l origen del ,i,(ema de coordenada, (&8&) e,(B
en la celda ,uperior i=.uierda2
!OO-D S3-9!3
: ,O-D N
F ,O-D N
!OO-D E8DS
3a e,(ruc(ura !4933S<60T guarda la, e,.uina, ,uperior i=.uierda e inferior derec*a de un
rec(Bngulo/ 6,pecifica la, celda, de carac(ere, de 'Afer de pan(alla en la ven(ana de con,ola2
S2A44T-E!3 S-3-9!
4eft ,O-D N
3op ,O-D N
166

-ig't ,O-D N
Eotton ,O-D N
S2A44T-E!3 E8DS
Funcin ;ri(e0on,ole Funcin ;ri(e0on,ole Funcin ;ri(e0on,ole Funcin ;ri(e0on,ole
3a funcin ;ri(e0on, ;ri(e0on, ;ri(e0on, ;ri(e0on,ole ole ole ole e,cri'e una cadena en la ven(ana de con,ola8 en la po,icin ac(ual
del cur,or8 7 de>a el cur,or >u,(o de,puD, del Al(imo carBc(er e,cri(o/ 9c(Aa en 'a,e a lo,
carac(ere, de con(rol 9!0## e,(Bndar como tabulador8 retorno de carro 7 avance de p*gina/ 3a
cadena no de'e (ener (erminacin nula/ $e a.u- el pro(o(ipo de la funcin2
,rite!onsole P-O3O,
'!onsoleOutput*\A8D4E,
lpEuffer*P3- EF3E,
n8umberOf!'ars3o,rite*D,O-D,
lp8umberOf!'ars,ritten*P3- D,O-D,
lp-eserved*D,O-D
h"onsole#utput e, el mane>ador del flu>o de ,alida de la con,ola[ lp$uffer e, un apun(ador al
arreglo de carac(ere, .ue ,e de,ea e,cri'ir[ n(umber#f"hars-o=rite guarda la longi(ud del
arreglo[ lp(umber#f"hars=ritten apun(a a un en(ero al .ue ,e a,igna el nAmero de '7(e, .ue
,e e,cri'en cuando la funcin regre,a/ 6l Al(imo parBme(ro no ,e u(ili=a8 por lo cual ,e
e,(a'lece en cero/
Programa de e>emplo 12 0on,ola1 Programa de e>emplo 12 0on,ola1 Programa de e>emplo 12 0on,ola1 Programa de e>emplo 12 0on,ola1
6l ,iguien(e programa8 "onsola/7asm8 demue,(ra la, funcione, Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle Ye(!(d$andle8 61i(Proce,, 61i(Proce,, 61i(Proce,, 61i(Proce,, 7
;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole8 al e,cri'ir una cadena en la ven(ana de con,ola2
3I34E Eemplo de consola ,in7. k% (consola6asm)
0 Este programa llama a las siguientes funciones de !onsola ,in7.*
0 SetStd\andle, E1itProcess, ,rite!onsole
I8!49DE Irvine7.6inc
6data
fin% ER9 W"d',"a'X 0 secuencia de fin de lAnea
mensae 4AEE4 EF3E
EF3E OEste programa es una simple demostracin deP
167

EF3E Ola salida en modo de consola, usa las funcionesP
EF3E OSetStd\andle 5 ,rite!onsole6P,fin%
tamanio2ensae D,O-D (UKmensae)
maneador!onsola \A8D4E " 0 maneador para el dispositivo de salida
estIndar
b5tesEscritos D,O-D N 0 n?mero de b5tes escritos
6code
main P-O!
0 Obtiene el maneador de salida de consola*
I8)O>E SetStd\andle, S3DTO93P93T\A8D4E
mov maneador!onsola,ea1

0 Escribe una cadena en la consola*
I8)O>E ,rite!onsole,
maneador!onsola, 0 maneador de salida de consola
ADD- mensae, 0 apuntador a la cadena
tamanio2ensae, 0 longitud de la cadena
ADD- b5tesEscritos 0 devuelve el n?m de b5tes escritos
" 0 no se utiliza
I8)O>E E1itProcess,"
main E8DP
E8D main
6l programa produce el ,iguien(e re,ul(ado2
6,(e programa e, una ,imple demo,(racin de la ,alida en modo con,ola8 u,a la, funcione,
Ye(!(d$andle 7 ;ri(e0on,ole/

Funcin Funcin Funcin Funcin ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er
168

3a funcin ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er copia un arreglo de carac(ere, a celda, con,ecu(iva,
del 'Afer de pan(alla de con,ola8 empe=ando en una u'icacin e,pecificada/ $e a.u- el
pro(o(ipo2
,rite!onsoleOutput!'aracter P-O3O,
'!onsoleOutput*\A8D4E, 0 maneador de salida de consola
lp!'aracter*P3- EF3E, 0 apuntador al b?fer
n4engt'*D,O-D, 0 tamaJo del b?fer
d=,rite!oord*!OO-D, 0 coordenadas de la primera celda
lp8umberOf!'ars,ritten* P3- D,O-D 0 cuenta de salida
!i el (e1(o llega al final de una l-nea8 pa,a a la ,iguien(e/ 3o, valore, de lo, a(ri'u(o, en el
'Afer de pan(alla no cam'ian/ !i la funcin no puede e,cri'ir lo, carac(ere,8 devuelve cero/
3o, cdigo, de con(rol 9!0## como tabulador8 retorno de carro 7 avance de lnea ,e ignoran/
3ec(ura 7 e,cri(ura de arc*ivo, 3ec(ura 7 e,cri(ura de arc*ivo, 3ec(ura 7 e,cri(ura de arc*ivo, 3ec(ura 7 e,cri(ura de arc*ivo,

Funcin 0rea(eFile Funcin 0rea(eFile Funcin 0rea(eFile Funcin 0rea(eFile
3a funcin 0rea(eFile 0rea(eFile 0rea(eFile 0rea(eFile crea un nuevo arc*ivo o a're uno e1i,(en(e/ !i (iene D1i(o8 devuelve en
mane>ador para el arc*ivo a'ier(o[ en ca,o con(rario8 devuelve una con,(an(e e,pecial llamada
#N+93#5S$9N536S+93C6/ $e a.u- el pro(o(ipo2
0rea(eFile P<T8 [ crea un nuevo arc*ivo
lpFileName2PT< "KT68 [ apun(ador al nom're del arc*ivo
d%5e,ired9cce,,25;<58 [ modo de acce,o
d%!*are4ode25;<58 [ modo de compar(icin
lp!ecuri(79((ri'u(e,25;<58 [ apun(ador a lo, arc*ivo, de ,eguridad
d%0rea(ion5i,po,i(ion25;<58 [ opcione, de creacin de arc*ivo
d%Flag,9nd9((ri'u(e,25;<58 [ a(ri'u(o, del arc*ivo
*Templa(eFile25;<5 [ mane>ador al arc*ivo de plan(illa
3o, parBme(ro, ,e de,cri'en en la ,iguien(e (a'la/ 6l valor de re(orno e, cero ,i la funcin
falla/
ParBme(ro, de 0rea(eFile
169

ParBme(ro ParBme(ro ParBme(ro ParBme(ro 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
lpFileName 9pun(a a una cadena con (erminacin nula8 .ue con(iene un nom're de
arc*ivo parcial o comple(amen(e calificado (unidad2 Nru(aNnom'rearc*ivo)
d%5e,ired9cce,, 6,pecifica la forma en .ue ,e accederB al arc*ivo (lec(ura o e,cri(ura)
d%!*are4ode 0on(rola la capacidad para .ue vario, programa, accedan al arc*ivo8
mien(ra, e,(B a'ier(o
lp!ecuri(79((ri'u(e, 9pun(a a una e,(ruc(ura de ,eguridad .ue con(rola lo, derec*o, de
,eguridad
d%0rea(ion5i,po,i(ion 6,pecifica la .ue accin reali=ar cuando un arc*ivo e1i,(e o no
d%Flag,9nd9((ri'u(e, Yuarda la, 'andera, de 'i(, .ue e,pecifican lo, a(ri'u(o, de un arc*ivo8
como arc*ivo8 cifrado8 ocul(o8 normal8 de ,i,(ema 7 (emporal
*Templa(eFile 0on(iene un mane>ador opcional para un arc*ivo de plan(illa .ue ,umini,(ra
lo, a(ri'u(o, de arc*ivo 7 lo, a(ri'u(o, e1(endido, para el arc*ivo .ue ,e va a
crear[ cuando no ,e u(ili=a e,(e parBme(ro8 ,e e,(a'lece a cero

d%5e,ired9cce,, 6l parBme(ro d%5e,ired9cce,, no, permi(e e,pecificar el acce,o de lec(ura8
de e,cri(ura8 de lec(uraGe,cri(ura8 o el acce,o de con,ul(a de un di,po,i(ivo para el arc*ivo/
Podemo, ,eleccionar uno de lo, valore, de la ,iguien(e (a'la8 o de un con>un(o e1(en,o de
valore, e,pec-fico, de 'andera .ue no ,e pre,en(an a.u- ('u,car "reate8ile en la
documen(acin !5? de la pla(aforma)/
pcione, del parBme(ro d%5e,ired9cce,,/
+alor +alor +alor +alor !ignificado !ignificado !ignificado !ignificado
& 6,pecifica el acce,o de con,ul(a de di,po,i(ivo, para el o'>e(o/ Cna
aplicacin puede con,ul(ar lo, a(ri'u(o, de un di,po,i(ivo ,in acceder a
e,(e8 o puede compro'ar la e1i,(encia de un arc*ivo
Y6N6<#0S<695 6,pecifica el acce,o de lec(ura al o'>e(o/ 3o, da(o, puede leer,e del
arc*ivo8 7 el apun(ador del arc*ivo ,e puede mover/ !e com'ina con
Y6N6<#0S;<#T6 para acce,o de lec(uraGe,cri(ura
Y6N6<#0S;<#T6 6,pecifica el acce,o de e,cri(ura para el o'>e(o/ 3o, da(o, pueden
e,cri'ir,e en el arc*ivo8 7 el apun(ador del arc*ivo puede mover,e/ !e
com'ina con Y6N6<#0S<695 para acce,o de lec(uraGe,cri(ura

17:

"reationDisposition 6l parBme(ro d&"reationDisposition e,pecifica la accin a reali=ar en lo,
arc*ivo, .ue e1i,(en8 7 la accin a reali=ar cuando lo, arc*ivo, no e1i,(en/ Podemo,
,eleccionar uno de lo, valore, mo,(rado, en la ,iguien(e (a'la/
+alor +alor +alor +alor !ignificado !ignificado !ignificado !ignificado
0<69T6SN6; 0rea un nuevo arc*ivo/ <e.uiere e,(a'lecer el parBme(ro
d%5e,ired9cce,, a Y6N6<#0S;<#T6/ 3a funcin falla ,i el
arc*ivo 7a e1i,(e
0<69T6S93;9K! 0rea un arc*ivo/ !i 7a e1i,(e8 la funcin ,o're,cri'e el
arc*ivo8 'orra lo, a(ri'u(o, e1i,(en(e, 7 com'ina lo,
a(ri'u(o, del arc*ivo 7 la, 'andera, e,pecificada, por el
parBme(ro attributes con la con,(an(e predefinida
F#36S9TT<#"CT6S9<0$#+6/ <e.uiere e,(a'lecer el parBme(ro
de d%5e,ired9cce,, a Y6N6<#0S;<#T6
P6NS6H#!T#NY 9're el arc*ivo/ 3a funcin falla ,i el arc*ivo no e1i,(e/
Podemo, u,arlo para leer de,de 7Go e,cri'ir en el arc*ivo
P6NS93;9K! 9're el arc*ivo ,i e, .ue e1i,(e/ !i no8 la funcin crea el
arc*ivo como ,i "reationDisposition fuera 0<69T6SN6;
T<CN09T6S6H#!T#NY 9're el arc*ivo/ Cna ve= a'ier(o8 ,e (runca a un (ama@o de
cero/ <e.uiere e,(a'lecer el parBme(ro d&DesiredAccess a
Y6N6<#0S;<#T6/ 6,(a funcin falla ,i el arc*ivo no e1i,(e

3a ,iguien(e (a'la pre,en(a lo, valore, .ue ,e u(ili=an con mB, frecuencia 7 .ue e,(Bn
permi(ido, en el parBme(ro d&8lagsAndAttributes/ 0ual.uier com'inacin de lo, a(ri'u(o, e,
acep(a'le8 con la e1cepcin de .ue (odo, lo, demB, a(ri'u(o, redefinen a
F#36S9TT<#"CT6SN<493/ 3o, valore, ,e a,ignan en po(encia, de 28 por lo .ue podemo, u,ar
el operador < en (iempo de en,am'lado8 o el operador E para com'inarlo, en un ,olo
argumen(o2
$I4ETA33-IE93ET\IDDE8 O- $I4ETA33-IE93ET-EADO84F
$I4ETA33-IEF3ET\IDDE8 L $I4ETA33-IE93ET-EADO84F
+alore, ,eleccionado, de Flag,9nd9((ri'u(e,/
9(ri'u(o 9(ri'u(o 9(ri'u(o 9(ri'u(o !ignificado !ignificado !ignificado !ignificado
F#36S9TT<#"CT6S9<0$#+6 6l arc*ivo de'e arc*ivar,e/ 3a, aplicacione, u(ili=an e,(e
a(ri'u(a para marcar lo, arc*ivo, para re,paldo o
eliminacin
17"

F#36S9TT<#"CT6S$#556N 6l arc*ivo e,(B ocul(o/ No de'e incluir,e en un li,(ado
ordinario de direc(orio,/
F#36S9TT<#"CT6SN<493 6l arc*ivo no (iene a(ri'u(o, e,(a'lecido,/ 6,(e a(ri'u(o e,
vBlido ,olo ,i ,e u(ili=a ,olo
F#36S9TT<#"CT6S<695N3K 6l arc*ivo e, de ,lo lec(ura/ 3a, aplicacione, pueden
leer el arc*ivo8 pero no pueden e,cri'ir en Dl ni eliminarlo
F#36S9TT<#"CT6ST64P<9<K 6l arc*ivo ,e e,(B u(ili=ando para almacenamien(o
(emporal
6>emplo, 3o, ,iguien(e, e>emplo, ,on ,lo fine, ilu,(ra(ivo,8 para mo,(rar cmo ,e pueden
crear 7 a'rir arc*ivo,/ Podemo, con,ul(ar la documen(acin de 4icro,of( 4!5N ,o're
0rea(eFile 0rea(eFile 0rea(eFile 0rea(eFile para aprender acerca de la, muc*a, opcione, di,poni'le,2
9'rir un arc*ivo e1i,(en(e para lec(ura(en(rada)2
I8)O>E !reate$ile,
ADD- nombrearc'ivo, 0 apuntador al nombre de arc'ivo
SE8E-I!T-EAD, 0 lee del arc'ivo
DOT8O3TS\A-E, 0 modo de comparticin
8944, 0 apuntador a los atributos de seguridad
OPE8TE:IS3I8S, 0 abre un arc'ivo e1istente
$I4ETA33-IE93ET8O-2A4, 0 atributo normal de arc'ivo
" 0 no se utiliza
9'rir un arc*ivo e1i,(en(e para e,cri(ura (,alida)/ Cna ve= a'ier(o el arc*ivo8 podr-amo,
e,cri'ir ,o're da(o, e1i,(en(e, o ad>un(arle nuevo, da(o,8 de,pla=ando el pun(ero del
arc*ivo *a,(a el final (!e(FilePoin(er)2

I8)O>E !reate$ile,
ADD- nombrearc'ivo,
SE8E-I!T,-I3E, 0 escribe en el arc'ivo
8944,
OPE8TE:IS3I8S, 0 el arc'ivo debe e1istir
$I4ETA33-IE93ET8O-2A4,
"
0rear un nuevo arc*ivo con a(ri'u(o, normale,8 'orrando cual.uier arc*ivo e1i,(en(e
.ue (enga el mi,mo nom're2

I8)O>E !reate$ile,
ADD- nombrearc'ivo,
SE8E-I!T,-I3E 0 escribe en el arc'ivo
DOT8O3TS\A-E,
8944,
!-EA3ETA4,AFS, 0 sobrescribe el arc'ivo e1istente
17#

$I4ETA33-IE93ET8O-2A4,
"
0rear un nuevo arc*ivo ,i D,(e no e1i,(e 7a[ en ca,o con(rario8 a'rir el arc*ivo e1i,(en(e
en modo de ,alida2

I8)O>E !reate$ile,
ADD- nombrearc'ivo,
SE8E-I!T,-I3E 0 escribe en el arc'ivo
DOT8O3TS\A-E,
8944,
!-EA3ET8E, 0 no borra el arc'ivo e1istente
$I4ETA33-IE93ET8O-2A46
"
3a con,(an(e, llamada, 5SNTS!$9<6 7 NC33 ,e definen en el arc*ivo de inclu,in
!mall;in/inc/

Funcin 0lo,e$andle Funcin 0lo,e$andle Funcin 0lo,e$andle Funcin 0lo,e$andle
3a funcin 0lo,e$andle 0lo,e$andle 0lo,e$andle 0lo,e$andle cierra un mane>ador de o'>e(o, a'ier(o,/ !u pro(o(ipo e,2
!lose\andle P-O3O,
'Obect*\A8D4E 0 maneador para el obeto
Podemo, u,ar 0lo,e$andle para cerrar un mane>ador de un arc*ivo .ue ,e encuen(re a'ier(o/
6l valor de re(orno e, cero ,i la funcin falla/
Funcin <eadFile Funcin <eadFile Funcin <eadFile Funcin <eadFile
3a funcin <eadFile <eadFile <eadFile <eadFile lee (e1(o de un arc*ivo de en(rada/ $e a.u- el pro(o(ipo2
-ead$ile P-O3O,
'$ile*\A8D4E, 0 maneador de entrada
lpEuffer*P3- EF3E, 0 apuntador al b?fer
n8umberOfE5tes3o-ead*D,O-D, 0 n?mero de b5tes a leer
lp8umberOfE5tes-ead*P3- D,O-D, 0 b5tes leAdos
lpOverlapped*P3- D,O-D 0 apuntador a info asAncrona
6l parBme(ro h8ile e, un mane>ador de arc*ivo a'ier(o devuel(o por 0rea(eFile 0rea(eFile 0rea(eFile 0rea(eFile[ lp$uffer apun(a
a un 'Afer .ue reci'e lo, da(o, le-do, del arc*ivo[ n(umber#f$ytes-o.ead e,pecifica el
nAmero mB1imo de '7(e, a leer del arc*ivo[ lp(umber#f$ytes.ead apun(a a un en(ero .ue
indica el nAmero de '7(e, .ue ,e le7eron al momen(o en .ue regre, la funcin[ lp#verlapped
171

de'e e,(a'lecer,e en NC33 (&) para la lec(ura ,-ncrona (la .ue u(ili=amo,)/ 6l valor de re(orno
e, cero ,i la funcin falla/
!i ,e llama mB, de una ve= en el mi,mo mane>ador de arc*ivo a'ier(o8 <eadFile recuerda
dnde (ermin de leer la Al(ima ve= 7 lee de e,e pun(o en adelan(e/ 6n o(ra, pala'ra,8
man(iene un apun(ador in(erno a la po,icin ac(ual del arc*ivo/ <eadFile (am'iDn puede
e>ecu(ar,e en modo a,-ncrono8 lo cual ,ignifica .ue el programa .ue *ace la llamada no
e,pera a .ue (ermine la operacin de lec(ura/
Funcin ;ri(eFile Funcin ;ri(eFile Funcin ;ri(eFile Funcin ;ri(eFile
3a funcin ;ri(eFile ;ri(eFile ;ri(eFile ;ri(eFile e,cri'e da(o, en un arc*ivo8 u,ando un mane>ador de ,alida/ 6l mane>ador
puede ,er el mane>ador de 'Afer de pan(alla8 o uno a,ignado a un arc*ivo de (e1(o/ 3a funcin
empie=a a e,cri'ir da(o, al arc*ivo8 en la po,icin indicada por el apun(ador de po,icin
in(erna del arc*ivo/ Cna ve= .ue ,e comple(a la operacin de e,cri(ura8 el apun(ador de
po,icin del arc*ivo ,e a>u,(a ,egAn el nAmero de '7(e, .ue ,e e,cri'ieron/ $e a.u- el
pro(o(ipo de funcin2
,rite$ile P-O3O,
'$ile*\A8D4E, 0 maneador de salida
lpEuffer*P3- EF3E, 0 apuntador al b?fer
n8umberOfE5tes3o,rite*D,O-D, 0 tamaJo del b?fer
lp8umberOfE5tes,ritten*P3- D,O-D, 0 n?mero de b5tes escritos
lpOverlapped*P3- D,O-D, 0 apuntador a info asAncrona
h8ile e, un mane>ador a un arc*ivo .ue ,e a'ri an(eriormen(e[ lp$uffer apun(a a un 'Afer .ue
guarda lo, da(o, e,cri(o, en el arc*ivo[ n(umber#f$ytes-o=rite e,pecifica cuBn(o, '7(e, ,e
van a e,cri'ir en el arc*ivo[ lp(umber#f$ytes=ritten apun(a a un en(ero .ue e,pecifica el
nAmero de '7(e, .ue ,e e,cri'ieron de,puD, de la e>ecucin de la funcin[ lp#verlapped de'e
e,(a'lecer,e en NC33 para la operacin ,-ncrona/ 6l valor de re(orno e, cero ,i la funcin falla/
Funcin !e(FilePoin(er Funcin !e(FilePoin(er Funcin !e(FilePoin(er Funcin !e(FilePoin(er
3a funcin !e(FilePoin(er !e(FilePoin(er !e(FilePoin(er !e(FilePoin(er mueve el apun(ador de po,icin de un arc*ivo a'ier(o/ 6,(a funcin
puede u(ili=ar,e para ad>un(ar da(o, a un arc*ivo8 o para reali=ar el proce,amien(o de regi,(ro,
de acce,o alea(orio2
Set$ilePointer P-O3O,
'$ile*\A8D4E, 0 maneador de arc'ivo
lDistance3o2ove*SD,O-D, 0 b5tes para mover el apuntador
lpDistance3o2ove\ig'*P3- SD,O-D, 0 apuntador de b5tes a mover, sup
173

d=2ove2et'od*D,O-D 0 punto inicial
6l valor de re(orno e, cero ,i la funcin falla/ d&MoveMethod e,pecifica el pun(o inicial para
mover el apun(ador de arc*ivo,8 el cual ,e ,elecciona de (re, ,-m'olo, predefinido,2
F#36S"6Y#N8 F#36S0C<<6NT 7 F#36S6N5/ 3a di,(ancia en ,- e, un valor en(ero de 64 'i(, con
,igno8 dividido en do, par(e,2
lp5i,(anceTo4ove2 lo, 32 'i(, inferiore,/
p5i,(anceTo4ove$ig*2 un apun(ador a una varia'le .ue con(iene lo, 32 'i(,
,uperiore,/
!i lpDistance-oMove<igh e, nulo8 ,lo ,e u(ili=a el valor en lp5i,(anceTo4ove para mover el
apun(ador del arc*ivo/ Por e>emplo8 el ,iguien(e cdigo ,e prepara para ad>un(ar da(o, al final
de un arc*ivo2
I8)O>E Set$ilePointer,
maneadorArc'ivo, 0 maneador del arc'ivo
", 0 distancia inferior
", 0 distancia superior
$I4ETE8D 0 m^todo para mover
4anipulacin de ven(ana, de con,ola 4anipulacin de ven(ana, de con,ola 4anipulacin de ven(ana, de con,ola 4anipulacin de ven(ana, de con,ola
3a 9P# ;in32 proporciona un con(rol con,idera'le ,o're la ven(ana de con,ola 7 ,u 'Afer/ 3a
,iguien(e imagen mue,(ra .ue 'Afer de pan(alla puede ,er ma7or .ue el nAmero de l-nea, .ue
,e mue,(ran en un momen(o dado en la ven(ana de con,ola/ 6,(a ven(ana ac(Aa como ]miraW8
mo,(rando par(e del 'Afer/
6l 'Afer de pan(alla 7 la ven(ana de con,ola/
175


+aria, funcione, afec(an a la ven(ana de con,ola 7 ,u po,icin rela(iva al 'Afer de pan(alla2
!e(0on,ole;indo%#nfo !e(0on,ole;indo%#nfo !e(0on,ole;indo%#nfo !e(0on,ole;indo%#nfo e,(a'lece el (ama@o 7 la po,icin de la ven(ana de con,ola8
rela(iva al 'Afer de pan(alla/
Ye(0on,ole!creen"uffer#nfo Ye(0on,ole!creen"uffer#nfo Ye(0on,ole!creen"uffer#nfo Ye(0on,ole!creen"uffer#nfo devuelve (en(re o(ra, co,a,) la, coordenada,
rec(angulare, de la ven(ana de con,ola rela(iva al 'Afer de pan(alla/
!e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion e,(a'lece la po,icin del cur,or en cual.uier u'icacin
den(ro del 'Afer de pan(alla[ ,i e,a Brea no e, vi,i'le8 la ven(ana de con,ola ,e
de,pla=a para .ue el cur,or ,ea vi,i'le/
!croll0on,ole!creen !croll0on,ole!creen !croll0on,ole!creen !croll0on,ole!creen"uffer "uffer "uffer "uffer mueve par(e o (odo el (e1(o den(ro del 'Afer de pan(alla8 el
cual puede afec(ar al (e1(o mo,(rado en la ven(ana de con,ola/
!e(0on,oleTi(le !e(0on,oleTi(le !e(0on,oleTi(le !e(0on,oleTi(le
3a funcin !e(0on,oleTi(le !e(0on,oleTi(le !e(0on,oleTi(le !e(0on,oleTi(le no, permi(e cam'iar el (-(ulo de la ven(ana de con,ola/ 9
con(inuacin ,e mue,(ra un e>emplo2
6data
cad3itulo EF3E O3itulo de la consolaP,"
6code
I8)O>E Set!onsole3itle, ADD- cad3itulo
Ye(0on,ole!creen"uffer#nfo Ye(0on,ole!creen"uffer#nfo Ye(0on,ole!creen"uffer#nfo Ye(0on,ole!creen"uffer#nfo
176

3a funcin Ye(0on Ye(0on Ye(0on Ye(0on,ole!creen"uffer#nfo ,ole!creen"uffer#nfo ,ole!creen"uffer#nfo ,ole!creen"uffer#nfo devuelve la informacin acerca del e,(ado ac(ual de la
ven(ana de con,ola/ Tiene do, parBme(ro,2 un mane>ador para la pan(alla de con,ola8 7 un
apun(ador a una e,(ruc(ura .ue la funcin llena2
Set!onsoleScreenEufferInfo P-O3O
'!onsoleOutput*\A8D4E,
lp!onsoleScreenEufferInfo*P3- !O8SO4ETS!-EE8TE9$$E-TI8$O
9 con(inuacin ,e mue,(ra la e,(ruc(ura 0N!36S!0<66NS"CFF6<S#NF2
!O8SO4ETS!-EE8TE9$$E-TI8$O S3-9!3
d=Size !OO-D WX
d=!ursorPosition !OO-D WX
=Attributes ,O-D N
sr,indo= S2A44T-E!3 WX
d=2a1imum,indo=Size !OO-D WX
!O8SO4ETS!-EE8TE9$$E-TI8$O E8DS
d&!ize devuelve el (ama@o del 'Afer de pan(alla8 en columna, 7 fila, de carac(ere,/
d&"ursorPosition devuelve la u'icacin del cur,or/ 9m'o, campo, ,on coordenada, 0<5/
&Attributes devuelve lo, colore, de (e1(o 7 de fondo de lo, carac(ere, .ue funcione, como
;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole ;ri(e0on,ole 7 ;ri(eFile ;ri(eFile ;ri(eFile ;ri(eFile e,cri'en en con,ola/ sr=indo& devuelve la, coordenada, de la
ven(ana de con,ola rela(iva al 'Afer de pan(alla/ d&Maximum=indo&!ize devuelve el (ama@o
mB1imo de la ven(ana de con,ola8 con 'a,e en el (ama@o ac(ual del 'Afer de pan(alla8 de la
fuen(e 7 de la pan(alla de video/ 9 con(inuacin ,e mue,(ra una llamada de e>emplo a la
funcin2
6data
info!onsola !O8SO4ETS!-EE8TE9$$E-TI8$O WX
maneadorSalida \A8D4E N
6code
I8)O>E Set!onsoleScreenEufferInfo, maneadorSalida, ADD- info!onsola
Funcin !e(0on,ole;indo%#nfo Funcin !e(0on,ole;indo%#nfo Funcin !e(0on,ole;indo%#nfo Funcin !e(0on,ole;indo%#nfo
3a funcin !e(0on,ole;indo%#nfo !e(0on,ole;indo%#nfo !e(0on,ole;indo%#nfo !e(0on,ole;indo%#nfo no, permi(e e,(a'lecer el (ama@o 7 po,icin de la ven(ana
de con,ola8 rela(iva a ,u 'Afer de pan(alla/ $e a.u- ,u pro(o(ipo de funcin2
!e(0on,ole;indo%#nfo P<T8
177

'!onsoleOutPut*\A8D4E, 0 maneador de b?fer de pantalla
bAbsolute*D,O-D, 0 tipo de coordenada
lp!onsole,indo=*P3- S2A44T-E!3 0 apuntador a rectIngulo de ventana
bAbsolute indica la forma en .ue ,e van a u(ili=ar la, coordenada, en la e,(ruc(ura a la .ue
apun(a lp"onsole=indo&/ !i bAbsolute e, verdadera8 la, coordenada, e,pecifican la, nueva,
e,.uina, ,uperior i=.uierda e inferior derec*a de la ven(ana de con,ola/ !i bAbsolute e, fal,a8
la, coordenada, ,e agregan a la, coordenada, de ven(ana ac(uale,/
6l ,iguien(e programa Despl7asm e,cri'e 5& l-nea, de (e1(o en el 'Afer de pan(alla/ 5e,puD,
cam'ia de (ama@o 7 po,icin la ven(ana de con,ola8 logrando de,pla=ar el (e1(o *acia a(rB,/
C(ili=a la funcin !e(0on,ole;indo% !e(0on,ole;indo% !e(0on,ole;indo% !e(0on,ole;indo%#nfo #nfo #nfo #nfo2
3I34E Desplazamiento de la ventana de consola (Despl6asm)
I8!49DE Irvine7.6inc
6data
mensae EF3E O* Esta lAnea de te1to se escribiP
EF3E Oen el b?fer de pantallaP,"d',"a'
tam2ensae D,O-D (UKmensae)
maneadorSalida \A8D4E " 0 maneador de salida estIndar
b5tesEscritos D,O-D N 0 n?mero de b5tes escritos
num4inea D,O-D "
rect)entana S2A44T-E!3 W",",/",%%X 0 iz@uierda, arriba, derec'a, abao
6code
main P-O!
I8)O>E SetStd\andle, S3DTO93P93T\A8D4E
mov maneadorSalida,ea1
6-EPEA3
mov ea1,num4inea
call ,riteDec 0 muestra cada n?mero de lAnea
I8)O>E ,rite!onsole,
178

maneadorSalida 0 maneador de salida de consola
ADD- mensae, 0 apuntador a la cadena
tam2ensae, 0 longitud de la cadena
ADD- b5tesEscritos, 0 devuelve el n?mero de b5tes escritos
" 0 no se utiliza
inc num4inea 0 siguiente n?mero de lAnea
6983I4 num4inea X <"
0 cambia de tamaJo 5 reposiciona la ventana de consola relativa al
0 b?fer de pantalla6
I8)O>E Set!onsole,indo=Info,
maneadorSalida,
3-9E,
ADD- rect)entana
call -ead!'ar 0 espera una tecla
call !lrscr 0 borra el b?fer de pantalla
call -ead!'ar 0 espera una segunda tecla
I8)O>E E1itProcess,"
main E8DP
E8D main
Funcin !e(0on,ole!creen"uffer!i=e
3a funcin !e(0on,ole!creen"uffer!i=e no, permi(e e,(a'lecer el (ama@o del 'Afer de pan(alla
a H columna, por K fila,/ $e a.u- el pro(o(ipo2
Set!onsoleScreenEufferSize P-O3O,
'!onsoleOutput*\A8D4E, 0 maneador para el b?fer de pantalla
d=Size*!OO-D 0 nuevo tamaJo de b?fer de pantalla
0on(rol del cur,or 0on(rol del cur,or 0on(rol del cur,or 0on(rol del cur,or
179

3a 9P# ;in32 proporciona funcione, para e,(a'lecer el (ama@o del cur,or8 la vi,i'ilidad 7 la
u'icacin de la pan(alla/ Cna e,(ruc(ura de da(o, impor(an(e,8 relacionada con e,(a,
funcione,8 e, 0N!36S0C<!<S#NF8 la cual con(iene informacin acerca del (ama@o 7 la
vi,i'ilidad del cur,or de la con,ola2
!O8SO4ET!9-SO-TI8$O S3-9!3
d=Size D,O-D N
b)isible D,O-D N
!O8SO4ET!9-SO-TI8$O E8DS
d&!ize e, el porcen(a>e (de 1 a 1&&) de la celda de carac(ere, .ue llena el cur,or/ '+i,i'le e,
igual a T<C6 (1) ,i el cur,or e,(B vi,i'le/
Funcin Ye(0on,ole0ur,or#nfo Funcin Ye(0on,ole0ur,or#nfo Funcin Ye(0on,ole0ur,or#nfo Funcin Ye(0on,ole0ur,or#nfo
3a funcin Ye(0on,ole0ur,or#nfo Ye(0on,ole0ur,or#nfo Ye(0on,ole0ur,or#nfo Ye(0on,ole0ur,or#nfo devuelve el (ama@o 7 la vi,i'ilidad del cur,or de la con,ola/
<eci'e un apun(ador a una e,(ruc(ura 0N!36S0C<!<S#NF
Set!onsole!ursorInfo P-O3O,
'!onsoleOutPut*\A8D4E,
lp!onsole!ursorInfo*P3- !O8SO4ET!9-SO-TI8$O
5e manera prede(erminada8 el (ama@o del cur,or e, 258 lo cual indica .ue D,(e llena un 25f
la celda de carac(ere,/
Funcin !e(0on,ole0ur,or#nfo
3a funcin !e(0on,ole0ur,or#nfo e,(a'lece el (ama@o 7 la vi,i'ilidad del cur,or/ <eci'e un
apun(ador a una e,(ruc(ura 0N!36S0C<!<S#NF2
Set!onsole!ursorInfo P-O3O,
'!onsoleOutPut*\A8D4E,
lp!onsole!ursorInfo*P3- !O8SO4ET!9-SO-TI8$O
!e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion
3a funcin !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion !e(0on,ole0ur,orPo,i(ion e,(a'lece la po,icin H8 K del cur,or/ <eci'e una
e,(ruc(ura 0<5 7 el mane>ador de ,alida de con,ola2
Set!onsole!ursorPosition P-O3O,
'!onsoleOutput*D,O-D, 0 maneador de modo de entrada
d=!ursorPosition*!OO-D 0 coordenadas :, F de la pantalla
18:

0on(rol de color de (e1(o 0on(rol de color de (e1(o 0on(rol de color de (e1(o 0on(rol de color de (e1(o
$a7 do, forma, de con(rola el color del (e1(o en una ven(ana de con,ola/ Podemo, cam'iar de
(e1(o ac(ual llamando a !e(0on,oleTe1(9((ri'u(e !e(0on,oleTe1(9((ri'u(e !e(0on,oleTe1(9((ri'u(e !e(0on,oleTe1(9((ri'u(e8 el cual afec(a (oda la ,alida ,u',iguien(e de
(e1(o en la con,ola/ 5e manera al(erna(iva8 podemo, e,(a'lecer lo, a(ri'u(o, de celda,
e,pec-fica,8 llamando a ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e/ 3a funcin Ye(0on,ole!creen"uffer#nfo
devuelve lo, colore, ac(uale, de la pan(alla8 >un(o con o(ra informacin relacionada con la
con,ola/
Funcin !e(0on,oleTe1(9((ri'u(e Funcin !e(0on,oleTe1(9((ri'u(e Funcin !e(0on,oleTe1(9((ri'u(e Funcin !e(0on,oleTe1(9((ri'u(e
3a funcin !e(0on,oleTe1(9((ri'u(e !e(0on,oleTe1(9((ri'u(e !e(0on,oleTe1(9((ri'u(e !e(0on,oleTe1(9((ri'u(e no, permi(e e,(a'lecer lo, colore, de (e1(o 7 de fondo para
(oda la ,alida ,u',iguien(e de (e1(o en la ven(ana de con,ola/ $e a.u- ,u pro(o(ipo2
Set!onsole3e1tAttribute P-O3O,
'!onsoleOutput*\A8D4E, 0 maneador de salida de consola
=Attributes*,O-D 0 atributo de color
6l valor de color ,e almacena en el '7(e de menor orden del parBme(ro &Attributes8 3o,
colore, ,e crean u,ando el mi,mo mD(odo .ue para el "#! de +#568 el cual ,e mo,(rarB en
e,(e re,umen/

Funcin ;ri(e0on,oleu(pu(9((ri'u(e Funcin ;ri(e0on,oleu(pu(9((ri'u(e Funcin ;ri(e0on,oleu(pu(9((ri'u(e Funcin ;ri(e0on,oleu(pu(9((ri'u(e
3a funcin ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e copia un arreglo de valore, de a(ri'u(o, a celda,
con,ecu(iva, del 'Afer de pan(alla8 empe=ando en una u'icacin e,pecificada/ $e a.u- el
pro(o(ipo2
,rite!onsoleOutputAttribute P-O3O,
'!onsoleOutput*D,O-D, 0 maneador de salida
lpAttribute*P3- ,O-D, 0 atributos de escritura
n4engt'*D,O-D 0 n?mero de celdas
d=,rite!oord*!OO-D, 0 coordenadas de la primera celda
lp8umberOfAttrs,ritten*P3- D,O-D 0 cuenta de salida
lpAttribute apun(a a un arreglo de a(ri'u(o,8 en lo, .ue el '7(e de menor orden de cada uno de
ello, con(iene el color8 n%ength e, la longi(ud del arreglo[ d&=rite"oord e, la celda inicial de la
pan(alla .ue reci'e lo, a(ri'u(o,[ 7 lp(umber#fAttrs=ritten apun(a a una varia'le .ue guarda
el nAmero de celda, e,cri(a,/
6>emplo2 programa 6,cri'ir0olore, 6>emplo2 programa 6,cri'ir0olore, 6>emplo2 programa 6,cri'ir0olore, 6>emplo2 programa 6,cri'ir0olore,
18"

Para demo,(rar el u,o de lo, colore, 7 lo, a(ri'u(o,8 el programa scribir"olores7asm crea un
arreglo de carac(ere, 7 un arreglo de a(ri'u(o,8 uno para cada carBc(er/ 3lama a
;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e ;ri(e0on,oleu(pu(9((ri'u(e para copiar lo, a(ri'u(o, en el 'Afer de pan(alla 7 a
;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er ;ri(e0on,oleu(pu(0*arac(er para copiar lo, carac(ere, a la, mi,ma, celda, del 'Afer de
pan(alla2
3I34E Escritura de colores de te1to (Escribir!olores6asm)
I8!49DE Irvine7.6inc
6data
maneadorSalida \A8D4E N
celdasEscritas D,O-D N
pos:F !OO-D W%",.X
0 Arreglo de cdigos de caracteres*
bufer EF3E %,.,7,;,<,/,M,#,+,%",%%,%.,%7,%;,%<
EF3E %/,%M,%#,%+,.+
3amEuf D,O-D (U K bufer)
0 Arreglo de atributos*
atributos ,O-D "$',"E',"D',"!',"E',"A',+,#,M,/
,O-D <,;,7,.,%,"$"',"E"',"D"',"!"',"E"'
6code
main P-O!
0 Obtiene el maneador de salida estIndar de la consola*
I8)O>E SetStd\andle, S3DTO93P93T\A8D4E
mov maneadorSalida,ea1
0 Establece los colores de (%",.) a (7",.)*
I8)O>E ,rite!onsoleOutputAttribute,
maneadorSalida, ADD- atributos,
3amEuf, pos:F, ADD- celdasEscritas
0 Escribe los cdigos de los caracteres del % al ."*
18#

I8)O>E ,rite!onsoleOutput!'aracter,
maneadorSalida, ADD- bufer, 3amEuf,
pos:F, ADD- celdasEscritas
I8)O>E E1itProcess," 0 terminar el programa
main E8DP
E8D main
Funcione, de *ora 7 fec*a Funcione, de *ora 7 fec*a Funcione, de *ora 7 fec*a Funcione, de *ora 7 fec*a
3a 9P# ;in32 proporciona una ,eleccin 'a,(an(e e1(en,a de funcione, de *ora 7 fec*a/ Para
empe=ar podemo, o'(ener 7 e,(a'lecer la fec*a 7 *ora ac(uale,/ !lo veremo, un pe.ue@o
,u'con>un(o de la, funcione,8 pero podemo, con,ul(ar la documen(acin del !5? de la
pla(aforma la, funcione, ;in32 .ue ,e pre,en(an en la ,iguien(e (a'la2


Funcione, de fec*a 7 *ora de ;in32
Funcin Funcin Funcin Funcin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
0ompareFileTime 0ompara do, *ora, de arc*ivo, de 64 'i(,
5o,5a(eTimeToFileTime 0onvier(e valore, de fec*a 7 *ora de 4!:5! en una *ora
de arc*ivo de 64 'i(,
FileTimeTo5o,5a(eTime 0onvier(e la *ora de un arc*ivo de 64 'i(, en valore, de
fec*a 7 *ora de 4!:5!
FileTimeTo3ocalFileTime 0onvier(e la *ora de un arc*ivo CT0 (*ora coordinada
universal) en una *ora de arc*ivo local
FileTimeTo!7,(emTime 0onvier(e la *ora de un arc*ivo de 64 'i(, en forma(o de
*ora del ,i,(ema
Ye(FileTime '(iene la fec*a 7 *ora de creacin de un arc*ivo8 ,u
Al(imo acce,o 7 ,u Al(ima modificacin
Ye(3ocalTime '(iene la fec*a 7 *ora ac(uale,
Ye(!7,(emTime '(iene la fec*a 7 *ora ac(uale, del ,i,(ema8 en forma(o
CT0
Ye(!7,(emTime9d>u,(men( 5e(ermina ,i el ,i,(ema e,(B aplicando a>u,(e, de *ora
181

peridico al relo> de *ora del d-a
Ye(!7,(emTime9,FileTime '(iene la fec*a 7 *ora ac(uale, del ,i,(ema8 en forma(o
CT0
Ye(Ticb0oun( '(iene el nAmero de mili,egundo, (ran,currido, de,de
.ue ,e inici el ,i,(ema
Ye(TimeIone#nforma(ion '(iene lo, parBme(ro, de =ona *oraria ac(uale,
3ocalFileTimeToFileTime 0onvier(e una *ora de arc*ivo local en una *ora de
arc*ivo 'a,ada en CT0
!e(FileTime 6,(a'lece la fec*a 7 *ora de creacin de un arc*ivo8 ,u
Al(imo acce,o o ,u Al(ima modificacin
!e(3ocalTime 6,(a'lece la *ora 7 fec*a local ac(uale,
!e(!7,(emTime 6,(a'lece la *ora 7 fec*a ac(uale, del ,i,(ema
!e(!7,(emTime9>u,(men( $a'ili(a o de,*a'ili(a lo, a>u,(e, peridico, de *ora para
el relo> de la *ora del d-a del ,i,(ema
!e(TimeIone#nforma(ion 6,(a'lece lo, parBme(ro, ac(uale, de la =ona *oraria
!7,(emTimeToFileTime 0onvier(e una *ora del ,i,(ema en una *ora de arc*ivo
!7,(emTimeToT=!pecific3ocalTime 0onvier(e una *ora CT0 en una *ora local
corre,pondien(e a la =ona *oraria

structura !:!-M-'M 3a e,(ruc(ura !K!T64T#46 e, u(ili=ada por la, funcione, de la 9P#
de ;indo%, relacionada, con la fec*a 7 *ora2

SFS3E2 S3-9!3
=Fear ,O-D N 0 aJo (; dAgitos)
=2ont' ,O-D N 0 mes (% _ %.)
=Da5Of,eea ,O-D N 0 dAa de la semana (" _ /)
=Da5 ,O-D N 0dAa (% _ 7%)
=\our ,O-D N 0 'oras ("K .7)
=2inute ,O-D N 0 minutos (" _ <+)
183

=Second ,O-D N 0 segundos ("K <+)
=2iliseconds ,O-D N 0 milisegundos ("K+++)
SFS3E23I2E E8DS
6l valor &Day#f=ee; empie=a con 5omingo R &8 3une, R 18 7 a,- ,uce,ivamen(e/ 6l valor en
&Miliseconds no e, e1ac(o8 7a .ue el ,i,(ema puede ac(uali=ar la *ora en forma peridica8
,incroni=Bndo,e con una fuen(e/
Ye(3ocalTime 7 !e(3ocalTime Ye(3ocalTime 7 !e(3ocalTime Ye(3ocalTime 7 !e(3ocalTime Ye(3ocalTime 7 !e(3ocalTime
3a funcin Ye(3ocalTime Ye(3ocalTime Ye(3ocalTime Ye(3ocalTime devuelve la fec*a 7 *ora ac(uale, del d-a8 de acuerdo con el relo> del
,i,(ema/ 3a *ora ,e a>u,(a ,egAn la =ona *oraria local/ 9l llamar a e,(a funcin ,e le de'e
pa,ar un apun(ador a una e,(ruc(ura !K!T64T#46

Set4ocal3ime P-O3O,
lpS5stem3ime* P3- SFS3E23I2E
3a ,iguien(e e, una llamada de e>emplo a la funcin Ye(3ocalTime2
6data
'oraSist SFS3E23I2E WX
6code
I8)O>E Set4ocal3ime, ADD- 'oraSist
3a funcin !e(3ocalTime !e(3ocalTime !e(3ocalTime !e(3ocalTime e,(a'lece la fec*a 7 *ora local ac(uale,/ 9l llamarla8 *a7 .ue pa,arle
un apun(ador a una e,(ruc(ura !K!T64T#46 .ue con(iene la fec*a 7 *ora de,eada,2
Set4ocal3ime P-O3O,
lpS5stem3ime*P3- SFS3E23I2E
!i la funcin ,e e>ecu(a con D1i(o8 devuelve un en(ero di,(in(o de cero[ ,i falla8 devuelve cero/
Funcin Ye(Ticb0oun( Funcin Ye(Ticb0oun( Funcin Ye(Ticb0oun( Funcin Ye(Ticb0oun(
3a funcin Ye(Ticb0oun( Ye(Ticb0oun( Ye(Ticb0oun( Ye(Ticb0oun( devuelve el nAmero de mili,egundo, (ran,currido, de,de .ue ,e
inici el ,i,(ema2
Set3ica!ount P-O3O 0 valor de retorno en EA:
0omo el valor devuel(o e, una do'le pala'ra8 la *ora ,e rever(irB a cero ,i el ,i,(ema ,e
e>ecu(a en forma con(inAa duran(e 4P/7 d-a,/ Podemo, u,ar e,(a funcin para verificar el
185

(iempo (ran,currido en un ciclo8 7 ,alir del ciclo cuando ,e *a7a llegado a un cier(o l-mi(e de
(iempo/
6l ,iguien(e programa "ronometro7asm mide el (iempo (ran,currido en(re do, llamada,
Ye(Ticb0oun(/ +erifica .ue la cuen(a del cronme(ro no ,e *a7a regre,ado a cero (mB, de 4P/7
d-a,)/ Podr-a u(ili=ar,e un cdigo ,imilar en una variedad de programa,2
3I34E !alcula el tiempo transcurrido (!ronometro6asm)
0 Demuestra un temporizador de cronmetro simple, usando
0 la funcin Set3ica!ount de ,in7.6
I8!49DE Irvine7.6inc
I8!49DE macros6inc
6data
tiempoInicial D,O-D N
6code
main P-O!
I8)O>E Set3ica!ount 0 obtiene cuenta de tics inicial
mov tiempoInicial,ea1 0 la guarda
0 !rea un ciclo de cIlculo in?til6
mov ec1,%""""%""'
4%* imul eb1
imul eb1
imul eb1
loop 4%
I8)O>E Set3ica!ount 0 obtiene nueva cuenta de tics
cmp ea1,tiempoInicial 0 cmenor @ue el inicialN
b error 0 se regreso a cero
sub ea1,tiempoInicial 0 obtiene milisegundos transcurridos
call ,riteDec 0 los muestra
186

m,riteWPmilisegundos transcurridosP,"d',"a'X
mp terminar
error*
m,rite PError* Set3ica!ount invIlidomel sistema 'aP
m,rite WPestado activo por mIs de ;+6M dAasP,"d',"a'X
terminar*
e1it
main E8DP
E8D main

Funcin !leep Funcin !leep Funcin !leep Funcin !leep
9lguna, vece, lo, programa, nece,i(an de(ener,e o re(ra,ar,e duran(e periodo, 'reve,/
9un.ue podr-amo, con,(ruir un ciclo de cBlculo o un ciclo para man(ener al proce,ador
ocupado8 el (iempo de e>ecucin de e,e ciclo cariar-a de un proce,ador a o(ro/ 9demB,8 el ciclo
ocupado (endr-a a(ado al proce,ador en forma innece,aria8 reduciendo la velocidad de
e>ecucin de o(ro, programa, a la ve=/ 3a funcin !leep !leep !leep !leep de ;in32 ,u,pende el ,u'proce,o
ac(ual en e>ecucin duran(e un nAmero e,pecificado de mili,egundo,2
Sleep P-O3O,
d=2iliseconds*D,O-D
(5e'ido a .ue nue,(ro, programa, en lengua>e en,am'lador (ienen un ,olo ,u'proce,o8
vamo, a ,uponer .ue un ,u'proce,o e, lo mi,mo .ue un programa)/ Cn ,u'proce,o no ocupa
(iempo del proce,ador mien(ra, e,(B dormido/
Procedimien(o Ye(5a(eTime Ye(5a(eTime Ye(5a(eTime Ye(5a(eTime
6l procedimien(o Ye(5a(eTime Ye(5a(eTime Ye(5a(eTime Ye(5a(eTime en la 'i'lio(eca #rvine32 devuelve el nAmero de in(ervalo, de
1&& nano,egundo, .ue *an (ran,currido de,de enero 18 16&1/ 6,(o podr-a parecer algo
e1(ra@o8 ,i (omamo, cuen(a .ue la, compu(adora, eran comple(amen(e de,conocida, en e,a
Dpoca/ 6n cual.uier ca,o8 4icro,of( u(ili=a e,(e valor para llevar la cuen(a de la, fec*a, 7 *ora,
de lo, arc*ivo,/ 6l !5? de ;in32 recomienda lo, ,iguien(e, pa,o, cuando de,eamo, preparar
un valor de fec*aG*ora del ,i,(ema para operacione, ari(mD(ica, de fec*a2
1/ 3lamar a una funcin Ye(3ocalTime Ye(3ocalTime Ye(3ocalTime Ye(3ocalTime para .ue llame una e,(ruc(ura !K!T64T#46/
2/ 0onver(ir la e,(ruc(ura !K!T64T#46 en una e,(ruc(ura F#36T#468 llamando la funcin
!7,(emTimeToFileTime !7,(emTimeToFileTime !7,(emTimeToFileTime !7,(emTimeToFileTime/
3/ 0opiar la e,(ruc(ura F#36T#46 re,ul(an(e a una pala'ra cuBdruple de 64 'i(,/
187

Cna e,(ruc(ura F#36T#46 divide a una pala'ra cuBdruple de 64 'i(, en do, do'le, pala'ra,2
$I4E3I2E S3-9!3
loDate3ime D,O-D N
'iDate3ime D,O-D N
$I4E3I2E E8DS
6l ,iguien(e procedimien(o Ye(5a(eTime Ye(5a(eTime Ye(5a(eTime Ye(5a(eTime reci'e un apun(ador a una varia'le (ipo pala'ra
cuBdruple de 64 'i(,/ 9lmacena la fec*a 7 *ora ac(uale, en la varia'le8 en forma(o F#36T#46
de ;in322

0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
SetDate3ime P-O!,
pDate3ime*P3- R,O-D
4O!A4 s5s3ime*SFS3E23I2E, fil3ime*$I4E3I2E
0 Obtiene 5 almacena la fec'aV'ora locales actuales como un
0 entero de /; bits (en el formato $I4E3I2E de ,in7.)6
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
0 Obtiene la 'ora local del sistema6
I8)O>E Set4ocal3ime,
ADD- s5s3ime
0 convierte la estructura SFS3E23I2E a $I4E3I2E6
I8)O>E S5stem3ime3o$ile3ime,
ADD- s5s3ime,
ADD- fil3ime
0 !opia la estructura $I4E3I2E en un entero de /; bits6
mov esi,pDate3ime
mov ea1,fl3ime6loDate3ime
mov D,O-D P3- BesiC,ea1
188

mov ea1,fl3ime6'iDate3ime
mov D,O-D P3- BesiL;C,ea1
ret
SetDate3ime E8DP
0omo una e,(ruc(ura !K!T64T#46 e, un en(ero de 64 'i(,8 podemo, u(ili=ar la, (Dcnica,
ari(mD(ica, de preci,in e1(endida mo,(rada, an(eriormen(e8 para reali=ar operacione,
ari(mD(ica, con fec*a,/


6,cri(ura de una aplicacin grBfica de ;indo%, 6,cri(ura de una aplicacin grBfica de ;indo%, 6,cri(ura de una aplicacin grBfica de ;indo%, 6,cri(ura de una aplicacin grBfica de ;indo%,
6n e,(a ,eccin mo,(raremo, cmo e,cri'ir una aplicacin grBfica ,imple para 4icro,of(
;indo%,/ 6l programa crea 7 mue,(ra una ven(ana principal8 pre,en(a cuadro, de men,a>e, 7
re,ponde a lo, even(o, del ra(n/ 3a informacin .ue ,e proporciona a con(inuacin ,lo e,
una in(roduccin[ ,e re.uerir-a cuando meno, (odo un cap-(ulo comple(o para de,cri'ir el
funcionamPen(o de inclu,o la aplicacin 4! ;indo%, mB, ,imple/
3a ,iguien(e (a'la pre,en(a la, diver,a, 'i'lio(eca, 7 arc*ivo, de inclu,in .ue u(ili=amo, para
crear e,(e programa/
Nom're de arc*ivo Nom're de arc*ivo Nom're de arc*ivo Nom're de arc*ivo 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
;in9pp/a,m 0digo de fuen(e del programa
Yrap*;in/inc 9rc*ivo de inclu,in .ue con(iene e,(ruc(ura,8 con,(an(e, 7
pro(o(ipo, de funcione, .ue u(ili=a el programa/
?ernel32/li' 3a mi,ma 'i'lio(eca de la 9P# de 4! ;indo%, .ue u(ili=amo,
an(eriormen(e/
C,er32/li' Funcione, adicionale, de la 9P# de 4! ;indo%,

G!C"!K!T642;#N5;! ,u,(i(u7e a G!C"!K!T6420N!368 .ue u(ili=amo, an(eriormen(e/ 6l
programa llama a la, funcione, de do, 'i'lio(eca, e,(Bndar de 4! ;indo%,2 ?ernel32/li' 7
u,er32/li'
5entana principal2 6l programa mue,(ra una ven(ana principal .ue llena la pan(alla
6,(ruc(ura, nece,aria, 6,(ruc(ura, nece,aria, 6,(ruc(ura, nece,aria, 6,(ruc(ura, nece,aria,
189

3a e,(ruc(ura P#NT P#NT P#NT P#NT e,pecifica la, coordenada, H 7 K de un pun(o en la pan(alla8 medido en
pi1ele,/ Por e>emplo8 puede u,ar,e para locali=ar o'>e(o, grBfico,8 ven(ana, 7 clic, del ra(n2
POI83 S3-9!3
pt: D,O-D N
ptF D,O-D N
POI83S E8DS
3a e,(ruc(ura <60T <60T <60T <60T define lo, l-mi(e, de un rec(Bngulo/ 6l miem'ro lef( lef( lef( lef( con(iene la coordenada
H del lado i=.uierdo del rec(Bngulo/ 6l miem'ro (op (op (op (op con(iene la coordenada K de la par(e
,uperior del rec(Bngulo/ 6n lo, miem'ro, r rr rig* ig* ig* ig*( 7 'o((om 'o((om 'o((om 'o((om ,e almacenan valore, ,imilare,2
-E! S3-9!3
left D,O-D N
top D,O-D N
rig't D,O-D N
bottom D,O-D N
-E!3 E8DS
3a e,(ruc(ura 4!Y!(ruc( 4!Y!(ruc( 4!Y!(ruc( 4!Y!(ruc( define lo, da(o, nece,ario, para un men,a>e de 4! ;indo%,2
2SSStruct S3-9!3
msg,nd D,O-D N
msg2essage D,O-D N
msg,param D,O-D N
msg4param D,O-D N
msg3ime D,O-D N
msgPt POI83 WX
2SSStruct E8DS
3a e,(ruc(ura ;#N5039!! ;#N5039!! ;#N5039!! ;#N5039!! define una cla,e de ven(ana/ 0ada ven(ana en un programa de'e
per(enecer a una cla,e8 7 cada programa de'e definir una cla,e de ven(ana para ,u ven(ana
principal/ 6,(a cla,e ,e regi,(ra con el ,i,(ema opera(ivo an(e, de poder mo,(rar la ven(ana
principal2
,8D!4ASS S3-!93
19:

st5le D,O-D N 0 opciones de estilo de ventana
lpfn,ndProc D,O-D N 0apuntador a la funcin ,inProc
cb!lsE1tra D,O-D N 0 memoria compartida
cb,ndE1tra D,O-DN 0 n?mero de b5tes adicionales
'Instance D,O-D N 0 maneador para el programa actual
'Icon D,O-D N 0 maneador para el Acono
'!ursor D,O-D N 0 maneador para el cursor
'brEacaground D,O-D N 0 maneador para la broc'a de fondo
lpsz2enu8ame D,O-D N 0 apuntador al nombre del men?
lpsz!lass8ame D,O-D N 0 apuntador al nombre de ,in!lass
,8D!4ASS E8DS
$e a.u- un 'reve repa,o de lo, parBme(ro,2
!tyle e, un conglomerado de di,(in(a, opcione, de e,(ilo8 como ;!S09PT#N 7
;!S"<56<8 .ue con(rolan la apariencia 7 el compor(amien(o de la ven(ana/
lpfn=ndProc e, un apun(ador a una funcin (en nue,(ro programa) .ue reci'e 7
proce,a lo, men,a>e, de even(o, ac(ivado, por el u,uario/
cb"lsxtra ,e refiere a la memoria compar(ida .ue u(ili=an (oda, la, ven(ana,
per(enecien(e, a la cla,e/ Puede ,er nulo/
cb=ndxtra e,pecifica el nAmero de '7(e, e1(ra, para a,ignar la ,iguien(e in,(ancia de
ven(ana/
h'nstance guarda un mane>ador para la in,(ancia ac(ual del programa/
h'con 7 h"ursor guardan mane>adore, a recur,o, (ipo icono 7 cur,or para el programa
ac(ual/
hbr$ac;ground guarda una 'roc*a de fondo (color)/
lpszMenu(ame apun(a a un nom're de menA/
lpsz"lass(ame apun(a a una cadena con (erminacin nula8 .ue con(iene el nom're de
la cla,e de ven(ana/
3a funcin 4e,,age"o1 3a funcin 4e,,age"o1 3a funcin 4e,,age"o1 3a funcin 4e,,age"o1
3a manera mB, fBcil para .ue un programa mue,(re (e1(o e, colocarlo en un cuadro de
men,a>e .ue apare=ca 7 e,pera a .ue el u,uario *aga clic en un 'o(n/ 3a funcin
4e,,age"o1 4e,,age"o1 4e,,age"o1 4e,,age"o1 de la 'i'lio(eca ;in32 de la 9P# mue,(ra un cuadro de men,a>e ,imple/ $e a.u-
,u pro(o(ipo2
2essageEo1 P-O3O,
19"

',nd*D,O-D,
lp3e1t*P3- EF3E,
lp!aption*P3- EF3E,
u35pe*D,O-D
h=nd e, un mane>ador para la ven(ana ac(ual/ lp-ext apun(a a una cadena con (erminacin
nula .ue aparecerB den(ro del cuadrado/ lp"aption apun(a a una cadena con (erminacin nula
.ue aparecerB en la 'arra de le7enda del cuadrado/ style e, un en(ero .ue de,cri'e (an(o el
icono (opcional) como lo, 'o(one, (re.uerido,) del cuadro de diBlogo/ 3o, 'o(one, ,e
iden(ifican median(e con,(an(e, como 4"S? 7 4"SK6!N/ 3o, icono, (am'iDn ,e iden(ifican
median(e con,(an(e, como 4"S#0NLC6!T#N/ 9l mo,(rar un cuadrado de men,a>e8 podemo,
,umar la, con,(an(e, para el icono 7 lo, 'o(one,2
I8)O>E 2essageEo1, ',nd, ADD- 3e1toPregunta,
ADD- 3ituloPregunta, 2ETO> L 2ETI!O8R9ES3IO8
6l procedimien(o 6l procedimien(o 6l procedimien(o 6l procedimien(o ;in4ain ;in4ain ;in4ain ;in4ain
Toda aplicacin ;indo%, nece,i(a un procedimien(o de inicio .ue por8 lo general8 ,e llama
;in4ain ;in4ain ;in4ain ;in4ain8 7 e, re,pon,a'le de la, ,iguien(e, (area,2
'(ener un mane>ador para el programa ac(ual/
0argar el -cono 7 cur,or del ra(n del programa/
<egi,(rar la cla,e de ven(ana principal del programa e iden(ificar el procedimien(o .ue
proce,arB lo, men,a>e, de even(o, para la ven(ana/
0rear la ven(ana principal/
4o,(rar 7 ac(uali=ar la ven(ana principal/
6mpe=ar un ciclo .ue reci'a 7 de,pac*e lo, men,a>e,/ 6l ciclo con(inAa *a,(a .ue el
u,uario cierra la ven(ana de la aplicacin/
;in4ain con(iene un ciclo de proce,amien(o de men,a>e, .ue llama a Ye(4e,,age Ye(4e,,age Ye(4e,,age Ye(4e,,age para
o'(ener el ,iguien(e men,a>e8 di,poni'le de la cola de men,a>e, del programa/ !i Ye(4e,,age
reci'e un men,a>e ;4SLC#T8 devuelve cero8 indicando a ;in4ain .ue e, (iempo de de(ener el
programa/ Para (odo, lo, demB, men,a>e,8 ;in4ain lo, pa,a a la funcin 5i,pa(c*4e,,age 5i,pa(c*4e,,age 5i,pa(c*4e,,age 5i,pa(c*4e,,age8
la cual lo, reenv-a al procedimien(o ;inProc del programa/
6l procedimien(o ;inProc 6l procedimien(o ;inProc 6l procedimien(o ;inProc 6l procedimien(o ;inProc
6l procedimien(o ;inProc ;inProc ;inProc ;inProc reci'e 7 proce,a (odo, lo, men,a>e, de even(o, relacionado, con
una ven(ana/ 3a ma7or-a de lo, even(o, lo, indica el u,uario8 *aciendo clic 7 arra,(rando el
ra(n8 oprimiendo (ecla,8 e(cD(era/ 6l (ra'a>o de e,(e procedimien(o e, decodificar cada
men,a>e8 7 ,i D,(e ,e reconoce8 llevar a ca'o la, (area, orien(ada, a la aplicacin8
relacionada, con el men,a>e/ $e a.u- la declaracin2
19#

,inProc P-O!,
',nd*D,O-D, 0 maneador para la ventana
local2sg*D,O-D, 0 ID del mensae
=Param*D,O-D, 0 parImetro % (varAa)
lParam*D,O-D 0 parImetro . (varAa)
6l con(enido de lo, parBme(ro, (ercero 7 cuar(o variarB8 dependiendo del #5 del men,a>e
e,pec-fico/ Por e>emplo8 cuando ,e *ace clic con el ra(n/ lParam con(iene la, coordenada, H 7
K del pun(o en el .ue ,e *i=o clic/ 6n el ,iguien(e programa de e>emplo8 el procedimien(o
;inProc ;inProc ;inProc ;inProc mane>a (re, men,a>e, e,pec-fico,2
;4S3"CTTN5;N8 .ue genera cuando el u,uario oprime el 'o(n i=.uierdo del
ra(n/
;4S0<69T68 .ue indica .ue ,e aca'a de crear la ven(ana principal/
;4S03!68 .ue indica .ue la ven(ana principal de la aplicacin e,(B a pun(o de
cerrar/
Por e>emplo8 la, ,iguien(e, l-nea, (del procedimien(o) mane>an el men,a>e
;4S3"CTTN5;N8 llamando a 4e,,age"o1 para mo,(rar un men,a>e con(e1(ual al u,uario2
6I$ ea1 (( ,2T4E933O8DO,8
I8)O>E 2essageEo1, ',nd, ADD- 3e1to!onte1tual,
ADD- 3itulo!onte1tual, 2ETO>
mp 3erminar,inProc
0ual.uier o(ro men,a>e .ue no de,eamo, mane>ar ,e pa,a a 5ef;indo%,Proc 5ef;indo%,Proc 5ef;indo%,Proc 5ef;indo%,Proc8 el mane>ador
de men,a>e, prede(erminado para 4! ;indo%,/
6l Procedimien(o 6rror$andler 6l Procedimien(o 6rror$andler 6l Procedimien(o 6rror$andler 6l Procedimien(o 6rror$andler
6l procedimien(o 6rror$andler 6rror$andler 6rror$andler 6rror$andler8 .ue e, opcional8 ,e llama ,i el ,i,(ema repor(a un error duran(e
el regi,(ro 7 la creacin de la ven(ana principal del programa/ Por e>emplo8 la funcin
<egi,(er0la,, <egi,(er0la,, <egi,(er0la,, <egi,(er0la,, 5evuelve un valor di,(in(o de cero ,i la ven(ana principal del programa ,e
regi,(r con D1i(o/ Pero ,i devuelve cero8 llamamo, a 6rror$andler (para mo,(rar un men,a>e) 7
(erminamo, el programa2
I8)O>E -egister!lass, ADD- ventPrinc
6I$ ea1 (( "
call Error\andler
mp 3erminarTPrograma
191

6E8DI$
6l procedimien(o 6rror$andler 6rror$andler 6rror$andler 6rror$andler (iene varia, (area, impor(an(e, .ue reali=ar2
3lamar a Ye(3a,(6rror Ye(3a,(6rror Ye(3a,(6rror Ye(3a,(6rror para o'(ener el nAmero de error del ,i,(ema/
3lamar a Forma(4e,,age Forma(4e,,age Forma(4e,,age Forma(4e,,age para o'(ener la cadena de men,a>e de error apropiada con
forma(o del ,i,(ema/
3lamar a 4e,,age"o1 4e,,age"o1 4e,,age"o1 4e,,age"o1 para mo,(rar un cuadro de men,a>e con(e1(ual .ue con(enga la
cadena de men,a>e de error/
3lamar a 3ocalFree 3ocalFree 3ocalFree 3ocalFree para li'erar memoria u(ili=ada por la cadena de men,a>e de error/
3i,(ado de un programa 3i,(ado de un programa 3i,(ado de un programa 3i,(ado de un programa
3a ma7or-a e, cdigo .ue ,er-a idDn(ico en cual.uier aplicacin 4! ;indo%,2
3I34E Aplicacin ,indo=s (,inApp6asm)

0 Este programa muestra una ventana de aplicacin con
0 tamaJo austable 5 varios cuadros de mensaes conte1tuales6
0 Sracias a 3om `o5ce por crear un prototipo
0 a partir del cual se deriv este mensae6

I8!49DE Irvine7.6inc
I8!49DE Srap',in6inc

0(((((((((((((((((((( DA3OS (((((((((((((((((((((((
6data

3itulo2s!argaApp EF3E iSe cargo la aplicacini,"
3e1to2s!argaApp EF3E iEsta ventana aparece cuando se recibei
EF3E iel mensae ,2T!-EA3Ei,"

3itulo!onte1tual EF3E i)entana conte1tuali,"
193

3e1to!onte1tual EF3E iEsta ventana se activo mediante uni
EF3E imensae ,2T4E933O8DO,8i,"

3ituloEienvenida EF3E i)entana principal activai,"
3e1toEienvenida EF3E iEsta ventana se muestra usto despuesi
EF3E ide llamar a !reate,indo= 5 9pdate,indo=6i,"

2s!errar EF3E iSe recibi el mensae ,2T!4OSEi,"

3ituloError EF3E iErrori,"
8ombre)entana EF3E iAS2 ,indo=s Appi,"
8ombre!lase EF3E iAS2,ini,"

0 Define la estructura de la clase de ventana de la aplicacin6
)entPrinc ,8D!4ASS W8944,,inProc,8944,8944,8944,8944,8944, Q
!O4O-T,I8DO,,8944,8ombre!laseX

msg 2SSStruct WX
=in-ect -E!3 WX
'2ain,nd D,O-D N
'Instance D,O-D N

0((((((((((((((((((( !nDISO (((((((((((((((((((((((((
6code
,in2ain P-O!
0 Obtiene un maneador para el proceso actual6
195

I8)O>E Set2odule\andle, 8944
mov 'Instance, ea1
mov )entPrinc6'Instance, ea1

0 !arga el icono 5 el cursor del programa6
I8)O>E 4oadIcon, 8944, IDITAPP4I!A3IO8
mov )entPrinc6'Icon, ea1
I8)O>E 4oad!ursor, 8944, ID!TA--O,
mov )entPrinc6'!ursor, ea1

0 -egistra la clase de ventana6
I8)O>E -egister!lass, ADD- )entPrinc
6I$ ea1 (( "
call Error\andler
mp 3erminarTPrograma
6E8DI$

0 !rea la ventana principal de la aplicacin6
0 Devuelve un maneador para la ventana principal en EA:6
I8)O>E !reate,indo=E1, ", ADD- 8ombre!lase,
ADD- 8ombre)entana,2AI8T,I8DO,TS3F4E,
!,T9SEDE$A943,!,T9SEDE$A943,!,T9SEDE$A943,
!,T9SEDE$A943,8944,8944,'Instance,8944
mov '2ain,nd,ea1

0 Si !reate,indo=E1 fall, muestra un mensae 5 termina6
196

6I$ ea1 (( "
call Error\andler
mp 3erminarTPrograma
6E8DI$

0 2uestra 5 dibua la ventana6
I8)O>E S'o=,indo=, '2ain,nd, S,TS\O,
I8)O>E 9pdate,indo=, '2ain,nd

0 2uestra un mensae de bienvenida6
I8)O>E 2essageEo1, '2ain,nd, ADD- 3e1toEienvenida,
ADD- 3ituloEienvenida, 2ETO>

0 Empieza el ciclo de maneo de mensaes del programa6
!icloT2ensaes*
0 Obtiene el siguiente mensae de la cola6
I8)O>E Set2essage, ADD- msg, 8944,8944,8944

0 3ermina si no 'a5 mIs mensaes6
6I$ ea1 (( "
mp 3erminarTPrograma
6E8DI$

0 -eleva el mensae al ,inProc del programa6
I8)O>E Dispatc'2essage, ADD- msg
mp !icloT2ensaes
197


3erminarTPrograma*
I8)O>E E1itProcess,"
,in2ain E8DP

6n el ciclo an(erior8 la e,(ruc(ura m,g ,e pa,a a la funcin Ye(4e,,age Ye(4e,,age Ye(4e,,age Ye(4e,,age/ 6,(a funcin llena la
e,(ruc(ura8 .ue a ,u ve= ,e pa,a a la funcin 5i,pa(c*4e,,age 5i,pa(c*4e,,age 5i,pa(c*4e,,age 5i,pa(c*4e,,age de 4! ;indo%,/


0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
,inProc P-O!,
',nd*D,O-D, local2sg*D,O-D, =Param*D,O-D, lParam*D,O-D
0 El maneador de mensaes de la aplicacin, @ue manea
0 mensaes especAficos de la aplicacin6 3odos los demIs mensaes
0 se pasan al maneador de mensaes predeterminado de ,indo=s6
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
mov ea1, local2sg

6I$ ea1 (( ,2T4E933O8DO,8 0 cbotn del ratnN
I8)O>E 2essageEo1, ',nd, ADD- 3e1to!onte1tual,
ADD- 3itulo!onte1tual, 2ETO>
mp 3erminar,inProc
6E4SEI$ ea1 (( ,2T!-EA3E 0 ccrear ventanaN
I8)O>E 2essageEo1, ',nd, ADD- 3e1to2s!argaApp,
ADD- 3itulo2s!argaApp, 2ETO>
mp 3erminar,inProc
6E4SEI$ ea1 (( ,2T!4OSE 0 ccerrar ventanaN
198

I8)O>E 2essageEo1, ',nd, ADD- 2s!errar,
ADD- 8ombre)entana, 2ETO>
I8)O>E PostRuit2essage,"
mp 3erminar,inProc
6E4SE 0 otro mensaeN
I8)O>E Def,indo=Proc, ',nd, local2sg, =Param, lParam
mp 3erminar,inProc
6E8DI$

3erminar,inProc*
ret
,inProc E8DP

0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Error\andler P-O!
0 2uestra el mensae de error apropiado del sistema6
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
6data
p2sError D,O-D N 0 apuntador al mensae de error
IDmensae D,O-D N
6code
I8)O>E Set4astError 0 Devuelve ID de mensae en EA:
mov IDmensae,ea1

0 Obtiene la cadena de mensae correspondiente6
I8)O>E $ormat2essage, $O-2A3T2ESSASETA44O!A3ETE9$$E- L Q
199


$O-2A3T2ESSASET$-O2TSFS3E2,8944,messageID,8944,
ADD- pError2sg,8944,8944

0 2uestra el mensae de error6
I8)O>E 2essageEo1,8944, p2sError, ADD- 3ituloError,
2ETI!O8E--O-L2ETO>

0 4ibera la cadena de mensae de error6
I8)O>E 4ocal$ree, p2sError
ret
Error\andler E8DP
E8D ,in2ain

9,ignacin dinBmica de memoria 9,ignacin dinBmica de memoria 9,ignacin dinBmica de memoria 9,ignacin dinBmica de memoria
3a a,ignacin dinBmica de memoria8 (am'iDn conocida como asignacin del montn8 heap en
inglD,8 e, una *erramien(a .ue (ienen lo, lengua>e, de programacin para re,ervar memoria
cuando ,e crean o'>e(o,8 arreglo, 7 o(ra, e,(ruc(ura,/ Por e>emplo8 en Fava una in,(ruccin
como la ,iguien(e oca,iona .ue ,e re,erve memoria para un o'>e(o !(ring2
String cad ( ne= String(OabcdeP)0
5e manera ,imilar8 en 0EE puede ,er convenien(e a,ignar e,pacio para un arreglo de en(ero,8
u,ando un a(ri'u(o de (ama@o de una varia'le
int tamanio0
cin XX tamanio VV el usuario introduce el tamaJo
int arregloBC ( ne= intBtamanioC0
08 0EE 7 Fava (ienen admini,(radore, in(egrado, del mon(n de da(o, en (iempo de e>ecucin8
.ue ,e encargan de la, pe(icione, median(e programacin para la a,ignacin 7 li'eracin de
e,pacio de almacenamien(o/ Por lo general8 lo, admini,(radore, de mon(n de da(o, o
a,ignacin dinBmica de memoria8 a,ignan un 'lo.ue e1(en,o de memoria del ,i,(ema
opera(ivo cuando el ,i,(ema inicia/ 0rean una lista libre de apun(adore, a 'lo.ue, de
3::

almacenamien(o/ 0uando ,e reci'e una pe(icin de a,ignacin8 el admini,(rador del mon(n
de da(o, marca un 'lo.ue de memoria del (ama@o apropiado como re,ervado8 7 devuelve un
apun(ador al 'lo.ue/ 4B, adelan(e8 cuando ,e reci'e una pe(icin de eliminacin para el
mi,mo 'lo.ue8 el mon(n de da(o, li'era el 'lo.ue 7 lo devuelve a la li,(a li're/ 0ada ve= .ue
,e reci'e una nueva pe(icin de a,ignacin8 el admini,(rador del mon(n de da(o, e1plora la
li,(a li're8 'u,cando el primer 'lo.ue di,poni'le .ue ,ea 'a,(an(e grande como para o(orgar la
pe(icin/
3o, programa, en lengua>e en,am'lador pueden reali=ar la a,ignacin dinBmica de do,
manera,/ 6n primer lugar8 pueden implemen(ar ,u, propio, admini,(radore, del mon(n de
da(o,8 .ue a(iendan la, pe(icione, para lo, o'>e(o, mB, pe.ue@o,/ 6n e,(a ,eccin
mo,(raremo, como implemen(ar el primer mD(odo/ 6l programa de e>emplo e, una aplicacin
de 32 'i(, en modo pro(egido/
Podemo, ,olici(ar vario, 'lo.ue, de memoria de diver,o, (ama@o, a 4! ;indo%,8 u,ando
varia, funcione, de la 9P# de ;indo%, .ue ,e pre,en(an a con(inuacin2
Funcin Funcin Funcin Funcin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
Ye(Proce,,$eap 5evuelve en 69H un mane>ador de en(ero de 32 'i(, al Brea del mon(n
de da(o, e1i,(en(e, del programa/ !i la funcin (iene D1i(o8 devuelve un
mane>ador para el mon(n de da(o, en 69H/ !i falla8 el valor de re(orno
en 69H e, NC33
$eap9lloc 9,igna un 'lo.ue de memoria de un mon(n de da(o,/ !i (iene D1i(o8 el
valor de re(orno en 69H con(iene la direccin del 'lo.ue de memoria8 ,i
falla8 el valor devuel(o en 69H e, NC33
$eap0rea(e 0rea un nuevo mon(n de da(o, 7 lo pone a di,po,icin del programa
.ue *i=o la llamada/ !i la funcin (iene D1i(o8 devuelve en 69H un
mane>ador para el mon(n de da(o, reciDn creado/ !i falla8 el valor de
re(orno en 69H e, NC33
$eap5e,(ro7 5e,(ru7e el o'>e(o de mon(n de da(o, e,pecificado e invalida ,u
mane>ador/ !i la funcin (iene D1i(o8 el valor del re(orno en 69H e,
di,(in(o de cero
$eapFree 3i'era un 'lo.ue de memoria .ue e,(a'a an(e, a,ignado a un mon(n
de da(o,8 iden(ificado por ,u direccin 7 ,u mane>ador/ !i el 'lo.ue ,e
li'era con D1i(o8 el valor de re(orno e, di,(in(o de cero
$eap<e9lloc <ea,igna 7 cam'ia de (ama@o un 'lo.ue de memoria de un mon(n de
pila/ !i la funcin (iene D1i(o8 el valor de re(orno e, un apun(ador a un
'lo.ue de memoria rea,ignado/ !i la funcin falla 7 no ,e e,pecifica
$69PSY6N6<9T6S6H06PT#N!8 el valor de re(orno e, NC33
$eap!i=e 5evuelve el (ama@o de un 'lo.ue de memoria .ue e,(a'a an(e,
a,ignado median(e una llamada a $eap9lloc o $eap<e9lloc/ !i la funcin
3:"

(iene D1i(o8 69H con(iene el (ama@o del 'lo.ue de memoria a,ignado en
'7(e,8 ,i la funcin falla8 el valor de re(orno e, !#I6ST \ 1 (!#I6ST e,
igual al nAmero mB1imo de '7(e, al .ue puede apun(ar un apun(ador)

Toda, e,(a, funcione, ,o're,cri'en lo, regi,(ro, de prop,i(o general8 por lo .ue (al ve= ,ea
convenien(e crear procedimien(o, de envol(ura para me(er 7 ,acar regi,(ro, impor(an(e,/
)etProcess<eap Ye(Proce,,$eap e, ,uficien(e ,i no, conformamo, con u(ili=ar el mon(n de
da(o, prede(erminado .ue po,ee el programa ac(ual/ No (iene parBme(ro,8 7 el valor de
re(orno en 69H e, el mane>ador del mon(n de da(o,2
SetProcess\eap P-O3O
3lamada de e>emplo2
6data
'2onton \A8D4E N
6code
I8)O>E SetProcess\eap
6I$ ea1 (( 8944
mp ( terminar
6E4SE
mov '2onton,ea1 0 el maneador estI bien
6E8DI$
<eap"reate $eap0rea(e no, permi(e crear un nuevo mon(n de da(o, privado para el
programa ac(ual2
$eap0rea(e P<T8
flp(ion,25;<58 [ opcione, de a,ignacin del mon(n de da(o,
d%#ni(ial!i=e25;<58 [ (ama@o inicial del mon(n8 en '7(e,
d%4a1inum!i=e25;<5 [ (ama@o mB1imo del mon(n8 en '7(e,
$a7 .ue e,(a'lecer fl#ptions a NC33/ !e e,(a'lece (am'iDn d&'nitial!ize al (ama@o inicial del
mon(n8 en '7(e,/ 6l valor ,e redondea *a,(a el ,iguien(e l-mi(e de pBgina/ 0uando la,
llamada, a $eap9lloc e1ceden en el (ama@o inicial del mon(n de da(o,8 D,(e crece *a,(a el
valor .ue ,e e,pecifica en el parBme(ro d&Maxinum!ize (redondeando al ,iguien(e l-mi(e de
3:#

pBgina)/ 5e,puD, de llamar a e,(a funcin8 un valor de re(orno nulo en 69H indica .ue el
mon(n de da(o, no ,e cre/ $e a.u- una llamada a $eap0rea(e2
\EAPTS3-A3 ( ."""""" 0 . 2E
\EAPT2A: ( ;"""""""" 0 ;"" 2E
6data
'2onton ( \A8D4E N 0 maneador para el montn
6code
I8)O>E \eap!reate, ", \EAPTS3-A3, \EAPT2A:
6I$ ea1 (( 8944 0 no se cre el montn
call ,rite,indo=s2sg 0 muestra el mensae de error
mp terminar
6E4SE
mov '2onton,ea1 0 el maneador estI bien
6E8DI$
<eapDestroy $eap5e,(ro7 de,(ru7e un mon(n privado e1i,(en(e (uno creado por
$eap0rea(e)/ <eci'e un mane>ador para el mon(n
\eapDestro5 P-O3O,
'\andle*D,O-D 0 maneador del montn
!i no ,e puede de,(ruir el mon(n de da(o,8 69H e, igual a NC33/ 9 con(inuacin ,e mue,(ra
una llamada de e>emplo8 u,ando el procedimien(o ;ri(e;indo%,4,g de,cri(o an(eriormen(e2
6data
'\andle \A8D4E N 0 maneador para el montn
6code
I8)O>E \eapDestro5,'2onton
6I$ ea1 (( 8944
call ,rite,indo=s2sg 0 muestra el mensae de error
6E8DI$
3:1

<eapAlloc $eap9lloc a,igna un 'lo.ue de memoria de un mon(n de da(o, e1i,(en(e,2
\eapAlloc P-O3O,
'\andle*\A8D4E, 0 maneador para el blo@ue del montn privado
d=$lags*D,O-D, 0 banderas de control de asignacin de montn
d=E5tes*D,O-D 0 n?mero de b5tes a asignar
<eci'e lo, ,iguien(e, argumen(o,2
h<eap8 un mane>ador de 32 'i(, para un mon(n iniciali=ado con Ye(Proce,,$eap o
$eap0rea(e/
d&8lags8 una do'le pala'ra .ue con(iene uno mB, valore, de 'andera/ Podemo,
e,(a'lecer de manera opcional a $69PSI6<S464<K8 la cual e,(a'lece (odo el
'lo.ue de memoria a cero/
d&$ytes8 una do'le pala'ra .ue indica el (ama@o del mon(n8 en '7(e,/
!i $eap9lloc falla8 el valor devuel(o en 69H e, NC33/ 3a, ,iguien(e, in,(ruccione, a,ignan un
arreglo de 1&&& '7(e, del mon(n iden(ificado por *4on(on *4on(on *4on(on *4on(on8 7 e,(a'lecen ,u, valore, a cero2
6data
'2onton \A8D4E N 0 maneador del montn
pArreglo D,O-D N 0 apuntador al arreglo
6code
I8)O>E \eapAlloc, '2onton, \EAPT[E-OT2E2O-F, %"""
6I$ ea1 (( 8944
m,rite O\eapAlloc falloP
mp terminar
6E4SE
mov pArreglo,ea1
6E8DI$
<eap8ree 3a funcin $eapFree li'era un 'lo.ue de memoria .ue e,(a'a a,ignado a un
mon(n de da(o,8 iden(ificado por ,u direccin 7 mane>ador2

\eap$ree P-O3O,
3:3

'\eap*\A8D4E,
d=$lags*D,O-D,
lp2em*D,O-D
6l primer argumen(o e, un mane>ador para el mon(n de da(o, .ue con(iene el 'lo.ue de
memoria8 por lo general8 el ,egundo argumen(o e, cero2 el (ercer argumen(o e, un apun(ador
al 'lo.ue de memoria .ue ,e va a li'erar/ !i el 'lo.ue ,e li'era con D1i(o8 el valor de re(orno e,
di,(in(o de cero/ !i el 'lo.ue no puede li'erar,e8 la funcin devuelve cero/ $e a.u- un llamado
de e>emplo2
I8)O>E \eap$ree, '\eap, ", pArra5
Manejo de errores !i encon(ramo, un error al llamar a $eap0rea(e8 $eap5e,(ro7 o
Ye(Proce,,$eap8 podemo, o'(ener lo, de(alle, llamando a la funcin Ye(3a,(6rror Ye(3a,(6rror Ye(3a,(6rror Ye(3a,(6rror de la 9P#/
podemo, llamar a la funcin ;ri(e;indo%,4,g ;ri(e;indo%,4,g ;ri(e;indo%,4,g ;ri(e;indo%,4,g de la 'i'lio(eca #rvine32/ 9 con(inuacin ,e
mue,(ra un e>emplo de llamada a $eap0rea(e2
I8)O>E \eap!reate, ", \EAPTS3A-3, \EAPT2A:
6I$ ea1 (( 8944 0 cfallN
call ,rite,indo=s2sg 0 muestra el mensae de error
6E4SE
mov '2onton,ea1 0 ^1ito
6E8DI$
Por o(ro lado la funcin $eap9lloc no e,(a'lece un cdigo de error cuando el ,i,(ema falla8 por
lo .ue no podemo, llamar a Ye(3a,(6rror o ;ri(e;indo%,4,g
9dmini,(racin de memoria en la familia #9 9dmini,(racin de memoria en la familia #9 9dmini,(racin de memoria en la familia #9 9dmini,(racin de memoria en la familia #9: :: :32 32 32 32
0uando ,ali 4! ;indo%, 3/& por primera ve= al mercado8 *u'o muc*o in(erD, en(re lo,
programadore, en cuan(o al cam'io del modo de direccionamien(o real al modo pro(egido/
`0ual.uiera .ue *a7a e,cri(o programa, para ;indo%, 2/1 recordarB lo dif-cil .ue era
permanecer den(ro de lo, 64&? en el modo de direccionamien(o reala 0on el modo pro(egido
de ;indo%, (7 poco de,puD,8 el modo vir(ual)8 parec-an a'rir,e po,i'ilidade, comple(amen(e
nueva,/ No de'emo, olvidar .ue fue el proce,ador #n(el386 (el primero de la familia #9:32) el
.ue *i=o (odo e,(o po,i'le/ 3o .ue a*ora damo, por *ec*o fue una evolucin gradual8 de,de el
ine,(a'le ;indo%, 3/& *a,(a la, ,ofi,(icada, (7 e,(a'le,) ver,ione, de ;indo%, 7 3inu1 .ue ,e
ofrecen *o7 en d-a/
6n e,(a ,eccin8 no, enfocaremo, en do, de lo, a,pec(o, principale, de la admini,(racin de
memoria2
3:5

Traducir la, direccione, lgica, en direccione, lineale,/
Traducir la, direccione, lineale, en direccione, f-,ica, (paginacin)/
<evi,emo, 'revemen(e alguno, de lo, (Drmino, de admini,(racin de memoria de la familia #9:
32 .ue pre,en(amo, an(eriormen(e8 empe=ando con lo, ,iguien(e,2
Multitarea2 permi(e la e>ecucin de vario, programa, (o (area,) al mi,mo (iempo/ 6l
proce,ador divide ,u (iempo en(re (odo, lo, programa, en e>ecucin/
!egmentos2 ,on Brea, de memoria con (ama@o varia'le8 .ue un programa u(ili=a para
con(ener cdigo o da(o,/
!egmentacin2 proporciona una manera de ai,lar lo, ,egmen(o, de memoria8 uno, de
o(ro,/ 6,(o permi(e .ue vario, programa, ,e e>ecu(en al mi,mo (iempo8 ,in in(erferir
uno, con o(ro,/
Descriptor de segmento2 e, un valor de 64 'i(, .ue iden(ifica 7 de,cri'e a un ,olo
,egmen(o de memoria2 0on(iene informacin acerca de la direccin 'a,e del
,egmen(o8 ,u, derec*o, de acce,o8 el l-mi(e de (ama@o8 (ipo 7 u,o/
9*ora vamo, a agregar do, nuevo, (Drmino, a la li,(a2
Cn selector de segmento8 e, un valor de 16 'i(, .ue ,e almacena en un regi,(ro de
,egmen(o (0!8 5!8 !!8 6!8 F!8 Y!)/
Cna direccin lgica e, una com'inacin de un ,elec(or de ,egmen(o 7 un
de,pla=amien(o de 32 'i(,/
9 lo largo de e,(e re,umen *emo, ignorado lo, regi,(ro, de ,egmen(o8 7a .ue lo, programa,
de u,uario nunca lo, modifican de forma direc(a/ No, *emo, enfocado ,lo en el
de,pla=amien(o de da(o, de 32 'i(,/ !in em'argo8 de,de el pun(o de vi,(a del programador8
lo, regi,(ro, de ,egmen(o, ,on impor(an(e, 7a .ue con(ienen referencia, indirec(a, a
,egmen(o, de memoria/
5ireccione, lin 5ireccione, lin 5ireccione, lin 5ireccione, lineale, eale, eale, eale,
Traduccin de direccione, lgica, a direccione, lineale, Traduccin de direccione, lgica, a direccione, lineale, Traduccin de direccione, lgica, a direccione, lineale, Traduccin de direccione, lgica, a direccione, lineale,
Cn ,i,(ema opera(ivo mul(i(area permi(e .ue vario, programa, ((area,) ,e e>ecu(en en
memoria al mi,mo (iempo/ 0ada programa/ 0ada programa (iene ,u propia Brea de da(o,/
!upongamo, .ue cada uno de (re, programa, (iene una varia'le de 2&&*[ Q0mo podr-an la,
(re, varia'le, e,(ar ,eparada, ,in compar(ir,eM 3a re,pue,(a a e,(o e, .ue el proce,ador #9:32
u(ili=a un proce,o de uno o do, pa,o, para conver(ir el de,pla=amien(o de cada varia'le en
una u'icacin Anica de memoria/
6l primer pa,o com'ina un valor de ,egmen(o con el de,pla=amien(o de una varia'le para
crear una direccin lineal/ 6,(a direccin lineal podr-a ,er la direccin f-,ica de la varia'le/ Pero
lo, ,i,(ema, opera(ivo, como 4! ;indo%, 7 3inu1 emplean una carac(er-,(ica de la familia #9:
328 conocida como paginacin8 para permi(ir .ue lo, programa, u(ilicen mB, memoria lineal
de la .ue *a7a f-,icamen(e di,poni'le en la compu(adora/ 5e'en u,ar un ,egundo pa,o
llamado traduccin de p*gina para conver(ir una direccin lineal en una direccin f-,ica/
3:6

Primero veamo, la forma en .ue el proce,ador u(ili=a un ,egmen(o 7 un de,pla=amien(o para
de(erminar la direccin lineal de una varia'le/ 0ada ,elec(or de ,egmen(o apun(a a un
de,crip(or de ,egmen(o (un una (a'la de de,crip(ore,)8 el cual con(iene la direccin 'a,e de un
,egmen(o de memoria/ 6l de,pla=amien(o de 32 'i(, de la direccin lgica ,e ,uma a la
direccin 'a,e del ,egmen(o8 con lo cual genera una direccin lineal de 32 'i(,/
Direccin lineal Cna direccin lineal e, un en(ero de 32 'i(, .ue var-a en(re & 7 FFFFFFFF*8 el
cual ,e refiere a una u'icacin de memoria/ 3a direccin lineal (am'iDn puede ,er la direccin
f-,ica de lo, da(o, de de,(ino8 ,i una carac(er-,(ica conocida como paginacin e,(B
de,*a'ili(ada/
Paginacin Paginacin Paginacin Paginacin
3a paginacin e, una impor(an(e carac(er-,(ica del proce,ador #9:328 .ue *ace po,i'le .ue
una compu(adora e>ecu(e una com'inacin de programa, .ue de o(ra manera no ca'r-an en
memoria/ Para ello8 el proce,ador carga al inicio ,lo una par(e de un programa de memoria8
mien(ra, man(iene la, par(e, re,(an(e, en di,co/ 3a memoria u(ili=ada por el programa ,e
divide en pe.ue@a, unidade, llamada, p*ginas8 por lo general8 de 4?" cada una/ 9 medida
.ue ,e e>ecu(a cada programa8 el proce,ador de,carga en forma ,elec(iva la, pBgina,
inac(iva, de la memoria 7 carga o(ra, pBgina, .ue ,e re.uieren de inmedia(o
6l ,i,(ema opera(ivo man(iene un directorio de p*ginas 7 con>un(o, de tablas de p*ginas para
llevar la cuen(a de la, pBgina, u(ili=ada, por (odo, lo, programa, .ue ,e encuen(ra
ac(ualmen(e en memoria/ 0uando un programa in(en(a acceder a una direccin en alguna
par(e del e,pacio de direccione, lineale,8 el proce,ador convier(e en forma au(omB(ica la
direccin lineal en una direccin f-,ica/ 9 e,(a conver,in ,e le conoce como traduccin de
p*ginas/ !i la pBgina ,olici(ada no ,e encuen(ra ac(ualmen(e en memoria8 el proce,ador
in(errumpe al programa 7 genera un fallo de p*gina/ 6l ,i,(ema opera(ivo copia la pBgina
re.uerida del di,co duro a la memoria an(e, de .ue el programa pueda con(inuar/ 5e,de el
pun(o de vi,(a de un programa de aplicacin8 lo, fallo, de pagina 7 la (raduccin de pBgina,
ocurren en forma au(omB(ica/
Ta'la, de de,crip(ore, Ta'la, de de,crip(ore, Ta'la, de de,crip(ore, Ta'la, de de,crip(ore,
Podemo, encon(rar a lo, de,crip(ore, de ,egmen(o en do, (ipo, de (a'la,2 tablas de
descriptores globales (Y5T) 7 tablas de descriptores locales (35T)/
-abla de descriptores globales (Y5T) 0uando el ,i,(ema opera(ivo cam'ia al proce,ador al
modo pro(egido duran(e el arran.ue8 ,e crea una ,ola (a'la de de,crip(ore, glo'ale,/ !u
direccin 'a,e ,e guarda en el Y5T< (registro de tabla de descriptores globales)/ 3a (a'la
con(iene en(rada, (llamadas descriptores de segmento) .ue apun(an a ,egmen(o,/ 6l ,i,(ema
opera(ivo (iene la opcin de almacenar lo, ,egmen(o, .ue u(ili=an (odo, lo, programa, en la
Y5T/
-ablas de descriptores locales (35T) 6n un ,i,(ema opera(ivo mul(i(area8 a cada (area o
programa8 por lo general8 ,e le a,igna ,u propia (a'la de de,crip(ore, de ,egmen(o8 conocida
como tabla de descriptores locales (35T)/ 6l regi,(ro 35T< con(iene la direccin de la 35T del
3:7

programa/ 0ada de,crip(or de ,egmen(o con(iene la direccin 'a,e de un ,egmen(o den(ro del
e,pacio de direccione, lineale,/ Por lo general8 e,(e ,egmen(o e, di,(in(o de lo, demB,/
5e(alle, acerca de lo, de,crip(ore, de ,egmen(o 5e(alle, acerca de lo, de,crip(ore, de ,egmen(o 5e(alle, acerca de lo, de,crip(ore, de ,egmen(o 5e(alle, acerca de lo, de,crip(ore, de ,egmen(o
9demB, de la direccin 'a,e del ,egmen(o8 el de,crip(or de ,egmen(o con(iene campo, de
mapa, de 'i(, .ue e,pecifican el l-mi(e del ,egmen(o 7 ,u (ipo/ Cn e>emplo de un (ipo de
,egmen(o de ,lo lec(ura e, el ,egmen(o de cdigo/ !i un programa (ra(a de modificar un
,egmen(o de ,lo lec(ura8 ,e genera un fallo de pBgina/ 3o, de,crip(ore, de ,egmen(o pueden
con(ener nivele, de pro(eccin para evi(ar .ue lo, da(o, del ,i,(ema opera(ivo e,(Dn
acce,i'le, a lo, programa, de aplicacin/ 9 con(inuacin ,e mue,(ran de,cripcione, de
campo, de ,elec(ore, individuale,2
5ireccin 'a,e 5ireccin 'a,e 5ireccin 'a,e 5ireccin 'a,e2 un en(ero de 32 'i(, .ue define la u'icacin inicial del ,egmen(o en el e,pacio
de direccione, lineale, de 4 Y"/
Nivel de privilegio2 a cada ,egmen(o ,e le puede a,ignar un nivel de privilegio en(re & 7 38 en
donde & e, el .ue (iene mB, privilegio8 por lo general8 para el cdigo nAcleo del ,i,(ema
opera(ivo/ !i un programa con un nivel de privilegio con numeracin al(a (ra(a de acceder a un
,egmen(o .ue (enga un nivel de privilegio con numeracin mB, 'a>a8 ,e genera un fallo del
proce,ador/
Tipo de ,egmen(o Tipo de ,egmen(o Tipo de ,egmen(o Tipo de ,egmen(o2 indica el (ipo de ,egmen(o 7 e,pecifica el (ipo de acce,o .ue puede
reali=ar,e en el ,egmen(o8 7 la direccin en la .ue puede crecer (*acia arri'a o *acia a'a>o)/
3o, ,egmen(o, de da(o, (inclu7endo la Pila) pueden ,er de ,lo lec(ura o de lec(uraGe,cri(ura8
7 pueden crecer *acia arri'a o *acia a'a>o/ 3o, ,egmen(o, de cdigo puede ,er de ,lo
e>ecucin o de e>ecucinG,lo lec(ura/
"ander "ander "ander "andera de ,egmen(o pre,en(e a de ,egmen(o pre,en(e a de ,egmen(o pre,en(e a de ,egmen(o pre,en(e2 e,(e 'i( indica ,i el ,egmen(o ,e encuen(ra pre,en(e en la
memoria f-,ica/
"andera de Yranularidad "andera de Yranularidad "andera de Yranularidad "andera de Yranularidad2 de(ermina la in(erpre(acin del campo de l-mi(e del ,egmen(o/ !i el
'i( e, cero8 el l-mi(e del ,egmen(o ,e in(erpre(a en unidade, de '7(e,/ !i el 'i( e,(B ac(ivo8 el
l-mi(e de ,egmen(o ,e in(erpre(a en unidade, de 4&P6 '7(e,/
3-mi(e de ,egmen(o 3-mi(e de ,egmen(o 3-mi(e de ,egmen(o 3-mi(e de ,egmen(o2 e, un en(ero de 2& 'i(, .ue e,pecifica el (ama@o del ,egmen(o/ !e
in(erpre(a en una de la, ,iguien(e, forma,8 dependiendo de la 'andera Yranularidad2
6l nAmero de '7(e, en el ,egmen(o8 var-a de 1 a 14"/
6l nAmero de unidade, de 4&P6 '7(e,8 lo cual permi(e .ue el (ama@o del ,egmen(o
var-e de 4?" a 4Y"/
Traduccin de pBgina, Traduccin de pBgina, Traduccin de pBgina, Traduccin de pBgina,
0uando e,(B *a'ili(ada la paginacin8 el proce,ador de'e (raducir una direccin lineal de 32
'i(, en una direccin f-,ica de 32 'i(,/ !e u(ili=an (re, e,(ruc(ura, en el proce,o2
3:8

5irec(orio de pBgina2 un arreglo *a,(a de 1&24 en(rada, de direc(orio de pBgina de 32
'i(,/
Ta'la de pBgina,2 un arreglo de *a,(a 1&24 en(rada, de (a'la de pBgina de 32 'i(,/
PBgina2 un e,pacio de direccione, de 4?" o 44"/
Para ,implificar la ,iguien(e di,cu,in8 vamo, a ,uponer .ue ,e u(ili=an pBgina, de 4?"2
Cna direccin lineal ,e divide en (re, campo,2 un apun(ador a una en(rada de direc(orio de
pBgina8 un apun(ador a una en(rada de (a'la de pBgina 7 un de,pla=amien(o a un marco de
pBgina/ 6l regi,(ro de con(rol (0<3) con(iene la direccin inicial del direc(orio de pBgina,/ 6l
proce,ador lleva a ca'o lo, ,iguien(e, pa,o, al (raducir una direccin lineal a una direccin
f-,ica/
1/ 3a direccin lineal *ace referencia a una u'icacin en el e,pacio de direccione,
lineale,/
2/ 6l campo directorio de 1& 'i(, en la direccin lineal e, un -ndice a una en(rada del
direc(orio de pBgina,/ 6,(a en(rada con(iene la direccin 'a,e de una (a'la de pBgina,/
3/ 6l campo tabla de 1& 'i(, en la direccin lineal e, un -ndice a la (a'la de pBgina,8 el
cual ,e iden(ifica median(e la en(rada en el direc(orio de pBgina,/ 3a en(rada de la
(a'la de pBgina, en e,a po,icin con(iene la u'icacin 'a,e de una p*gina en la
memoria f-,ica/
4/ 6l campo de,pla=amien(o de 12 'i(, en la direccin lineal ,e ,uma a la direccin 'a,e
de la pBgina8 generando la direccin f-,ica e1ac(a del operando/
6l ,i,(ema opera(ivo (iene la opcin de u(ili=ar un ,olo direc(orio de pBgina, para (odo, lo,
programa, 7 (area, en e>ecucin8 o un direc(orio de pBgina, por (area8 o una com'inacin de
am'o,/
1 11 12 2 2 2 #n(erfa= con legua>e, de al(o nivel #n(erfa= con legua>e, de al(o nivel #n(erfa= con legua>e, de al(o nivel #n(erfa= con legua>e, de al(o nivel
!e *a e1cluido e,(e cap-(ulo
13 Programacin en 4! 13 Programacin en 4! 13 Programacin en 4! 13 Programacin en 4!: :: :5! de 16 'i(, 5! de 16 'i(, 5! de 16 'i(, 5! de 16 'i(,
4! 4! 4! 4!: :: :5! 7 la #"4 5! 7 la #"4 5! 7 la #"4 5! 7 la #"4: :: :P0 P0 P0 P0
P0:5! de #"4 fue el primer ,i,(ema opera(ivo .ue implemen( el modo de direccionamien(o
real en la 0ompu(adora Per,onal #"48 u,ando el proce,ador #n(el 8&88/ 4B, (arde8 evolucion
para conver(ir,e en 4icro,of( 4!:5!/ 5e a*- .ue (enga ,en(ido u(ili=ar 4!:5! como el
en(orno para e1plicar la programacin en modo direccionamien(o real/ 9 e,(e modo (am'iDn ,e
le conoce como modo de /0 bits8 7a .ue la, direccione, ,e con,(ru7en a par(ir de valore, de
16 'i(,/
6n e,(e cap-(ulo conoceremo, la organi=acin 'B,ica de la memoria de 4!:5!8 cmo ac(ivar
la, llamada, a funcione, de 4!:5! (conocida, como interrupciones) 7 como reali=ar
operacione, 'B,ica, de en(radaG,alida en el nivel del ,i,(ema opera(ivo/ Todo, lo, programa,
en e,(e cap-(ulo ,e e>ecu(arBn en modo direccionamien(o real8 de'ido a .ue u(ili=an
3:9

in,(ruccione, #NT/ 3a, in(errupcione, ,e di,e@aron en un principio para e>ecu(ar,e 'a>o 4!:
5! en modo direccionamien(o real/ 6, po,i'le llamar a la, in(errupcione, en modo pro(egido8
pero e,(a, (Dcnica, no ,erBn e1plicada,/
3o, programa, en modo de direccionamien(o real (ienen la, ,iguien(e, carac(er-,(ica,2
!olo pueden direccionar 1 mega'7(e, de memoria/
!olo puede e>ecu(ar,e un programa a la ve= (una ,ola (area) en una ,ola ,e,in/
No e, po,i'le la pro(eccin de l-mi(e, de memoria8 por lo .ue cual.uier programa de
aplicacin puede ,o're,cri'ir la memoria .ue u(ili=a el ,i,(ema opera(ivo/
3o, de,pla=amien(o, ,on de 16 'i(,/
0uando apareci por primera ve=8 la #"4:P0 fue mu7 a(rac(iva8 7a .ue era econmica 7
e>ecu(a'a 3o(u, 1:2:38 el programa de *o>a, elec(rnica, de cBlculo .ue era A(il para .ue la,
empre,a, adop(aran la P0/ 9 lo, aficionado, de compu(adora, le, fa,cino la P08 7a .ue era
una *erramien(a idea para aprender ,u funcionamien(o/ $a7 .ue recalcar .ue 5igi(al <e,earc*
0PG48 el ,i,(ema opera(ivo de 8 'i(, mB, popular an(e, de P0:5!8 ,lo era capa= de
direccionar 64? de <94/ 5e,de e,(e pun(o de vi,(a8 lo, 64&? de P0:5! parec-an un regalo
del cielo/
5e'ido a la, eviden(e, limi(acione, de memoria 7 velocidad de lo, primero,
microproce,adore, #n(el8 la #"4:P0 era una compu(adora de un ,olo u,uario/ No *a'-a
pro(eccin in(egrada con(ra la corrupcin de memoria .ue podr-an provocar lo, programa, de
aplicacione,/ 6n con(ra,(e8 lo, ,i,(ema, de minicompu(adore, di,poni'le, en e,a Dpoca
pod-an mane>ar vario, u,uario, 7 evi(a'an .ue lo, programa, de aplicacione, ,o're,cri'ieran
lo, da(o, uno de o(ro,/ 0on el (iempo aparecieron ,i,(ema, opera(ivo, mB, ro'u,(o, para la
P08 con lo cual ,e convir(i en una al(erna(iva via'le para lo, ,i,(ema, de microcompu(adora,8
en e,pecial cuando ,e conec(a'an varia, P0, en red/
rgani=a rgani=a rgani=a rgani=acin de la memoria cin de la memoria cin de la memoria cin de la memoria
6n el modo direccionamien(o real8 (an(o el ,i,(ema opera(ivo como lo, programa, de
aplicacione, u(ili=an lo, 64&b inferiore, de memoria/ 5e,puD, de D,(o, ,igue la memoria de
video 7 la memoria re,ervada para lo, con(roladore, de *ard%are/ Por Al(imo8 la, u'icacione,
F&&&& a FFFFF e,(Bn re,ervada, para la <4 (memoria de ,lo lec(ura) del ,i,(ema/ 3a
,iguien(e figura mue,(ra un mapa ,imple de memoria2
3":


5en(ro del Brea de memoria del ,i,(ema opera(ivo8 lo, 1&24 '7(e, inferiore, de memoria
(direccione, &&&&& a &&3FF) con(ienen una (a'la de direccione, de 32 'i(,8 llamada tabla de
vectores de interrupcin/ 6,(a, direccione,8 llamada, vectores de interrupcin8 la, u(ili=a la
0PC al proce,ar la, in(errupcione, de *ard%are 7 ,of(%are/
Fu,(o encima de la (a'la de vec(ore, ,e encuen(ra el *rea de datos del $'#! 7 de M!6D#!/
5e,puD, ,igue el $'#! de soft&are/8 .ue inclu7e lo, procedimien(o, para admini,(rar la
ma7or-a de lo, di,po,i(ivo, de 6G!8 inclu7endo el (eclado8 el di,co duro8 la pan(alla de video8
lo, puer(o, ,eriale, 7 el puer(o de impre,ora/ 3o, procedimien(o, del "#! ,e cargan de,de un
arc*ivo ocul(o del ,i,(ema en un di,co de ,i,(ema (arran.ue) de 4!:5!/ 6l nAcleo de 4!:5!
e, una coleccin de procedimien(o, (llamados servicios) .ue (am'iDn ,e cargan de,de un
arc*ivo en el di,co del ,i,(ema/
Fun(o con el nAcleo de 4!:5! ,e encuen(ran lo, 'Afer de arc*ivo 7 lo, con(roladore, de
di,po,i(ivo, in,(ala'le,/ 6n la ,iguien(e par(e mB, al(a de la memoria8 la par(e re,iden(e del
procesador de comandos ,e carga de,de un arc*ivo e>ecu(a'le llamado command7com/ 6l
proce,ador de comando, in(erpre(a lo, comando, .ue ,e e,cri'en en el ,-m'olo de 4!:5!
para cargar 7 e>ecu(ar lo, programa, almacenado, en di,co/ Cna ,egunda par(e del
proce,ador de comando, ocupa la memoria mB, al(a8 >u,(o de'a>o de la u'icacin 9&&&&/
3""

3o, programa, de aplicacione, ,e pueden cargar en memoria8 en la primera direccin encima
de la par(e re,iden(e del proce,ador de comando,8 7 pueden u,ar (oda la memoria *a,(a la
direccin PFFFFF/ !i el programa ac(ual en e>ecucin ,o're,cri'e el Brea (ran,ien(e del
proce,ador de comando,8 D,(e ,e vuelve a cargar del di,co de arran.ue cuando el programa
(ermina/
Memoria de video 6l Brea de la memoria de video (+<94) en una #"4:P0 empie=a en la
u'icacin 9&&&&8 la cual ,e u(ili=a cuando el adap(ador de video cam'ia al modo grBfico/
0uando el video ,e encuen(ra en modo de (e1(o a color8 la u'icacin de memoria "8&&&
almacena (odo el (e1(o .ue ,e mue,(ra en pan(alla/ 3a pan(alla repre,en(a un mapa en la
memoria8 de manera .ue cada fila 7 columna en la pan(alla corre,ponde a una pala'ra de 16
'i(, en la memoria/ 0uando ,e copia un carBc(er a la memoria de video8 aparece de inmedia(o
en la pan(alla/
$'#! de .#M 6l $'#! de .#M8 .ue ,e encuen(ra en la, u'icacione, de memoria F&&&& a
FFFFF8 e, una par(e impor(an(e del ,i,(ema opera(ivo de la compu(adora/ 0on(iene ,of(%are
de diagn,(ico 7 configuracin del ,i,(ema8 a,- como procedimien(o, de en(rada:,alida de 'a>o
nivel .ue u(ili=an lo, programa, de aplicacione,/ 6l "#! ,e almacena en un c*ip de memoria
e,(B(ica en la (ar>e(a del ,i,(ema/ 3a ma7or-a de lo, ,i,(ema, ,iguen una e,pecificacin
e,(andari=ada del "#!8 modelada a par(ir del "#! original del #"48 7 u(ili=an el Brea de da(o,
del "#! de &&4&& a &&4FF/
<edireccin de en(rada <edireccin de en(rada <edireccin de en(rada <edireccin de en(rada: :: :,alida ,alida ,alida ,alida
9 lo largo de e,(e cap-(ulo *aremo, referencia al dispositivo de entrada est*ndar 7 al
dispositivo de salida est*ndar/ 9m'o, ,e conocen en con>un(o como la consola8 en la .ue ,e
u(ili=a el (eclado para la en(rada 7 la pan(alla de video para la ,alida/
9l e>ecu(ar programa, de,de el ,-m'olo de ,i,(ema8 podemo, redirigir la en(rada e,(Bndar de
manera .ue ,e lea de un arc*ivo o puer(o de *ard%are8 en ve= de *acerlo del (eclado/ 3a
,alida e,(Bndar puede redirigir,e a un arc*ivo8 impre,ora 7 o(ro di,po,i(ivo de 6G!/ !in e,(a
capacidad8 lo, programa, (endr-an .ue revi,ar,e con,idera'lemen(e an(e, de poder modificar
,u en(rada:,alida/ Por e>emplo8 el ,i,(ema opera(ivo (iene un programa llamado sort7exe .ue
ordena un arc*ivo de en(rada/ 6l ,iguien(e comando ordena un arc*ivo miarchivo7txt 7 mue,(ra
la ,alida
sort W miarc'ivo6t1t
6l ,iguien(e comando ordena miarc*ivo/(1( 7 env-a la ,alida a arc*,alida/(1(
sort W miarc'ivo6t1t X arc'salida6t1t
Podemo, u(ili=ar el ,-m'olo de canali=acin (c) para copiar la ,alida del comando 5#< a la
en(rada del programa sort7exe/ 6l ,iguien(e comando ordena el direc(orio ac(ual del di,co 7
mue,(ra la ,alida en la pan(alla
dir b sort
3"#

6l ,iguien(e comando env-a la ,alida del programa ,or( a la impre,ora prede(erminada (,in
cone1in en red)(,e iden(ifica por P<N)2
dir b sort X prn
6n la ,iguien(e (a'la ,e mue,(ra el con>un(o comple(o de nom're, de di,po,i(ivo,2
Nom're de di,po,i(ivo Nom're de di,po,i(ivo Nom're de di,po,i(ivo Nom're de di,po,i(ivo 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
0N 0on,ola (pan(alla de video o
(eclado)
3PT1 o P<N Primera impre,ora en paralelo
3PT28 3PT3 Puer(o, paralelo, 2 7 3
0418042 Puer(o, ,eriale, 1 7 2
NC3 5i,po,i(ivo ine1i,(en(e o (on(o

#n(errupcione, de ,of(%are #n(errupcione, de ,of(%are #n(errupcione, de ,of(%are #n(errupcione, de ,of(%are
Cna interrupcin de soft&are e, una llamada a un procedimien(o del ,i,(ema opera(ivo/ 3a
ma7or-a de e,(o, procedimien(o,8 llamado, manejadores de interrupciones8 proporcionan la
capacidad de en(rada:,alida a lo, programa, de aplicacione,/ !e u(ili=an para la, ,iguien(e,
(area,2
4o,(rar carac(ere, 7 cadena,/
3eer carac(ere, 7 cadena, de (eclado/
4o,(rar (e1(o a color/
9'rir 7 cerrar arc*ivo,/
3eer da(o, de arc*ivo,/
6,cri'ir da(o, en arc*ivo,/
6,(a'lecer 7 o'(ener la *ora 7 fec*a del ,i,(ema/
#n,(ruccin #NT #n,(ruccin #NT #n,(ruccin #NT #n,(ruccin #NT
3a in,(ruccin #NT (llamada a un procedimiento de interrupcin) llama a una ,u'ru(ina del
,i,(ema .ue (am'iDn ,e conoce como mane>ador de interrupciones/ 9n(e, de .ue ,e e>ecu(e
una in,(ruccin #NT8 de'en in,er(ar,e uno o mB, parBme(ro, en lo, regi,(ro,/ Por lo meno,8
de'emo, mover al regi,(ro 9$ un nAmero .ue iden(ifi.ue al procedimien(o e,pec-fico/
5ependiendo de la funcin8 (al ve= *a7a .ue pa,ar o(ro, valore, a la in(errupcin en lo,
regi,(ro,/ 3a ,in(a1i, e,2
I83 n'mero
en donde n@mero e, un en(ero en el rango de & a FF *e1adecimal/
3"1

+ec(ori=acin de in(errupcione, +ec(ori=acin de in(errupcione, +ec(ori=acin de in(errupcione, +ec(ori=acin de in(errupcione,
3a 0PC proce,a la, in,(ruccione, #NT median(e el u,o de la (a'la de vec(ore, de in(errupcione,
.ue8 como mencionamo, an(e,8 e, una (a'la de direccione, .ue ,e encuen(ra en lo, 1&24
'7(e, inferiore, de memoria/ 0ada en(rada en e,(a (a'la e, una direccin de ,egmen(o:
de,pla=amien(o de 32 'i(,8 .ue apun(a a un mane>ador de in(errupcione,/ 3a, direccione,
reale, en e,(a (a'la var-an de un e.uipo a o(ro/ 3a ,iguien(e figura ilu,(ra lo, pa,o, .ue reali=a
la 0PC cuando un programa invoca a la in,(ruccin #NT2

Pa,o 1 Pa,o 1 Pa,o 1 Pa,o 12 el operador de in,(ruccin #NT ,e mul(iplica por 4 para locali=ar la en(rada en
la (a'la con el vec(or de in(errupcin corre,pondien(e/
Pa,o 2 Pa,o 2 Pa,o 2 Pa,o 22 la 0PC me(e la, 'andera, 7 una direccin de re(orno de
,egmen(oGde,pla=amien(o de 32 'i(, en la pila8 de,*a'ili(a la, in(errupcione, de
*ard%are 7 e>ecu(a una llamada le>ana a la direccin almacenada en la u'icacin
(1&*J4) en la (a'la de vec(ore, de in(errupcin (F&&&2F&65)/
Pa,o 3 Pa,o 3 Pa,o 3 Pa,o 32 el mane>ador de in(errupcione, en F&&&2F&65 ,e e>ecu(a *a,(a llegar a una
in,(ruccin #<6T/
Pa,o 42 Pa,o 42 Pa,o 42 Pa,o 42 la in,(ruccin #<6T (re(orno de in(errupcin) ,aca la, 'andera, 7 la direccin de
re(orno de la pila8 lo cual provoca .ue el proce,ador con(inAe la e>ecucin >u,(o
de,puD, de la in,(ruccin #NT 1&*8 en el programa .ue *i=o la llamada/
#n(errupcione, comune, #n(errupcione, comune, #n(errupcione, comune, #n(errupcione, comune,
3a, in(errupcione, de ,of(%are llaman a rutinas de servicios de interrupciones (#!<,)8 .ue ,e
encuen(ran en el "#! o en 5!/ 9lguna, in(errupcione, de u,o frecuen(e ,on2
#NT 1&* #NT 1&* #NT 1&* #NT 1&* (!ervicio, de video)/ Procedimien(o, .ue mue,(ran ru(ina, .ue con(rolan la
po,icin del cur,or8 e,cri'en (e1(o a color8 de,pla=an la pan(alla 7 mue,(ran grBfico, de
video/
#NT 16* #NT 16* #NT 16* #NT 16* (!ervicio, de (eclado)/ Procedimien(o, .ue leen el (eclado 7 comprue'an ,u
e,(ado/
3"3

#NT 17* #NT 17* #NT 17* #NT 17* (!ervicio, de impre,ora)/ Procedimien(o, .ue iniciali=an8 imprimen 7 devuelven
el e,(ado de la impre,ora/
#NT 19* #NT 19* #NT 19* #NT 19* ($ora del d-a)/ Procedimien(o .ue o'(iene el nAmero de pul,acione, del relo>
de,de .ue ,e encendi el e.uipo8 o e,(a'lece el con(ador a un nuevo valor/
#NT 10* #NT 10* #NT 10* #NT 10* (#n(errupcin de (empori=ador del u,uario)/ Cn procedimien(o vaci .ue ,e
e>ecu(a 18/2 vece, por ,egundo/
#NT 21* #NT 21* #NT 21* #NT 21* (!ervicio, de 4!:5!)8 procedimien(o, .ue proporcionan en(rada:,alida8
mane>o de arc*ivo, 7 admini,(racin de memoria/ Tam'iDn ,e conocen como llamadas
a funciones de M!6D#!/
0odificacin para lo, programa, de 16 'i(, 0odificacin para lo, programa, de 16 'i(, 0odificacin para lo, programa, de 16 'i(, 0odificacin para lo, programa, de 16 'i(,
3o, programa, di,e@ado, para 4!:5! de'en ,er aplicacione, de 16 'i(, .ue ,e e>ecu(an en
modo de direccionamien(o real/ 3a, aplicacione, en modo de direccionamien(o real u(ili=an
,egmen(o, de 16 'i(, 7 ,iguen el e,.uema de direccionamien(o ,egmen(o de,cri(o al principio
del re,umen/ !i ,e u(ili=a un proce,ador de 32 'i(,8 podemo, u,ar regi,(ro, de prop,i(o
general de 32 'i(, para da(o,8 inclu,o en modo de direccionamien(o real/ $e a.u- un re,umen
de la, carac(er-,(ica, de codificacin en lo, programa, de 16 'i(,2
3a direc(iva /4563 e,pecifica el modelo de memoria .ue u(ili=arB el programa/ !e
recomienda el modelo pe.ue@o (!mall)8 el cual man(iene el cdigo en un ,egmen(o 7 la
pila mB, lo, da(o, en o(ro2
62ODE4 small
3a direc(iva !T90? a,igna una pe.ue@a can(idad de e,pacio en la pila local para
nue,(ro programa/ Por lo general8 mu7 poca, vece, ,e nece,i(an mB, de 256 '7(e, de
e,pacio en la pila/ 3a ,iguien(e in,(ruccin e, 'a,(an(e genero,a8 con 512 '7(e,2
6S3A!> .""'
5e manera opcional8 podemo, *a'ili(ar el u,o de regi,(ro, de 32 'i(,/ 6,(o puede
*acer,e con la direc(iva /3862
67#/
!e re.uieren do, in,(ruccione, al principio de main ,i el programa *ace referencia a
varia'le,/ 6,(a, in,(ruccione, iniciali=an el regi,(ro 5! con la u'icacin inicial del
,egmen(o de da(o,8 iden(ificado por la con,(an(e predefinida Xda(a de 49!4/
mov a1,Zdata
mov ds,a1
Todo programa de'e incluir una in,(ruccin para (erminar el programa 7 regre,ar al
,i,(ema opera(ivo/ Cna forma de *acerlo e, u,ando la direc(iva /6H#T2
6E:I3
5e manera al(erna(iva8 podemo, llamar a la funcin 40* de #NT21*2
mov a',;c' 0 termina el proceso
int .%' 0 interrupciones de 2SKDOS
Podemo, a,ignar valore, a lo, regi,(ro, de ,egmen(o median(e la in,(ruccin 4+8
pero ,lo cuando ,e a,igne la direccin de un ,egmen(o del programa/
3o, programa, en modo direccionamien(o real ,lo pueden acceder a lo, puer(o, de
*ard%are8 lo, vec(ore, de in(errupcin 7 la memoria del ,i,(ema cuando ,e e>ecu(an
3"5

'a>o 4!:5!8 ;indo%, P58 P8 7 4ilenium/ 6,(e (ipo de acce,o no e,(B permi(ido en
;indo%, NT8 2&&& o HP/
0uando ,e u(ili=a el modelo !mall !mall !mall !mall de memoria8 lo, de,pla=amien(o, (direccione,) de
lo, da(o, 7 la, e(i.ue(a, de cdigo ,on de 16 'i(,/ 3a 'i'lio(eca #rvine16 u(ili=a el
modelo !mall de memoria8 en el .ue (odo el cdigo ca'e en un ,egmen(o de 16 'i(,8 7
lo, da(o, 7 la pila del programa ca'en en o(ro ,egmen(o de 16 'i(,/
6n el modo de direccionamien(o real8 la, en(rada, en la pila ,on de 16 'i(, de manera
prede(erminada/ 5e cual.uier forma podemo, colocar un valor de 32 'i(, en la pila
(u(ili=a do, en(rada,)/
Podemo, ,implificar la codificacin de lo, programa, de 16 'i(, ,in incluimo, el arc*ivo
#rvine32/inc/ 6,(e arc*ivo in,er(a la, ,iguien(e, in,(ruccione, en el flu>o de en,am'lado8 la,
cuale, definen el modo de memoria 7 la convencin de llamada,8 a,ignan e,pacio en la pila8
*a'ili(an lo, regi,(ro, de 32 'i(, 7 redefinen la direc(iva /6H#T con e1i( e1i( e1i( e1i(2
62ODE4 small, stdcall
6S3A!> .""'
67#/
e1it ER9 W6E:I3X
3lamada, a funcione, de 4! 3lamada, a funcione, de 4! 3lamada, a funcione, de 4! 3lamada, a funcione, de 4!: :: :5! (#NT 21*) 5! (#NT 21*) 5! (#NT 21*) 5! (#NT 21*)
4!:5! proporciona muc*a, funcione, fBcile, de u,ar para mo,(rar (e1(o en la con,ola/ Toda,
forman par(e de un grupo .ue8 por lo general ,e conoce como llamadas a funciones '(- 3/h
de M!6D#!/ 6,(a in(errupcin ,opor(a por lo meno, 2&& funcione, di,(in(a,8 la, cuale, ,e
iden(ifican median(e un nAmero de funcin .ue ,e coloca en el regi,(ro 9$/ Cna fuen(e
e1celen(e8 aun.ue un poco o',ole(a8 e, el li'ro de <a7 5uncan8 Advanced M!6D#!
programming8 2o 6dicin8 4icro,of( Pre,,8 1P88/ Cna li,(a mB, e1(en,a 7 ac(uali=ada8
conocida como <alf "ro%nh, #n(errup( 3i,(8 ,e encuen(ra en l-nea /
Para cada funcin #NT 21* .ue de,cri'imo, en e,(e cap-(ulo8 pre,en(amo, lo, parBme(ro, de
en(rada 7 valore, de re(orno nece,ario,8 agregamo, no(a, acerca de ,u u,o e incluiremo, un
cor(o e>emplo de cdigo para llamarla/
+aria, de la, funcione, re.uieren .ue la direccin de 32 'i(, de un parBme(ro de en(rada ,e
almacene en lo, regi,(ro, 5!25H/ 5!8 e, el regi,(ro del ,egmen(o de da(o,8 por lo general8 ,e
e,(a'lece con el Brea de da(o, del programa/ !i por alguna ra=n no e, el ca,o8 *a7 .ue u,ar el
operador !6Y para e,(a'lecer 5! con el ,egmen(o .ue con(iene lo, da(o, .ue ,e pa,an a #NT
21*/ 3a, ,iguien(e, in,(ruccione, ,e encargan de e,(o2
6data
buferEnt EF3E #" D9P(N)
6code
3"6

mov a1, SES buferEnt
mov ds,a1
mov d1,O$$SE3 buferEnt
8uncin N"h de '(- 3/h1 terminar proce,o 3a funcin 40* de #NT 21* (ermina el programa
ac(ual (conocido como proce,o)/ 6n lo, programa, en modo direccionamien(o real .ue
pre,en(amo,8 no, *emo, 'a,ado en la definicin de un macro en la 'i'lio(eca #rvine16
llamada e1i( e1i( e1i( e1i(/ Z,(a ,e define a,-2
e1i( T6HT6LC# U/6H#TV
6n o(ra, pala'ra,8 e1i( e1i( e1i( e1i( e, un al-a, o ,u,(i(u(o para /6H#T (la direc(iva de 49!4 .ue (ermina un
programa)/ !e cre el ,-m'olo e1i( e1i( e1i( e1i( con el fin de poder u,ar un ,olo comando para (erminar lo,
programa, de 16 7 32 'i(,/ 6n programa, de 16 'i(,8 el cdigo generado por /6H#T /6H#T /6H#T /6H#T e,2
mov a',;!' 0 termina el proceso
int .%'
!i proporcionamo, un argumen(o de cdigo de re(orno opcional a la macro /6H#T8 el
en,am'lador genera una in,(ruccin adicional .ue mueve el cdigo de re(orno a 932
6E:I3 " 0 llama a la macro
0digo generado2
mov a',;!' 0 termina el proceso
mov al," * cdigo de retorno
int .%'
6l proce,o .ue *ace la llamada reci'e el valor en 938 conocido como el cdigo de retorno del
proceso (inclu7endo un arc*ivo por lo(e,)8 para indicar el e,(ado de re(orno del programa/ Por
convencin8 un cdigo de re(orno de cero ,e con,idera .ue ,e comple( con D1i(o/ Podemo,
u,ar o(ro, cdigo, de re(orno en(re 1 7 255 para indicar re,ul(ado, adicionale, .ue (engan un
,ignificado e,pec-fico para cada programa/ Por e>emplo8 43/6H68 4icro,of( 9,,am'ler8
devuelve & ,i un programa ,e en,am'la en forma adecuada8 7 un valor di,(in(o de cero ,u no
e, a,-/
Funcione, de ,alida Funcione, de ,alida Funcione, de ,alida Funcione, de ,alida ,elec(a, ,elec(a, ,elec(a, ,elec(a,
6n e,(a ,eccin pre,en(aremo, alguna, de la, funcione, mB, comune, de #NT 21* para
e,cri'ir carac(ere, 7 (e1(o/ Ninguna de e,(a, funcione, al(era lo, colore, ac(uale,
prede(erminado, de la pan(alla8 por lo .ue lo, re,ul(ado, ,lo e,(arBn a colore, ,i ,e
e,(a'leci previamen(e el color de la pan(alla por o(ro, medio,/ Por e>emplo8 podemo, llamar a
la, funcione, del "#! de video/
3"7

8iltrado de caracteres de control Toda, la, funcione, en e,(a ,eccin filtran8 o in(erpre(an
carac(ere, 9!0## de con(rol/ Por e>emplo8 ,i e,cri'imo, un carBc(er de re(roce,o en la ,alida
e,(Bndar8 el cur,or ,e mueve una columna a la i=.uierda/ 3a ,iguien(e (a'la con(iene una li,(a
de carac(ere, de con(rolo .ue e, pro'a'le .ue no, encon(remo,/
0arac(ere, 9!0## de con(rol
0digo 9!0## 0digo 9!0## 0digo 9!0## 0digo 9!0## 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
&8* <e(roce,o (mueve una columna a la i=.uierda)
&P* Ta'ulacin *ori=on(al (avan=a n columna, *acia adelan(e)
&9* 9vance de l-nea (,e mueve la ,iguien(e l-nea de ,alida)
&0* 9vance de pBgina (,e mueve a la ,iguien(e pBgina de impre,in)
&5* <e(orno de carro (,e mueve a la columna de ,alida .ue e,(B mB, a la
i=.uierda)
1"* 0arBc(er de e,cape

3a, ,iguien(e, (a'la, de,cri'en la, carac(er-,(ica, impor(an(e, de la, funcione, 28 58 68 P 7
4&* de #NT 21*/ 3a funcin 2 de #NT 21* e,cri'e un ,olo carBc(er en la ,alida e,(Bndar[ la
funcin 5 de #NT 21* e,cri'e un ,olo carBc(er en la impre,ora[ la funcin 6 de #NT21 e,cri'e
un ,olo carBc(er ,in fil(ro a la ,alida e,(Bndar[ la funcin P de #NT 21* e,cri'e una cadena (.ue
,e (ermina con un carBc(er T) a la ,alida e,(Bndar[ 7 3a funcin 4&* de #NT 21* e,cri'e un
arreglo de '7(e, en un arc*ivo o di,po,i(ivo/


Funcin 2 Funcin 2 Funcin 2 Funcin 2 de de de de #NT 21* #NT 21* #NT 21* #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e un ,olo carBc(er en la ,alida e,(Bndar 7 avan=a el
cur,or una columna *acia adelan(e
<eci'e <eci'e <eci'e <eci'e 9$ R 2
53 R valor de carBc(er
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',.
3"8

mov dl,HAH
int .%'

Funcin 5 de #NT 21* Funcin 5 de #NT 21* Funcin 5 de #NT 21* Funcin 5 de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e un ,olo carBc(er en la impre,ora
<eci'e <eci'e <eci'e <eci'e 9$ R 5
53 R valor de carBc(er
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',< 0 selecciona la salida de la
impresora
mov dl,P.P 0 carIcter a imprimir
int .%' 0 llamada a 2SKDOS
No(a, No(a, No(a, No(a, 4!:5! e,pera *a,(a .ue la impre,ora e,(D li,(a para
imprimir el carBc(er/ Podemo, (erminar la e,pera
oprimiendo la, (ecla, 0(rl:6n(er/ 3a ,alida prede(erminada
e, al puer(o de impre,ora 3P1


Funcin 6 de #NT 21* Funcin 6 de #NT 21* Funcin 6 de #NT 21* Funcin 6 de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e un carBc(er en la ,alida e,(Bndar
<eci'e <eci'e <eci'e <eci'e 9$ R 6
53 R valor del carBc(er
5evuelve 5evuelve 5evuelve 5evuelve !i IF R &8 93 con(iene el cdigo 9!0## del carBc(er
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',/
mov dl,PAP
3"9

int .%'
No(a, No(a, No(a, No(a, 9 diferencia de o(ra, funcione, de #NT 218 D,(a no fil(ra
(in(erpre(a) lo, carac(ere, 9!0## de con(rol

Funcin P de #NT 32* Funcin P de #NT 32* Funcin P de #NT 32* Funcin P de #NT 32*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e una cadena con (erminacin T en la ,alida
e,(Bndar
<eci'e <eci'e <eci'e <eci'e 9$ R P
5!25H R ,egmen(oGde,pla=amien(o de la cadena
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
6data
cadena EF3E Oesta es una cadenaUP
6code
mov a',+
mov d1,O$$SE3 cadena
int .%'
No(a, No(a, No(a, No(a, 3a cadena de'e (erminar con un carBc(er de ,igno de
dlare, (T)

Funcin 4&* de #NT 21* Funcin 4&* de #NT 21* Funcin 4&* de #NT 21* Funcin 4&* de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e un arreglo de '7(e, en un arc*ivo o di,po,i(ivo
<eci'e <eci'e <eci'e <eci'e 9$ R 4&*
"H R mane>ador de di,po,i(ivo o arc*ivo (con,ola R 1)
0H R nAmero de '7(e, a e,cri'ir
5!25H R direccin de arreglo
3#:

5evuelve 5evuelve 5evuelve 5evuelve 9H R nAmero de '7(e, e,cri(o,
3lamada de e>emplo, 3lamada de e>emplo, 3lamada de e>emplo, 3lamada de e>emplo,
6data
mensae O'ola, programadorP
6code
mov a',;"'
mov b1,%
mov c1,4E8S3\O$ mensae
mov d1,O$$SE3 mensae
int .%'

6>emplo de programa2 $ola programador 6>emplo de programa2 $ola programador 6>emplo de programa2 $ola programador 6>emplo de programa2 $ola programador
9 con(inuacin ,e mue,(ra un programa de e>emplo8 para imprimir una cadena en la pan(alla
u,ando una llamada a una funcin de 4!:5!
3I34E Programa \ola programador (\ola6asm)
62ODE4 small
6S3A!> %""'
67#/
6data
mensae EF3E O\ola, programadordP,"d',"a'
6code
main P-O!
mov as,Zdata 0 inicializa DS
mov ds,a1
mov a',;" 0 escribe en el arc'ivoVdispositivo
mov b1,% 0 maneador de salida
mov c1,SI[EO$ mensae 0 n?meros de b5tes
mov d1,O$$SE3 mensae 0 direccin del b?fer
3#"

int .%'
6E:I3
main E8DP
E8D main
5ersin alternativa (ra forma de e,cri'ir $ola/a,m e, median(e el u,o de la direc(iva
predefinida /!T9<TCP (la cual iniciali=a el regi,(ro 5!)/ Para ello8 *a7 .ue eliminar la e(i.ue(a
.ue e,(B ,eguida de la direc(iva 6N52
3I34E programa \ola programador (\ola.6asm)
62ODE4 small
6S3A!> %""'
67#/
6data
mensae O\ola, ProgramadordP, "d', "a'
6code
main P-O!
6S3A-39P
mov a',;"' 0 escribe en el arc'ivoVdispositivo
mov b1,% 0 maneador de salida
mov c1,SI[EO$ mensae 0 n?mero de b5tes
mov d1,O$$SE3 mensae 0 direccin del bufer
int .%'
6E:I3
main E8DP
E8D
Funcione, de en(rada ,ele Funcione, de en(rada ,ele Funcione, de en(rada ,ele Funcione, de en(rada ,elec(a, c(a, c(a, c(a,
6n e,(a ,eccin8 de,cri'iremo, una, cuan(a, de la, funcione, de 4!:5! .ue ,e u(ili=an con
mB, frecuencia para leer de la en(rada e,(Bndar/
3##

Funcin 1 de #NT 21* Funcin 1 de #NT 21* Funcin 1 de #NT 21* Funcin 1 de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 3ee un ,olo carBc(er de la en(rada e,(Bndar
<eci'e <eci'e <eci'e <eci'e 9$ R 1
5evuelve 5evuelve 5evuelve 5evuelve 93 R carBc(er (cdigo 9!0##)
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',%
int .%'
mov car,al
No(a, No(a, No(a, No(a, !i no *a7 un carBc(er pre,en(e en el 'Afer de en(rada8 el
programa e,pera/ 6,(a funcin env-a (ec*o) el carBc(er de
,alida e,(Bndar

3a funcin 6 de #NT 21* lee un carBc(er de la en(rada e,(Bndar8 ,i D,(e e,(B e,perando en el
'Afer de en(rada/ !i el 'Afer e,(B vac-o8 la funcin regre,a con la 'andera 0ero ac(iva 7 no
reali=a ninguna o(ra accin2
Funcin 5 de #NT 21* Funcin 5 de #NT 21* Funcin 5 de #NT 21* Funcin 5 de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 3ee un carBc(er de la en(rada e,(Bndar ,in e,perar
<eci'e <eci'e <eci'e <eci'e 9$ R 6
53 R FF*
5evuelve 5evuelve 5evuelve 5evuelve !i IF R &8 9l con(iene el cdigo 9!0## del carBc(er
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov ah,6
mov dl,0FFh
int 21h
mov car,al
saltar:
No(a, No(a, No(a, No(a, 3a in(errupcin ,lo devuelve un carBc(er ,i *a7 uno
e,perando en el 'Afer de en(rada/ No env-a (ec*o) el
carBc(er a la ,alida e,(Bndar 7 no fil(ra lo, carac(ere, de
3#1

con(rol

3a funcin &9* de #NT 21* lee una cadena en 'Afer de la en(rada e,(Bndar8 la cual ,e (ermina
con la (ecla #n(ro/ 9l llamar a e,(a funcin/ *a7 .ue pa,arle un apun(ador a una e,(ruc(ura de
en(rada .ue (enga el ,iguien(e forma(o (cuen(a cuen(a cuen(a cuen(a puede ,er en(re & 7 128)2
cuenta ( #"
3E!4ADO S3-9!3
ma1Entrada EF3E cuenta 0 caracteres mI1imos a introducir
cuentaEntrada EF3E N 0 cuenta actual de entrada
b?fer EF3E cuenta D9P(N) 0 guarda los caracteres de entrada
3E!4ADO E8DS
6l campo maxntrada e,pecifica el nAmero mB1imo de carac(ere, .ue puede in(roducir el
u,uario8 inclu7endo la (ecla #n(ro/ Podemo, u(ili=ar la (ecla de re(roce,o para 'orrar carac(ere,
7 re(roceder el cur,or/ 6l u,uario (ermina la en(rada oprimiendo la (ecla #n(ro u oprimiendo 0(rl:
6n(er/ Toda, la, (ecla, .ue no ,ean 9!0##8 como 9vPBg 7 F18 ,e fil(ran 7 no ,e almacenan en el
'Afer8 una ve= .ue la funcin regre,a8 el campo cuentantrada indica cuan(o, carac(ere, ,e
in(rodu>eron8 ,in con(ar la (ecla #n(ro/ 3a ,iguien(e (a'la de,cri'e la funcin &9*2


#n,(ruccin &9* de #NT 21* #n,(ruccin &9* de #NT 21* #n,(ruccin &9* de #NT 21* #n,(ruccin &9* de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 3ee un arreglo de carac(ere, en 'Afer de la en(rada
e,(Bndar
<eci'e <eci'e <eci'e <eci'e 9$ R &9*
5!25H R direccin de la e,(ruc(ura de en(rada del (eclado
5evuelve 5evuelve 5evuelve 5evuelve 3a e,(ruc(ura ,e iniciali=a con lo, carac(ere, de en(rada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
6data
datos3ecl 3E!4ADO WX
6code
3#3

mov a',"A'
mov d1,O$$SE3 datos3ecl
int .%'

3a funcin &"* de #NT 21* o'(iene el e,(ado del 'Afer de en(rada e,(Bndar2
Funcin &" de #NT 21* Funcin &" de #NT 21* Funcin &" de #NT 21* Funcin &" de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene el e,(ado del 'Afer de en(rada e,(Bndar
<eci'e <eci'e <eci'e <eci'e 9$ R &"*
5evuelve 5evuelve 5evuelve 5evuelve !i *a7 un carBc(er e,perando8 93 R &FF*[ en cual.uier o(ro
ca,o8 93 R &
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',"E'
int .%'
cmp al,"
e saltar
0 (introduce un carIcter)
,al(ar2
No(a, No(a, No(a, No(a, No elimina el carBc(er

6>emplo2 programa de cifrado de cadena, 6>emplo2 programa de cifrado de cadena, 6>emplo2 programa de cifrado de cadena, 6>emplo2 programa de cifrado de cadena,
3a funcin 6 de #NT 21* (iene la *a'ilidad Anica de leer carac(ere, de la en(rada e,(Bndar ,in
de(ener el programa o fil(rar lo, carac(ere, de con(rol/ 9 e,(o ,e puede dar un 'uen u,o8 ,i
e>ecu(amo, un programa de,de el ,-m'olo de ,i,(ema 7 redirigimo, la en(rada/ 6, decir8 la
en(rada provendrB de un arc*ivo de (e1(o8 en ve= del (eclado/
6l ,iguien(e programa ("ifrar7asm) lee cada carBc(er de la en(rada e,(Bndar8 u,a la in,(ruccin
H< para al(erar el carBc(er 7 e,cri'e el carBc(er al(erado en la ,alida e,(Bndar2
3I34E Programa de cifrado (!ifrar6asm)
0 Este programa usa llamadas a funciones de 2SKDOS
3#5

0 para leer 5 cifrar un arc'ivo6 Se eecuta desde el
0 sAmbolo del sistema, usando la redireccin*
0 !ifrar Warc'ent6t1tX arc'sal6t1t
0 la funcin / tambi^n se usa para salida, para evitar
0 filtrar los caracteres AS!II de control6
I8!49DE Irvine%/6inc
)A4:O- ( .7+ 0 cual@uier valor entre " _ .<<
6code
main P-O!
mov a1,Zdata
mov ds,a1
4%*
mov a',/ 0 dirige la entrada de consola
mov dl,"$$' 0 no espera al carIcter
int .%' 0 A4 ( carIcter
z 4. 0 termina si [$ ( % (EO$)
1or al,)A4O-: 0 escribe en la salida
mov a',/
mov dl,al
int .%'
mp 4% 0 repite el ciclo
4.* e1it
main E8DP
E8D main
3a eleccin de 23P como valor de cifrado e, comple(amen(e ar'i(raria/ Podemo, u,ar
cual.uier valor en(re & 7 255 en e,(e con(e1(o8 aun.ue ,i ,e u(ili=a & no producir-amo, ningAn
cifrado/ 5e,de luego .ue el cifrado e, dD'il8 pero podr-a ,er ,uficien(e como para de,alen(ar al
3#6

u,uario promedio al (ra(ar de mane>arlo/ 0uando ,e e>ecu(a e,(e programa en el ,-m'olo de
,i,(ema8 de'emo, indicar el arc*ivo de en(rada (7 ,alida8 ,i lo *a7)/ 9 con(inuacin ,e
mue,(ran do, e>emplo,2
cifrar U arc*en(/(1( 6n(rada de arc*ivo (arc*en(/(1()8 ,alida a la con,ola
cifrar U arc*en(/(1( V arc*,al/(1( 6n(rada de,de el arc*ivo (arc*en(/(1()8 ,alida a un arc*ivo
(arc*,al/(1()

Funcin 3F* de in( 21* Funcin 3F* de in( 21* Funcin 3F* de in( 21* Funcin 3F* de in( 21*
3a funcin 3F* de #NT 21*8 como ,e mue,(ra en la ,iguien(e (a'la8 lee un arreglo de '7(e, de
un arc*ivo o di,po,i(ivo/ Puede u,ar,e para la en(rada de (eclado cuando el mane>ador del
di,po,i(ivo en "H e, igual a cero2
Funcin 3F de #NT 21* Funcin 3F de #NT 21* Funcin 3F de #NT 21* Funcin 3F de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 3ee un arreglo de '7(e, en un arc*ivo o di,po,i(ivo
<eci'e <eci'e <eci'e <eci'e 9$ R 3F*
"H R mane>ador de di,po,i(ivoGarc*ivo (& R (eclado)
0H R mB1ime de '7(e, a leer
5!25H R direccin de 'Afer de en(rada
5evuelve 5evuelve 5evuelve 5evuelve 9H R nAmero de '7(e, .ue ,e le7eron
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
6data
buferEntrada EF3E %.M dup(")
b5tes4eidos ,O-D N
6code
mov a',7$'
mov b1,"
mov c1,%.M
mov d1,O$$SE3 buferEntrada
int .%'
3#7

mov b5tes4eidos,a1
No(a, No(a, No(a, No(a, !i ,e lee de,de el (eclado8 la en(rada (ermina cuando ,e
oprime la (ecla #n(ro8 7 ,e ad>un(an lo, carac(ere, &5*8 &9*
al 'Afer de en(rada

!i el u,uario in(roduce mB, carac(ere, de lo, .ue ,olici(a la llamada a la funcin8 lo,
carac(ere, en e1ce,o permanecen en el 'Afer de en(rada de 4!:5!/ !i la funcin ,e llama
mB, adelan(e en el programa8 la e>ecucin (al ve= no ,e de(enga 7 e,pere la en(rada del
u,uario8 7a .ue el 'Afer (odav-a con(iene da(o, (inclu7endo lo, carac(ere, &5*8 &9* .ue
marcan el final de la l-nea)/ 6,(o puede ocurrir inclu,o en(re in,(ancia, ,eparada, de e>ecucin
del programa/ Para e,(ar comple(amen(e ,eguro de .ue nue,(ro programa funciona en la
forma ,eparada8 de'emo, vaciar el 'Afer de en(rada8 un carBc(er a la ve=8 de,puD, de llamar a
la funcin 3F*/ 6l ,iguien(e cdigo ,e encarga de ello2
*KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
)aciarEufer P-O!
0
0 vacAa el b?fer de la entrada estIndar6
0 -ecibe* nada6 Devuelve* nada
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
6data
unE5te EF3E N
6code
pus'a
4%*
mov a',7$' 0 lee arc'ivoVdispositivo
mov b1," 0 maneador del teclado
mov c1,% 0 un b5te
mov d1,O$$SE3 unE5te 0 lo guarda a@uA
int .%' 0 llama a 2SKDOS
cmp unE5te,"A' 0 clleg al fin de lAneaN
3#8

ne 4% 0 no* lee otro
popa
ret
)aciarEufer E8DP
Funcione, de fec*aG*ora Funcione, de fec*aG*ora Funcione, de fec*aG*ora Funcione, de fec*aG*ora
4uc*a, aplicacione, populare, de ,of(%are mue,(ra la fec*a 7 *ora ac(uale,/ (ra, o'(ienen
la fec*a 7 *ora8 7 la, u(ili=an en ,u lgica in(erna/ Por e>emplo8 un programa de agenda puede
u,ar la fec*a ac(ual para verificar .ue un u,uario no e,(D programando por acciden(e una ci(a
en el pa,ado/
0omo ,e mue,(ra en la, ,iguien(e, ,erie, de (a'la,8 la funcin 29* de #NT 21* o'(iene la
fec*a del ,i,(ema8 7 la funcin 2" de #NT 21*8 e,(a'lece la fec*a del ,i,(ema/ 3a funcin 20 de
#NT 21* o'(iene la *ora del ,i,(ema8 7 la funcin 25 de #NT 21* la e,(a'lece/
Funcin 29* de #N Funcin 29* de #N Funcin 29* de #N Funcin 29* de #NT 21* T 21* T 21* T 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la fec*a del ,i,(ema
<eci'e <eci'e <eci'e <eci'e 9$ R 29*
5evuelve 5evuelve 5evuelve 5evuelve 0H R a@o
5$853 R me,8 d-a
93 R d-a de la ,emana (5omingo R &8 3une, R 18 e(c/)
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', .A'
int .%'
mov anio, c1
mov mes, d'
mov dia, dl
mov diaSemana, al

Funcin 2"* de #NT 21* Funcin 2"* de #NT 21* Funcin 2"* de #NT 21* Funcin 2"* de #NT 21*

3#9

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece la fec*a del ,i,(ema
<eci'e <eci'e <eci'e <eci'e 9$ R 2"*
0H R a@o
5$ R me,
53 R d-a
5evuelve 5evuelve 5evuelve 5evuelve !i el cam'io (uvo D1i(o8 93 R &[ en ca,o con(rario8 93 R FF*
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',.E'
mov c1, anio
mov d', mes
mov dl, dia
int .%'
cmp al,"
>ne fallo
No(a, No(a, No(a, No(a, 6, pro'a'le .ue no funcione ,i ,e e>ecu(a en ;indo%, NT8
2&&& o HP con un perfil de u,uario re,(ringido/

Funcin 20* de #NT 21* Funcin 20* de #NT 21* Funcin 20* de #NT 21* Funcin 20* de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la *ora del ,i,(ema
<eci'e <eci'e <eci'e <eci'e 9$ R 20*
5evuelve 5evuelve 5evuelve 5evuelve 0$ R *ora, (&:23)
03 R minu(o, (&:5P)
5$ R ,egundo, (&:5P)
53 R cen(D,ima, de ,egundo, (por lo general8 no ,on
preci,a,)
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', .!'
int .%'
31:

mov 'oras, c'
mov minutos, cl
mov segundos, d'

Funcin 25 de #NT 21* Funcin 25 de #NT 21* Funcin 25 de #NT 21* Funcin 25 de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece la *ora del ,i,(ema
<eci'e <eci'e <eci'e <eci'e 9$ R 25*
0$ R *ora, (&:23)
03 R minu(o, (&:5P)
5$ R ,egundo, (&:5P)
5evuelve 5evuelve 5evuelve 5evuelve !i el cam'io (uvo D1i(o8 93 R &[ en ca,o con(rario8 93 R FF*
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', .D'
mov c', 'oras
mov cl, minutos
mov d', segundos
int .%'
cmp al,"
ne fallo
No(a, No(a, No(a, No(a, 6, pro'a'le .ue no funcione ,i ,e e>ecu(a en ;indo%, NT8
2&&& o HP con un perfil de u,uario re,(ringido

!ervicio, e,(Bndar de 6G! de arc*ivo, de 4! !ervicio, e,(Bndar de 6G! de arc*ivo, de 4! !ervicio, e,(Bndar de 6G! de arc*ivo, de 4! !ervicio, e,(Bndar de 6G! de arc*ivo, de 4!: :: :5! 5! 5! 5!
3a, funcione, #NT 21* proporcionan mB, ,ervicio, de 6G! de arc*ivo, 7 direc(orio, de la, .ue
,e mo,(rarBn en e,(e re,umen/ 3a ,iguien(e (a'la mue,(ra una, cuan(a, de la, funcione, .ue
,e u(ili=an con mB, frecuencia/
Funcione, #NT 21* relacionada, con arc*ivo, 7 direc(orio,/
31"

Funcin Funcin Funcin Funcin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
7160* 0rear o a'rir un arc*ivo
36* 0errar el mane>ador del arc*ivo
42* 4over el apun(ador de un arc*ivo
57&6* '(ener la fec*a 7 *ora de creacin del arc*ivo

Manejadores de archivosBdispositivos 4!:5! 7 4! ;indo%, u(ili=an en(ero, de 16 'i(,
conocido, como manejadores para iden(ificar a lo, arc*ivo, 7 di,po,i(ivo, de 6G!/ $a7 cinco
mane>adore, de di,po,i(ivo, predefinido,/ 0ada uno8 e1cep(o el mane>ador 2 (,alida de error)8
,opor(a la direccin en el ,-m'olo de ,i,(ema/ 3o, ,iguien(e, mane>adore, e,(Bn di,poni'le,
(odo el (iempo2

& Teclado (en(rada e,(Bndar)
1 0on,ola (,alida e,(Bndar)
2 !alida de error
3 5i,po,i(ivo au1iliar (a,-ncrono)
4 #mpre,ora
0ada funcin de 6G! (iene una carac(er-,(ica comAn2 ,i falla ,e ac(iva la 'andera 9carreo8 7 ,e
devuelve un cdigo de error en 9H/ podemo, u,ar e,(e cdigo de error para mo,(rar un
men,a>e apropiado/ 3a ,iguien(e (a'la con(iene una li,(a de lo, cdigo, de error 7 ,u,
de,cripcione,2
4icro,of( proporciona una gran can(idad de documen(acin8 en relacin con la, llamada, a
funcione, de 4!:5!/

0digo, de error e1(endido, de 4!:5!/
Funcin Funcin Funcin Funcin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
&1 NAmero de funcin invBlido
&2 No ,e encon(r el arc*ivo
&3 No ,e encon(r la ru(a
&4 5ema,iado, arc*ivo, a'ier(o, (no *a7 mB, mane>adore,)
&5 9cce,o denegado
31#

&6 4ane>ador invBlido
&7 !e de,(ru7eron lo, 'lo.ue, de con(rol de la memoria
&8 4emoria in,uficien(e
&P 5ireccin de 'lo.ue de memoria invBlida
&9 6n(orno invBlido
&" Forma(o invBlido
&0 0digo de acce,o invBlido
&5 5a(o, invBlido,
&6 <e,ervado
&F !e e,pec-fico una unidad invBlida
1& #n(en(o de eliminar el direc(orio ac(ual
11 No e, el mi,mo di,po,i(ivo
12 No *a7 mB, arc*ivo,
13 6l di,co fle1i'le e,(B pro(egido con(ra e,cri(ura
14 Cnidad de,conocida
15 3a unidad no e,(B li,(a
16 0omando de,conocido
17 6rror de da(o, (0<0)
18 3ongi(ud de e,(ruc(ura de pe(icin incorrec(a
1P 6rror de 'A,.ueda

0rear o a'rir un arc*ivo (7160*) 0rear o a'rir un arc*ivo (7160*) 0rear o a'rir un arc*ivo (7160*) 0rear o a'rir un arc*ivo (7160*)
3a funcin 7160* de #NT 21* puede crear un nuevo arc*ivo o a'rir uno e1i,(en(e/ Permi(e el
u,o de nom're, de arc*ivo, e1(endido, 7 la compar(icin del arc*ivo/ 0omo ,e mue,(ra en la
,iguien(e (a'la8 el nom're de arc*ivo puede incluir de manera opcional una ru(a de direc(orio/
Funcin 7160* de #NT 21* Funcin 7160* de #NT 21* Funcin 7160* de #NT 21* Funcin 7160* de #NT 21*

311

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 0rea un nuevo arc*ivo o a're uno e1i,(en(e
<eci'e <eci'e <eci'e <eci'e 9H R 7160*
"H R modo de acce,o (& R lec(ura8 1 R e,cri(ura8 2 R
lec(uraGe,cri(ura)
0H R a(ri'u(o, (& R normal8 1 R ,olo lec(ura8 2 R ocul(o8 3 R
,i,(ema8 8 R #5 de volumen8 2&* R arc*ivo)
5H R accin (1 R a'rir8 2 R (runcar8 1&* R crear)
5!2!# R ,egmen(oGde,pla=amien(o de nom're del arc*ivo
5# R ,ugerencia de al-a, (opcional)
5evuelve 5evuelve 5evuelve 5evuelve !i la creacinGaper(ura (uvo D1i(o8 0F R &8 9H R mane>ador
del arc*ivo 7 0H R accin reali=ada/ !i la creacin fall8 0F
R 1
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, M%/!' 0 abrirVcrear e1tendido
mov b1, " 0 slo lectura
mov c1, " 0 atributo normal
mov d1,% 0 abre arc'ivo e1istente
mov si, O$$SE3 8ombrearc'ivo
int .%'
c fallo
mov maneador, a1 0 maneador del arc'ivo
mov accion-ealizada, c1 0 accin realizada
No(a, No(a, No(a, No(a, 6l modo de acce,o en "H puede com'inar,e de manera
opcional con uno de lo, ,iguien(e, valore, de modo de
compar(icin2 P6NS!$9<6S04P9T#"368
P6NS!$9<6S56NK<695;<#T68
P6NS!$9<6S56NK;<#T6/ P6NS!$9<6S56NK<6958
P6NS!$9<6S56NKNN6/ 3a accin reali=ada .ue ,e
devuelve en 0H puede ,er uno de lo, ,iguien(e, valore,2
90T#NSP6N658 90T#NS0<69T65SP6N658
90T#NS<6P39065SP6N65/ Toda, e,(a, con,(an(e,
e,(Bn definida, en #rvine16/inc

313

jemplos adicionales 6l ,iguien(e cdigo crea un arc*ivo o (runca uno e1i,(en(e .ue (enga el
mi,mo nom're2
mov a1, M%/!' 0 AbrirV!rear e1tendida
mov b1,. 0 lectura _ escritura
mov c1," 0 atributo normal
mov d1, %"' L ".' 0 accin crear L truncar
mov si, O$$SE3 Arc'ivo8uevo
int .%'
c fallo
mov maneador,a1 0 maneador de arc'ivo
mov accion-ealizada, c1 0 accin realizada para abrir el arc'ivo
0errar mane>ador de arc*ivo (36*) 0errar mane>ador de arc*ivo (36*) 0errar mane>ador de arc*ivo (36*) 0errar mane>ador de arc*ivo (36*)
3a funcin 36* de #NT 21* cierra un mane>ador de arc*ivo/ 6,(a funcin vac-a el 'Afer de
e,cri(ura del arc*ivo8 copiando cual.uier informacin re,(an(e al di,co8 como ,e mue,(ra en la
,iguien(e (a'la2
Funcin 36* de #NT 21* Funcin 36* de #NT 21* Funcin 36* de #NT 21* Funcin 36* de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 0ierra el mane>ador de arc*ivo
<eci'e <eci'e <eci'e <eci'e 9$ R 36
"H R mane>ador del arc*ivo
5evuelve 5evuelve 5evuelve 5evuelve !i el arc*ivo ,e cerr con D1i(o8 0F R &[ en ca,o con(rario8
0F R 1
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
6data
maneadorarc'ivo ,O-D N
6code
mov a',7E'
mov b1, maneadorarc'ivo
315

int .%'
c fallo
No(a, No(a, No(a, No(a, !i el arc*ivo ,e modific8 ,e ac(uali=a ,u e,(ampa de fec*a
7 ,u e,(ampa de *ora

4over apun(ador de 4over apun(ador de 4over apun(ador de 4over apun(ador de arc*ivo (42*) arc*ivo (42*) arc*ivo (42*) arc*ivo (42*)
3a funcin 42* de #NT 21*8 como puede ver,e en la ,iguien(e (a'la8 mueve el apun(ador de
po,icin de un arc*ivo a'ier(o a una nueva u'icacin/ 9l llamar a e,(a funcin8 el cdigo de
mGtodo en 938 iden(ifica la forma en .ue ,e va a e,(a'lecer el apun(ador2
& 5e,pla=amien(o a par(ir del principio del arc*ivo
1 5e,pla=amien(o a par(ir de la u'icacin ac(ual
2 5e,pla=amien(o a par(ir del final del arc*ivo
Funcin 42* de #NT 21* Funcin 42* de #NT 21* Funcin 42* de #NT 21* Funcin 42* de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 4ueve el apun(ador del arc*ivo
<eci'e <eci'e <eci'e <eci'e 9$ R 42*
93 R cdigo del mD(odo
"H R mane>ador del arc*ivo
0H25H R valor de de,pla=amien(o de 32 'i(,
5evuelve 5evuelve 5evuelve 5evuelve !i el apun(ador del arc*ivo ,e movi con D1i(o8 0F R & 7
5H29H regre,a el nuevo de,pla=amien(o del apun(ador del
arc*ivo8 en ca,o con(rario8 0F R 1/
3lamada 3lamada 3lamada 3lamada de e>emplo de e>emplo de e>emplo de e>emplo
mov a',;.'
mov al," 0 m^todo* desplazamiento desde
el principio
mov b1, maneador
mov c1, desplazamientoSup
mov d1, desplazamientoInf
316

int .%'
No(a, No(a, No(a, No(a, 6l de,pla=amien(o devuel(o del apun(ador del arc*ivo en
5H29H ,iempre e, rela(ivo al principio del arc*ivo

'(ener la fec*a 7 *ora de la creacin de un arc*ivo '(ener la fec*a 7 *ora de la creacin de un arc*ivo '(ener la fec*a 7 *ora de la creacin de un arc*ivo '(ener la fec*a 7 *ora de la creacin de un arc*ivo
3a funcin 57&6* de #NT 21*8 .ue ,e mue,(ra en la ,iguien(e (a'la8 o'(iene la fec*a 7 *ora de
cuando ,e cre un arc*ivo/ No e, nece,ariamen(e la mi,ma fec*a 7 *ora de la Al(ima
modificacin del arc*ivo8 o inclu,o de ,u Al(imo acce,o/
Funcin 57&6 de #NT 21* Funcin 57&6 de #NT 21* Funcin 57&6 de #NT 21* Funcin 57&6 de #NT 21*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la fec*a 7 *ora de creacin de un arc*ivo
<eci'e <eci'e <eci'e <eci'e 9H R 57&6*
"H R mane>ador del arc*ivo
5evuelve 5evuelve 5evuelve 5evuelve !i la llamada a la funcin fue e1i(o,a8 0F R &8 5H R fec*a
(en forma(o empa.ue(ado de 5!)8 0H R *ora 7 !# R
mili,egundo,/ !i la funcin falla8 0F R 1
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, <M"/' 0 Obtiene fec'aV'ora de
creacin
mov b1, maneador
int .%'
c error 0 termina si falla
mov fec'a, d1
mov 'ora, c1
mov milisegundos, si
No(a, No(a, No(a, No(a, 6l arc*ivo de'e e,(ar a'ier(o/ 6l valor milisegundos indica
el nAmero de 1& mili,egundo, .ue ,e van a agregar a la
*ora de 4!:5!/ 6l rango e, de & a 1PP8 indicando .ue el
campo puede agregar *a,(a 2 ,egundo, al (iempo (o(al

Procedimien(o, de 'i'lio(eca ,elec(o, Procedimien(o, de 'i'lio(eca ,elec(o, Procedimien(o, de 'i'lio(eca ,elec(o, Procedimien(o, de 'i'lio(eca ,elec(o,
317

9 con(inuacin ,e mue,(ra do, procedimien(o, de la 'i'lio(eca de v-nculo, #rvine162
<ead!(ring <ead!(ring <ead!(ring <ead!(ring 7 ;ri(e!(ring ;ri(e!(ring ;ri(e!(ring ;ri(e!(ring/ <ead!(ring <ead!(ring <ead!(ring <ead!(ring e, el mB, enga@o,o de lo, do,8 7a .ue de'e leer un
carBc(er a la ve= *a,(a encon(rar el carBc(er de fin de l-nea (&5*)/ 3ee el carBc(er pero no lo
copia al 'Afer/

<ead!(ring <ead!(ring <ead!(ring <ead!(ring
6l procedimien(o <ead!(ring <ead!(ring <ead!(ring <ead!(ring lee una cadena de la en(rada e,(Bndar 7 coloca lo, carac(ere, en
un 'Afer de en(rada8 como una cadena con (erminacin nula/ Termina cuando el u,uario
oprime #n(ro2
0KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
-eadString P-O!
0 -ecibe* DS*D: apunta al b?fer de entrada,
0 !: ( mI1imo de caracteres de entrada
0 Devuelve* A: ( tamaJo de la cadena de entrada6
0 !omentarios* Se detiene cuando se oprime Intro ("D')6
0 o cuando se leen (!:K%) caracteres6
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
pus' c1 0 guarda los registros
pus' si
pus' c1 0 guarda la cuenta de dAgitos otra vez
mov si, d1 0 apunta al b?fer de entrada
dec c1 0 guarda espacio para el b5te nulo
4%* mov a', % 0 funcin* entrada del teclado
int .%' 0 DOS devuelve el carIcter en A4
cmp al,"D\ 0 cfin de lAneaN
e 4. 0 si* termina
mov BsiC,al 0 no* guarda el carIcter
inc si 0 incrementa el apuntador al bufer
318

loop 4% 0 itera 'asta @ue !: ( "
4.* mov b5te ptr BsiC, " 0 termina con un b5te nulo
pop a1 0 cuenta de dAgitos original
sub a1, c1 0 A: ( tamaJo de la cadena de entrada
dec a1
pop si
pop c1
ret
-eadString E8DP
;ri(e!(ring ;ri(e!(ring ;ri(e!(ring ;ri(e!(ring
6l procedimien(o ;ri(e!(ring ;ri(e!(ring ;ri(e!(ring ;ri(e!(ring e,cri'e una cadena con (erminacin nula en la ,alida e,(Bndar/
3lama a un procedimien(o a7udan(e llamado !(rSleng(* !(rSleng(* !(rSleng(* !(rSleng(*8 el cual devuelve el nAmero de '7(e,
en una cadena2
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
,riteString P-O!
0 Escribe una cadena con terminacin nula en la salida estIndar
0 -ecibe* DS*D: apunta a la cadena
0 Devuelve* nada
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
pus'a
pus' ds 0 ES ( DS
pop es
mov di, d1 0 ES*DI ( apuntador a la cadena
call StrTlengt' 0 A: ( longitud de la cadena
mov c1, a1 0 !: ( n?mero de b5tes
mov a', ;"' 0 escribe al arc'ivo o dispositivo
mov b1,% 0 maneador de salida estIndar
319

int .%' 0 llamada a 2SKDOS
popa
ret
,riteString E8DP
3eer la cola de comando, de 4! 3eer la cola de comando, de 4! 3eer la cola de comando, de 4! 3eer la cola de comando, de 4!: :: :5! 5! 5! 5!
6n lo, programa, .ue mo,(ramo, a con(inuacin8 pa,amo, con frecuencia informacin a lo,
programa, en la l-nea de comando,/ !upongamo, .ue (enemo, .ue pa,ar el nom're
archivo/7doc a un programa llamado attrib7exe/ 3a l-nea de comando, de 4!:5! ,er-a2
attrib arc'ivo%6doc
0uando ,e inicia un programa8 cual.uier (e1(o adicional en ,u l-nea de comando ,e almacena
de manera au(omB(ica en la "ola de comandos de M!6D#! de 128 '7(e,8 la cual ,e u'ica en
la memoria8 en de,pla=amien(o 8&* a par(ir del principio de la direccin de ,egmen(o
e,pecificada por el regi,(ro 6!/ 9l Brea de memoria ,e le conoce como prefijo de segmento de
programa (P!P)/
6l primer '7(e con(iene la longi(ud de la l-nea de comando,/ !i ,u valor e, ma7or .ue cero8 el
,egundo '7(e con(iene un carBc(er de e,pacio/ 6l re,(o de lo, '7(e, con(ienen el (e1(o e,cri(o
en la l-nea de comando,/ !i u(ili=amo, la l-nea de comando, de e>emplo para el programa
attrib7exe8 el con(enido *e1adecimal de la cola de comando, ,er-a el ,iguien(e2
8& 81 82 83 84 85 86 87 88 8P 89 8"
&9 2& 46 4P 40 45 31 26 44 4F 43 &5
F # 3 6 1 / 5 0

Podemo, ver lo, '7(e, de la cola de comando, median(e el depurador 0ode+ie% de 4icro,of(8
,i cargamo, el programa 7 e,(a'lecemo, lo, argumen(o, de la l-nea de comando, an(e, de
e>ecu(ar el programa/
$a7 una e1cepcin a la regla .ue e,(a'lece .ue 4!:5! almacena (odo, lo, carac(ere,
de,puD, del nom're del comando o del programa2 no man(iene en u,o lo, nom're, de arc*ivo
7 di,po,i(ivo al redirigir la en(rada:,alida/ Por e>emplo8 4!:5! no guarda el (e1(o en la cola de
comando, cuando ,e e,cri'e el ,iguien(e comando8 7a .ue (an(o archent7txt como P<N ,e
u(ili=an para la redireccin2
prog% W arc'ent6t1t X prn
Procedimiento )et"ommand-ail 6l procedimien(o Ye(0ommandTail Ye(0ommandTail Ye(0ommandTail Ye(0ommandTail de la 'i'lio(eca
#rvine16 devuelve una copia de la cola de comando, del programa en e>ecucin 'a>o 4!:5!/
33:

9l llamar a e,(e procedimien(o *a7 .ue agregar a 5H el de,pla=amien(o de 'Afer en el .ue ,e
va a copiar la cola de comando,/ 9 menudo8 lo, argumen(o, en modo de direccionamien(o real
(ra(an direc(amen(e con lo, regi,(ro, de ,egmen(o8 para poder acceder a lo, da(o, en di,(in(o,
,egmen(o, de memoria/ Por e>emplo/ Ye(0ommandTail guarda el valor ac(ual de 6! en la pila8
o'(iene el ,egmen(o P!P u,ando la funcin 62* de #NT 21* 7 lo copia a 6!2
pus' es
6
6
mov a', /.' 0 obtiene direccin de segmento PSP
int .% 0 se devuelve en E:
mov es, b1 0 se copia a ES
9 con(inuacin8 locali=a un '7(e den(ro de P!P/ 0omo 6! no apun(a al ,egmen(o de da(o,
prede(erminado del programa8 de'emo, u,ar una redefinicin de segmento (e,2) para
direccionar lo, da(o, den(ro del prefi>o de ,egmen(o del programa2
mov cl, es*Bdi_%C 0 obtiene b5te de longitud
Ye(0ommandTail omi(e lo, e,pacio, a la i=.uierda con !909!" 7 e,(a'lece la 'andera 9carreo
,i la cola de comando, e,(B vac-a/ 6,(o facili(a .ue el programa .ue *ace la llamada e>ecu(e
una in,(ruccin F0 (salta si hay acarreo) ,i no ,e e,cri'e nada en la l-nea de comando,2
cld 0 e1plora en direccin 'acia adelante
mov al,."' 0 carIcter de espacio
repz scasb 0 e1plora caracteres @ue no sean espacios
z 4. 0 se encontraron solo espacios
6
6
6
4.* stc 0 !$ ( % significa @ue no 'a5 cola de
comandos
!09!" e1plora de manera au(omB(ica la memoria a la .ue apun(an lo, regi,(ro, de ,egmen(o
6!8 por lo .ue no (uvimo, mB, opcin .ue a,ignar a 6! el ,egmen(o P!P al principio de
Ye(0ommandTail/ $e a.u- un li,(ado comple(o2
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
33"

Set!ommand3ail P-O!
0
0 Obtiene una copia de la cola de comandos de 2SKDOS en PSP*#"'6
0 -ecibe* D: contiene el desplazamiento del b?fer
0 @ue recibe una copia de la cola de comandos6
0 Devuelve* !$ ( % si el b?fer estI vacAo0 en cual@uier
0 otro caso, !$ ( "6
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
SPA!E ( ."'
pus' es
pus'a 0 guarda los registros generales
mov a',/.' 0 obtiene la direccin de segmento PSP
int .%' 0 se devuelve en E:
mov es, b1 0 se copia a ES
mov si, d1 0 apunta al b?fer
mov di,#%' 0 desplazamiento en PSP de la cola de
comandos
mov c1," 0 cuenta de b5tes
mov cl, es*BdiK%C 0 obtiene b5te de longitud
cmp c1," 0 cestI vacAa la colaN
e 4. 0 si* termina
cld 0 e1plora en direccin 'acia adelante
mov al, SPA!E 0 carIcter de espacio
repz scasb 0 e1plora caracteres @ue no sean espacios
z 4. 0 se encontr un carIcter de espacio
dec di 0 no se encontr un carIcter de espacio
inc c1
33#

5e manera prede(erminada8 el en,am'lador a,ume .ue 5# e, un de,pla=amien(o a par(ir de
la direccin de ,egmen(o en 5!/ 3a redefinicin del ,egmen(o (e,2^di_) indica a la 0PC .ue
de'e u(ili=a me>or la direccin de ,egmen(o 6!/
4%* mov al, es*BdiC 0 copia la cola al b?fer
mov BsiC, al 0 al @ue apunta DS*SI
inc si
inc di
loop 4%
clc 0 !$ ( significa @ue se encontr la cola
mp 47
4.* stc 0 activa acarreo* no 'a5 cola de comandos
47* mov b5te ptr BsiC," 0 almacena b5te nulo
popa 0 restaura los registros
pop es
ret
Set!ommand3ail E8DP
14 14 14 14 Fundamen(o, de lo, Fundamen(o, de lo, Fundamen(o, de lo, Fundamen(o, de lo, di,co, di,co, di,co, di,co,
!i,(ema de almacenamien(o en di,co !i,(ema de almacenamien(o en di,co !i,(ema de almacenamien(o en di,co !i,(ema de almacenamien(o en di,co
6n e,(e cap-(ulo pre,en(aremo, lo, fundamen(o, de lo, ,i,(ema, de almacenamien(o en
di,co/ Tam'iDn (ra(aremo, cmo ,e relaciona el almacenamien(o en di,co con el
almacenamien(o en di,co a nivel de "#! en la, compu(adora, 'a,ada, en #n(el/ Por Al(imo8
mo,(raremo, cmo in(erac(Aa 4! ;indo%, con lo, programa, de aplicacin para proporcionar
el acce,o a lo, arc*ivo, 7 direc(orio,/ 3a in(eraccin en(re lo, nivele, vir(uale, de una
compu(adora ,e vuelve aparen(e ,i ,e con,idera el almacenamien(o en di,co2
331


6n nivel 'a>o ,e encuen(ra el firm&are del controlador de disco8 el cual u(ili=a c*ip,
con(roladore, in(eligen(e, para crear un mapa de la geome(r-a del di,co (u'icacione,
f-,ica,)8 para la, marca, 7 modelo, e,pec-fico, de unidade, de di,co/
6n el ,iguien(e nivel ,e encuen(ra el "#! del ,i,(ema8 el cual proporciona una
coleccin de 'a>o nivel de funcione, .ue u(ili=an lo, ,i,(ema, opera(ivo, para reali=ar
(area, como lec(ura de ,ec(ore,8 e,cri(ura en ,ec(ore, 7 forma(o de pi,(a,/
6n el ,iguien(e nivel mB, al(o ,e encuen(ra la 9P# del sistema operativo8 la cual
proporciona una coleccin de funcione, de la 9P# .ue ofrece ,ervicio, como a'rir 7
cerrar arc*ivo,8 e,(a'lecer la, propiedade, de lo, arc*ivo,8 leer arc*ivo, 7 e,cri'ir en
ello,/
Todo, lo, ,i,(ema, de almacenamien(o en di,co (ienen cier(a, carac(er-,(ica, comune,2
mane>an el par(icionamien(o f-,ico de lo, da(o, 7 el acce,o a lo, mi,mo, a nivel de arc*ivo8 7
a,ignan lo, nom're, de lo, arc*ivo,8 al almacenamien(o f-,ico/ 6n el nivel de *ard%are8 el
almacenamien(o de di,co ,e de,cri'e en (Drmino, de pla(o8 lado,8 pi,(a,8 cilindro, 7 ,ec(ore,/
6n nivel de "#! del ,i,(ema8 el almacenamien(o de di,co, ,e de,cri'e en (Drmino, de
clA,(ere, 7 ,ec(ore,/ 6n el nivel del !8 el almacenamien(o en di,co ,e de,cri'e en (Drmino,
de direc(orio, 7 arc*ivo,/
Programas en lenguaje ensamblador 3o, programa, a nivel de u,uario en lengua>e
en,am'lador pueden acceder de manera direc(a al "#! del ,i,(ema en 4!:5!8 ;indo%, P58
P8 7 4ilenium/ Por e>emplo8 (al ve= (engamo, .ue almacenar 7 o'(ener lo, da(o, almacenado,
en un forma(o no convencional8 recuperar da(o, perdido, o reali=ar diagn,(ico, en el
*ard%are del di,co/ 6n e,(e cap-(ulo mo,(raremo, e>emplo, de funcione, del "#! del ,i,(ema
para arc*ivo, 7 ,ec(ore,/ 0omo ilu,(racin de un acce,o ordinario a lo, da(o,8 a nivel del
,i,(ema opera(ivo8 al final del cap-(ulo ,e pre,en(a una variedad de funcione, de 4!:5! para
manipulacin de unidade, 7 direc(orio,/
!i u(ili=amo, ;indo%, NT8 2&&& o HP8 lo, programa, a nivel de u,uario ,lo pueden acceder
al ,i,(ema de di,co, u,ando la 9P# ;in32/ 6,a regla pro(ege la ,eguridad del ,i,(ema8 7 ,lo
lo, programa, con(roladore, de di,po,i(ivo, .ue ,e e>ecu(an en el nivel de privilegio, mB, al(o
pueden pa,arla por al(o/


Pi,(a8 cilindro, 7 ,ec(ore, Pi,(a8 cilindro, 7 ,ec(ore, Pi,(a8 cilindro, 7 ,ec(ore, Pi,(a8 cilindro, 7 ,ec(ore,
Cna unidad de di,co ordinaria8 como la .ue ,e mue,(ra a con(inuacin8 e,(B compue,(a por
vario, pla(o, unido, a un e>e8 el cual gira a una velocidad con,(an(e/ 6ncima de la ,uperficie de
cada pla(o *a7 una ca'e=a de lec(uraGe,cri(ura8 .ue gra'a pul,o, magnD(ico,/ 3a, ca'e=a, de
lec(uraGe,cri(ura avan=an *acia el cen(ro 7 *acia el 'orde como un grupo8 en pa,o, pe.ue@o,/
6lemen(o, f-,ico, de un di,co duro/
9 la ,uperficie de un di,co ,e le da un form
llamada,8 pistas8 en la, .ue lo, da(o, ,e almacenan de manera magnD(ica/ Cna mi(ad de di,co
duro (-pica de 385W puede con(ener mile, de pi,(a,/ 9l proce,o de de,pla=ar la, ca'e=a, de
lec(uraGe,cri(ura de una pi,(a a o(ra ,e le conoce como
'A,.ueda e, un (ipo de medida de la velocidad de lo, di,co,/ (ra medida e, <P4 (revolucin
por minu(o) .ue8 por lo general8 e, de 782&&/ 3a pi,(a e1(erior de un di,co e, la pi,(a &8 7 lo,
nAmero, de pi,(a ,e incremen(an a medida .ue avan=an *acia el cen(ro/
Cn cilindro ,e refiere a (oda, la, pi,(a, a la, .ue ,e puede acceder de,de una ,ola po,icin de
la, ca'e=a, de lec(uraGe,cri(ura/ 9l principio8 un arc*ivo ,e guarda en el di,co u,ando
ad7acen(e,/ 6,(o reduce la can(idad de movimien(o de la, ca'e=a, de lec(uraGe,cri(ura/
Cn sector e, una po,icin de 512 '7(e, de una pi,(a8 como ,e mo,(r en la imagen an(erior/ 6l
fa'rican(e marca lo, ,ec(ore, f-,ico, en forma magnD(ica (invi,i'
,e conoce como formato de bajo nivel
Cna unidad de di,co ordinaria8 como la .ue ,e mue,(ra a con(inuacin8 e,(B compue,(a por
vario, pla(o, unido, a un e>e8 el cual gira a una velocidad con,(an(e/ 6ncima de la ,uperficie de
*a7 una ca'e=a de lec(uraGe,cri(ura8 .ue gra'a pul,o, magnD(ico,/ 3a, ca'e=a, de
lec(uraGe,cri(ura avan=an *acia el cen(ro 7 *acia el 'orde como un grupo8 en pa,o, pe.ue@o,/
6lemen(o, f-,ico, de un di,co duro/

9 la ,uperficie de un di,co ,e le da un forma(o en forma de 'anda concDn(rica, invi,i'le,
8 en la, .ue lo, da(o, ,e almacenan de manera magnD(ica/ Cna mi(ad de di,co
duro (-pica de 385W puede con(ener mile, de pi,(a,/ 9l proce,o de de,pla=ar la, ca'e=a, de
,(a a o(ra ,e le conoce como b@s+ueda/ 6l tiempo promedio
'A,.ueda e, un (ipo de medida de la velocidad de lo, di,co,/ (ra medida e, <P4 (revolucin
por minu(o) .ue8 por lo general8 e, de 782&&/ 3a pi,(a e1(erior de un di,co e, la pi,(a &8 7 lo,
, de pi,(a ,e incremen(an a medida .ue avan=an *acia el cen(ro/
,e refiere a (oda, la, pi,(a, a la, .ue ,e puede acceder de,de una ,ola po,icin de
la, ca'e=a, de lec(uraGe,cri(ura/ 9l principio8 un arc*ivo ,e guarda en el di,co u,ando
ad7acen(e,/ 6,(o reduce la can(idad de movimien(o de la, ca'e=a, de lec(uraGe,cri(ura/
e, una po,icin de 512 '7(e, de una pi,(a8 como ,e mo,(r en la imagen an(erior/ 6l
fa'rican(e marca lo, ,ec(ore, f-,ico, en forma magnD(ica (invi,i'le) en el di,co8 u,ando lo .ue
formato de bajo nivel/ 3o, (ama@o, de lo, ,ec(ore, nunca cam'ian8 ,in
333
Cna unidad de di,co ordinaria8 como la .ue ,e mue,(ra a con(inuacin8 e,(B compue,(a por
vario, pla(o, unido, a un e>e8 el cual gira a una velocidad con,(an(e/ 6ncima de la ,uperficie de
*a7 una ca'e=a de lec(uraGe,cri(ura8 .ue gra'a pul,o, magnD(ico,/ 3a, ca'e=a, de
lec(uraGe,cri(ura avan=an *acia el cen(ro 7 *acia el 'orde como un grupo8 en pa,o, pe.ue@o,/
a(o en forma de 'anda concDn(rica, invi,i'le,
8 en la, .ue lo, da(o, ,e almacenan de manera magnD(ica/ Cna mi(ad de di,co
duro (-pica de 385W puede con(ener mile, de pi,(a,/ 9l proce,o de de,pla=ar la, ca'e=a, de
tiempo promedio de
'A,.ueda e, un (ipo de medida de la velocidad de lo, di,co,/ (ra medida e, <P4 (revolucin
por minu(o) .ue8 por lo general8 e, de 782&&/ 3a pi,(a e1(erior de un di,co e, la pi,(a &8 7 lo,
,e refiere a (oda, la, pi,(a, a la, .ue ,e puede acceder de,de una ,ola po,icin de
la, ca'e=a, de lec(uraGe,cri(ura/ 9l principio8 un arc*ivo ,e guarda en el di,co u,ando cilindro,
ad7acen(e,/ 6,(o reduce la can(idad de movimien(o de la, ca'e=a, de lec(uraGe,cri(ura/
e, una po,icin de 512 '7(e, de una pi,(a8 como ,e mo,(r en la imagen an(erior/ 6l
le) en el di,co8 u,ando lo .ue
/ 3o, (ama@o, de lo, ,ec(ore, nunca cam'ian8 ,in
335

impor(ar el ,i,(ema opera(ivo in,(alado/ Cn di,co duro puede (ener 63 o mB, ,ec(ore, por
pi,(a/
3a geometra fsica del disco e, una manera de de,cri'ir ,u e,(ruc(ura8 para .ue el "#! del
,i,(ema pueda leerla/ 0on,i,(e en el nAmero de cilindro, por di,co8 el nAmero de ca'e=a, de
lec(uraGe,cri(ura por cilindro8 7 el nAmero de ,ec(ore, por pi,(a/ 61i,(en la, ,iguien(e,
relacione,2
6l nAmero de cilindro, por di,co e, igual al nAmero de pi,(a, por ,uperficie,/
6l nAmero (o(al de pi,(a, e, igual al nAmero de cilindro,8 mul(iplicado por el nAmero de
ca'e=a, por cilindro/
8ragmentacin 0on el (iempo8 a medida .ue lo, arc*ivo, ,e e,parcen mB, a lo largo de un
di,co8 ,e fragmen(an/ Cn archivo fragmentado e, uno cu7o ,u, ,ec(ore, 7a no ,e encuen(ran
en Brea, con(igua, del di,co/ 0uando e,(o ocurre8 la, ca'e=a, de lec(uraGe,cri(ura (ienen .ue
,al(ar en(re la, pi,(a, para leer lo, da(o, del arc*ivo/ 6,(o reduce la velocidad de lec(ura 7
e,cri(ura de lo, arc*ivo,/
-raduccin a n@meros de sectores lgicos 3o, con(roladore, de di,co duro llevan a ca'o
un proce,o llamado traduccin8 la conver,in de la geome(r-a f-,ica del di,co a una e,(ruc(ura
lgica .ue puede comprender el ,i,(ema opera(ivo/ Por lo general8 el con(rolador e,(B
incru,(ado en el firm%are 7a ,ea en la mi,ma unidad o en una (ar>e(a con(roladora ,eparada/
5e,puD, de la (raduccin8 el ,i,(ema opera(ivo puede (ra'a>ar con lo .ue ,e conoce como
n@mero de sectores lgicos/ 6,(o, nAmero, de ,ec(ore, lgico, ,iempre ,e encuen(ran en
forma ,ecuencial8 empe=ando con cero/
Par(icione, de di,co (volAmene,) Par(icione, de di,co (volAmene,) Par(icione, de di,co (volAmene,) Par(icione, de di,co (volAmene,)
6n 4! ;indo%,8 una ,ola unidad f-,ica de di,co duro puede dividir,e en una o mB, unidade,
lgica, llamada, particiones o vol@menes/ 0ada par(icin con forma(o ,e repre,en(a median(e
una le(ra de unidad ,eparada8 como 08 5 o 68 7 ,e le puede dar forma(o u,ando uno o vario,
,i,(ema, de arc*ivo,/ Cna unidad puede con(ener do, (ipo, de par(icione,2 primaria, 7
e1(endida,/
Por lo general8 una par(icin primaria (iene capacidad de inicio 7 con(iene un ,i,(ema
opera(ivo/ Cna particin extendida puede dividir,e en un nAmero ilimi(ado de particiones
lgicas/ 0ada par(icin lgica ,e le a,igna una le(ra de unidad (08 5 8 6 e(cD(era)/ 3a,
par(icione, lgica, pueden (ener capacidad de inicio/ 6, po,i'le dar forma(o a cada par(icin
lgica o del ,i,(ema con un ,i,(ema de arc*ivo, di,(in(o/
Por e>emplo ,upongamo, .ue una unidad de di,co duro de 2&YN ,e le a,igno una par(icin
primaria de 1&Y" (unidad 0)8 7 .ue le in,(alamo, el ,i,(ema opera(ivo/ !u par(icin e1(endida
,er-a de 1&Y"/ 5e manera ar'i(raria podr-amo, dividir e,a mi,ma par(icin en do, par(icione,
lgica, de 2Y" 7 8Y"8 para de,puD, darle, forma(o, con vario, ,i,(ema, de arc*ivo como
F9T168 F9T32 o NTF!/ !i ,uponemo, .ue no *a'-a ninguna o(ra unidad de di,co in,(alada8 a
la, do, par(icione, lgica, ,e le, a,ignar-an la, le(ra, de unidad 5 7 6/
336

!istemas multi inicio 6, 'a,(an(e comAn crear varia, par(icione, primaria,8 cada una de la,
cuale, e, capa= de arrancar (cargar) un ,i,(ema opera(ivo di,(in(o/ 6,(o *ace po,i'le evaluar
,of(%are en di,(in(o, en(orno, 7 aprovec*ar la, ven(a>a, de ,eguridad en lo, ,i,(ema, mB,
avan=ado,/ 4uc*o, de,arrolladore, de ,of(%are u(ili=an una par(icin primaria para crear un
en(orno de prue'a para el ,of(%are en de,arrollo/ 3uego (ienen o(ra par(icin primaria .ue
almacena el ,of(%are de produccin 7a pro'ado 7 li,(o para .ue lo, clien(e, lo u(ilicen/
Por o(ro lado8 la, par(icione, lgica, e,(Bn di,e@ada, principalmen(e para lo, da(o,/ 6, po,i'le
.ue di,(in(o, ,i,(ema, opera(ivo, compar(an da(o, almacenado, en la mi,ma par(icin lgica/
Por e>emplo8 (oda, la, ver,ione, mB, recien(e, de 4! ;indo%, 7 3inu1 pueden leer di,co,
F9T32/ Cna compu(adora puede arrancar de,de cual.uiera de e,(o, ,i,(ema, opera(ivo, 7 leer
lo, mi,mo, arc*ivo, de da(o,8 en una par(icin lgica compar(ida/
.egistro de inicio maestro 6l regi,(ro de inicio mae,(ro (4"<)8 .ue ,e crea al momen(o de
crear la primera par(icin en un di,co duro8 ,e encuen(ra en el primer ,ec(or lgico de la
unidad/ 6l 4"< con(iene lo ,iguien(e2
3a tabla de particiones del disco8 .ue de,cri'e lo, (ama@o, 7 u'icacione, de (oda, la,
par(icione, en el di,co/
Cn pe.ue@o programa .ue locali=a el ,ec(or de inicio de la par(icin 7 (ran,fiere el
con(rol a un programa en el ,ec(or .ue carga el ,i,(ema opera(ivo/
!i,(ema, de arc*ivo, !i,(ema, de arc*ivo, !i,(ema, de arc*ivo, !i,(ema, de arc*ivo,
Todo, lo, ,i,(ema, opera(ivo, (ienen cier(o (ipo de ,i,(ema, de admini,(racin de di,co,/ 6n el
nivel mB, 'a>o admini,(ra la, par(icione,/ 6n el ,iguien(e nivel8 admini,(ra lo, arc*ivo, 7
direc(orio,/ Cn ,i,(ema de arc*ivo, de'e man(ener un regi,(ro de la u'icacin8 lo, (ama@o, 7
a(ri'u(o, de cada arc*ivo del di,co/ +amo, a anali=ar el ,i,(ema de arc*ivo, (ipo F9T .ue ,e
cre en un principio para la #"4 P08 7 .ue aun ,e u(ili=a en 4! ;indo%,/ Cn ,i,(ema de
arc*ivo, (ipo F9T u(ili=a la ,iguien(e e,(ruc(ura2
Cna a,ignacin de ,ec(ore, lgico, a cl@steres8 la unidad 'B,ica de almacenamien(o
para (odo, lo, arc*ivo, 7 direc(orio,/
Cna a,ignacin de lo, nom're, de arc*ivo, 7 direc(orio, a ,ecuencia, de clA,(ere,/
Cn cl@ster e, la unidad mB, pe.ue@a de e,pacio .ue u(ili=a un arc*ivo[ con,i,(e en uno o mB,
,ec(ore, de di,co ad7acen(e,/ Cn ,i,(ema de arc*ivo, almacena cada arc*ivo como una
,ecuencia enla=ada de clA,(ere,/ 6l (ama@o de un clA,(er depende (an(o del (ipo del ,i,(ema
de arc*ivo, en u,o8 como el (ama@o de ,u par(icin de di,co/ 3a ,iguien(e figura mue,(ra un
arc*ivo compue,(o de do, clA,(ere, de 2&48 '7(e,8 cada uno de lo, cuale, con(iene cua(ro
,ec(ore, de 512 '7(e,/ Para *acer referencia a una cadena de clA,(ere, ,e u(ili=a una tabla de
asignacin de archivos (F9T) .ue lleva el regi,(ro de (odo, lo, clA,(ere, .ue u(ili=a un arc*ivo/
6n la en(rada de direc(orio de cada arc*ivo ,e almacena un apun(ador a la en(rada del primer
clA,(er en la F9T/
6>emplo de cadena, de clA,(ere,/
337


spacio desperdiciado #nclu,ive *a,(a un arc*ivo pe.ue@o re.uiere por lo meno, un clA,(er
de almacenamien(o en el di,co8 lo cual puede provocar un de,perdicio de e,pacio/ 3a
,iguien(e figura mue,(ra un arc*ivo de 8/2&& '7(e,8 el cual llena por comple(o do, clA,(ere, de
4&P6 '7(e, 7 u(ili=a ,lo 8 '7(e, de un (ercer clA,(er/

6,(o de>a 4&88 '7(e, de e,pacio en di,co de,perdiciado, en el (ercer clA,(er/ Cn (ama@o de
clA,(er de 4&P6 (4?") ,e con,idera una forma eficien(e de almacenar arc*ivo, pe.ue@o,/
#maginemo, lo .ue re,ul(ar-a ,i nue,(ro arc*ivo de 82&& '7(e, ,e almacenara en un volumen
.ue (uviera clA,(ere, de 32 ?"/ 6n e,e ca,o8 ,e de,perdiciar-an 24568 '7(e,/ 6n lo,
volAmene, .ue (ienen una gran can(idad de arc*ivo, pe.ue@o,8 e, me>or u,ar (ama@o,
pe.ue@o, para lo, clA,(ere,/
jemplo en =indo&s 3OOOB9P en la ,iguien(e (a'la ,e mue,(ran lo, (ama@o, de clA,(ere,
e,(Bndar 7 lo, (ipo, de ,i,(ema, de arc*ivo,8 para unidade, de di,co .ue ,e u(ili=an en
;indo%, 2&&& 7 ;indo%, HP/ 6,(o, valore, cam'ian a menudo con lo, nuevo, ,i,(ema,
opera(ivo,8 por lo .ue la informacin .ue ,e mue,(ra en la (a'la ,e vuelve o',ole(a
rBpidamen(e/
Tama@o del volumen Tama@o del volumen Tama@o del volumen Tama@o del volumen 0lA,(er de F9T16 0lA,(er de F9T16 0lA,(er de F9T16 0lA,(er de F9T16 0lA,(er de F9T32 0lA,(er de F9T32 0lA,(er de F9T32 0lA,(er de F9T32 0lA,(er de NTF! 0lA,(er de NTF! 0lA,(er de NTF! 0lA,(er de NTF!
1/25Y":2Y" 32?" 4?" 2?"
2Y":4Y" 64?" 4?" 4?"
4Y":8Y" ns Dno se soportaE 4?" 4?"
8Y":16Y" ns 8?" 4?"
16Y":32Y" ns 15?" 4?"
32Y":2T" ns ns 4?"

F9T12 F9T12 F9T12 F9T12
338

6l ,i,(ema de arc*ivo, F9T12 ,e u(ili= por primera ve= en lo, di,.ue(e, de la #"4:P0/ 9An ,e
,opor(a en (oda, la, ver,ione, de 4! ;indo%, 7 3inu1/ 6l (ama@o del clA,(er e, de ,lo 512
'7(e,8 por lo .ue e, ideal para guardar arc*ivo, pe.ue@o,/ 0ada en(rada en ,u (a'la de
a,ignacin de arc*ivo, e, de 12 'i(,/ Cn volumen F9T12 almacena meno, de 4&87 clA,(ere,/
F9T16 F9T16 F9T16 F9T16
6l ,i,(ema de arc*ivo, F9T16 e, el Anico forma(o di,poni'le para lo, di,co, duro, a lo, .ue ,e
da forma(o en 4!:5!/ !e ,opor(a en (oda, la, ver,ione, de 4! ;indo%, 7 3inu1/ $a7 alguna,
de,ven(a>a, en el F9T162
6l almacenamien(o e, ineficien(e en lo, volAmene, de mB, de 1 Y"8 7a .ue F9T16
u(ili=a (ama@o, de clA,(ere, grande,/
0ada en(rada en la (a'la de a,ignacin de arc*ivo, e, de 16 'i(,8 lo cual limi(a el
nAmero (o(al de clA,(ere,/
6l volumen puede con(ener en(re 4&87 ( 658526 clA,(ere,/
6l ,ec(or de inicio no e,(B re,paldado8 por lo .ue un error de lec(ura en un ,olo ,ec(or
puede ,er ca(a,(rfico/
No *a7 ,eguridad in(egrada en el ,i,(ema8 ni permi,o, individuale, para lo, u,uario,/
F9T32 F9T32 F9T32 F9T32
6l ,i,(ema de arc*ivo, F9T32 ,e in(rodu>o con la ver,in 642 de ;indo%, P58 7a .ue ,e
perfeccion en ;indo%, P8/ Tiene varia, me>ora,8 en comparacin con F9T162
Cn arc*ivo individual puede ,er de *a,(a 4Y" meno, 2 '7(e,/
0ada en(rada en la (a'la de a,ignacin de arc*ivo, e, de 32 'i(,/
Cn volumen puede con(ener en(re 658526 7 26884358456 clA,(ere,/
3a carpe(a ra-= puede u'icar,e en cual.uier par(e del di,co8 7 puede (ener ca,i
cual.uier (ama@o/
3o, volAmene, pueden con(ener *a,(a 32Y"/
C(ili=a un (ama@o de clA,(ere, mB, pe.ue@o, .ue F9T16 en lo, volAmene, .ue
con(ienen de 1Y" a 8Y"8 lo cual re,ul(a en un menor de,perdicio de e,pacio/
6l regi,(ro de inicio inclu7e una copia de re,paldo de la, e,(ruc(ura, de da(o, cr-(ica,/
6,(o ,ignifica .ue la, unidade, F9T32 ,on meno, ,u,cep(i'le, a un ,olo pun(o de falla
.ue la, unidade, F9T16/

NTF! NTF! NTF! NTF!
6l ,i,(ema de arc*ivo, NTF! (ra'a>a ,o're ;indo%, NT8 2&&& 7 HP8 (iene me>ora,
con,idera'le,8 en comparacin con F9T322
NTF! mane>a volAmene, grande,8 .ue pueden encon(rar,e en un ,olo di,co duro o
pueden e,paciar,e a (ravD, de vario, di,co, duro,/
6l (ama@o de clA,(ere, prede(erminado e, de 4?"8 para di,co, de mB, de 2Y"/
339

!opor(a lo, nom're, de arc*ivo, Cnicode (carac(ere, .ue no ,on 9!0##) de *a,(a 255
carac(ere, de longi(ud/
Permi(e e,(a'lecer permi,o, en lo, arc*ivo, 7 carpe(a,/ 6l acce,o puede ,er por
u,uario, individuale,8 o grupo, de u,uario,/ $a7 di,(in(o, nivele, de acce,o po,i'le
(leer8 e,cri'ir8 modificar8 e(cD(era)/
0uen(a con cifrado de da(o, in(egrado 7 compre,in en arc*ivo,8 carpe(a, 7
volAmene,/
Puede ra,(rear cam'io, individuale, a lo, arc*ivo, en un (iempo e,pec-fico8 median(e
un diario de modificaciones/
Pueden e,(a'lecer,e cuo(a, de di,co, para u,uario, individuale, o grupo, de u,uario,/
0uen(a con una capacidad ro'u,(a de recuperacin de lo, errore, de da(o,/ <epara lo,
errore, de manera au(omB(ica8 man(eniendo un regi,(ro de (ran,accione,/
!opor(a lo, volAmene, refle>ado, (di,b mirroring)8 en donde lo, mi,mo, da(o, ,e
e,cri'en en forma ,imul(Bnea en var-a, unidade,/
3a ,iguien(e (a'la pre,en(a cada uno de lo, di,(in(o, ,i,(ema, de arc*ivo, .ue ,e u(ili=an por
lo regular en la, compu(adora, 'a,ada, en #n(el8 mo,(rando el ,opor(e en vario, ,i,(ema,
opera(ivo,/
!opor(e de lo, ,i,(ema, opera(ivo, para lo, ,i,(ema, de arc*ivo,/
!i,(ema de !i,(ema de !i,(ema de !i,(ema de
arc*ivo, arc*ivo, arc*ivo, arc*ivo,
4! 4! 4! 4!: :: :5! 5! 5! 5! 3inu1 3inu1 3inu1 3inu1 ;in P5GP8 ;in P5GP8 ;in P5GP8 ;in P5GP8 ;in NT 4 ;in NT 4 ;in NT 4 ;in NT 4 ;in 2&&&GHP ;in 2&&&GHP ;in 2&&&GHP ;in 2&&&GHP
F9T12 H H H H H
F9T16 H H H H H
F9T32 H H H
NTF! H H

prea, principale, del di,co prea, principale, del di,co prea, principale, del di,co prea, principale, del di,co
3o, volAmene, F9T12 7 F9T16 (ienen u'icacione, e,pec-fica, re,ervada, para el regi,(ro de
inicio8 la (a'la de a,ignacin de arc*ivo, 7 el direc(orio ra-= (el direc(orio ra-= en una unidad
F9T32 no ,e almacena en una u'icacin fi>a)/ 6l (ama@o de cada Brea ,e de(ermina cuando ,e
da el forma(o al volumen/ Por e>emplo8 la a,ignacin de ,ec(ore, en un di,.ue(e de 3/5
pulgada, 7 1/444" ,e mue,(ra en la ,iguien(e (a'la/
!ec(or lgico !ec(or lgico !ec(or lgico !ec(or lgico 0on(enido 0on(enido 0on(enido 0on(enido
& <egi,(ro de inicio
1:18 Ta'la de a,ignacin de arc*ivo, (F9T)
35:

1P:32 5irec(orio ra-=
33:2887P prea de da(o,

.egistro de inicio 6l registro de inicio con(iene una (a'la .ue almacena la informacin del
volumen 7 un programa de inicio cor(o8 .ue carga a 4!:5! en la memoria/ 6l programa de
inicio comprue'a la e1i,(encia de cier(o, arc*ivo, del ,i,(ema opera(ivo 7 lo, carga en la
memoria/ 3a ,iguien(e (a'la mue,(ra una li,(a repre,en(a(iva de campo, en un regi,(ro de
inicio de 4!:5! (-pico/ 6l orden e1ac(o de lo, campo, var-a en(re la, di,(in(a, ver,ione, del
,i,(ema opera(ivo/
5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o 3ongi(ud 3ongi(ud 3ongi(ud 3ongi(ud 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
&& 3 !al(a al cdigo de inicio (in,(ruccin F4P)
&3 8 Nom're del fa'rican(e8 nAmero de ver,in
&" 2 "7(e, por ,ec(or
&5 1 !ec(ore, por clA,(er (po(encia de 2)
&6 2 NAmero de ,ec(ore, re,ervado, (an(e, de F9T q1)
1& 1 NAmero de copia, de la F9T
11 2 4B1imo nAmero de en(rada, en el direc(orio ra-=
13 2 NAmero de ,ec(ore, de di,co para la, unidade, menore, de
324"
15 1 "7(e de,crip(or de medio,
16 2 Tama@o de la F9T8 en ,ec(ore,
18 2 !ec(ore, por pi,(a
19 2 NAmero de ca'e=a, de la unidad
10 4 NAmero de ,ec(ore, ocul(o,
2& 4 NAmero de ,ec(ore, del di,co para unidade, ma7ore, de 324"
24 1 NAmero de unidad (modificado por 4!:5!)
25 1 <e,ervado
26 1 Firma de inicio e1(endida (,iempre e, 2P*)
35"

27 4 NAmero de #5 del volumen ('inario)
2" 11 6(i.ue(a de volumen
36 8 Tipo de ,i,(ema de arc*ivo, (9!0##)
36 : #nicio del programa de inicio 7 lo, da(o,

Directorio raz 6l directorio raz e, el direc(orio principal de un volumen/ 3a, en(rada, en el
direc(orio puede ,er o(ro, nom're, de direc(orio, o referencia, a arc*ivo,/ Cna en(rada de
direc(orio .ue *ace referencia a un arc*ivo8 con(iene ,u nom're8 (ama@o8 a(ri'u(o 7 nAmero de
clA,(er de inicio .ue u(ili=a el arc*ivo/
Prea de datos 6l *rea de datos del di,co e, donde ,e almacenan lo, arc*ivo, 7
,u'direc(orio,/
5irec(orio de di,co 5irec(orio de di,co 5irec(orio de di,co 5irec(orio de di,co
0ada di,co e,(ilo F9T 7 NTF! (iene un directorio raz8 el cual con(iene la li,(a principal de
arc*ivo, en el di,co/ 6l direc(orio ra-= (am'iDn puede con(ener lo, nom're, de o(ro,
direc(orio,8 conocido, como subdirectorios/ Cn ,u'direc(orio puede con,iderar,e como un
direc(orio cu7o nom're aparece en algAn o(ro direc(orio8 a e,(e Al(imo ,e le conoce como
directorio padre/ 0ada ,u'direc(orio puede con(ener nom're, de arc*ivo, 7 nom're, de
direc(orio, adicionale,/ 6l re,ul(ado e, una e,(ruc(ura (ipo Br'ol con el direc(orio ra-= en la
par(e ,uperior8 con ramificacione, *acia o(ro, ,u'direc(orio, en lo, nivele, inferiore,/






6>emplo de un Br'ol de direc(orio, de di,co/

0ada nom're de direc(orio 7 cada arc*ivo den(ro de un direc(orio ,e califican median(e lo,
nom're, de lo, direc(orio, encima de Dl8 a lo cual ,e le conoce como
para el arc*ivo P<Y1/9!4 en el direc(orio !C<06 de'a>o de 9!4 en la unidad 0 e,2
!* QAS2QSO9-!EQP-OS%6AS2
Por lo general8 puede omi(ir,e la le(ra de la unidad de la ru(a cuando ,e lleva a ca'o una
operacin de en(rada ,alida en la unidad de di,co ac(ual/ 9 con(i
comple(a de lo, nom're, de lo, direc(orio, en nue,(ro Br'ol de direc(orio, de e>emplo2
02 N
N9!4N
N9!4N3#"
N9!4N!C<06
NF9+9
NF9+9N039!!6!
NF9+9N!C<06
N0PP
N0PPN<CN
N0PPN!C<06
9!4
3#" !C<06
0ada nom're de direc(orio 7 cada arc*ivo den(ro de un direc(orio ,e califican median(e lo,
re, de lo, direc(orio, encima de Dl8 a lo cual ,e le conoce como ruta/ Por e>emplo8 la ru(a
arc*ivo P<Y1/9!4 en el direc(orio !C<06 de'a>o de 9!4 en la unidad 0 e,2
P-OS%6AS2
Por lo general8 puede omi(ir,e la le(ra de la unidad de la ru(a cuando ,e lleva a ca'o una
operacin de en(rada ,alida en la unidad de di,co ac(ual/ 9 con(inuacin ,e mue,(ra una li,(a
comple(a de lo, nom're, de lo, direc(orio, en nue,(ro Br'ol de direc(orio, de e>emplo2
5irec(orio
rai=
!C<06
F9+9
039!!6! !C<06 <CN
35#

0ada nom're de direc(orio 7 cada arc*ivo den(ro de un direc(orio ,e califican median(e lo,
/ Por e>emplo8 la ru(a
arc*ivo P<Y1/9!4 en el direc(orio !C<06 de'a>o de 9!4 en la unidad 0 e,2
Por lo general8 puede omi(ir,e la le(ra de la unidad de la ru(a cuando ,e lleva a ca'o una
nuacin ,e mue,(ra una li,(a
comple(a de lo, nom're, de lo, direc(orio, en nue,(ro Br'ol de direc(orio, de e>emplo2
F9+9
!C<06
351

Por ende8 una espeficicacin de archivo puede (omar la forma de un nom're de arc*ivo
individual8 o de una ru(a de direc(orio ,eguida de un nom're de arc*ivo/ Tam'iDn ,e puede
an(eponer una e,pecificacin de unidad/
6,(ruc(ura de direc(orio, de 4! 6,(ruc(ura de direc(orio, de 4! 6,(ruc(ura de direc(orio, de 4! 6,(ruc(ura de direc(orio, de 4!: :: :5! 5! 5! 5!
!i (ra(amo, de e1plicar (odo, lo, diver,o, forma(o, de direc(orio, di,poni'le, *o7 en d-a en la,
compu(adora, 'a,ada, en #n(el8 (endr-amo, por lo meno, .ue incluir a 3inu18 4!:5! 7 (oda,
la, ver,ione, de 4! ;indo%,/ 6n ve= de ello8 vamo, a u,ar 4!:5! como un e>emplo 'B,ico 7
e1aminaremo, ,u e,(ruc(ura con mB, de(alle/ 5e,puD, con(inuaremo, con una de,cripcin de
la e,(ruc(ura de nom're, de arc*ivo, e1(endido, di,poni'le, en 4! ;indo%,/
0ada en(rada de direc(orio de 4!:5! e, de 32 '7(e, 7 con(iene lo, campo, .ue ,e mue,(ran
en la ,iguien(e (a'la/
5e,pla=amien(o $e1adecimal 5e,pla=amien(o $e1adecimal 5e,pla=amien(o $e1adecimal 5e,pla=amien(o $e1adecimal Nom're del campo Nom're del campo Nom're del campo Nom're del campo Forma(o Forma(o Forma(o Forma(o
&&:&7 Nom're de arc*ivo 9!0##
&8:&9 61(en,in 9!0##
&" 9(ri'u(o "inario de 8 'i(,
&0:15 <e,ervado para 4!:5!
16:17 6(i.ue(a de *ora "inario de 16 'i(,
18:1P 6(i.ue(a de fec*a "inario de 16 'i(,
19:1" NAmero de clA,(er inicial "inario de 16 'i(,
10:1F Tama@o del arc*ivo "inario de 32 'i(,

6l campo nombre de archivo con(iene el nom're de un arc*ivo8 un ,u'direc(orio o la e(i.ue(a
de volumen del di,co/ 6l primer '7(e puede indicar el e,(ado del arc*ivo8 o puede ,er el primer
carBc(er de un nom're de arc*ivo/ 6n la ,iguien(e (a'la ,e mue,(ran lo, po,i'le, valore, de
e,(ado/



"7(e de e,(ado del nom're de arc*ivo/
"7(e de e,(ado "7(e de e,(ado "7(e de e,(ado "7(e de e,(ado 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
353

&&* 3a en(rada nunca ,e *a u(ili=ado
&1* !i el '7(e de a(ri'u(o R &F* 7 el '7(e de e,(ado R &1*8 D,(a e, la
primera en(rada de nom're de arc*ivo e1(en,o/ (0on(iene la Al(ima
par(e del nom're8W/W 7 la e1(en,in del nom're de arc*ivo)
&5* 6l primer carBc(er del nom're del arc*ivo e, en realidad el carBc(er 65*
(raro)
65* 3a en(rada con(iene un nom're de arc*ivo8 pero el arc*ivo ,e 'orr
26* 3a en(rada (/) e, para un nom're de direc(orio/ !i el ,egundo '7(e
(am'iDn e, 26* (//)8 el campo del clA,(er con(iene el nAmero de clA,(er
del direc(orio padre de e,(e direc(orio
4n* Primera en(rada de nom're de arc*ivo e1(en,o (con(iene la primera
par(e del nom're)2 ,i el '7(e de a(ri'uo R&F*8 e,(o marca la Al(ima de
varia, en(rada, .ue con(iene un ,olo nom're de arc*ivo e1(en,o/ 6l
cdigo n indica el nAmero de en(rada, .ue u(ili=a el nom're de arc*ivo

6l campo n@mero de cl@ster inicial de 16 'i(, ,e refiere al nAmero del primer clA,(er a,ignado
al arc*ivo8 a,- como ,u en(rada inicial en la (a'la de a,ignacin de arc*ivo, (F9T)/ 6l campo
tama,o de archivo e, un nAmero de 32 'i(, .ue indica el (ama@o del arc*ivo8 en '7(e,/
0ampo a(ri'u(o 0ampo a(ri'u(o 0ampo a(ri'u(o 0ampo a(ri'u(o
6l campo atributo iden(ifica el (ipo de arc*ivo/ 6l campo e,(B a,ignado por 'i(, 78 por lo
general8 con(iene una com'inacin de uno de lo, valore, .ue ,e mue,(ran en la ,iguien(e
figura/
0ampo, de '7(e, en a(ri'u(o, de un arc*ivo

3o, do, 'i(, reservados ,iempre de'en ,er cero/ 6l 'i( archivo e,(B ac(ivo cuando ,e modifica
un arc*ivo/ 6l 'i( subdirectorio e,(B ac(ivo ,i la en(rada al direc(orio de 4! 5! con(iene el
355

nom're de un ,u'direc(orio/ 3a eti+ueta de volumen idenfica a la en(rada como el nom're de
un volumen de di,co/ 6l 'i( archivo de sistema indica .ue el arc*ivo e, par(e del ,i,(ema
opera(ivo/ 6l 'i( archivo oculto ocul(a el arc*ivo[ ,u nom're no aparece en una vi,uali=acin de
direc(orio/ 6l 'i( solo lectura evi(a .ue el arc*ivo ,e elimine o ,e modifi.ue de cual.uier forma/
Por e>emplo un valor de a(ri'u(o &F* indica .ue la en(rada ac(ual del direc(orio e, para un
nom're de arc*ivo e1(endido/
Fec*a 7 *ora Fec*a 7 *ora Fec*a 7 *ora Fec*a 7 *ora
6l campo eti+ueta de fecha indica la fec*a en .ue ,e creo el arc*ivo8 o la fec*a de ,u Al(ima
modificacin8 7 ,e e1pre,a como un valor a,ignado por 'i(,/ 6l valor del a@o e,(B en(re & 7 11P8
7 ,e le ,uma au(omB(icamen(e a 1P8& (el a@o en .ue ,ali al mercado la #"4:P0)/ 6l valor del
me, e,(B en(re 1 7 128 7 el valor del d-a en(re 1 7 31/
0ampo de e(i.ue(a de fec*a de un arc*ivo

6l campo eti+ueta de hora indica la *ora en .ue ,e cre o ,e modific por Al(ima ve= el
arc*ivo8 7 ,e e1pre,a como un valor a,ignado por 'i(,/ 3a, *ora, pueden e,(ar en(re & 7 238 lo,
minu(o, en(re & 7 5P8 7 lo, ,egundo, en(re & 7 5P8 almacenado, como una cuen(a de
incremen(o, de 2 ,egundo,/ Por e>emplo8 un valor de 1&1&& 'inario e.uivale a 4& ,egundo,/

3a e(i.ue(a de *ora a con(inuacin indica la, 142&224& *ora,/
"%%%" """"%" %"%""
\oras minutos segundos
jemplo de entrada de directorio de un archivo 61aminemo, la en(rada para un arc*ivo
llamado 49#N/0PP (,iguien(e figura)/ 6,(e arc*ivo (iene un a(ri'u(o normal8 7 ,u 'i( de arc*ivo
(2&*) e,(B ac(ivo8 lo cual mue,(ra .ue *a ,ido modificado/ !u nAmero de clA,(er inicial e,
356

&&2&*8 ,u (ama@o e, de &&&&&466* '7(e,8 el campo <ora e, igual a 45"5* (P245258) 7 el
campo 8echa e, igual a 2479* (4ar=o 268 1PP8)/

6n e,(a figura8 la *ora8 fec*a 7 nAmero de clA,(er inicial ,on valore, de 16 'i(,8 almacenado,
en orden li((e endian ('7(e inferior8 ,eguido por el '7(e ,uperior)/ 6l campo -ama,o de archivo
e, una do'le pala'ra8 .ue (am'iDn ,e almacena en orden li((le endian/
Nom're, de arc*ivo, e1(en,o, en 4! ;indo%, Nom're, de arc*ivo, e1(en,o, en 4! ;indo%, Nom're, de arc*ivo, e1(en,o, en 4! ;indo%, Nom're, de arc*ivo, e1(en,o, en 4! ;indo%,
6n 4! ;indo%,8 a un nom're de arc*ivo ma7or .ue 8 E 3 carac(ere,8 o a un nom're .ue
u(ilice una com'inacin de le(ra, ma7A,cula, 7 minA,cula, ,e le a,ignan varia, en(rada, de
direc(orio del di,co/ !i el '7(e de a(ri'u(o e, igual a &F*8 el ,i,(ema anali=a el '7(e en el
de,pla=amien(o &/ !i el d-gi(o ,uperior e, igual a 48 e,(a en(rada empie=a una ,erie de
en(rada, de nom're de arc*ivo e1(en,o/ 3a, en(rada, ,u',iguien(e, cuen(an en orden
de,cendien(e de,de n \ 18 en donde n R al nAmero de en(rada,/ Por e>emplo8 ,i un nom're de
arc*ivo re.uiere (re, en(rada,8 el primer '7(e de e,(ado ,erB 43*/ 3a, en(rada, ,u',iguien(e,
,er@an lo, '7(e, de e,(ado iguale, a &2* 7 &1*8 como puede ver,e en la ,iguien(e (a'la2
"7(e, de e,(ado "7(e, de e,(ado "7(e, de e,(ado "7(e, de e,(ado 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
43 #ndica .ue ,e u(ili=an (re, en(rada, para el nom're de arc*ivo e1(en,o8 en
(o(al8 7 e,(a en(rada con(iene la Al(ima par(e del nom're de arc*ivo8 ]/W8 7
una e1(en,in de (re, carac(ere,
&2 0on(iene la ,egunda par(e del nom're de arc*ivo
&1 0on(iene la primera par(e del nom're de arc*ivo

Ta'la de a,ignacin de arc*ivo, (F9T) Ta'la de a,ignacin de arc*ivo, (F9T) Ta'la de a,ignacin de arc*ivo, (F9T) Ta'la de a,ignacin de arc*ivo, (F9T)
3o, ,i,(ema, de arc*ivo, F9T128 F9T16 7 F9T32 u(ili=an una (a'la conocida como tabla de
asignacin de archivos (F9T) para llevar el regi,(ro de la u'icacin de cada arc*ivo en el di,co/
3a F9T a,igna lo, clA,(ere, de di,co8 mo,(rando a .uD arc*ivo e,pec-fico per(enecen/ 0ada
en(rada corre,ponde a un nAmero de clA,(er8 7 cada clA,(er con(iene uno o mB, ,ec(ore,/ 6n
o(ra, pala'ra,8 la 1&oa 6n(rada en la F9T indica el 1&vo clA,(er en el di,co8 la 11oa en(rada
iden(ifica el 11vo clA,(er8 7 a,- ,uce,ivamen(e/
357

0ada arc*ivo ,e repre,en(a en la F9T como una li,(a enla=ada8 llama cadena de cl@steres/
0ada en(rada en la F9T con(iene un en(ero .ue iden(ifica a la ,iguien(e en(rada/ 6n la ,iguien(e
figura ,e mue,(ran do, cadena, de clA,(ere,8 una para 9rc*ivo1 9rc*ivo1 9rc*ivo1 9rc*ivo1 7 o(ra para 9rc*ivo2 9rc*ivo2 9rc*ivo2 9rc*ivo2/
6>emplo2 do, cadena, de clA,(ere,

9rc*ivo1 9rc*ivo1 9rc*ivo1 9rc*ivo1 ocupa lo, clA,(ere, 182838488 7 P/ 9rc*ivo2 9rc*ivo2 9rc*ivo2 9rc*ivo2 ocupa lo, clA,(ere, 58687811 7 12/ 6l
marcador eoc eoc eoc eoc (fin de cadena) en la Al(ima en(rada en la F9T para un arc*ivo e, un valor en(ero
predefinido8 .ue marca el clA,(er final en la cadena/
0uando ,e crea un arc*ivo8 el ,i,(ema opera(ivo 'u,ca la primera en(rada di,poni'le en la F9T/
!e producen *ueco, cuando no *a7 ,uficien(e, clA,(ere, con(iguo, para con(ener el arc*iv
comple(o/ 6n el diagrama an(erior8 e,(o ocurri (an(o a 9rc*ivo1 9rc*ivo1 9rc*ivo1 9rc*ivo1 como a 9rc*ivo2 9rc*ivo2 9rc*ivo2 9rc*ivo2 cuando ,e
modifica un arc*ivo 7 ,e guarda de vuel(a en el di,co8 a menudo ,u cadena de clA,(ere, ,e
fragmen(a en forma con,idera'le/ !i muc*o, arc*ivo, ,e fragmen(an8 el rendimien(o del di,co
empie=a a degradar,e8 7a .ue la, ca'e=a, de lec(uraGe,cri(ura de'en ,al(ar en(re di,(in(a,
pi,(a, para locali=ar (odo, lo, clA,(ere, de un arc*ivo/ 3a ma7or-a de lo, ,i,(ema, opera(ivo,
cuen(an con una *erramien(a de de,fragmen(acin de di,co in(egrada/
3ec(ura 7 e,cri(ura de ,ec(ore, de di,co (73&5*) 3ec(ura 7 e,cri(ura de ,ec(ore, de di,co (73&5*) 3ec(ura 7 e,cri(ura de ,ec(ore, de di,co (73&5*) 3ec(ura 7 e,cri(ura de ,ec(ore, de di,co (73&5*)
3a funcin 73&5* de #NT 21* (lec(ura 7 e,cri(ura a',olu(a de di,co) no, permi(e leer 7 e,cri'ir
en ,ec(ore, de di,co lgico,/ 9l igual .ue (oda, la, in,(ruccione, #NT8 e,(B di,e@ada para
e>ecu(ar,e ,lo en modo de direccionamien(o real de 16 'i(,/ No (ra(aremo, de llamar a #NT
21* (ni a cual.uier o(ra in(errupcin) de,de el modo pro(egido8 de'ido a la, comple>idade,
impl-ci(a,/
3a funcin 73&5* funciona en lo, ,i,(ema, opera(ivo, F9T128 F9T16 7 F9T32 en ;indo%, P58
P8 7 ;indo%, 46/ No funciona en ;indo%, NT8 2&&& o HP de'ido a .ue (ienen una ,eguridad
mB, e,(ric(a/ 0ual.uier programa .ue (enga permi(ido leer 7 e,cri'ir ,ec(ore, del di,co podr-a
ignorar con facilidad lo, permi,o, de compar(icin de arc*ivo 7 direc(orio,/ 9l llamar a la
funcin 73&5*8 *a7 .ue pa,arle lo, ,iguien(e, argumen(o,2
358

9H 73&5*
5!2"H !egmen(oGde,pla=amien(o de una varia'le de la e,(ruc(ura 6!5#!0
0H &FFFF*
53 NAmero de unidad (& R prede(erminada8 1 R 98 2 R "8 3 R 08 e(cD(era)
!# "andera de lec(uraGe,cri(ura

Cna e,(ruc(ura 6!5#!0 con(iene el nAmero del ,ec(or inicial8 el nAmero de ,ec(ore, en lo,
.ue ,e va a leer o e,cri'ir8 7 la direccin ,egmen(oGde,pla=amien(o del 'Afer del ,ec(or2
ESDIS!O S3-9!3
sectorInicial D,O-D " 0 n?mero del sector inicial
numSectores ,O-D % 0 n?mero de sectores
despEufer ,O-D O$$SE3 bufer 0 desplazamiento del b?fer
segEufer ,O-D SES b?fer 0 segmento del b?fer
9 con(inuacin ,e mue,(ra e>emplo, de un 'Afer de en(rada para guardar lo, da(o, de lo,
,ec(ore,8 >un(o con una varia'le de la e,(ruc(ura 6!5#!02
6data
bufer EF3E <%. D9P(N)
estrucDisco ESDIS!O WX
estrucDisco. ESDIS!O W%",<X 0 sectores %", %%, %., %7, %;
9l llamar a la funcin 73&5*8 el argumen(o .ue ,e pa,a en !# de(ermina ,i .ueremo, leer
,ec(ore, o e,criir en ello,/ Para leerlo,8 ,e 'orra el 'i( &[ para e,cri'ir en ello,8 ,e ac(iva el 'i(
&/ 9demB,8 lo, 'i(, 138 14 7 15 ,e configuran al e,cri'ir ,ec(ore, median(e el u,o del ,iguien(e
e,.uema2
"i(, 15 "i(, 15 "i(, 15 "i(, 15 \ \\ \ 13 13 13 13 Tipo de ,ec(or Tipo de ,ec(or Tipo de ,ec(or Tipo de ,ec(or
&&& (roGde,conocido
&&1 5a(o, de la F9T
&1& 5a(o, de direc(orio
&11 5a(o, de arc*ivo normal
359

6l re,(o de lo, 'i(, (del 1 al 12) ,iempre de'en e,(ar en cero/
jemplo / jemplo / jemplo / jemplo /2 la, ,iguien(e, in,(ruccione, leen uno o mB, ,ec(ore, de la unidad 02
mov a1, M7"<' 0 4ecturaVEscritura absoluta
mov c1,"$$$$' 0 siempre tiene este valor
mov dl, 7 0 unidad !
mov b1, O$$SE3 estrucDisco 0 estructura ESDIS!O
mov si," 0 lee el sector
int .%'
6>emplo 2 6>emplo 2 6>emplo 2 6>emplo 22 la, ,iguien(e, in,(ruccione, e,cri'en en uno o mB, ,ec(ore, de la unidad 92
mov a1,M7"<' 0 4ecturaVEscritura absoluta
mov c1,"$$$$' 0 siempre tiene este valor
mov dl,% 0 unidad A
mov b1, O$$SE3 estrucDisco 0 estructura ESDIS!O
mov si,/""%' 0 escribe en sector(es) normal(es)
int .%'
Funcione, de arc*ivo a nivel de ,i,(ema Funcione, de arc*ivo a nivel de ,i,(ema Funcione, de arc*ivo a nivel de ,i,(ema Funcione, de arc*ivo a nivel de ,i,(ema
6n el modo direccionamien(o real8 #NT 21* proporciona lo, ,ervicio, del ,i,(ema ((a'la a
con(inuacin) para crear 7 com'inar direc(orio,8 modificar lo, a(ri'u(o, de lo, arc*ivo,8 'u,car
arc*ivo, .ue coincidan8 e(cD(era/ 6,(o, ,ervicio, van mB, allB de lo .ue *a7 di,poni'le
generalmen(e en la, 'i'lio(eca, de lo, lengua>e, de programacin de al(o nivel/ 9l llamar a
cual.uiera de e,(o, ,ervicio,8 el nAmero de la funcin ,e coloca en 9$ o 9H/ (ro, regi,(ro,
pueden con(ener parBme(ro, de en(rada/ +amo, a ver con de(alle alguna, de la, funcione, de
u,o comAn/
NAmero de funcin NAmero de funcin NAmero de funcin NAmero de funcin Nom're de funcin Nom're de funcin Nom're de funcin Nom're de funcin
&6* 6,(a'lece la unidad prede(erminada
1P* '(ener la unidad prede(erminada
73&3* '(ener e,pacio li're en el di,co
3P* 0rear ,u'direc(orio
36:

39* 6liminar ,u'direc(orio
3"* 6,(a'lecer direc(orio ac(ual
41* 6liminar direc(orio
43* '(enerGe,(a'lecer a(ri'u(o de arc*ivo
47* '(ener la ru(a del direc(orio ac(ual
46* "u,car el primer arc*ivo .ue coincida
4F* "u,car el ,iguien(e arc*ivo .ue coincida
56* 0am'iar el nom're del arc*ivo
57* '(enerGe,(a'lecer la fec*a 7 *ora del arc*ivo
5P* '(ener la informacin de error e1(endida

;indo%, P5GP8G4e !opor(a (oda, la, funcione, #NT 21* e1i,(en(e, de 4!:5! 7 proporciona
e1(en,ione, .ue permi(en a la, aplicacione, 'a,ada, en 4!:5! aprovec*ar la,
carac(er-,(ica, como lo, nom're, de arc*ivo e1(en,o 7 el 'lo.ueo e1clu,ivo de volAmene,/ 3a
funcin 73&3* de #NT 21* (o'(ener e,pacio li're en el di,co) e, un e>emplo de una funcin
me>orada del ,i,(ema .ue reconoce lo, di,co, ma7ore, de lo, .ue ,e ,opor(an origialmen(e en
4!:5!/
'(ener e,pacio li're del di,co (73&3*) '(ener e,pacio li're del di,co (73&3*) '(ener e,pacio li're del di,co (73&3*) '(ener e,pacio li're del di,co (73&3*)
3a funcin 73&3* de #NT 32* puede u,ar,e para averiguar el (ama@o de un volumen de di,co
7 cuBn(o e,pacio li're *a7 di,poni'le en una unidad F9T16 o F9T32/ 3a informacin ,e
devuelve en una e,(ruc(ura e,(Bndar llamada 61(Ye(5,bFre!pc!(ruc 61(Ye(5,bFre!pc!(ruc 61(Ye(5,bFre!pc!(ruc 61(Ye(5,bFre!pc!(ruc8 como ,e mue,(ra a
con(inuacin2
E1tSetDsa$reeSpcStruc S3-9!
StructSize ,O-D N
4evel ,O-D N
SectorsPer!luster D,O-D N
E5tesPerSector D,O-D N
Avaliable!lusters D,O-D N
3otal!lusters D,O-D N
AvaliableP'5sSectors D,O-D N
36"

3otalP'5sSectors D,O-D N
AvaliableAllocation9nits D,O-D N
3otalAllocation9nits D,O-D N
-svd D,O-D . D9P (N)
E1tSetDsa$reeSpcStruc E8DS
3a ,iguien(e ,iguien(e li,(a con(iene una 'reve de,cripcin de cada campo2
!(ruc(!i=e !(ruc(!i=e !(ruc(!i=e !(ruc(!i=e2 un valor de re(orno .ue repre,en(a el (ama@o de la e,(ruc(ura
61(Ye(5,bFre!pc!(ruc( en '7(e,/ 0uando ,e e>ecu(a la funcin 73&3* de #NT 218
coloca el (ama@o de la e,(ruc(ura en e,(e miem'ro/
3evel 3evel 3evel 3evel2 un valor de nivel de en(rada 7 re(orno/ 6,(e cam'io de'e iniciali=ar,e con cero/
!ec(or,Per0lu,( !ec(or,Per0lu,( !ec(or,Per0lu,( !ec(or,Per0lu,(er er er er2 el nAmero de ,ec(ore, den(ro de cada clA,(er/
"7(e,Per!ec(or "7(e,Per!ec(or "7(e,Per!ec(or "7(e,Per!ec(or2 el nAmero de '7(e, en cada ,ec(or/
9valia'le0lu,(er, 9valia'le0lu,(er, 9valia'le0lu,(er, 9valia'le0lu,(er,2 el nAmero de clA,(ere, di,poni'le,/
To(al0lu,(er, To(al0lu,(er, To(al0lu,(er, To(al0lu,(er,2 el nAmero (o(al de clA,(ere, en el volumen/
9valia'leP*7,!ec(or, 9valia'leP*7,!ec(or, 9valia'leP*7,!ec(or, 9valia'leP*7,!ec(or,2 el nAmero de ,ec(ore, f-,ico, di,poni'le, en el volumen8 ,in
a>u,(e para compre,in/
To(alP*7,!ec(or, To(alP*7,!ec(or, To(alP*7,!ec(or, To(alP*7,!ec(or,2 el nAmero (o(al de ,ec(ore, f-,ico, en el volumen8 ,in a>u,(e para
compre,in/
9valia'le9lloca(ionCni(, 9valia'le9lloca(ionCni(, 9valia'le9lloca(ionCni(, 9valia'le9lloca(ionCni(,2 el nAmero de unidade, de a,ignacin di,poni'le en el
volumen8 ,in a>u,(e para compre,in/
To(al9lloca(ionCni(, To(al9lloca(ionCni(, To(al9lloca(ionCni(, To(al9lloca(ionCni(,2 el nAmero de unidade, de a,ignacin en el volumen8 ,in a>u,(e
para compre,in/
<,v2 <,v2 <,v2 <,v2 miem'ro re,ervado/
%lamada a la funcin 9l llamar a la funcin 73&3* de #NT 21*8 ,e re.uieren lo, ,iguien(e,
parBme(ro,2
9H de'e ,er igual a 73&3*/
6!25# de'e apun(ar a una varia'le 61(Ye(5,bFre!pc!(ruc( 61(Ye(5,bFre!pc!(ruc( 61(Ye(5,bFre!pc!(ruc( 61(Ye(5,bFre!pc!(ruc(/
0H de'e con(ener el (ama@o de la varia'le 61(Ye(5,bFre!pc!(ruc( 61(Ye(5,bFre!pc!(ruc( 61(Ye(5,bFre!pc!(ruc( 61(Ye(5,bFre!pc!(ruc(/
5!25H de'en apun(ar a una cadena con (erminacin nula .ue con(enga el nom're de
la unidad/ Podemo, u,ar el (ipo de e,pecificacin de unidad de 4!:5! (al como (]02
NW)8 o podemo, u,ar una e,pecificacin de volumen de la convencin de nomencla(ura
univer,al como (NN!ervidorN<ecur,o0ompar(ido)/
!i la funcin ,e e>ecu(a con D1i(o8 'orra la 'andera 9carreo 7 llena la e,(ruc(ura/ 6n ca,o
con(rario8 ac(iva la andera 9carreo/ 5e,puD, de llamara la funcin8 lo, ,iguien(e, (ipo, de
cBlculo, podr-an ,er A(ile,2
Para averiguar .ue (an grande e, el volumen en bilo'7(e,8 de'emo, u,ar la frmula
(To(al0lu,(er J !ec(or,Per0lu,(er J "7(e,Per!ec(or)G1&24/
36#

Para averiguar cuBn(o e,pacio li're *a7 en el volumen8 en bilo'7(e,8 la frmula e,
(9valia'le0lu,(er, J !ec(or,Per0lu,(er J "7(e,Per!ec(or)G1&24/
0rear ,u'direc(orio (3P*) 0rear ,u'direc(orio (3P*) 0rear ,u'direc(orio (3P*) 0rear ,u'direc(orio (3P*)
3a funcin 3P* de #NT 21* crea un nuevo ,u'direc(orio/ <eci'e un apun(ador en 5!25H a una
cadena con (erminacin nula .ue con(iene una e,pecificacin de ru(a/ 6l ,iguien(e e>emplo
mue,(ra cmo crear un nuevo ,u'direc(orio llamado 9!4 en el direc(orio ra-= de la unidad
prede(erminada2
6data
nombreruta EF3E OQAS2P,"
6code
mov a',7+' 0 crea un subdirectorio
mov d1, O$$SE3 nombreruta
int .%'
c mostrarTerror
3a 'andera 9carreo ,e ac(iva ,i la funcin falla/ 3o, cdigo, de error po,i'le, ,on2 3 (no se
encontr la ruta)8 5 (acceso denegado1 el directorio contiene archivos)8 6 (manejador inv*lido)8
7 16 (se intent eliminar el directorio actual)/
6,(a'lecer el direc(orio ac(ual (3"*) 6,(a'lecer el direc(orio ac(ual (3"*) 6,(a'lecer el direc(orio ac(ual (3"*) 6,(a'lecer el direc(orio ac(ual (3"*)
3a funcin 3"* de #NT 32* e,(a'lece el direc(orio ac(ual/ <eci'e un apun(ador en 5!25H a una
cadena con (erminacin nula .ue con(iene la unidad 7 ru(a de de,(ino/ Por e>emplo8 la,
,iguien(e, in,(ruccione, e,(a'lecen el direc(orio ac(ual a 02 N9!4NP<Y!2
6data
nombreruta EF3E O!* QAS2QP-OSSP,"
6code
mov a',7E' 0 establece el directorio actual
mov d1,O$$SE3 nombreruta
int .%'
c mostrarTerror
'(ener el direc(orio ac(ual (47*) '(ener el direc(orio ac(ual (47*) '(ener el direc(orio ac(ual (47*) '(ener el direc(orio ac(ual (47*)
361

3a funcin 47* de #NT 21* devuelve una cadena .ue con(iene el direc(orio ac(ual/ <eci'e un
nAmero de unidad en 53 (& R prede(erminada8 1 R 98 2 R "8 e(cD(era) 7 un apun(ador en 5!2!#
a un 'Afer de 64 '7(e,/ 6n e,(e 'Afer8 4!:5! coloca una cadena con (erminacin nula .ue
con(iene el nom're de ru(a comple(o del direc(orio rai= *a,(a el direc(orio ac(ual (,e omi(en la
le(ra de la unidad 7 la 'arra diagonal inver,a .ue va al principio)/ !i ,e ac(iva la 'andera
9carreo cuando la funcin regre,a8 el Anico cdigo de re(orno de error po,i'le en 9H e, &F*
(especificacin de unidad inv*lida)/
6n el ,iguien(e e>emplo8 4!:5! devuelve la ru(a del direc(orio ac(ual en la unidad
prede(erminada/ !uponiendo .ue el direc(orio ac(ual e, 02 N9!4NP<Y!8 la cadena devuel(a
por 4!:5! e, ]9!4NP<Y!W2
6data
nombreruta EF3E /; dup(") 0 ruta almacenada a@uA por 2SKDOS
6code
mov a',;M' 0 obtiene ruta del directorio actual
mov dl," 0 en la unidad predeterminada
mov si,O$$SE3 nombreruta
int .%'
c mostrarTerror
'(ener 7 e,(a'lecer a(ri'u(o, de arc*ivo (7143*) '(ener 7 e,(a'lecer a(ri'u(o, de arc*ivo (7143*) '(ener 7 e,(a'lecer a(ri'u(o, de arc*ivo (7143*) '(ener 7 e,(a'lecer a(ri'u(o, de arc*ivo (7143*)
3a funcin 7143* de #NT 21* o'(iene o e,(a'lece lo, a(ri'u(o, de un arc*ivo8 en(re o(ra,
(area,/ (6n ;indo%, P18 ,u,(i(u7e la funcin 3P de #NT 21* de 4!:5!8 .ue e, mB, an(igua)/
<eci'e el de,pla=amien(o de un nom're de arc*ivo en 5H/ Para e,(a'lecer lo, a(ri'u(o, del
arc*ivo8 ,e a,igna 1 a "3 7 a 0H ,e le a,ignan uno o mB, a(ri'u(o, de lo, .ue ,e pre,en(an en
la ,iguien(e (a'la/
+alor +alor +alor +alor !ignificado !ignificado !ignificado !ignificado
S9SN<493 (&&&&*) !e puede leer el arc*ivo o e,cri'ir en Dl/ 6,(e valor e, vBlido
unicamen(e ,i ,e u(ili=a ,olo
S9S<5N3K (&&&1*) !e puede leer el arc*ivo8 pero no e,cri'ir en Dl
S9S$#556N (&&&2*) 6l arc*ivo e,(B ocul(o 7 no aparece en un li,(ado de direc(orio
ordinario
S9S!K!T64 (&&&4*) 6l arc*ivo e, par(e del ,i,(ema opera(ivo8 o D,(e lo u(ili=a en forma
e1clu,iva
363

S9S9<0$ (&&2&*) 6l arc*ivo e, un arc*ivo almacenado/ 3a, aplicacione, u(ili=an e,(e
valor para marcar lo, arc*ivo, con el fin de re,paldarlo, o eliminarlo,

6l ,iguien(e cdigo e,(a'le lo, a(ri'u(o, de un arc*ivo a ,lo lec(ura 7 ocul(o2
mov a1,M%;7'
mov bl,%
mov c1, TAT\IDDE8 L TAT-DO84F
mov d1, O$$SE3 nombrearc'ivo
int .%'
Para o'(ener lo, a(ri'u(o, ac(uale, de un arc*ivo8 *a7 .ue e,(a'lecer "H a & 7 llamar a la
mi,ma funcin/ 3o, valore, de lo, arc*ivo, ,e devuelven en 0H como una com'inacin de
po(encia, de 2/ 5e'emo, u,ar la in,(ruccin T6!T para evaluar lo, a(ri'u(o, individuale,/ Por
e>emplo8
test c1, TAT-DO84F
nz arc'ivoSolo4ectura 0 el arc'ivo es de slo lectura
6l a(ri'u(o S9S9<0$ puede aparecer con cual.uiera de lo, demB, a(ri'u(o,/
15 Programacin a nivel del "#! 15 Programacin a nivel del "#! 15 Programacin a nivel del "#! 15 Programacin a nivel del "#!
prea de da(o, del "#! prea de da(o, del "#! prea de da(o, del "#! prea de da(o, del "#!
6l Brea de da(o, del "#!8 .ue ,e mue,(ra parcialmen(e en la ,iguien(e (a'la8 con(iene lo,
da(o, del ,i,(ema .ue u(ili=an la, ru(ina, de ,ervicio del "#! de <4/ Por e>emplo8 el 'Afer de
e,cri(ura delan(ada del (eclado (en el de,pla=amien(o &&16*) con(iene lo, cdigo, 9!0## 7 lo,
cdigo, de e1ploracin de la, (ecla, .ue e,peran a ,er proce,ada, por el "#!/
prea de da(o, del "#!8 en el ,egmen(o &&4&*/
5e,pla=amien(o $6H 5e,pla=amien(o $6H 5e,pla=amien(o $6H 5e,pla=amien(o $6H 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
&&&&:&&&7 5ireccine, de puer(o,8 041:044
&&&8:&&&F 5ireccione, de puer(o, 3PT1:3PT4
&&1&:&&11 3i,(a del *ard%are in,(alado
&&12 "anderade iniciali=acin
&&13:&&14 Tama@o de memoria8 en bilo'7(e,
365

&&15:&&16 4emoria en el canal de 6G!
&&17:&&18 "andera de e,(ado del (eclado
&&1P 9lmacenamien(o al(erna(ivo de en(rada de (ecla,
&&19:&&1" 9pun(ador del 'Afer de (eclado (inicio)
&&10:&&15 9pun(ador del 'Afer de (eclado (final)
&&16:&&35 "Afer de e,cri(ura adelan(ada del (eclado
&&36:&&48 prea de da(o, del di,.ue(e
&&4P 4odo ac(ual de video
&&49:&&4" NAmero de columna, en la pan(alla
&&40:&&45 3ongi(ud del 'Afer de regeneracin (video)8 en '7(e,
&&46:&&4F 5e,pla=amien(o inicial del 'Afer de regeneracin (video)
&&5&:&&5F Po,icione, del cur,or8 pBgina, de video 1:8
&&6& 3-nea final del cur,or
&&61 3-nea inicial del cur,or
&&62 NAmero de pBgina de video ac(ual en vi,uali=acin
&&63:&&64 5ireccin 'a,e de la pan(alla ac(iva
&&65 <egi,(ro de modo de 0<T
&&66 <egi,(ro para el adap(ador de grBfico, a color
&&67:&6" prea de da(o, del ca,e(e
&&60:&&7& prea de da(o, del (empori=ador

6n(rada de 6n(rada de 6n(rada de 6n(rada de (eclado median(e #NT 16* (eclado median(e #NT 16* (eclado median(e #NT 16* (eclado median(e #NT 16*
6n e,(e cap-(ulo (endremo, la opor(unidad de (ra'a>ar direc(amen(e en el nivel del "#!8
llamando a la, funcione, in,(alada, (en gran par(e) por el fa'rican(e de la compu(adora/ 6n
e,(e nivel ,lo ,e encuen(ra a un nivel por encima del *ard%are8 por lo cual ,e (iene muc*a
fle1i'ilidad 7 con(rol/
6l "#! mane>a la en(rada del (eclado median(e llamada, a la in(errupcin 16*/ 3a, ru(ina, del
"#! no permi(en la redireccin8 pero facili(an la lec(ura de (ecla, e1(endida, del (eclado8
366

como la, (ecla, de funcin8 de direccin8 9vPBg 7 <ePBg/ 0ada (ecla e1(endida genera un
cdigo de exploracin de A 'i(,/ 3o, cdigo, de e1ploracin ,on Anico, para la, compu(adora,
compa(i'le, con #"4/ Toda, la, (ecla, generan cdigo, de e1ploracin pero8 por lo general8 no
ponemo, a(encin a lo, cdigo, de e1ploracin de lo, carac(ere, 9!0##8 7a .ue ,on
e,(andari=ado, en ca,i (oda, la, compu(adora,/ 6n 4! ;indo%,8 cuando ,e oprime una (ecla
e1(endida8 ,u cdigo 9!0## e, &&* o 6&*8 como ,e mue,(ra en la ,iguien(e (a'la2
Tecla, Tecla, Tecla, Tecla, 0digo 9!0## 0digo 9!0## 0digo 9!0## 0digo 9!0##
#n,8 !upr8 9vPBg8 <ePBg8 #nicio8 Fin8 Flec*a
arri'a8 Flec*a a'a>o8 Flec*a i=.uierda8 Flec*a
derec*a
6&*
Tecla, de funcin (F1 \ F12) &&*

0mo funciona el (eclado 0mo funciona el (eclado 0mo funciona el (eclado 0mo funciona el (eclado
3a en(rada del (eclado ,igue una ru(ina de even(o,8 .ue empie=a con el c*ip con(rolador del
(eclado 7 (ermina cuando lo, carac(ere, ,e colocan en un arreglo llamado b@fer de escritura
adelantada del teclado/ Pueden me(er,e *a,(a 15 (ecleo, en el 'Afer8 7a .ue un (ecleo genera
2 '7(e, (0digo 9!0## E cdigo de e1ploracin)/ 3o, ,iguien(e, even(o, ocurren cuando el
u,uario oprime una (ecla2
6l c*ip con(rolador del (eclado env-a un cdigo de e1ploracin numDrico de 8 'i(, (sc)
al puer(o de en(rada del (eclado de la P0/
6l puer(o de en(rada e,(B di,e@ada de manera .ue ac(ive una interrupcin8 una ,e@al
predefinida .ue indica a la 0PC .ue un di,po,i(ivo de en(rada:,alida nece,i(a a(encin/
3a 0PC re,ponde e>ecu(ando la ru(ina de ,ervicio #NT P*/
3a ru(ina de ,ervicio #NT P* o'(iene el cdigo de e1ploracin del (eclado (sc) del puer(o
de en(rada 7 'u,ca el cdigo 9!0## corre,pondien(e (ac)8 ,i lo *a7/ #n,er(a el cdigo de
e1ploracin 7 el cdigo 9!0## en el 'Afer de e,cri(ura adel(anda del (eclado (,i el cdigo
de e1ploracin no (iene cdigo 9!0## .ue coincida8 el cdigo 9!0## de la (ecla en el
'Afer de e,cri(ura adelan(ada e, igual a cero & o 6&*)/
Cna ve= .ue el cdigo de e1ploracin 7 el cdigo 9!0## ,e encuen(ra ,eguro, en el 'Ader de
e,cri(ura adelan(ada8 permanecen a*- *a,(a .ue el programa ac(ual en e>ecucin lo, e1(rae/
$a7 do, forma, de *acer e,(o en la, aplicacione, en modo real2
3lamar a una funcin del "#! median(e el u,o de #NT 16*8 .ue o'(enga (an(o el
cdigo de e1ploracin como el cdigo 9!0## del 'Afer de e,cri(ura adelan(ada del
(eclado/ 6,(o e, A(il cuando ,e proce,an la, (ecla, e1(endida,8 como la, (ecla, de
funcin 7 la, flec*a, del cur,or8 .ue no (ienen cdigo, 9!0##/
3lamar a una funcin a nivel del 4!:5! median(e el u,o de #NT 21* .ue o'(iene el
cdigo 9!0## del 'Afer de en(rada/ !i ,e oprimi una (ecla e1(endida8 *a7 .ue llamar a
#NT 21* una ,egunda ve= para o'(ener el cdigo de e1ploracin/
367

Funcione, de #NT 16* Funcione, de #NT 16* Funcione, de #NT 16* Funcione, de #NT 16*
#NT 16* pre,en(a varia, ven(a>a, conci,a, en comparacin con #NT 21*8 para el mane>o del
(eclado/ 6n primer luga8 #NT 16* puede o'(ener (an(o el cdigo de e1ploracin como el cdigo
9!0## en un ,olo pa,o/ 6n ,egundo lugar8 #NT 16* (iene varia, operacione, adicionale,8 como
e,(a'lecimien(o de la velocidad de repe(icin 7 o'(ener el e,(ado de la, 'andera, de (eclado/
3a velocidad de repetcin e, la velocidad con la .ue ,e repi(e una (ecla cuando ,e man(iene
oprimida/ 0uando no ,e ,a'e ,i el u,uario oprimirB una (ecla ordinaria o una (ecla e1(endida8
por lo general #NT 16* e, la funcin mB, adecuada/
6,(a'lecer velocidad de repe(icin (&3*) 6,(a'lecer velocidad de repe(icin (&3*) 6,(a'lecer velocidad de repe(icin (&3*) 6,(a'lecer velocidad de repe(icin (&3*)
3a funcin &3* de #NT 16* no, permi(e e,(a'lecer la velocidad de repe(icin del (eclado8 como
,e mue,(ra en la ,iguien(e (a'la/ 9l man(ener oprimida una (ecla8 *a7 re(ra,o, de 25& a 1&&&
mili,egundo, an(e, de .ue la (ecla empiece a repe(ir,e/ 3a velocidad de repe(icin puede ,er
en(re 1F* (mB, len(a) 7 & (mB, rBpida)/
Funcin &3* de #NT 16* Funcin &3* de #NT 16* Funcin &3* de #NT 16* Funcin &3* de #NT 16*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece la velocidad de repe(icin del (eclado
<eci'e <eci'e <eci'e <eci'e 9$ R 3
93 R 5
"$ R re(ra,o de repe(icin (& R 25& m,[ 1 R 5&& m,[ 2 R
75& m,[ 3 R 1&&& m,)
"3 R velocidad de repe(icin R mB, rBpida (3&G,eg)8 1F R
mB, len(a (2G,eg)
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, "7"<'
mov b', % 0 retraso de repeticin <""ms
mov bl, "$' 0 velocidad de repeticin
int %/'

4e 4e 4e 4e(er (ecla en 'Afer de (eclado (&5*) (er (ecla en 'Afer de (eclado (&5*) (er (ecla en 'Afer de (eclado (&5*) (er (ecla en 'Afer de (eclado (&5*)
0omo ,e mue,(ra en la ,iguien(e (a'la8 la funcin &5* de #NT 16* no, permi(e me(er una (ecla
en el 'Afer de e,cri(ura adelan(ada del (eclado/ Cna (ecla con,i,(e en do, en(ero, de 8 'i(,2 el
cdigo 9!0## 7 el cdigo de e1ploracin del (eclado/
368

Funcin &5* de #NT 16* Funcin &5* de #NT 16* Funcin &5* de #NT 16* Funcin &5* de #NT 16*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 4e(e una (ecla en el 'Afer del (eclado
<eci'e <eci'e <eci'e <eci'e 9$ R 5
0$ R 0digo de e1ploracin
03 R 0digo 9!0##
5evuelve 5evuelve 5evuelve 5evuelve !i el 'Afer de e,cri(ura adelan(ada e,(B lleno8 0F R 1 7 93
R1[ en ca,o con(rario8 0F R &8 93 R &
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', <
mov c', 7E' 0 cdigo de e1ploracin
mov cl," 0 cdigo AS!II
int %/'

6,perar (ecla (1&*) 6,perar (ecla (1&*) 6,perar (ecla (1&*) 6,perar (ecla (1&*)
3a funcin 1&* de #NT 16* elimina la ,iguien(e (ecla di,poni'le del 'Afer de e,cri(ura
adelan(ada del (eclado/ !i no *a7 una (ecla de e,pera8 el mane>ador del (eclado e,pera a .ue
el u,uario oprima una8 como ,e mue,(ra en la ,iguien(e (a'la2
Funcin 1&* de #NT 16* Funcin 1&* de #NT 16* Funcin 1&* de #NT 16* Funcin 1&* de #NT 16*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,pera una (ecla 7 e1plora una (ecla del (eclado
<eci'e <eci'e <eci'e <eci'e 9$ R 1&*
5evuelve 5evuelve 5evuelve 5evuelve 9$ R cdigo de e1ploracin del (eclado
93 R cdigo 9!0##
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',%"'
int %/'
mov codigoE1p%,a'
mov codigoAS!II,al
369

No(a, No(a, No(a, No(a, !i no e1i,(e 7a una (ecla en el 'Afer8 la funcin e,pera
una/ !u,(i(u7e a la funcin &&* de #NT 16*

Programa de e>emplo Programa de e>emplo Programa de e>emplo Programa de e>emplo
6l ,iguien(e programa de vi,uali=acin del (eclado u(ili=a un ciclo con #NT 16* para reci'ir
(ecleo, de en(rada 7 mo,(rar el cdigo 9!0## >un(o con el cdigo de e1ploracin de cada (ecla/
Termina cuando ,e oprime 6!02
3I34E )isualizacin del teclado (teclado6asm)
0 Este programa muestra los cdigos de e1ploracin
0 del teclado 5 los cdigos AS!II, usando I83 %/'6
Include Irvine%/6inc
6code
main P-O!
mov a1, Zdata
mov ds, a1
call !lrScr 0 borra la pantalla
4%* mov a', %"' 0 entrada del teclado
int %/' 0 usando EIOS
call Dump-egs 0 analiza A\, A4 ( AS!II
cmp al, %E' 0 cSe oprimi ES!N
ne 4% 0 no* repite el ciclo
call !lrScr 0 borra la pantalla
e1it
main E8DP
E8D main
3a llamada 5ump<eg, 5ump<eg, 5ump<eg, 5ump<eg, mue,(ra (odo, lo, regi,(ro,8 pero ,lo nece,i(amo, ver 9$ (cdigo de
e1ploracin) 7 93 (cdigo 9!0##)/
0ompro'acin 'Afer del (eclado (11*) 0ompro'acin 'Afer del (eclado (11*) 0ompro'acin 'Afer del (eclado (11*) 0ompro'acin 'Afer del (eclado (11*)
37:

3a funcin 11* de #NT 16* no, permi(e *urgar en el 'Afer de e,cri(ura adelan(ada del (eclado8
para ver ,i *a7 (ecla, e,perando/ 5evuelve el cdigo 9!0## 7 el cdigo de e1ploracin de la,
,iguien(e, (ecla, di,poni'le,8 ,i la *a7/ Podemo, u(ili=ar e,(a funcin den(ro de un ciclo para
llevar a ca'o o(ra, (area, del programa/ ',ervamo, .ue la funcin no elimina la (ecla del
'Afer de e,cri(ura adelan(ada/
Funcin Funcin Funcin Funcin 11* de #NT 16* 11* de #NT 16* 11* de #NT 16* 11* de #NT 16*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 0omprue'a el 'Afer del (eclado
<eci'e <eci'e <eci'e <eci'e 9$ R 11*
5evuelve 5evuelve 5evuelve 5evuelve !i *a7 una (ecla en e,pera8 IF R &8 9$ R cdigo de
e1ploracin8 93 R cdigo 9!0##[ en ca,o con(rario8 IF R 1
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',%%'
int %/'
z 8o\a53eclaEnEspera 0 no 'a5 tecla en el
b?fer
mov codigoE1pl, a'
mov codigoAS!II, al
No(a, No(a, No(a, No(a, No elimina la (ecla (,i la *a7) del 'Afer

'(ener 'andera, de (eclado '(ener 'andera, de (eclado '(ener 'andera, de (eclado '(ener 'andera, de (eclado
3a funcin 12* de #NT 16* devuelve informacin valio,a acerca del e,(ado ac(ual de la,
'andera, del (eclado/ Tal ve= *emo, no(ado .ue lo, programa, de proce,amien(o de pala'ra a
menudo mue,(ran 'andera, o no(acione, en la par(e inferior de la pan(alla8 cuando ,e
oprimen (ecla, como "lo.4a7A,8 "lo.NAm e #n,er(/ Para ello8 e1aminan en forma con(inua la
'andera de e,(ado del (eclado8 vigilando cual.uier cam'io/
Funcin 12* de #NT 16* Funcin 12* de #NT 16* Funcin 12* de #NT 16* Funcin 12* de #NT 16*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la, 'andera, del (eclado
<eci'e <eci'e <eci'e <eci'e 9$ R 12*
5evuelve 5evuelve 5evuelve 5evuelve 9H R copia de la, 'andera, del (eclado
37"

3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',%.'
int %/'
mov anderas3eclado,a1
No(a, No(a, No(a, No(a, 3a, 'andera, del (eclado ,e encuen(ran en la, direccione,
&&417* \ &&418* en el Brea de da(o, del "#!

3a, 'andera, del (eclado8 .ue ,e mue,(ran en la ,iguien(e (a'la8 ,on par(icularmen(e
in(ere,an(e, de'ido a .ue no, dicen muc*o acerca de lo .ue el u,ario e,(B *aciendo con el
(eclado/ Q6,(B oprimiendo la (ecla ma7A,cula, i=.uierda8 o la derec*aM/ Q6,(B oprimiendo
(am'iDn la (ecla 9l(M/ Podemo, re,ponder a pregun(a, de e,(e (ipo median(e el u,o de #NT
16*/ 0ada 'i( e, un 1 cuando la (ecla .ue coincide ,e man(iene oprimida o ,e ac(iva ("lo.
ma7A,8 "lo. de,pl8 "lo. nAm e #n,er()/ 6n ;indo%, P5 7 P88 lo, '7(e, de la 'andera del
(eclado (am'iDn pueden o'(ener,e le7endo la memoria en el ,egmen(o &&4&*8
de,pla=amien(o, 17* 18*/
+alore, de la 'andera del (eclado
"i( "i( "i( "i( 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
& !e orpimi la (ecla 4a7A,cula, derec*a
1 !e oprimi la (ecla 4a7A,cula, i=.uierda
2 !e oprimi cual.uiera de la, (ecla, 0(rl
3 !e oprimi cual.uiera de la, (ecla, 9l(
4 !e ac(iv la (ecla "lo. 5e,pl
5 !e ac(ivo la (ecla "lo. NAm
6 !e ac(iv la (ecla "lo. 4a7A,
7 !e ac(ivo la (ecla #n,er(
8 !e oprimi la (ecla 0(rl i=.uierda
P !e oprimi la (ecla 9l( i=.uierda
1& !e oprimi la (ecla 0(rl derec*a
11 !e oprimi la (ecla 9l( 5erec*a
12 !e oprimi la (ecla "lo. 5e,pl
37#

13 !e oprimi la (ecla "lo. NAm
14 !e oprimi la (ecla "lo. 4a7A,
15 !e oprimi la (ecla Pe(!i,

"orrar el 'Afer del (eclado "orrar el 'Afer del (eclado "orrar el 'Afer del (eclado "orrar el 'Afer del (eclado
9 menudo8 lo, programa, (ienen un ciclo de proce,amien(o .ue ,lo ,e puede in(errumpir
median(e (ecla, previamen(e ordenada,/ Por e>emplo8 lo, programa, de >uego, 'a,ado, en
5! comprue'a con frecuencia el 'Afer del (eclado8 para ver ,i ,e oprimieron (ecla, de flec*a,
7 o(ra, e,peciale,8 mien(ra, .ue al mi,mo (iempo ,e mue,(ran imBgene, de grBfico,/ 6l
u,uario podr-a oprimir una can(idad de (ecla, irrelevan(e, .ue ,lo llenan el 'Afer de e,cri(ura
adelan(ada del (eclado8 pero cuando ,e oprime la (ecla correc(a8 ,e e,pera .ue el programa
re,ponda de inmedia(o al comando/
4edian(e el u,o de funcione, #NT 16* ,a'emo, cmo compro'ar el 'Afer del (eclado para ver
,i *a7 (ecla, e,perando (funcin 11*)8 7 ,a'emo, cmo eliminar una (ecla del 'Afer (funcin
1&*)/ 6l ,iguien(e programa demue,(ra un procedimien(o llamado "orrarTeclado "orrarTeclado "orrarTeclado "orrarTeclado8 .ue u(ili=a
un ciclo para 'orrar el 'Afer del (eclado8 al (iempo .ue comprue'a un cdigo de e1ploracin de
(ecla e,pec-fico/ Para fine, de prue'a8 el programa comprue'a ,i ,e oprimi la (ecla 6!08 pero
el procedimien(o puede compro'ar cual.uier (ecla2
3I34E Prueba de Eorrar3eclado (Eorrar3ecl6asm)
0 Este programa muestra cmo borrar el b?fer del
0 teclado, mientras se espera una tecla especAfica6
0 Para probarlo, podemos oprimir rIpidamente teclas al azar
0 para llenar el b?fer6 !uando se oprima Esc, el programa
0 termina de inmediato
I8!49DE Irvine%/6inc
Eorrar3eclado P-O3O, codigoE1p%*EF3E
teclaTES! ( % 0 cdigo de e1ploracin
6code
main P-O!
4%*
0 2uestra un punto, para indicar el progreso del programa
371

mov a',.
mov dl,H6H
int .%'
mov ea1,7"" 0 retraso de 7"" ms
call Dela5
I8)O>E Eorrar3eclado, teclaTES! 0 comprueba la tecla Esc
nz 4% 0 contin?a el ciclo si [$ ( "
terminar*
call !lrscr
e1it
main E8DP
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
Eorrar3eclado P-O!,
codigoE1pl*EF3E
0
0 Eorra el teclado, al tiempo @ue comprueba un
0 cdigo de e1ploracin especAfico6
0 -ecibe* cdigo de e1ploracin del teclado
0 Devuelve* se activa la bandera !ero si el cdigo AS!II
0 se encontr, en caso contrario, la bandera cero se borra6
0 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
pus' a1
4%*
mov a', %%' 0 comprueba el b?fer del teclado
int %/' 0 cse oprimi alguna teclaN
z no\a53ecla 0 no* termina a'ora ([$(")
373

mov a',%"' 0 sA* la elimina del b?fer
int %/'
cmp a', codigoE1pl 0 cfue la tecla para salirN
e terminar 0 sA* termina a'ora ([$ ( %)
mp 4% 0 no* comprueba el b?fer otra vez
no\a53ecla* 0 no se oprimi ninguna tecla
or al,% 0 borra la bandera !ero
terminar*
pop a1
ret
Eorrar3eclado E8DP
E8D main
6l programa mue,(ra un pun(o en la pan(alla cada 3&& mili,egundo,/ 9l pre,ionar cual.uier
,ecuencia de (ecla, alea(oria, e,(a, ,on ignorada,/ 6l programa ,e de(endrB (an pron(o como
,e oprima 6!0/
Programacin de +#56 con #NT 1&* Programacin de +#56 con #NT 1&* Programacin de +#56 con #NT 1&* Programacin de +#56 con #NT 1&*
Fundamen(o, Fundamen(o, Fundamen(o, Fundamen(o,
-res niveles de acceso -res niveles de acceso -res niveles de acceso -res niveles de acceso
0uando un programa de aplicacin nece,i(a e,cri'ir carac(ere, en la pan(alla8 en modo de
(e1(o8 podemo, elegir en(re (re, (ipo, de ,alida2
9cce,o a nivel de 4! 9cce,o a nivel de 4! 9cce,o a nivel de 4! 9cce,o a nivel de 4!: :: :5! 5! 5! 5!2 cual.uier compu(adora .ue e>ecu(e o emule a 4!:5!
puede u(ili=ar a #NT 21* para e,cri'ir (e1(o, en la pan(alla de video/ 3a en(radaG,alida
puede redirigir,e fBcilmen(e *acia o(ro, di,po,i(ivo,8 como una impre,ora o di,co/ 3a
,alida e, 'a,(an(e len(a8 7 no podemo, con(rolar el color del (e1(o/
9cce,o a nivel de "#! 9cce,o a nivel de "#! 9cce,o a nivel de "#! 9cce,o a nivel de "#!2 lo, carac(ere, ,e in(roducen u,ando la funcin #NT 1&*8
conocida como servicios de $'#!/ 6,(o, ,ervicio, ,e e>ecu(an con mB, rapide= .ue #NT
21* 7 no, permi(en e,pecificar el color del (e1(o/ 9l llenar grande, Brea, de la pan(alla8
por lo general8 puede de(ec(ar,e un ligero re(ra,o/ 3a ,alida no puede redirigir,e/
9cce,o direc(o al video 9cce,o direc(o al video 9cce,o direc(o al video 9cce,o direc(o al video2 lo, carac(ere, ,e mueve direc(amen(e a la <94 de video8 por
lo .ue la e>ecucin e, in,(an(Bnea/ 3a ,alida no puede redirigir,e/ 5uran la era de 4!:
5!8 lo, programa, proce,adore, de pala'ra, 7 la, *o>a, elec(rnica, de cBlculo
u(il=a'an e,(e mD(odo/ 6l u,o de e,(e mD(odo e,(B re,(ringido al modo de pan(alla
comple(a en ;indo%, NT8 2&&& 7 HP/
375

3o, programa, de aplicacione, var-an en ,u eleccin de nivel de acce,o a u(ili=ar/ 3o, .ue
re.uieren el rendimien(o mB, al(o eligen el acce,o direc(o al video[ o(ro, eligen el acce,o a
nivel del "#!/ 6l acce,o a nivel de 4!:5! ,e u(ili=a cuando puede ,er nece,ario redirigir la
,alida8 o cuando la pan(alla ,e compar(e con o(ro, programa,/ $a7 .ue mencionar .ue la,
in(errupcione, de 4!:5! u(ili=an ru(ina, a nivel del "#! para *acer ,u (ra'a>o8 7 la, ru(ina,
del "#! u(ili=an el acce,o direc(o al video para producir ,u, re,ul(ado,/
6>ecucin de programa, en modo de pan(alla com 6>ecucin de programa, en modo de pan(alla com 6>ecucin de programa, en modo de pan(alla com 6>ecucin de programa, en modo de pan(alla comple(a ple(a ple(a ple(a
3o, programa, .ue di'u>an grBfico, u,ando el "#! de +ideo deen e>ecu(ar,e en uno de lo,
,iguien(e, en(orno,2
4!:5! puro/
Cn emulador de 5! en 3inu1/
6n el modo de pan(alla comple(a de 4! ;indo%,/
6n 4! ;indo%,8 *a7 varia, forma, de cam'iar al modo de pan(alla comple(a2
6n ;indo%, HP8 de'emo, crear un acce,o direc(o al arc*ivo 6H6 del programa/
5e,puD, de'emo, a'rir el cuadro de dialogo Propiedade, para el acce,o direc(o8
,eleccionamo, pcione, 7 Modo de pantalla completa en el grupo C,o de la fic*a
Pan(alla (5i,pla7 op(ion,)/
9'rir una ven(ana de !-m'olo del ,i,(ema de,de el menA de inicio8 7 oprimimo, 9l(:
#n(ro para cam'iar al modo de pan(alla comple(a/ Podemo, u,ar el comando 05
(cam'iar direc(orio)8 navegar *a,(a el direc(orio de nue,(ro arc*ivo 6H6 7 e>ecu(ar el
programa e,cri'iendo ,u nom're/ 9l(:#n(ro e, un conmutador8 por lo .ue ,i e, oprimido
de nuevo8 el programa regre,arB al modo de +en(ana/
Funcionamien(o del (e1(o de video Funcionamien(o del (e1(o de video Funcionamien(o del (e1(o de video Funcionamien(o del (e1(o de video
$a7 do, modo, de video 'B,ico, en lo, ,i,(ema, 'a,ado, en #n(el2 el modo de (e1(o 7 el modo
de grBfico,/ Cn programa puede e>ecu(ar,e en un modo o en el o(ro8 pero no en am'o, al
mi,mo (iempo2
6n el modo de texto8 lo, programa, e,cri'en carac(ere, 9!0## en la pan(alla/ 6l
generador de carac(ere, in(egado en el "#! gemera una imagen de mapa de 'i(, para
cada carBc(er/ Cn programa no puede di'u>ar l-nea, 7 figura, al a=ar en el modo de
(e1(o/
6n el modo de gr*ficos8 lo, programa, con(rolan la apariencia de cada p-1el de la
pan(alla/ 3a operacin e, algo primi(iva8 7a .ue no *a7 funcione, in(egrada, para el
di'u>o de l-nea, 7 figura,/ 6n el modo de grBfico, podemo, u(ili=ar la, funcione,
in(egrada, para e,cri'ir (e1(o en la pan(alla8 7 podemo, ,u,(i(uir di,(in(a, fuen(e, por
la, fune(e, in(egrada,/ 4! ;indo%, proporciona una coleccin de funcione, para
di'u>ar figura, 7 l-nea, en modo de grBfico,/
0uando una compu(adora inicia en 4!:5!8 el con(rolador de video ,e e,(a'lece en 4odo de
video 3 ((e1(o a color8 8& columna, por 25 fila, de manera prede(erminada)/ 6n el modo de
376

(e1(o8 la, fila, ,e enumeran empe=ando de,de la par(e ,uperior de la pan(alla8 fila &/ 0ada fila
e, la al(ura de una celda de carBc(er8 7 u(ili=a la fuen(e ac(iva en e,e momen(o/ 3a, columna,
,e enumeran empe=ando de,de el lado i=.uierda de la pan(alla8 columna &/ 0ada columna e,
la anc*ura de una celda de carBc(er/
8uentes 3o, carac(ere, ,e genera de,de una (a'la re,iden(e en memoria de fuen(e de
carac(ere,/ 6l "#! permi(e a lo, programa, ree,cri'ir la, (a'la, de carac(ere, en (iempo de
e>ecucin8 por lo .ue puede mo,(rar,e fuen(e, per,onali=ada,/
P*ginas de texto de video 3a memoria de video en modo (e1(o ,e divide en varia, pBgina, de
video ,eparada,8 cada una de la, cuale, puede con(ener una pan(alla comple(a de (e1(o/ 3o,
programa, pueden mo,(rar una pBgina mien(ra, e,cri'en (e1(o en o(ra, ocul(a,8 7 pueden
cam'iar rBpidamen(e de una pBgina a o(ra/ 6n lo, d-a, de la, aplicacione, 4!:5! de al(o
rendimien(o8 a menudo era nece,ario man(ener varia, pan(alla, de (e1(o en memoria al
mi,mo (iempo/ 0on la popularidad ac(ual de la, in(erface, grBfica,8 e,(a carac(er-,(ica de la,
pBgina, de (e1(o 7a no e, impor(an(e (la funcin &5* de #NT 1&* e,(a'lece la pBgina de video
ac(ual)/ 3a pBgina de video prede(erminada e, la pBgina &/
Atributos 0omo ,e ilu,(ra en lo, ,iguien(e, diagrama,8 a cada carBc(er de la pan(alla ,e le
a,igna un '7(e de a(ri'u(o8 el cual con(rola el color del carBc(er (conocido como color de texto)
7 el color de la pan(alla de(rB, del carBc(er (conocido como fondo)/

0ada po,icin en la pan(alla de video con(iene un ,olo carBc(er8 >un(o con ,u propio atributo
(color)/ 6l a(ri'u(o ,e almacena en un '7(e ,eparado8 de,puD, del carBc(er en la memoria/ 6n
la ,iguien(e figura8 (re, po,icione, en la pan(alla con(ienen la, le(ra, 9"02

Destello 3o, carac(ere, en la pan(alla de video pueden de,(ellar/ Para ello8 el con(rolador de
video invier(e lo, colore, de (e1(o 7 de fondo de un carBc(er8 a una velocidad prede(erminada/
5e manera prede(erminada8 cuando una P0 inicia en el modo de 4!:5!8 el de,(ello e,(B
*a'ili(ado/ 6, po,i'le de,ac(ivarlo median(e una funcin del "#! de video/ 9demB,8 el
de,(ello e,(B de,ac(ivado de manera prede(erminada cuando ,e a're una ven(ana de
emulacin de 4!:5! en 4! ;indo%,/
0on(rol del color 0on(rol del color 0on(rol del color 0on(rol del color
377

4e=cla de colore, primario, 4e=cla de colore, primario, 4e=cla de colore, primario, 4e=cla de colore, primario,
0ada pi1el de color en una pan(alla de video 0<T ,e genera u,ando (re, ra7o, de elec(rone,
,eparado,/ <o>o8 verde 7 9=ul/ Cn cuar(o canal con(rola la in(en,idad (o(al8 o 'rillo del pi1el/ Por
lo (an(o8 (odo, lo, colore, de (e1(o di,poni'le ,e pueden pre,en(ar median(e valore, 'inario,
de 4 'i(,8 en la ,iguien(e forma (# R in(en,idad8 < R ro>o8 + R verde8 9 R a=ul)/ 6l ,iguien(e
diagrama mue,(ra la compo,icin de un pi1el 'lanco2

9l me=clar lo, (re, colore, primario, pueden generar,e nuevo, colore,/ 9demB,8 al encender el
'i( de in(en,idad podemo, *acer lo, colore, me=clado, mB, 'rillan(e,/
6>emplo de me=cla de colore,
4e=cla e,(o,
colore, primario,
Para o'(ener
e,(e
color
9grega el 'i( de
in(en,idad
ro>o E verde E a=ul gri, o,curo 'lanco
verde E a=ul c7an c7an 'lanco
ro>o E a=ul magen(a magen(a claro
ro>o E verde cafD amarillo
(ningAn color) negro gri, o,curo

3o, colore, primario, e,(ilo 4!:5! 7 lo, colore, mi1(o, ,e compilan en una li,(a de (odo, lo,
po,i'le, colore, de 4 'i(,/8 como ,e mue,(ra en la ,iguien(e (a'la/ 0ada color en la columna de
la derec*a (iene ac(ivado ,u 'i( de in(en,idad/
0odificacin de (e1(o a color de cua(ro 'i(,
#<+9 #<+9 #<+9 #<+9 0olor 0olor 0olor 0olor #<+9 #<+9 #<+9 #<+9 0olor 0olor 0olor 0olor
&&&& negro 1&&& gri,
378

&&&1 a=ul 1&&1 a=ul claro
&&1& verde 1&1& verde claro
&&11 c7an 1&11 c7an claro
&1&& ro>o 11&& ro>o claro
&1&1 magen(a 11&1 magen(a claro
&11& cafD 111& amarillo
&111 gri, claro 1111 'lanco

"7(e, de a(ri'u(o, "7(e, de a(ri'u(o, "7(e, de a(ri'u(o, "7(e, de a(ri'u(o,
6n el modo de (e1(o a color8 a cada carBc(er ,e le a,igna un '7(e de a(ri'u(o,8 el cual con,i,(e
en do, cdigo, de colore, de 4 'i(,2 fondo 7 color de (e1(o2

Destello $a7 una complicacin en e,(e e,.uema ,imple de colore,/ !i el adap(ador de video
(iene *a'ili(ado el de,(ello8 el 'i( ,uperior de color de fondo con(rola el de,(ello de carBc(er/
0uando e,(e 'i( ,e ac(iva8 el carBc(er de,(ella2

J 5e,(ello *a'ili(ado
0uando e,(B *a'ili(ado el de,(ello8 ,lo lo, colore, de 'a>a in(en,idad en la columna i=.uierda
de la (a'la an(erior e,(Bn di,poni'le, como colore, de fondo (negro8 a=ul8 verde8 c7an8 ro>o8
magen(a8 cafD 7 gri, claro)/ 6l color prede(erminado cuando ,e inicia 4!:5! e, el &&&&&111
'inario (gri, claro ,o're fondo negro)/
"onstruccin de los bytes de atributos Para con,(ruir un '7(e de a(ri'u(o, de video a par(ir
de do, colore, (color de (e1(o 7 de fondo)8 de'emo, u,ar el operador !$3 de en,am'lador para
de,pla=ar lo, 'i(, del color de fondo cua(ro po,icione, a la i=.uierda8 7 aplicarle < en(re e,o,
'i(, 7 el color de (e1(o/ Por e>emplo8 la, ,iguien(e, in,(ruccione, crean un a(ri'u(o de (e1(o gri,
claro ,o're un fondo a=ul2
azul ( %
379

gris!laro ( %%%b
mov b', (azul S\4 ;) O- gris!laro 0 """%"%%%
3a, ,iguien(e, in,(ruccione, crean carac(ere, 'lanco, ,o're un fondo ro>o2
blanco ( %%%%b
roo ( %""b
mov b', (roo S\4 ;) O- blanco 0 "%""%%%%
3a, ,iguien(e, l-nea, producen le(ra, a=ule, ,o're un fondo cafD2
azul ( %
caf^ ( %%"b
mov b',((caf^ S\4 ;) O- azul) 0 "%%""""%
3a, funcione, 7 colore, pueden aparecer un poco di,(in(o, al e>ecu(ar el mi,mo programa en
diferen(e, ,i,(ema, opera(ivo,/ Por e>emplo8 en ;indo%, 2&&& 7 HP el de,(ello e,(B
de,*a'ili(ado8 al meno, .ue cam'iemo, a modo de pan(alla comple(a/ 3o mi,mo ,e aplica
para la vi,uali=acin de grBfico, median(e #NT 1&*/


Funcione, de video de #NT 1&* Funcione, de video de #NT 1&* Funcione, de video de #NT 1&* Funcione, de video de #NT 1&*
3a ,iguien(e (a'la pre,en(a la, funcione, #NT 1&* de u,o mB, frecuen(e/ $a'laremo, ,o're
cada una de ella, por ,eparado8 con ,u propio e>emplo cor(o/ 61plicaremo, la, funcione, &0* 7
&5* *a,(a la ,eccin de grBfico,/
Funcione, ,elec(a, de #NT 1&*/
NAmero de NAmero de NAmero de NAmero de
funcin funcin funcin funcin
5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
& 6,(a'lece la pan(alla de video a un de lo, modo, de (e1(o o de grBfico,
1 6,(a'lece la, l-nea, del cur,or8 con la cual ,e con(rola la forma 7 el
(ama@o del mi,mo
2 Po,iciona el cur,or en la pan(alla
3 '(iene la po,icin del cur,or en la pan(alla 7 ,u (ama@o
6 5e,pla=a una ven(ana en la pBgina de video ac(ual *acia arri'a8
38:

,u,(i(u7endo la, l-nea, de,pla=ada, con e,pacio, en 'lanco
7 5e,pla=a una ven(ana en la pBgina de video ac(ual *acia a'a>o8
,u,(i(u7endo la, l-nea, de,pla=ada, con e,pacio, en 'lanco
8 3ee el carBc(er 7 ,u a(ri'u(o en la po,icin ac(ual del cur,or
P 6,cri'e un carBc(er 7 ,u a(ri'u(o en la po,icin ac(ual del cur,or
&9* 6,cri'e un carBc(er en la po,icin ac(ual del cur,or8 ,in cam'iar el
a(ri'u(o de color
&0* 6,cri'e un pi1el de grBfico, en la pan(alla8 en modo de grBfico,
&5* 3ee un color de un pi1el de grBfico, individual8 en la u'icacin dada
&F* '(iene informacin ,o're el modo de video
1&* 6,(a'lece lo, modo, de de,(elloGin(en,idad
13* 6,cri'e una cadena en modo de (ele(ipo
16* 6,cri'e una cadena en la pan(alla8 en modo de (ele(ipo

6, convenien(e pre,ervar lo, regi,(ro, de prop,i(o general (median(e PC!$) an(e, de llamara
a #NT 1&*8 7a .ue la, di,(in(a, ver,ione, del "#! no ,on con,i,(en(e, en lo, regi,(ro, .ue
pre,ervan/

6,(a'lecer modo de video (&&*) 6,(a'lecer modo de video (&&*) 6,(a'lecer modo de video (&&*) 6,(a'lecer modo de video (&&*)
3a funcin & de #NT 1&* no, permi(e e,(a'lecer el modo de video ac(ual a uno de lo, modo,
de (e1(o o de grBfico,/ 3a ,iguien(e (a'la pre,en(a lo, modo, de (e1(o .ue ,e u(ili=an con mB,
frecuencia2
4odo, de (e1(o de video, reconocido, po( #NT 1&*/
4odo 4odo 4odo 4odo <e,olucin (columna, 1 fila,) <e,olucin (columna, 1 fila,) <e,olucin (columna, 1 fila,) <e,olucin (columna, 1 fila,) NAmero de colore, NAmero de colore, NAmero de colore, NAmero de colore,
& 4& 1 25 16
1 4& 1 25 16
2 8& 1 25 16
3 8& 1 25 16
38"

7oa 8& 1 25 2
14* 132 1 25 16
J4ni(or minocromB(ico/
6, convenien(e o'(ener el modo de video ac(ual (funcin &F* de #NT 1&*) 7 guardarlo en una
varia'le an(e, de a,ignarle un nuevo valor/ 5e,puD, podemo, re,(aurar el modo de video
original cuando (erminemo, nue,(ro programa/ 3a ,iguien(e (a'la mue,(ra cmo e,(a'lecer el
modo de video/
Funcin & #NT 1&* Funcin & #NT 1&* Funcin & #NT 1&* Funcin & #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece el modo de video
<eci'e <eci'e <eci'e <eci'e 9$ R &
93 R modo de video
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',"
mov al, 7 0 modo de video 7 (te1to a color)
No(a, No(a, No(a, No(a, 3a pan(alla ,e 'orra de manera au(omB(ica8 a meno, .ue
,e ac(ive el 'i( ,uperior en 938 an(e, de llamar a e,(a
funcin

6,(a'lecer l-nea, del cur,or (&1*) 6,(a'lecer l-nea, del cur,or (&1*) 6,(a'lecer l-nea, del cur,or (&1*) 6,(a'lecer l-nea, del cur,or (&1*)
3a funcin &1* de #NT 1&*8 como ,e mue,(ra en la ,iguien(e (a'la8 e,(a'lece el (ama@o del
cur,or de (e1(o/ Z,(e ,e mue,(ra u,ando l-nea, de e1ploracin inicial 7 final8 la, cuale, pueden
con(rolar ,u (ama@o/ 3o, programa, de aplicacione, pueden *acer e,(o para mo,(rar el e,(ado
ac(ual de una operacin/ Por e>emplo8 un edi(or de (e1(o podr-a incremen(ar el (ama@o del
cur,or cuando ,e ac(ive la (ecla "lo.NAm[ al oprimirla o(ra ve=8 el cur,or regre,a a ,u (ama@o
original/
Funcin &1 de #NT 1&* Funcin &1 de #NT 1&* Funcin &1 de #NT 1&* Funcin &1 de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece la, l-nea, del cur,or
<eci'e <eci'e <eci'e <eci'e 9$ R &1*
38#

0$ R l-nea ,uperior
03 R l-nea inferior
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',%
mov c1, "/"M 0 tamaJo predeterminado de cursor
a color
int %"'
No(a, No(a, No(a, No(a, 3a pan(alla de video a color u(ili=a oc*o l-nea, para ,u cur,or

6l cur,or ,e de,cri'e como una ,ecuencia de l-nea, *ori=on(ale,8 en donde la l-nea & ,e
encuen(ra en la par(e ,uperior/ 6l cur,or a color prede(erminado empie=a en la l-nea 6 7
(ermina en la l-nea 78 como ,e mue,(ra en la ,iguien(e figura2
&
1
2
3
4
5
6 :V !uperior
7 :V #nferior

6,(a'lecer la po,icin del cur,or (&2*) 6,(a'lecer la po,icin del cur,or (&2*) 6,(a'lecer la po,icin del cur,or (&2*) 6,(a'lecer la po,icin del cur,or (&2*)
3a funcin 2 de #NT 1&* lcali=a el cur,or en la fila 7 columna e,pec-fica, en la pBgina de video
de eleccin8 como puede ver,e en la ,iguien(e (a'la/
Funcin &2* de #NT 1&* Funcin &2* de #NT 1&* Funcin &2* de #NT 1&* Funcin &2* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lecer la po,icin del cur,or
381

<eci'e <eci'e <eci'e <eci'e 9$ R 2
5$8 53 R valore, de fila8 columna
"$ R pBgina de video
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', .
mov d', %" 0 fila %"
mov dl, ." 0 columna ."
mov b', " 0 pIgina de video "
int %"'
No(a, No(a, No(a, No(a, Para lo, modo, de 8& 1 258 5$ R & a 248 53 R & a 7P



'(ener po,icin 7 (ama@o del '(ener po,icin 7 (ama@o del '(ener po,icin 7 (ama@o del '(ener po,icin 7 (ama@o del cur,or (&3*) cur,or (&3*) cur,or (&3*) cur,or (&3*)
3a funcin 3 de #NT 1&*8 .ue ,e mue,(ra en la ,iguien(e (a'la8 devuelve la po,icin de la fila 7
columna del cur,or8 a,- como la, l-nea, inicial 7 final .ue de(erminan el (ama@o del cur,or/
6,(a funcin puede ,er 'a,(an(e A(il en lo, programa, en lo, .ue el u,uario de,pla=a el cur,or
alrededor de un menA/ 5ependiendo de en dnde ,e encuen(re el cur,or8 ,a'emo, .ue opcin
,e ,eleccion del menA/
Funcin &3* de #NT 1&* Funcin &3* de #NT 1&* Funcin &3* de #NT 1&* Funcin &3* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la po,icin 7 (ama@o del cur,or
<eci'e <eci'e <eci'e <eci'e 9$ R 3
"$ R pBgina de video
5evuelve 5evuelve 5evuelve 5evuelve 0$8 03 R l-nea, de e1ploracin inicial 7 final
5$8 53 R fila8 columna de la u'icacin del cur,or
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',7
383

mov b'," 0 pIgina de video "
int %"'
mov cursor, !:
mov posicin, D:

Mostrar y ocultar el cursor 6, A(il poder ocul(ar de manera (emporar el cur,r al mo,(rar
menA,8 e,cri'ir en forma con(-nua en la pan(alla o leer la en(rada del ra(n/ Para ocul(ar el
cur,or8 podemo, e,(a'lecer el valor de ,u l-nea ,uperior a un valor ilegar (grande)/ Para volver
a mo,(rar el cur,or8 devolvemo, la, l-nea, del cur,or a ,u, valore, prede(erminado, (l-nea, 6 7
7)2
Ocultar!ursor P-O!
mov a', 7 0 obtiene el tamaJo del cursor
int %"'
or c', 7"' 0 establece la fila superior a un valor
ilegal
mov a',% 0 establecer el tamaJo del cursor
int %"'
ret
Ocultar!ursor E8DP
2ostrar!ursor P-O!
mov a',7 0 obtiene el tamaJo del cursor
int %"'
mov a',% 0 establece el tamaJo del cursor
mov c1, "/"M' 0 tamaJo predeterminado
int %"'
ret
2ostrar!ursor E8DP
6,(amo, ignorando la po,i'ilidad de .ue el u,uario pueda *a'er e,(a'lecido el cur,or a un
(ama@o di,(in(o8 an(e, de ocul(arlo/ $e a.u- una ver,in al(erna(iva de 4o,(rar0ur,or 4o,(rar0ur,or 4o,(rar0ur,or 4o,(rar0ur,or .ue ,lo
385

'orra lo, 4 'i(, ,uperiore, de 0$ ,in (ocar lo, 4 'i(, inferiore,8 en donde ,e almacenan la,
l-nea, del cur,or2
2ostrar!ursor P-O!
mov a',7 0 obtiene el tamaJo del cursor
int %"'
mov a',% 0 establece el tamaJo del cursor
and c', "$' 0 borra los ; bits superiores
int %"'
ret
2ostrar!ursor E8DP
Por de,gracia8 e,(e mD(odo de ocul(ar el cur,or no ,iempre funciona/ Cn mD(odo al(erna(ivo e,
u(ili=ar la funcin &2* de #NT 1&* para po,icionar el cur,or fuera del 'orde de la pan(alla (fila
258 por e>emplo)/


5e,pla=ar ven(ana *acia arri'a (&6*) 5e,pla=ar ven(ana *acia arri'a (&6*) 5e,pla=ar ven(ana *acia arri'a (&6*) 5e,pla=ar ven(ana *acia arri'a (&6*)
3a funcin 6 de #NT 1&* de,pla=a (odo el (e1(o den(ro de un Brea rec(angular de la pan(alla
(conocida como ventana) *acia arri'a/ Cna ventana ,e define median(e coordenada, de fila 7
columna para ,u, e,.uina, ,uperior i=.uierda e inferior derec*a/ 3a pan(alla prede(erminada
de 4!:5! (iene la, fila, numerada, de & a 248 empe=ando de,de la par(e ,uperior8 7 la,
columna, & a 7P empe=ando de,de la i=.uierda/ Por lo (an(o8 una ven(ana .ue cu're (oda la
pan(alla comple(a a'arca de,de &8& *a,(a 2487P/ 6n la ,iguien(e figura8 lo, regi,(ro, 0$G03
definen la fila 7 la columna de la e,.uina ,uperior i=.uierda8 7 5$G53 definen la fila 7 la
columna de la e,.uina inferior derec*a/ 6,(a funcin no (iene un efec(o predeci'le ,o're la
po,icin del cur,or/
5efinicin de una ven(ana median(e el u,o de #NT 1&*/
386


9 medida .ue ,e de,pla=a una ven(ana *acia arri'a8 ,u l-nea inferior ,e ,u,(i(u7e por una l-nea
en 'lanco/ !i (oda, la, linea, ,e de,pla=an8 la ven(ana ,e 'orra (,e pone en 'lanco)/ 3a, l-nea,
.ue ,e de,pla=an fuera de la pan(alla no pueden recuperar,e/ 3a ,iguien(e (a'la de,cri'e la
funcin 6 de #NT 1&*/
Funcin &6* de #NT 1&* Funcin &6* de #NT 1&* Funcin &6* de #NT 1&* Funcin &6* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 5e,pla=a la ven(ana *acia arri'a
<eci'e <eci'e <eci'e <eci'e 9$ R 6
93 R nAmero de linea,a de,pla=ar (& R (oda,)
"$ R a(ri'u(o de video para el Brea en 'lanco
0$8 03 R fila8 columna de la e,.uina ,uperior i=.uierda de
la ven(ana
5$8 53 R fila8 columna de la e,.uina ,uperior derec*a de la
ven(ana
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',/ 0 desplaza la ventana 'acia arriba
mov al," 0 toda la ventana
mov c'," 0 fila superior iz@uierda
mov cl," 0 columna superior iz@uierda
mov d',.; 0fila inferior derec'a
mov dl, M+ 0 columna inferior derec'a
mov b',M 0 atributo para el Irea en blanco
387

int %"'

6>emplo2 e,cri'ir (e1(o en una ven(ana 6>emplo2 e,cri'ir (e1(o en una ven(ana 6>emplo2 e,cri'ir (e1(o en una ven(ana 6>emplo2 e,cri'ir (e1(o en una ven(ana
0uando la funcin 6 (o 7) de #NT 1&* de,pla=a una ven(ana8 e,(a'lece lo, a(ri'u(o, de la,
l-nea, de,pla=ada, den(ro de la ven(ana/ !i de,puD, e,cri'imo, (e1(o den(ro de la ven(ana
median(e una llamada a una funcin del 5!8 el (e1(o u(ili=arB lo, mi,mo colore, de (e1(o 7 de
fondo/ 6l ,iguien(e programa (5en-exto7asm) demue,(ra e,(a (Dcnia2
3I34E )entana de te1to a color ()en3e1to6asm)
0 2uestra una ventana a color 5 escribe te1to en su interior,
I8!49DE Irvine%/6inc
6data
mensae EF3ES O2ensae en la ventanaP,"
6code
main P-O!
mov a1,Zdata
mov ds,a1
0 Desplaza una ventana6
mov a1, "/""' 0 desplaza la ventana
mov b', (blue S\4 ;) O- 5ello= 0 atributo
mov c1, "<"A' 0 es@uina superior iz@uierda
mov d1, "A7"' 0 es@uina inferior derec'a
int %"'
0 Posiciona el cursor dentro de la ventana6
mov a',. 0 establece la posicin del cursor
mov d1,"M%;' 0 fila M, col ."
mov b'," 0 pIgina de video "
int %"'
388

0 Escribe te1to en la ventana6
mov d1, O$$SE3 mensae
call ,riteString
0 Espera un tecleo6
mov a',%"'
int %/'
e1it
main E8DP
E8D main
5e,pla=ar ven(ana *acia a'a>o (&7*) 5e,pla=ar ven(ana *acia a'a>o (&7*) 5e,pla=ar ven(ana *acia a'a>o (&7*) 5e,pla=ar ven(ana *acia a'a>o (&7*)
3a funcin para de,pla=a la ven(ana *acia a'a>o e, idDn(ica a la funcin &6*8 ,lo .ue el (e1(o
den(ro de la ven(ana ,e mueve *acia a'a>o/ C(ili=a lo, mi,mo, parBme(ro, de en(rada/
3eer carBce(r 7 a(ri'u(o ( 3eer carBce(r 7 a(ri'u(o ( 3eer carBce(r 7 a(ri'u(o ( 3eer carBce(r 7 a(ri'u(o (&8*) &8*) &8*) &8*)
3a funcin 8 de #NT 1&* devuelve el carBc(er 7 ,u a(ri'u(o en la po,icin ac(ual del cur,or/ 3o,
programa, pueden u,arla para leer (e1(o direc(amen(e de la pan(alla[ una (Dcnica conocida
como copiar a la pantalla (screen scraping)/ 3o, programa, podr-an conver(ir el (e1(o a vo=
para lo, u,uario, con di,capacidad vi,ual/

Funcin &8* de #NT 1&* Funcin &8* de #NT 1&* Funcin &8* de #NT 1&* Funcin &8* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 3ee el carBc(er 7 el a(ri'u(o en la po,icin ac(ual del cur,or
<eci'e <eci'e <eci'e <eci'e 9$ R 8
"3 R pBgina de video
5evuelve 5evuelve 5evuelve 5evuelve 93 R cdigo 9!0## del carBc(er
9$ R a(ri'u(o del carBc(er
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', #
mov b'," 0 pIgina de video "
389

int %"'
mov car, al 0 guarda el carIcter
mov atrib, a' 0 guarda el atributo

6,cri'ir carBc(er 7 a(ri'u(o (&P*) 6,cri'ir carBc(er 7 a(ri'u(o (&P*) 6,cri'ir carBc(er 7 a(ri'u(o (&P*) 6,cri'ir carBc(er 7 a(ri'u(o (&P*)
3a funcin P de #NT* e,cri'e una carBc(er a color en la po,icin ac(ual del cur,or/ 0omo
podemo, ver en la ,iguien(e (a'la8 e,(a funcin puede mo,(rar cual.uier carBc(er 9!0##8
inclu7endo lo, carac(ere, grBfico, re,peciale, del "#! .ue coinciden con lo, cdigo, 9!0## del
1 al 31/
Fun Fun Fun Funcin &P* de #NT 1&* cin &P* de #NT 1&* cin &P* de #NT 1&* cin &P* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e un carBc(er 7 el a(ri'u(o
<eci'e <eci'e <eci'e <eci'e 9$ R P
93 R cdigo 9!0## del carBc(er
"$ R pBgina de video
"3 R a(ri'u(o
0H R cuen(a de repe(icin
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a' +
mov al,HAH 0 carIcter AS!II
mov b'," 0 pIgina de video "
mov bl,M%' 0 atributo (azul sobre gris
claro)
mov c1,% 0 cuenta de repeticin
No(a, No(a, No(a, No(a, No avan=a el cur,or de,puD, de e,cri'ir el carBc(er/
Puede llamar,e en modod, de (e1(o 7 grBfico,

3a cuenta de repeticin en 0H e,pecif-ca cuan(a, vece, ,e va a repe(ir el carBc(er (no de'e
repe(ir,e mB, allB de la l-nea ac(ual de la pan(alla)/ Cna ve= .ue ,e e,cri'e un carBc(er8 *a7
39:

.ue llamar a la funcin 2 de #NT 1&* para avan=ar el cur,or ,i ,e van a e,cri'ir mB, carac(ere,
en la mi,ma l-nea/
6,cri'ir carBc(er (&9*) 6,cri'ir carBc(er (&9*) 6,cri'ir carBc(er (&9*) 6,cri'ir carBc(er (&9*)
3a funcin &9* de #NT 1&* e,cri'e un carBc(er en la pan(alla en la po,icin ac(ual8 ,in cam'iar
el a(ri'u(o ac(ual de la pan(alla/ 0omo ,e mue,(ra en la ,iguien(e (a'la8 e, idDn(ica a la funcin
P8 ,lo .ue no ,e e,pecifica el a(ri'u(o/
Funcin &9* de #NT 1&* Funcin &9* de #NT 1&* Funcin &9* de #NT 1&* Funcin &9* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e un carBc(er
<eci'e <eci'e <eci'e <eci'e 9$ R &9*
93 R carBc(er
"$ R pBgina de video
0H R cuen(a de repe(icin
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', "A'
mov al,HAH 0 carIcter AS!II
mov b'," 0 pIgina de video "
mov c1,% 0 cuenta de repeticin
int %"'
No(a, No(a, No(a, No(a, No avan=a el cur,or

'(ener informacin del modo de video (&F*) '(ener informacin del modo de video (&F*) '(ener informacin del modo de video (&F*) '(ener informacin del modo de video (&F*)
3a funcin &F* de #NT 1& devuelve informacin acerca del modo ac(ual de video8 inclu7endo el
nAmero del modo8 el nAmero de columna, en la pan(alla 7 el nAmero de pBgina ac(iva de
video8 como podemo, ver en la ,iguien(e (a'la/ 6,(a funcin e, A(il al principio de un
programa8 podemo, re,(a'lecer el modo de video (con la funcin & de #NT 1&*) al valor
guardado/
Funcin &F* de #NT 1&* Funcin &F* de #NT 1&* Funcin &F* de #NT 1&* Funcin &F* de #NT 1&*

39"

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la informacin ,o're el modo ac(ual de video
<eci'e <eci'e <eci'e <eci'e 9$ R &F*
5evuelve 5evuelve 5evuelve 5evuelve 93 R modo de pan(alla ac(ual
9$ R nAmero de columna, (carac(ere, o pi1ele,)
"$ R pBgina ac(iva de video
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a',"$'
int %"'
mov modov,al 0 guarda el modo
mov clumnas,a' 0 guarda las columnas
mov pagina,b' 0 guarda la pIgina
No(a, No(a, No(a, No(a, Tra'a>a en modo de (e1(o 7 de grBfico,

6,(a'lecer modo de de,(ello e in(en,idad (1&*[ &3*) 6,(a'lecer modo de de,(ello e in(en,idad (1&*[ &3*) 6,(a'lecer modo de de,(ello e in(en,idad (1&*[ &3*) 6,(a'lecer modo de de,(ello e in(en,idad (1&*[ &3*)
3a funcin 1&* de #NT 1&* (iene varia, ,u'funcione, A(ile,8 inclu7endo la nAmero &3*8 .ue
permi(e .ue el 'i( ,uperior de un a(ri'u(o de color con(role la in(en,(idad o el de,(ello del
carBc(er/ 6n la ,iguien(e (a'la podremo, con,ul(ar lo, de(alle,2
Funcin 1&* de #NT 1&*8 ,u'funcin &3*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece el modo de de,(ello e in(en,idad
<eci'e <eci'e <eci'e <eci'e 9$ R 1&*
93 R 3
"3 R modo de de,(ello (& R *a'ili(a in(en,idad8 1 R *a'ili(a
de,(ello)
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', %"'
mov al,7
mov bl,% 0 'abilita el destello
39#

int %"'
No(a, No(a, No(a, No(a, 0am'ia el (e1(o en la pan(alla8 en(re el modo de de,(ello 7
el modo de al(a in(en,idad8 el de,(ello ,olo puede ocurri
cuando la aplicacin ,e e>ecu(a en modo de pan(alla
comple(a

6,cri'ir cadena en modo (ele(ipo (13*) 6,cri'ir cadena en modo (ele(ipo (13*) 6,cri'ir cadena en modo (ele(ipo (13*) 6,cri'ir cadena en modo (ele(ipo (13*)
3a funcin 13* de #NT 1&*8 .ue ,e mue,(ra en la ,iguien(e (a'la8 e,cri'e una cadena en la
pan(alla8 en una u'icacin e,pecificada por la fila 7 la columna/ 3a cadena puede con(ener de
manera opcional (an(o carac(ere, como valore, de a(ri'u(o,/ 6,(a funcin puede u,ar,e en
modo de (e1(o o de grBfico,/
Funcin 13* de #NT 1&* Funcin 13* de #NT 1&* Funcin 13* de #NT 1&* Funcin 13* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e una cadena en modo de (ele(ipo
<eci'e <eci'e <eci'e <eci'e 9$ R 13*
93 R modo de e,cri(ura (ver a'a>o)
"$ R pBgina de video
"3 R a(ri'u(o (,i 93 R &&* o &1*)
0H R longi(ud de la cadena (cuen(a de carac(ere,)
5$8 53 R fila8 columna de la pan(alla
6!2"P R ,egmen(o2 de,pla=amien(o de la cadena
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
6data
cadena!olor EF3E GAH,%$'HEH,%!',H!H,%E',HDH,%!'
fila EF3E %"
columna EF3E ."
6code
mov a1, SES cadena!olor 0 establece el segmento ES
391

mov es,a1
mov a', %7' 0 escribe la cadena
mov al, . 0 modo de escritura
mov b'," 0 pIgina de video
mov c1,(SI[EO$ cadena!olor) V . 0 longitudad cadena
mov d', fila 0 fila inicial
mov dl, columna 0 columna inicial
mov bp,O$$SE3 cadena!olor 0 ES*EP apunta a la cadena
int %"'
No(a, No(a, No(a, No(a, Podemo, llamarlo cuando el adap(ador de pan(alla e,(B en modo de
(e1(o o de grBfico,/ +alore, del modo de e,cri(ura2
& R la cadena ,lo con(iene cdigo, de carac(ere,[ el cur,or
no ,e ac(uali=a de,puD, de la e,cri(ura 7 el a(ri'u(o e,(B en
"3/
1 R la cadena ,lo con(iene cdigo, de carac(ere,[ el cur,or
,e ac(uali=a de,puD, de la e,cri(ura 7 el a(ri'u(o e,(B en "3/
2 R la cadena con(iene cdigo de carac(ere, 7 el '7(e de
a(ri'u(o,8 al(erando uno 7 uno[ la po,icin del cur,or no ,e
ac(uali=a de,puD, de la e,cri(ura/
3 R la cadena con(iene cdigo de carac(ere, 7 el '7(e de
a(ri'u(o,8 al(erando uno a uno[ la po,icin del cur,or ,e
ac(uali=a de,puD, de la e,cri(ura/

5i'u>o de grBfico, median(e #NT 1&* 5i'u>o de grBfico, median(e #NT 1&* 5i'u>o de grBfico, median(e #NT 1&* 5i'u>o de grBfico, median(e #NT 1&*
3a funcin &0* de #NT 1&* di'u>a un p-1el individual en modo de grBfico,/ Podr-amo, u(ili=arlo
para di'u>ar forma, 7 l-nea, comple>a,8 pero e, dema,iado len(o/ Para aprender lo,
fundamen(o,8 empe=aremo, con e,(a funcin 7 mB, adelan(e veremo, cmo di'u>ar grBfico,8
e,cri'iendo diec(amen(e en la <94 del video/
Podemo, di'u>ar (e1(o en la pan(alla u(ili=ando la funcin P* de #NT 1&*8 cuando el adap(ador
de video ,e encuen(ra en modo de grBfico,/

393

9n(e, de di'u>ar p-1ele,8 de'emo, poner el adap(ador de video en uno de lo, modo, de
grBfico, e,(Bndar8 .ue ,e mue,(ra en la ,iguien(e (a'la/ 0ada modo puede e,(a'lecer,e
median(e el u,o de la funcin & de #NT 1&* (e,(a'lecer modo de video)/
4odo, grBfico, de video reconocido, por #NT 1&*
4odo 4odo 4odo 4odo <e,olucin (columna, H fi <e,olucin (columna, H fi <e,olucin (columna, H fi <e,olucin (columna, H fila,8 la,8 la,8 la,8
en p-1ele,) en p-1ele,) en p-1ele,) en p-1ele,)
NAmero de colore, NAmero de colore, NAmero de colore, NAmero de colore,
6 64& 1 2&& 2
&5* 32& 1 2&& 16
&6* 64& 1 2&& 16
&F* 64& 1 35& 2
1&* 64& 1 35& 16
11* 64& 1 48& 2
12* 64& 1 48& 16
13* 32& 1 2&& 256
69* 8&& 1 6&& 16

"oordenadas Para cada modo de video8 la re,olucin ,e e1pre,a como horizontal 9 vertical8 7
,e mide en p-1ele,/ 3a, coordenada, de la ven(ana var-an de 1 R &8 7 R & en la e,.uina
,uperior i=.uierda de la pan(alla8 hasta x Q 9Max 6/8 y Q :MAx F / en la e,.uina inferior
derec*a de la pan(alla/
Funcione, #NT 1&* relacionada, con p-1ele, Funcione, #NT 1&* relacionada, con p-1ele, Funcione, #NT 1&* relacionada, con p-1ele, Funcione, #NT 1&* relacionada, con p-1ele,
6,cri'ir p-1el de grBfico, (&0*) 6,cri'ir p-1el de grBfico, (&0*) 6,cri'ir p-1el de grBfico, (&0*) 6,cri'ir p-1el de grBfico, (&0*)
3a funcin &0* de #NT 1&*8 como ,e mue,(ra en la ,iguien(e (a'la8 di'u>a un pi1el en la
pan(alla cuando el con(rolador de video ,e encuen(ra en modo de grBfico,/ 3a funcin &0* ,e
e>ecu(a con muc*a len(i(ud8 en e,pecial cuando ,e di'u>an muc*o, p-1ele,/ 3a ma7or-a de la,
aplicacione, de video e,cri'en direc(amen(e a memoria de video de,puD, de calcular el
nAmero de colore, por pi1el8 la re,olucin *ori=on(al8 e(cD(era/
Funcin &0* de #NT 1&* Funcin &0* de #NT 1&* Funcin &0* de #NT 1&* Funcin &0* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,cri'e un p-1el de grBfico,
395

<eci'e <eci'e <eci'e <eci'e 9$ R &0*
93 R valor del pi1el
"$ R pBgina de video
0H R coordenada 1
5H R coordenada 7
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', "!'
mov al, )alorPi1el
mov b', pagina)ideo
mov c1, coordT1
mov d1, coordT5
int %"'
No(a, No(a, No(a, No(a, 3a pan(alla de video de'e e,(ar en modo de grBfico,/ 6l
rango de valore, de lo, p-1ele, 7 lo, rango, de la,
coordenada, dependen del modo de grBfico, ac(ual/ !i el
'i( 7 ,e ac(iva en 938 ,e aplica un H< al nuevo p-1el con el
con(enido ac(ual del p-1el (permi(iendo .ue ,e 'orre)

3eer p-1el de 3eer p-1el de 3eer p-1el de 3eer p-1el de grBfico, (&5*) grBfico, (&5*) grBfico, (&5*) grBfico, (&5*)
3a funcin &5*8 .ue ,e mue,(ra a con(inuacin8 lee un p-1el de grBfico, de la pan(alla8 en la
po,icin indicada por la fila 7 columna8 devuelve el valor del pi1el en 93/
Funcin &5* de #NT 1&* Funcin &5* de #NT 1&* Funcin &5* de #NT 1&* Funcin &5* de #NT 1&*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 3ee un p-1el de grBfico,
<eci'e <eci'e <eci'e <eci'e 9$ R &5*
"$ R pBgina de video
0H R coordenada 1
5H R coordenada 7
396

5evuelve 5evuelve 5evuelve 5evuelve 93 R valor del p-1el
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a', "D'
mov b', " 0 pIgina de video "
mov c1, coordT1
mov d1, coordT5
int %"'
mov varloPi1el, al
No(a, No(a, No(a, No(a, 3a pan(alla de video de'e e,(ar en modo de grBfico,/ 6l
rango de valore, de lo, p-1ele, 7 lo, rango, de la,
coordenada, dependen del modo de grBfico, ac(ual




Yrafico, de mapa, de memoria Yrafico, de mapa, de memoria Yrafico, de mapa, de memoria Yrafico, de mapa, de memoria
Ka *emo, vi,(o cmo el proce,o de di'u>ar p-1ele, median(e #NT 1&* e, dema,iado len(o8
e1cep(o para la, ,alida de grBfico, mB, rudimen(aria/ !e e>ecu(a una can(idad con,idera'le de
cdigo cada ve= .ue el "#! di'u>a un p-1el/ 9*ora podemo, ver una manera mB, eficien(e de
di'u>ar grBfico,8 como ,e *ace en el ,of(%are profe,ional/ 6,cri'iremo, lo, da(o, de grBfico,
direc(amen(e a la <94 de video (+<94)8 a (ravD, de lo, puer(o, de en(rada:,alida/
4odo 13*2 32& 1 2&&8 256 colore, 4odo 13*2 32& 1 2&&8 256 colore, 4odo 13*2 32& 1 2&&8 256 colore, 4odo 13*2 32& 1 2&&8 256 colore,
6l modo de video 13* e, el modo mB, ,encillo de u(ili=ar para lo, grBfico, de mapa, de
memoria/ 3o, p-1ele, de la pan(alla ,e a,ignan como un arreglo 'idimen,ional de '7(e,8 1 '7(e
por p-1el/ 6l arreglo empie=a con el p-1el en la e,.uina ,uperior i=.uierda de la pan(alla 7
con(inAa a lo largo de la l-nea ,uperior para 32& '7(e,/ 6l '7(e en el de,pla=amien(o 32& ,e
a,igna al primer p-1el en la ,egunda l-nea de la pan(alla8 .ue con(inAa en forma ,ecuencial a lo
largo de la pan(alla/ 6l re,(o de la, l-nea, ,e a,ignan de manera ,imilar/ 6l Al(imo '7(e en el
arreglo ,e a,igna al p-1el en la e,.uina inferior derec*a de la pan(alla/ QPor .u@e u(ili=ar (odo
un '7(e para cada p-1elM Por.ue el '7(e con(iene una eferencia a uno de 256 valore, di,(in(o,
de color/
'nstruccin #U- 3o, valore, de p-1el 7 de color ,e (ra,mi(en al *ard%are del adap(ador de
video median(e el u,o de la in,(ruccin CT (,alida a puer(o)/ 3a direccin de puer(o de 16 'i(,
,e a,igna a 5H[ 7 el valor .ue ,e env-a al puer(o ,e encuen(ra en 938 9H o 69H/ Por e>emplo8 la
397

pale(a de color de video ,e encuen(ra en la direccin de puer(o 308*/ 3a, ,iguien(e,
in,(ruccione, env-an el valor 2&* al puer(o2
mov d1, 7!#' 0 direccin de puerto
mov al, ."' 0 valor a enviar
O93 d1,al 0 envAa el valor al puerto
Rndices de color 3o in(ere,an(e acerca de lo, colore, en el modo 13* e, .ue cada en(ero de
color no indica direc(amen(e un color/ 6n ve= de ello8 repre,en(a a un -ndice en una (a'la de
colore,8 conocida como paleta (imagen mostrada a continuacin)/






0onver,in de -ndice, de color de p-1el a colore, de pan(alla/

0ada en(rada en la pale(a con,i,(e en (re, valore, en(ero, (de & a 63)8 conocido, como <Y"
(ro>o8 verde8 a=ul)/ 3a en(rada & en la pale(a de colore, con(rola el color de fondo de la
pan(alla/
Podemo, crear 2628144 colore, di,(in(o, (64O3) con e,(e e,.uema/ !lo pueden mo,(rar,e
256 colore, di,(in(o, en un momen(o dado8 pero nue,(ro programa puede modificar la pale(a
en (iempo de e>ecucin8 para variar lo, colore, de la pan(alla/ 3o, ,i,(ema, opera(ivo,
moderno,8 como ;indo%, 7 3inu18 ofrecen (por lo meno,) colore de 24 'i(,8 en donde cada
398

valor <Y" (iene un rango de & a 255/ 6,e e,.uema ofrece 256O3 (16/7 millone,) colore,
di,(in(o,/
0olore, <Y" 0olore, <Y" 0olore, <Y" 0olore, <Y"
3o, colore, <Y" ,e 'a,an en la me=cla adi(iva de la lu=8 en con(ra,(e al mD(odo de re,(a .ue
,e u(ili=a al me=clar la pin(ura l-.uida/ Por e>emplo8 con la me=cla adi(iva podemo, crear el
color negro man(eniendo (odo, lo, nivele, de in(en,idad de color en cero/ Por o(ro lado8 el
color 'lanco ,e crea e,(a'leciendo (odo, lo, nivele, de color en 63 (mB1imo)/ 5e *ec*o8 7
como ,e demue,(ra en la ,iguien(e (a'la8 cuando lo, (re, nivele, ,on iguale, o'(enemo,
di,(in(a, (onalidade, de gri,/
<o>o <o>o <o>o <o>o +erde +erde +erde +erde 9=ul 9=ul 9=ul 9=ul 0olor 0olor 0olor 0olor
& & & negro
2& 2& 2& gri, o,curo
35 35 35 gri, mediano
5& 5& 5& gri, claro
63 63 63 'lanco

3o, colore, puro, ,e cean e,(a'leciendo (odo, meno, un nivel de color a cero/ Para o'(ener
un color claro8 ,e incremen(a lo, o(ro, do, colore, en can(idade, iguale,/ $e a.u- alguna,
variedade, del color ro>o2
<o>o <o>o <o>o <o>o +erde +erde +erde +erde 9=ul 9=ul 9=ul 9=ul 0olor 0olor 0olor 0olor
63 & & ro>o 'rillan(e
1& & & ro>o o,curo
3& & & ro>o mediano
63 4& 4& ro,a

3o, colore, a=ul 'rillan(e8 a=ul o,curo8 a=ul claro8 verde 'rillan(e8 verde o,curo8 verde claro ,e
cean de manera ,imilar/ 5e,de luego podemo, me=clar pare, de colore, en o(ra, can(idade,
para crear colore, como magen(a 7 lavanda/ 9 con(inuacin ,e mue,(ran alguno, e>emplo,2
<o>o <o>o <o>o <o>o +erde +erde +erde +erde 9=ul 9=ul 9=ul 9=ul 0olor 0olor 0olor 0olor
& 3& 3& c7an
399

3& 3& & amarillo
3& & 3& magen(a
4& & 63 lavan(a

Programacin del ra(n Programacin del ra(n Programacin del ra(n Programacin del ra(n
Por lo general8 el ra(n ,e conec(a a la (ar>e(a madre de la compu(adora a (ravD, de un puer(o
de ra(n P!:28 un puer(o ,erial <!:2328 un puer(o C!" o una cone1in inalBm'rica/ Para poder
de(ec(ar el ra(n8 4!:5! re.uiere .ue ,e in,(ale un programa con(rolador de di,po,i(ivo/ 4!
;indo%, (am'iDn cuen(a con con(roladore, de ra(n in(egrado,8 pero por a*ora no,
concen(raremo, en la, funcione, .ue proporciona 4!:5!/
3o, movimien(o, del ra(n ,e ra,(rean en una unidad de medida conocida como mic;eys/ Cn
micbe7 repre,en(a apro1imadamen(e 1G2&&& pulgada, de recorrido f-,ico del ra(n/ !e puede
e,(a'lecer la proporcin de micbe7, a p-1ele, para el ra(n8 cu7o valor prede(erminado e, de 8
micbe7, por cada 8 p-1ele, *ori=on(ale,8 7 16 micbe7, por cada 8 p-1ele, ver(icale,/ Tam'iDn
*a7 un um'ral de do'le velocidad8 cu7o valor prede(erminado e, de 64 micbe7, por ,egundo/

Funcione, #NT 33* para el ra(n Funcione, #NT 33* para el ra(n Funcione, #NT 33* para el ra(n Funcione, #NT 33* para el ra(n
#NT 33* proporciona informacin acerca del ra(n8 inclu7endo ,u po,icin ac(ual8 el Al(imo
'o(n .ue ,e oprimi8 la velocidad8 e(cD(era/ Podemo, u,arla para mo,(rar u ocul(ar el cur,or
del ra(n/ 6n e,(a ,eccin veremo, alguna, de la, funcione, mB, e,enciale, del ra(n/ #NT 33*
e,cri'e el nAmero de funcin en el regi,(ro 9H8 en ve= de 9$ (.ue e, la norma para la,
in(erupcione, del "#!)/
<e,(a'lecer el ra(n 7 o'(ener el e,(ado <e,(a'lecer el ra(n 7 o'(ener el e,(ado <e,(a'lecer el ra(n 7 o'(ener el e,(ado <e,(a'lecer el ra(n 7 o'(ener el e,(ado
3a funcin & de #NT 33* re,(a'lece el ra(n 7 confirma .ue e,(D di,poni'le/ 6l ra(n (,i ,e
encon(r) ,e cen(ra en la pan(alla8 ,u pBgina de vi,uali=acin ,e e,(a'lece a la pBgina de video
&8 ,u pun(ero ,e ocul(a8 ,u, proporcione, de micbe7, a p-1ele, 7 ,u velocidad ,e e,(a'lecen a
valore, prede(erminado,/ 6l rango de movimien(o del ra(n ,e e,(a'lece a (oda el Brea de la
pan(alla/ 6n la ,iguien(e (a'la ,e mue,(ra lo, de(alle,2
Funcin & de #NT 33* Funcin & de #NT 33* Funcin & de #NT 33* Funcin & de #NT 33*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin <e,(a'lece el ra(n 7 o'(iene ,u e,(ado
<eci'e <eci'e <eci'e <eci'e 9H R &
5evuelve 5evuelve 5evuelve 5evuelve !i *a7 ,opor(e para el ra(n di,poni'le8 9H R FFFF* 7 "H R
5::

nAmero, de 'o(one, del ra(on[ en ca,o con(rario 9H R &
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1,"
int 77'
cmp ea1,"
e -aton8oDisponible
mov numeroDeEotones,b1
No(a, No(a, No(a, No(a, !i el ra(n era vi,i'le an(e, de e,(a llamada8 ,e ocul(a
median(e e,(a funcin

4o,(rar 7 ocul(ar el pun(ero del ra(n 4o,(rar 7 ocul(ar el pun(ero del ra(n 4o,(rar 7 ocul(ar el pun(ero del ra(n 4o,(rar 7 ocul(ar el pun(ero del ra(n
3a, funcione, 1 7 2 de #NT 33*8 .ue ,e mue,(ran en la, do, (a'la, ,iguien(e,8 mue,(ra 7
ocul(an el pun(er del ra(n8 re,pec(ivamen(e/ 6l con(rolador del ra(n man(iene un con(ador
in(erno8 .ue ,e incremen(a (,i e, di,(in(o de cero) median(e la, llamada, a la funcin 18 7 ,e
decremen(a median(e la, llamada, a la funcin 2/ 0uando el con(ador no e, nega(ivo8 ,e
mue,(ra el pun(ero de ra(n/ 3a funcin & (re,(a'lecer pun(ero del ra(n) e,(a'lece el con(ador
a :1/
Funcin 1 de #NT 33* Funcin 1 de #NT 33* Funcin 1 de #NT 33* Funcin 1 de #NT 33*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 4ue,(ra el pun(ero del ra(n
<eci'e <eci'e <eci'e <eci'e 9H R 1
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, %
int 77'
No(a, No(a, No(a, No(a, 6l con(rolador del ra(n man(iene un con(eo del nAmero de
vece, .ue ,e llama a e,(a funcin/ !uma 1 a ,u con(ador
in(erno para mo,(rarGocul(ar

Funcin 2 de #NT 33*

5:"

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin cul(ar el pun(ero del ra(n
<eci'e <eci'e <eci'e <eci'e 9H R 2
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, .
int 77'
No(a, No(a, No(a, No(a, 6l con(rolador del ra(n con(inAa ra,(reando la po,icin del
mi,mo/ <e,(a 1 a ,u con(ador in(erno para mo,(rarGocul(ar



'(ener po,icin 7 e,(ado del ra(n '(ener po,icin 7 e,(ado del ra(n '(ener po,icin 7 e,(ado del ra(n '(ener po,icin 7 e,(ado del ra(n
3a funcin 3 de #NT 33* o'(iene la po,icin 7 el e,(ado del ra(n/ 6n la ,iguien(e (a'la ,e
mue,(ran lo, de(alle, ,o're e,(a funcin2
Funcin de 3 #NT 33* Funcin de 3 #NT 33* Funcin de 3 #NT 33* Funcin de 3 #NT 33*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la po,icin 7 el e,(ado del ra(n
<eci'e <eci'e <eci'e <eci'e 9H R 3
5evuelve 5evuelve 5evuelve 5evuelve "H R e,(ado de lo, 'o(one, del ra(n
0H R coordenada H (en p-1ele,)
5H R coordenada 7 (en p-1ele,)
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, 7
int 77'
test b1, %
ne EotonTIz@TOprimido
test b1, .
ne EotonTDerTOprimido
test b1,;
5:#

ne EotonT!entTOprimido
mov coord:, c1
mov coordF, d1
No(a, No(a, No(a, No(a, 6l e,(ado de lo, 'o(one, del ra(n ,e devuelve en "H de la
,iguien(e manera2 !i e,(B ac(ivo el 'i( &8 el 'o(n i=.uierdo
e,(B oprimido[ ,i e,(B ac(ivo el 'i( 18 el 'o(n derec*o e,(B
oprimido8 ,i e,(B ac(ivo el 'i( 28 el 'o(n cen(ral e,(B
oprimido/

"onversin de coordenadas de pxel a coordenadas de car*cter 3a, fuen(e, de (e1(o
e,(Bndar en 4!:5! ,on de 8 p-1ele, de anc*o por 16 p-1ele, de al(o8 por lo .ue podemo,
converi(r la, coordenada, de p-1ele, a coordenada, de carBc(er8 dividiendo la, primera, en(re
el (ama@o del carBc(er/ !uponiendo .ue (an(o lo, p-1ele, como lo, carac(ere, empie=an a
enumerar,e de,de cero8 la ,iguien(e frmula convier(e una coordenada de p-1el P a una
coordenada de carBc(er 08 u,ando la medida de carBc(er 42
! ( int(PV2)
Por e>emplo8 vamo, a ,uponer .ue lo, carac(ere, (ienen 8 p-1ele, de anc*o/ !i la coordenada
H devuel(a por la funcin 3 de #NT 33* e, 1&& (p-1ele,)8 la coordenada caer-a den(ro de la
po,icin carBc(er 1220 R in((1&&G8)/
6,(a'lecer la po,icin del ra(n 6,(a'lecer la po,icin del ra(n 6,(a'lecer la po,icin del ra(n 6,(a'lecer la po,icin del ra(n
3a funcin 4 de #NT 33*8 .ue ,e mue,(ra en la ,iguien(e (a'la8 de,pla=a la po,icin del ra(n a
la, coordenada, de p-1el H 7 K e,pecificada,/
Funcin 4 de #NT 33* Funcin 4 de #NT 33* Funcin 4 de #NT 33* Funcin 4 de #NT 33*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece la po,icin del ra(n
<eci'e <eci'e <eci'e <eci'e 9H R 4
0H R coordenada H (en p-1ele,)
5H R coordenada K (en p-1ele,)
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de 3lamada de 3lamada de 3lamada de e>emplo e>emplo e>emplo e>emplo
mov a1, ;
mov c1, ."" 0 posicin :
5:1

mov d1, %"" 0 posicin F
int 77'
No(a, No(a, No(a, No(a, !i la po,icin ,e encuen(ra den(ro de un Brea de e1clu,in8
el ra(n no ,e mue,(ra en la pan(alla

"onversin de coordenadas de car*cter a coordenadas de pixel Podemo, conver(ir una
coordenada de carBc(er de la pan(alla a una coordenada de p-1el8 u,ando la ,iguien(e frmula8
en donde 0 R coordenada de carBc(er[ P R coordenada de p-1el 7 4 R medida del carBc(er2
P ( ! 1 2
6n la direccin *ori=on(al8 P ,erB la coordenada de p-1el del lado i=.uierdo de la celda del
carBc(er/ 6n la direccin ver(ical8 P ,erB la coordenada de p-1el de la par(e ,uperior de la celda
del carBc(er/ Por e>emplo8 ,i lo, carac(ere, (ienen 8 p-1ele, de anc*o 7 de,eamo, colocar el
ra(n en la celda del carBc(er 128 la coordenada H del p-1el .ue ,e encuen(ra mB, a la
i=.uierda de e,(a celda e, P6/
'(ener el e,(ado de lo, 'o(one, (,e oprimiG,e ,ol() '(ener el e,(ado de lo, 'o(one, (,e oprimiG,e ,ol() '(ener el e,(ado de lo, 'o(one, (,e oprimiG,e ,ol() '(ener el e,(ado de lo, 'o(one, (,e oprimiG,e ,ol()
3a funcin 5 devuelve el e,(ado de (odo, lo, 'o(one, del ra(n8 a,- como la po,icin del Al(imo
'o(n .ue ,e oprimi/ 6n en(orno de programacin con(rolado por even(o,8 un even(o arrastrar
,iempre empie=a con un 'o(n oprimido/ Cna ve= .ue ,e *ace una llamada a e,(a funcin para
un 'o(on en e,pecial8 el e,(ado del 'o(n ,e re,(a'lece8 7 una ,egunda llamada a la funcin no
devuelve nada2
Funcin 5 de #NT 33* Funcin 5 de #NT 33* Funcin 5 de #NT 33* Funcin 5 de #NT 33*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la informacin acerca de ,i ,e oprimi un 'o(n
<eci'e <eci'e <eci'e <eci'e 9H R 5
"H R #5 del 'o(n (& R i=.uierdo8 1 R derec*o8 2 R cen(ro)
5evuelve 5evuelve 5evuelve 5evuelve 9H R e,(ado del 'o(n
"H R con(ador de vece, .ue ,e oprimi el 'o(n
0H R coordenada H del Al(imo 'o(n .ue ,e oprimi
5H R coordenada K del Al(imo 'o(n .ue ,e oprimi
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo mov a18 5
5:3

mov '18 & [ #5 del 'o(n
in( 33*
(e,( a18 1 [ Q!e oprimi el 'o(n i=.uierdoM
>= ,al(ar
mov coordSH8 c1 [ no \ ,al(a
mov coordSK8 dc
No(a, No(a, No(a, No(a, 6l e,(ado del ra(n ,e devuelve en 9H de la ,iguien(e
manera[ !i e,(B ac(ivo el 'i( &8 el 'o(n i=.uierdo e,(B
oprimido[ ,i e,(B ac(ivo el 'i( 18 el 'o(n derec*o e,(B
oprimido[ ,i e,(B ac(ivo el 'i( 28 el 'o(n cen(ral e,(B
oprimido

3a funcin 6 o'(iene la informacin de cuando ,e ,uel(an lo, 'o(one, del ra(n8 como ,e
mue,(ra en la ,iguien(e (a'la/ 6n el programacin con(rolada por even(o,8 un even(o de clc del
ra(n ocurre cuando ,e ,uel(a uno de lo, 'o(one, del mi,mo/ 5e manera ,imilar8 un even(o
arrastrar (ermina cuando ,e ,uel(a el 'o(n del ra(n/
Funcin 6 de #NT 33*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin '(iene la informacin acerca de ,i ,e ,ol( el ra(n
<eci'e <eci'e <eci'e <eci'e 9H R 6
"H R #5 del ra(n (& R i=.uierda8 1 R derec*o8 2 R cen(ral)
5evuelve 5evuelve 5evuelve 5evuelve 9H R e,(ado del ra(n
"H R con(ador de vece, .ue ,e ,ol( el ra(n
0H R coordenada H del Al(imo 'o(n .ue ,e ,ol(
5H R coordenada K del Al(imo 'o(n .ue ,e ,ol(
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, /
mov b1," 0 ID del botn
int 77'
test a1,% 0 cse solt el botn iz@uierdoN
5:5

z saltar 0 no _ salta
mov coordT:, c1 0 si _ guarda las
coordenadas
mov coordTF, d1
No(a, No(a, No(a, No(a, 6l e,(ado del 'o(n ,e devuelve en 9H de la ,iguien(e
manera2 !i e,(B ac(ivo el 'i( &8 ,e ,ol( el 'o(n i=.uierdo[
,i e,(B ac(ivo el 'i( 18 ,e ,ol( el 'o(n derec*o[ ,i e,(B
ac(ivo el 'i( 28 ,e ,ol( el 'o(n cen(ral


6,(a'lecer lo, l-mi(e, *ori=on(al 7 ver(ical 6,(a'lecer lo, l-mi(e, *ori=on(al 7 ver(ical 6,(a'lecer lo, l-mi(e, *ori=on(al 7 ver(ical 6,(a'lecer lo, l-mi(e, *ori=on(al 7 ver(ical
3a, funcione, 7 7 8 de #NT 33*8 como ,e ilu,(ra en la, do, (a'la, ,iguien(e,8 no, permi(en
e,(a'lecer l-mi(e, a lo, lugare, a donde ,e puede mover el ra(n en la pan(alla/ Para ello ,e
e,(a'lecen la, coordenada, mB1ima, 7 m-nima, del cur,or del ra(n/ !i e, nece,ario8 el
pun(ero del ra(n ,e mueve de manera .ue ,e encuen(re den(ro de lo, nuevo, l-mi(e,/
Funcin 7 de #NT 33*

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece lo, l-mi(e, *ori=on(ale,
<eci'e <eci'e <eci'e <eci'e 9H R 7
0H R coordenada H m-nima (en p-1ele,)
5H R coordenada H m-nima (en p-1ele,)
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, M
mov c1, %"" 0 establece el rango de : a
mov d1, M"" 0 (%"",M"")
int 77'

Funcn 8 de #NT 33*

5:6

5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin 6,(a'lece lo, l-mi(e, ver(icale,
<eci 'e <eci 'e <eci 'e <eci 'e 9H R 8
0H R coordenada K m-nima (en p-1ele,)
5H R coordenada K mB1ima (en p-1ele,)
5evuelve 5evuelve 5evuelve 5evuelve Nada
3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo 3lamada de e>emplo
mov a1, #
int 77'
mov c1, %"" 0 establecer el rango F a
mov d1, <"" 0 (%"", <"")
int 77'

Funcione, varia, del ra(n Funcione, varia, del ra(n Funcione, varia, del ra(n Funcione, varia, del ra(n
$a7 o(ra, funcione, de #NT 33* .ue ,on A(ile, para configurar el ra(n 7 con(rola ,u
compor(amien(o/ No *a'laremo, con de(alle ,o're e,(a, funcin8 pero ,e pre,en(a a
con(inuacin2
Funcin Funcin Funcin Funcin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin ParBme(o, de en(radaG,alida ParBme(o, de en(radaG,alida ParBme(o, de en(radaG,alida ParBme(o, de en(radaG,alida
9H R &F* 6,(a'lece el nAmero de micbe7, por cada 8
p-1ele,8 para el movimien(o *ori=on(al 7
ver(ical del ra(n
<eci'e2 0H R micbe7, *ori=on(ale,8 5H R micbe7,
ver(icale,/ 3o, valore, prede(erminado, ,on 0H R 88 5H
R 16
9H R 1&* 6,(a'lece el Bea de e1clu,in del ra(n
(evi(a .ue el ra(n en(re en un rec(Bngulo)
<eci'e2 0H8 5H R coordenada, H8 K de la e,.uina
,uperieor i=.uierda8 !#8 5# R coordenada, H8 K de la
e,.uina inferior derec*a
9H R 13* 6,(a'lece el um'ral de do'le velocidad <eci'e2 5H R velocidad de um'ral en micbe7, por
,egundo (el valor prede(erminado e, 64)
9H R 19* 6,(a'lece la ,en,i'ilidad 7 el um'ral del
ra(n
5evuelve "H R velocidad *ori=on(al8 0H R velocidad
ver(ical8 5H R um'ral de velocidad do'le
9H R 1F* 5e,*a'ili(a el con(rolador del ra(n 5evuelve2 !i no (iene D1i(o8 9H R FFFF*
9H R 2&* $a'ili(a el con(rolador del ra(n Ninguno
9H R 24* '(iene informacin ,o're el ra(n 5evuelve FFFF* ,i *a7 eror[ en ca,o con(rario8 devuelve2
"$ R nAmero ma7or de ver,in8 "3 R nAmero menor de
5:7

ver,in8 0$ R (ipo de ra(n (1 R 'u,8 2 R ,erial8 3 R
#nPor(8 4 R P!G28 5 R $P)[ 03 R nAmero de #<L (& para
ra(n P!G2)




16 16 16 16 Programaci Programaci Programaci Programacin e1per(a en 4! n e1per(a en 4! n e1per(a en 4! n e1per(a en 4!: :: :5! 5! 5! 5!
5efinicin de ,egmen(o, 5efinicin de ,egmen(o, 5efinicin de ,egmen(o, 5efinicin de ,egmen(o,
3o, programa, e,cri(o, para la, primera, ver,ione, de 49!4 (en-an .ue crear definicione,
'a,(an(e ela'orada, para lo, ,egmen(o, de cdigo8 da(o, 7 pila/ Todo, lo, in,(ruc(ore, ,e
,in(ieron aliviado, cuando llegaron la, direc(iva, ,implificada, de ,egmen(o (/code8 /,(acb 7
/da(a)/ !in em'argo8 (am'iDn .ued claro .ue lo, programadore, e1per(o, (al ve= prefer-an la
fle1i'ilidad en ve= de la ,implicidad8 7 ,e apegar-an a la forma (radicional de *acer la, co,a,/ !i
llegamo, a e,(e cap-(ulo ( 7 comprendimo, (odo, lo, cap-(ulo, an(eriore,)8 e,(aremo, li,(o,
para dominar lo, mi,(erio,o, de(alle, de la, direc(iva, e1pl-ci(a, de ,egmen(o/
!in em'argo8 en primer lugar vamo, a e1plorar la, diver,a, forma, en .ue pueden u,ar,e la,
direc(iva, ,implificada,8 ,lo en ca,o .ue ,a(i,fagan nue,(ra, nece,idade,/
5irec(iva, de ,egmen(o ,implificada, 5irec(iva, de ,egmen(o ,implificada, 5irec(iva, de ,egmen(o ,implificada, 5irec(iva, de ,egmen(o ,implificada,
0uando ,e u(ili=a la direc(iva /45638 el en,am'lador define de manera au(omB(ica a
5Y<CP para el ,egmen(o de da(o, cercano/ 3o, ,egmen(o, en 5Y<CP forman lo, da(o,
cercano,8 a lo, .ue por lo general8 ,e pueden acceder direc(amen(e a (ravD, de 5! o !!/
3a direc(iva /59T9 7 /59T9M crean un ,egmen(o de da(o, cercano8 .ue puede ,er de *a,(a
64?' cuando ,e e>ecu(a en modo de direccionamien(o real/ !e coloca en un grupo e,pecial
iden(ificado como 5Y<CP/ el cual e,(B limi(ado a 64?'/ 0uando /F9<59T9 7 /F9<59T9M ,e
u(ili=an en modelo, pe.ue@o, 7 mediano de memoria8 el en,am'lador crea lo, ,egmen(o, de
da(o, le>ano, llamado, F9<S59T9 7 F9<S"!!8 re,pec(ivamen(e
'dentificacin del segmento de una variable 9lguna, funcione, del "#! 7 de 5!
re.uieren el u,o de un regi,(ro de ,egmen(o, e,pec-fico para pa,ar lo, da(o, de lo,
argumen(o,/ Podemo, a,ignar la direccin de un ,egmen(o a un regi,(ro de ,egmen(o8 u,ando
el operador !6Y/ Por e>emplo8 el ,iguien(e fragmen(o de cdigo e,(a'lece 5! al ,egmen(o .ue
con(iene varle>ana varle>ana varle>ana varle>ana2
mov a1, SES varleana
mov ds, a1
5:8

!egmentos de cdigo 0omo ,a'emo,8 lo, ,egmen(o, de cdigo ,e definen median(e la
direc(#va /056/ 6n un programa en el modelo pe.ue@o de memoria8 la direc(iva /056 *ace
.ue el en,am'lador genere un ,egmen(o llamado ST6HT/ Podemo, ver e,(o en la ,eccin
!egmen(, and Yroup, (,egmen(o, 7 cdigo,) de un arc*ivo de li,(ado2
T3E:3 6 6 6 6 6%/ Eit """+ ,ord Public G!ODEH
6,(a en(rada indica .ue un ,egmen(o de 16 'i(, llamado ST6HT (iene P '7(e, de longi(ud/ !e
al-nea en un l-mi(e de pala'ra par8 e, un ,egmen(o pA'lico 7 ,u cla,e de ,egmen(o e, g056h/
6n lo, programa, en lo, modelo, mediano8 grande 7 enorme8 a cada mdulo de cdigo fuen(e
,e le a,igna un nom're de ,egmen(o di,(in(o/ 6l nom're con,i,(e en el nomre del mdulo
,eguido de ST6HT/ Por e>emplo en un programa llamado miProg7asm .ue u(ili=a la direc(iva
/4563 39<Y68 el li,(ado genera la ,iguien(e en(rada del ,egmen(o de cdigo2
2IP-OST3E:3 6 6 6 6 6%/ Eit """+ ,ord Public G!ODEH
Tam'iDn podemo, declarar vario, ,egmen(o, de cdigo den(ro del mi,mo mdulo8 ,in impor(ar
el modelo de memoria/ Para ello8 *a7 .ue agregar un nom're de ,egmen(o opcional a la
direc(iva /0562
6code mi!odigo
5e'emo, recordar .ue ,i llamamo, a lo, procedimien(o, de la 'i'lio(eca de v-nculo, de 16
'i(,8 nue,(ro cdigo de'e e,(ar u'icado den(ro de un ,egmen(o llamado ST6HT ST6HT ST6HT ST6HT/ Por e>emplo8 el
,iguien(e e1(rac(o de un programa *ace .ue el enla=ador (vinculador) genere un men,a>e de
desbordamiento de correccin Dfixup overflo&E1
6code 2i!odigo
mov d1, offset ms
call ,riteString
Programa con varios segmentos de cdigo 6l ,iguien(e programa Mult"odigo7asm con(iene
do, ,egmen(o, de cdigo/ 9l no incluir el arc*ivo 'rvine/07inc8 podemo, ver (oda, la, direc(iva,
de 49!4 .ue ,e u(ili=an en el programa2
3I34E 2?ltiples segmentos de cdigo (2ult!odigo6asm)
0 Este programa en el modelo pe@ueJo contiene varios
0 segmentos de cdigo
6model small, stdcall
6staca %""'
,riteString P-O3O
5:9

6data
ms% db OPrimer mensaeP, "d', "a', "
ms. db OSegundo mensaeP, "d', "a', OUP
6code
main P-O!
mov a1, Zdata
mov ds, a1
mov d1, O$$SE3 ms%
call ,riteString 0 llamada 8EA-
call 2ostrar 0 llamada $A-
main E8DP
6code Otro!odigo
2ostrar P-O! $A-
mov a', +
mov d1, offset ms.
int .%'
ret
2ostrar E8DP
E8D main
6n el e>emplo an(erior8 el ,egmen(o ST6HT ST6HT ST6HT ST6HT con(iene el procedimien(o main main main main 7 el ,egmen(o
(ro0odigo (ro0odigo (ro0odigo (ro0odigo con(iene el procedimien(o 4o,(rar 4o,(rar 4o,(rar 4o,(rar/ Podemo, o',ervar .ue e,(e procedimien(o
de'e (ener un modificador F9< para indicar al en,am'lador .ue de'e generar al (ipo de
in,(ruccin de llamada .ue guarda el ,egmen(o 7 de,pla=amien(o ac(uale, en la pila/ 0omo
confirmacin8 podemo, ver lo, nom're, de lo, do, ,egmen(o, de cdigo en el arc*ivo de
li,(ado Mult"odigo7lst2
Otro!odigo 6 6 6 6%/ Eit """# ,ord Public G!ODEH
T3E:3 6 6 6 6 6 6 6%/ Eit ""%; ,ord Public G!ODEH
5efinicin e1pl-ci(a, de ,egmen(o, 5efinicin e1pl-ci(a, de ,egmen(o, 5efinicin e1pl-ci(a, de ,egmen(o, 5efinicin e1pl-ci(a, de ,egmen(o,
5":

$a7 ocacione, en la, .ue (al ve= ,ea preferi'le crear definicione, e1pl-ci(a,/ Por e>emplo8 (al
ve= .ueramo, definir vario, ,egmen(o, de da(o, con 'Afere, de memoria adicionale,/ (al ve=
va7amo, a enla=ar nue,(ro programa con una 'i'lio(eca de o'>e(o, .ue u(ilice nue,(ro propio,
nom're, de ,egmen(o, propie(ario,/ Por Al(imo8 (al ve= e,(emo, e,cri'iendo un pocedimien(o
.ue de'a llamar,e de,de un compilador de un lengua>e de al(o nivel8 .ue no u(ilice lo,
nom're, de ,egmen(o, de 4icro,of(/
Cn programa con definicione, e1pl-ci(a, de ,egmen(o, (iene .ue reali=ar do, (area,2 en primer
lugar8 de'e e,(a'lecer,e un regi,(ro de ,egmen(o (5!8 6! o !!) a la u'icacin de cada
,egmen(o para .ue podamo, u(ili=arlo/ 6n ,egundo lugar8 *a7 .ue indicar al en,am'lador
cmo calcular lo, de,pla=amien(o, de la, e(i.ue(a, den(ro de lo, ,egmen(o, correc(o,/
3a, direc(iva, !6Y46NT 7 6N5! definen el inicio 7 el fin de un ,egmen(o8 re,pec(ivamen(e/ Cn
programa puede con(ener ca,i cual.uier nAmero de ,egmen(o,8 cada uno de ello, con un
nom're Anico/ 3o, ,egmen(o, (am'iDn pueden agrupar,e (com'inar,e)/ 3a ,in(a1i, e,2
nombre SES2E83 BalineacinC BcombinacinC BGclaseHC
lista(instr#cciones
nombre E8DS
nombre identifica al segmento[ puede ,er Anio o puede ,er el nom're de un ,egmen(o
e1i,(en(e/
alineacin puede ,er "KT68 ;<58 5;<58 P9<9 o P9Y6/
combinacin puede ,er P<#+9T68 PC"3#08 !T90?8 044N8 464<K o 9T direccin/
clase e, un iden(ificador encerrado en(re comilla, ,encilla,8 .ue ,e u(ili=a para
iden(ificar un (ipo e,pec-fico de ,egmen(o8 como 056 o !T90?/
Por e>emplo8 *e a.u- como podr-a definir,e un ,egmen(o llamado 5a(o,61(ra 5a(o,61(ra 5a(o,61(ra 5a(o,61(ra2
DatosE1tra SES2E83 PA-A P9E4I! GDA3AH
var% EF3E %
var. ,O-D .
DatosE1tra E8DS
Tipo de alineacin Tipo de alineacin Tipo de alineacin Tipo de alineacin
0uando ,e van a com'inar do, o mB, ,egmen(o,8 ,u, tipos de alineacin indican al enla=ador
cmo alinear ,u, direccione, iniciale,/ 6l valor prde(erminado e, P9<98 el cual indica .ue el
,egmen(o de'e empe=ar en un l-mi(e par de 16 '7(e,/ $e a.u- alguno, e>emplo, de
direccione, *e1adecimale, de 2& 'i(, .ue ,e encuen(ran en lo, l-mi(e, de pBrrafo/
',ervamo, .ue el Al(imo d-gi(o ,iempre e, cero2
"A%<" #%E7" "M;/"
5""

Para crear la alineacin e,pecificada8 el en,am'lador in,er(a '7(e, al final de cual.uier
,egmen(o e1i,(en(e8 *a,(a .ue ,e llega a la direccin inicial correc(a para el nuevo ,egmen(o/
9 lo, '7(e, adicionale, ,e le, conoce como bytes sobrantes/ 6,(o ,lo afec(a a lo, ,egmen(o,
.ue ,e unen a un ,egmen(o e1i,(en(e8 de'ido a .ue el primer ,egmen(o en un grupo ,iempre
empie=a en un l-mi(e de pBrrafo (en el cap-(ulo 2 vimo, .ue la, direccione, de ,egmen(o,
,iempre con(ienen cua(ro 'i(, cero de menor orden impl-ci(o,)/ 61i,(en lo, ,iguien(e, (ipo, de
alineacin2
6l (ipo de alineacin "KT6 inicia el ,egmen(o en el ,iguien(e '7(e de,puD, del
,egmen(o an(erior/
6l (ipo de alineacin ;<5 inicia el ,egmen(o en el ,iguien(e l-mi(e de 16 'i(,/
5;<5 inicia el ,egmen(o en el ,iguien(e l-mi(e de 32 'i(,/
P9<9 inicia el ,egmen(o en el ,iguien(e l-mi(e de 16 '7(e,/
P9Y6 inicia el ,egmen(o en el ,iguien(e l-mi(e de 256 '7(e,/
!i e, pro'a'le .ue un programa ,e e>ecu(e en un proce,ado 8&86 o 8&2868 e, me>or un (ipo
de alineacin ;<5 (o ma7or) para lo, ,egmen(o, de da(o,8 7a .ue e,o, proce,adore, (ienen
un 'u, de da(o, de 16 'i(,/ 5ic*o, proce,adore, ,iempre mueven 2 '7(e,8 el primero de lo,
cuale, (iene una direccin con numeracin par/ Por lo (an(o8 una varia'le en un l-mi(e par
re.uiere una operacin de o'(encin de da(o, de la memoria8 mien(ra, .ue una varia'le l-mi(e
impar re.uiere do,/ Por o(ro lado8 un proce,ador #9:32 o'(iene 32 'i(, a la ve=8 7 de'e u,ar el
(ipo de alineacin 5;<5/
Tipo de com'inacin Tipo de com'inacin Tipo de com'inacin Tipo de com'inacin
6l (ipo de com'inacin de un ,egmen(o indica al enla=ador cmo com'inar ,egmen(o, .ue
(ienen el mi,mo nom're/ 6l (ipo prede(erminado e, P<#+9T68 cual indica .ue dic*o ,egmen(o
no ,e com'inarB con ningAn o(ro ,egmen(o/
3o, (ipo, de com'inacin PC"3#0 7 464<K *acen .ue un ,egmen(o ,e com'ine con (odo,
lo, demB, ,egmen(o, pA'lico, o de memoria con el mi,mo nom're[ en realidad ,e convier(en
en un ,olo ,egmen(o/ 3o, de,pla=amien(o, de (oda, la, e(i.ue(a, ,e a>u,(an8 de manera .ue
,ean rela(ivo, al inicio del mi,mo ,egmen(o/
6l (ipo de com'inacin !T90? ,e a,eme>a al (ipo PC"3#08 en cuan(o a lo, demB, ,egmen(o,
de pila ,e com'inan con Dl/ 4!:5! iniciali=a de manera au(omB(ica el regi,(ro !! con el inicio
del primer ,egmen(o .ue encuen(ra con un (ipo de com'inacin de !T90?[ 4!:5! e,(a'lece
!P a la longi(ud del ,egmen(o (meno, 1) cuando ,e carga el programa/ 6n un programa 6H68
de'e *a'er por lo meno, un ,egmen(o con un (ipo de com'inacin !T90?[ en ca,o con(rario8
el enla=ador mue,(ra un men,a>e de adver(encia/
6l (ipo de com'inacin 044N *ace .ue un ,egmen(o empie=e en la mi,ma direccin .ue
cual.uier o(ro ,egmen(o 044N con el mi,mo nom're/ 6n realidad8 lo, ,egmen(o, ,e
(ra,lapan uno, con o(ro,/ Todo, lo, de,pla=amien(o, ,e calculan a par(ir de la mi,ma
direccin inicial8 7 la, varia'le, pueden (ra,lapar,e/
5"#

6l (ipo de com'inacin 9T direccin no, permi(e crear un ,egmen(o en una direccin a',olu(a[
a menudo ,e u(ili=a para lo, da(o, cu7a u'icacin e,(B predefinida en el *ard%are o ,i,(ema
opera(ivo/ No pueden iniciali=ar,e varia'le, o da(o,8 pero ,e pueden crear nom're, de
varia'le, .ue *agan referencia a de,pla=amien(o, e,pec-fico,/ Por e>emplo8
bios SES2E83 A3 ;"'
O-S %M'
banderaTteclado EF3E N 0 bandera del teclado de 2SKDOS
bios E8DS
6code
mov a1, bios 0 apunta al segmento EIOS
mov ds, a1
and ds*banderaTteclado,M$' 0 borra el bit superior
6n e,(e e>emplo ,e re.uiri una redefinicin del ,egmen(o (5!)8 7a .ue 'anderaS(eclado 'anderaS(eclado 'anderaS(eclado 'anderaS(eclado no ,e
encuen(ra en el ,egmen(o de da(o, e,(Bndar/
J4B, adelan(e ,e e1plicarB la, redefinicione, del ,egmen(o al igual .ue la direc(iva <Y/
Tipo de cla,e Tipo de cla,e Tipo de cla,e Tipo de cla,e
6l tipo de clase de un ,egmen(o proporciona o(ra forma de com'inar ,egmen(o,8 en e,pecial
a.uello, con di,(in(o, nom're,/ 6l (ipo de cla,e e, una cadena ,en,i'la a ma7A,cula, 7
minA,cula,8 encerrada en(re comilla, ,encilla,/ 3o, ,egmen(o, con el mi,mo (ipo de cla,e ,e
cargan >un(o,8 aun.ue pueden e,(ar en orden di,(in(o al del programa original/ Cno de lo, (ipo,
e,(Bndar8 0568 e, reconocido por el enla=ador 7 de'e u,ar,e para lo, ,egmen(o, .ue
con(engan in,(ruccione,/ 5e'emo, incluir la e(i.ue(a de e,(e (ipo ,i planeamo, u,ar un
depurador/
5irec(iva 9!!C46 5irec(iva 9!!C46 5irec(iva 9!!C46 5irec(iva 9!!C46
3a direc(iva 9!!C46 indica al en,am'lador cmo calcular lo, de,pla=amien(o, de cdigo 7
e(i.ue(a, de da(o, en (iempo de en,am'lado/ Por lo general8 ,e coloca >u,(o de,puD, de la
direc(iva !6Y46NT en el ,egmen(o de cdigo/ !u ,in(a1i, re.uiere el nom're de un regi,(ro de
,egmen(o8 ,eguido de do, pun(o, 7 el nom're de un ,egmen(o2
ASS92E regseg * nombreseg
9!!C46 en realidad no modifica el valor de un regi,(ro de ,egmen(o/ 6,(o de'e *acer,e en
(iempo de e>ecucin8 u,ando in,(ruccione, para a,ignar valore, de ,egmen(o a lo, regi,(ro, de
,egmen(o/ Nue,(ro cdigo puede con(ener varia, direc(iva, 9!!C46/ 0uando ,e encuen(ra
una nueva8 el en,am'lador modifica la manera en .ue calcula la, direccione, a par(ir de e,e
momen(o/
5"1

3a ,iguien(e direc(iva 9!!C46 indica al en,am'lador .ue de'e u(ili=ar 5! como regi,(ro
prede(erminado para el ,egmen(o da(o,1 da(o,1 da(o,1 da(o,12
ASS92E ds*datos%
3a ,iguien(e in,(ruccin a,ocia a 0! con mi0odigo mi0odigo mi0odigo mi0odigo 7 !! ,e a,ocia con miPila miPila miPila miPila2
ASS92E cs*mi!odigo, ss*miPila
6>emplo2 v 6>emplo2 v 6>emplo2 v 6>emplo2 vario, ,egmen(o, de da(o, ario, ,egmen(o, de da(o, ario, ,egmen(o, de da(o, ario, ,egmen(o, de da(o,
9n(eriormen(e en e,(a ,eccin mo,(ramo, un programa .ue (iene do, ,egmen(o, de cdigo/
9*ora vamo, a crear un programa (4ul(5a(o,/a,m) .ue con(iene do, ,egmen(o, de da(o,
llamado, da(o,1 da(o,1 da(o,1 da(o,1 7 da(o,2 da(o,2 da(o,2 da(o,2/ 9m'o, ,e declaran con el nom're de cla,e 59T9/ 3a direc(iva
9!!C46 a,ocia a 5! con da(o,1 da(o,1 da(o,1 da(o,1 7 a 6! con da(o,2 da(o,2 da(o,2 da(o,22
ASS92E cs*segc, ds*datos%, es*datos., ss*mipila
datos% SES2E83 GDA3AH
datos. SES2E83 GDA3AH
$e a.u- un li,(ado comple(o del programa2
3I34E varios segmentos de datos (2ultDatos6asm)
0 Este programa muestra cmo declarar de manera e1plAcita
0 varios segmentos de datos6
segc SES2E83 G!ODEH
ASS92E cs*segc, ds*datos%, es*datos., ss*mipila
main P-O!
mov a1, datos% 0 apunta DS al segmento datos%
mov ds, a1
mov a1, seg val. 0 apunta ES al segmento datos.
mov es, a1
mov a1, val% 0 segmento datos%
mov b1, val. 0 segmento datos.
mov a1, ;!""' 0 termina programa
int .%'
5"3

main E8DP
segc E8DS
datos% SES2E83 GDA3AH 0 especifica el tipo de clase
val% ,O-D %""%'
datos% E8DS
datos. SES2E83 GDA3AH
val. ,O-D %"".'
datos. E8DS
mipila SES2E83 para S3A!> GS3A!>H
EF3E %""' dup(GSH)
mipila E8DS
E8D main
!e u(ili=a do, mD(odo, para e,(a'lecer lo, valore, de lo, regi,(ro, de ,egmen(o en (iempo de
e>ecucin/ 6l primero u(ili=a un nom're de ,egmen(o (da(o,1 da(o,1 da(o,1 da(o,1)2
mov a18 da(o,1 [ apun(a 5! al ,egmen(o da(o,1
mov d,8 a1
6l ,egundo mD(odo u(ili=a el operador !6Y para o'(ener la direccin de ,egmen(o de val2 val2 val2 val22
mov a18 !6Y val2 [ apun(a 6! al ,egmen(o da(o,2
mov e,8 a1
6l arc*ivo de li,(ado .ue cre el en,am'lador mue,(ra do, varia'le, val1 val1 val1 val1 7 val2 val2 val2 val2 .ue (ienen lo,
mi,mo valore, (de,pla=amien(o, iniciale,)8 pero di,(in(o, a(ri'u(o, de ,egmen(o2
"9:E T3pe #alue 9ttr
val% 6 6 6 6 6 6 6 6 6 6 6 6 6 ,ord """" datos%
val. 6 6 6 6 6 6 6 6 6 6 6 6 6 ,ord """" datos.
<edefinicione, de ,egmen(o, <edefinicione, de ,egmen(o, <edefinicione, de ,egmen(o, <edefinicione, de ,egmen(o,
Cna redefinicin de segmentos e, un prefi>o de un '7(e .ue *ace .ue la in,(ruccin ac(ual
u(ilice un regi,(ro de ,egmen(o di,(in(o del e,pecificado por la direc(iva 9!!C46 al calcular la
5"5

direccin efec(iva/ Por e>emplo8 podemo, u,arlo para acceder a una varia'le de un ,egmen(o
di,(in(o del .ue e,(B a,ociado ac(ualmen(e con 0! o 5!2
mov al, cs*var% 0 segmento al @ue apunta !S
mov al, es*var. 0 segmento al @ue apunta ES
$a7 .ue recalcar .ue en el modo de direccionamien(o real8 podemo, colocar varia'le, en el
,egmen(o de cdigo/ `Nunca podr-amo, *acer e,o en modo pro(egidoa
3a ,iguien(e in,(ruccin o'(iene el de,pla=amien(o de una varia'le en un ,egmen(o al .ue no
,e le *a7a e,pecificado la direc(iva 9!!C46 para 5! o 6!2
mov b1, O$$SE3 SegAlt* var.
3a, referencia, mAl(iple, a varia'le, pueden mane>ar,e con mB, facilidad median(e la
in,ercin de una direc(iva 9!!C46 8 para modificar de manera (emporal la, referencia, a lo,
,egmen(o, prede(erminado,2
ASS92E ds*SegAlt 0 usa SegAlt por unos momentos
mov a1, SegAlt
mov ds, a1
mov al, var%
6
6
ASS92E ds*data 0 usa el segmento de datos predeterminado
mov a1, data
mov ds, a1
0om'inacin de ,egmen(o, 0om'inacin de ,egmen(o, 0om'inacin de ,egmen(o, 0om'inacin de ,egmen(o,
3o, programa, e1(en,o, de'en dividir,e en mdulo, ,eparado, para ,implificar ,u edicin 7
depuracin/ #nclu,o *a,(a el cdigo de fuen(e u'icado en di,(in(o, mdulo, puede com'inar,e
en el mi,mo ,egmen(o/ !lo *a7 .ue u,ar el mi,mo nomre de ,egmen(o en cada mdulo 7
e,pecificar un (ipo de com'inacin PC"3#0/ 6,o e, e1ac(amen(e lo .ue ocurre cuando ,e
enla=a un programa de 16 'i(, con la 'i'lio(eca de v-nculo, #rvine16/inc8 u,ando direc(iva, de
,egmen(o ,implificada,/
!i u(ili=amo, (ipo de alineacin "KT68 cada ,egmen(o va >u,(o de,puD, del an(erior/ !i
u(ili=amo, un (ipo de alineacin ;<58 un ,egmen(o irB de,puD, de o(ro ,egmen(o en el
,iguien(e l-mi(e de pala'ra par/ 6l (ipo de alineacin prede(erminado e, P9<98 en el cual cada
,egmen(o va en el ,iguien(e l-mi(e de pBrrafo/
5"6

Programa de ejemplo +amo, a ver un programa de do, mdulo, .ue con(iene un ,egmen(o
de cdigo (!6Y0)8 un ,egmen(o de da(o, (!6Y5)8 7 un ,egmen(o de pila (!6YP)/ 6l mdulo
principal (main) con(iene lo, (re, ,egmen(o,[ !6Y0 7 !6Y5 (ienen un (ipo de com'inacin
PC"3#0/ !e u(ili=a un (ipo de alineacin "KT6 para !6Y08 con lo .ue evi(a la creacin de un
*ueco en(re el cdigo de lo, do, mdulo,/
4dulo principal2
3I34E Eemplo de segmentos (mdulo principal, Seg.6asm)
E:3-8 var.* ,O-D, subrutinaT% P-O3O 0 se sustitu5e por la siguiente
lAnea
E:3-8 subrutinaT%*P-O! 0 re@uerida por \AS\ #6"
segc SES2E83 EF3E P9E4I! G!ODEH
ASS92E cs*segc, ds*segd, ss*segp
main P-O!
mov a1, segd 0 inicializa DS
mov ds, a1
mov a1, var% 0 variable local
mov b1, var. 0 variable e1terna
call subrutinaT% 0 procedimiento e1terno
mov a1, ;!""' 0 sale al SO
int .%'
main E8DP
segc E8DS
segd SES2E83 ,O-D P9E4I! GDA3AH 0 segmento de datos local
var%,O-D %"""'
segd ends
segp SES2E83 S3A!> GS3A!>H 0 segmento de pila
EF3E %""' dup(GSH)
segp E8DS
5"7

E8D main

!u'mdulo2
3I34E eemplo de segmentos (sumdulo, SES.A6AS2)
P9E4I! subrutinaT%, var.
segc SES2E83 EF3E P9E4I! G!ODEH
ASS92E cs*segc, ds*segd
subrutinaTP-O! 0 se llama desde 2AI8
mov a',+
mov d1, O$$SE3 ms
int .%'
ret
subrutinaT% E8DP
segc E8DS
segd SES2E83 ,O-D P9E4I! GDA3HA
var. ,O-D ."""' 0 se accesa desde 2AI8
ms EF3E GA'ora estamos en subrutinaT%H
EF3E "D', "A', U
segd E8DS
E8D
6l enla=ador ceo el ,iguien(e arc*ivo 49P8 en el cual ,e mue,(ra un ,egmen(o de cdigo8 un
,egmen(o de da(o, 7 un ,egmen(o de pila2
'tart 'top ;e1(t "ame Class
"""""\ """%E\ """%!\ !SES !ode
"""%!\ """7<\ """%A\ DSES Data
""";"\ ""%7$\ ""%""\ SSES S3A!>
Program entr5 point at """"*""""
5"8


6,( 6,( 6,( 6,(ruc(ura de un programa en (iempo de e>ecucin ruc(ura de un programa en (iempo de e>ecucin ruc(ura de un programa en (iempo de e>ecucin ruc(ura de un programa en (iempo de e>ecucin
Cn programador eficien(e en lengua>e en,am'lador nece,i(a ,a'er muc*o acerca de 4!:5!/
6,(a ,eccin de,cri'e a command/com8 el prefi>o de ,egmen(o del programa 7 la e,(ruc(ura de
lo, programa, 04 7 6H6/ 9l programar command7com .ue ,e inclu7e con 4!:5! 7 ;indo%,
P5GP8 ,e le conoce como proce,ador de comando,/ 6n ;indo%, 2&&& 7 HP8 ,e llama cmd7exe8
#n(erpre(a cada comando .ue ,e e,cri'e en un ,-m'olo del ,i,(ema/ 0uando e,cri'imo, un
comando8 ,e reali=a la ,iguien(e ,ecuencia2
1/ 4!:5! comprue'a ,i el comando e, in(erno8 como 5#<8 <6N o 563 (eliminar)/ !i lo e,8
el comando ,e e>ecu(a de inmedia(o median(e una ru(ina de 4!:5! re,iden(e en
memoria/

2/ 4!:5! 'u,ca un arc*ivo .ue coincida con una e1(en,in de 04/ !i el arc*ivo ,e
encuen(ra en el direc(orio ac(ual8 ,e e>ecu(a/


3/ 4!:5! 'u,ca un arc*ivo .ue coincida con una e1(en,in de 6H6/ !i el arc*ivo ,e
encuen(ra en el direc(orio ac(ual8 ,e e>ecu(a/

4/ 4!:5! 'u,ca un arc*ivo .ue coincida con una e1(en,in de "9T/ !i el arc*ivo ,e
encuen(ra en el direc(orio ac(ual8 ,e e>ecu(a/ 9 un arc*ivo con una e1(en,in "9T ,e le
conoce como arc*ivo de proce,amien(o por lo(e,8 .ue e, un arc*ivo de (e1(o .ue
con(iene comando, de 4!:5! .ue de'en e>ecu(ar,e como ,i ,e *u'iera e,cri(o en la
con,ola/


5/ !i 4!:5! no puede encon(rar un arc*ivo 048 6H6 o "9T .ue coincida en el
direc(orio ac(ual8 'u,ca en el primer direc(orio de la ru(a ac(ual/ !i no puede encon(rar
una coincidencia8 procede al ,iguien(e direc(orio en la ru(a 7 con(inAa e,(e proce,o
*a,(a .ue ,e encuen(ra un arc*ivo .ue coincida o .ue ,e ago(a la 'A,.ueda de ru(a,/
3o, programa, de aplicacione, con e1(en,ione, 04 7 6H6 ,e llaman programas transientes/
6n general8 ,e cargan en la memoria duran(e el (iempo nece,ario para e>ecu(ar,e[ cuando
(erminan8 ,e li'era de la memoria .ue ocupan/ !i e, nece,ario8 lo, programa, (ran,ien(e,
pueden de>ar una porcin de ,u cdigo en memoria al ,alir8 a D,(o, ,e le, conoce como
programas residentes en memoria o T!<,/
Prefi>o de ,egmen(o de programa Prefi>o de ,egmen(o de programa Prefi>o de ,egmen(o de programa Prefi>o de ,egmen(o de programa
4!:5! crea un 'lo.ue e,pecial de 256 '7(e, al principio de un programa8 a medida .ue ,e
carga en memoria[ a e,(e 'lo.ue ,e le conoce como el Prefi>o de segmento del programa/ 3a
e,(ruc(ura del Prefi>o de ,egmen(o del programa (P!P) ,e mue,(ra en la ,iguien(e (a'la/
6l Prefi>o de ,egmen(o del programa (P!P)/
5"9

5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o 0omen(ario, 0omen(ario, 0omen(ario, 0omen(ario,
&& \ 15 9pun(adore, 7 direccione, de vec(ore, de 4!:5!
16 : 2" <e,ervado por 4!:5!
20 \ 25 5ireccin de ,egmen(o de la cadena de en(orno ac(ual
26 \ 5" <e,ervado por 4!:5!
50 \ 7F "lo.ue, de con(rol de arc*ivo, 1 7 2[ lo, u(ili=an principalmen(e lo,
programa, previo, a 4!:5! 2/&
8& \ FF prea de (ran,ferencia de di,co prede(erminada 7 una copia de la cola de
comando, ac(ual de 4!:5!

Programa, 04 Programa, 04 Programa, 04 Programa, 04
61i,(en do, (ipo, de programa, (ran,ien(e,8 lo, cuale, ,e iden(ifican ,egAn ,u e1(en,in de
arc*ivo (04 o 6H6)/ Cn programa 04 e, una imagen 'inaria ,in modificar de un programa
en lengua>e mB.uina/ 4!:5! lo carga en memoria en la direccin de ,egmen(o mB, 'a>a .ue
e,(D di,poni'le 8 7 ,e crea un P!P en el de,pla=amien(o &/ 6l cdigo8 lo, da(o, 7 la pila ,e
almacenan en el mi,mo ,egmen(o f-,ico (7 lgico)/ 6l programa puede (ener *a,(a 64? de
longi(ud8 meno, el (ama@o del P!P 7 do, '7(e, re,ervado, al final de la pila/ 0omo ,e mue,(ra
en el ,iguien(e diagrama8 (odo, lo, regi,(ro, de ,egmen(o ,e e,(a'lecen a la direccin 'a,e
del P!P/ 6l Brea de cdigo empie=a en el de,pla=amien(o 1&&*8 7 el Brea de da(o, ,igue >u,(o
de,puD, del cdigo/ 6l Brea de la pila ,e encuen(ra al final del ,egmen(o8 7a .ue 4!:5!
iniciali=a a !P con FFF6*2

+eamo, un programa ,imple e,cri(o en forma(o 04/ 49!4 re.uiere .ue un programa 04
u(ilice el modelo diminuto ((in7) de memoria/ 9demB,8 de'e u,ar,e la direc(iva <Y para
e,(a'lecer el con(ador de la u'icacin inicial para el cdigo del programa al de,pla=amien(o
1&&*/ 6,(o de>a 1&&* '7(e, di,poni'le, para el P!P8 .ue ocupa u'icacione, de,de & *a,(a
&FF*2
3I34E Programa \ola en formato !O2 (\ola!om6asm)
6model tin5
5#:

6code
org %""' 0 debe estar antes de main
main P-O!
mov a',+
mov d1, O$$SE3 mensaeT'ola
int .%'
mov a1, ;!""'
int .%'
main E8DP
mensaeT'ola EF3E G\ola, mundodH, "d', "a', GUH
E8D main
Por lo general8 la, varia'le, ,e encuen(ran de,puD, del procedimien(o principal (main)8 7a .ue
no *a7 un ,egmen(o ,eparado para lo, da(o,/ !i colocamo, lo, da(o, en la par(e ,uperior del
programa8 la 0PC (ra(ar-a de e>ecu(ar lo, da(o,/ Cna al(erna(iva e, colocar una in,(ruccin F4P
al principio para .ue ,al(e por encima de lo, da(o, *a,(a la primera in,(ruccin real2
3I34E Programa \ola en forma !O2 (\ola!om6asm)
6model tin5
6code
6org %""' 0 debe estar antes del punto de entrada
main P-O!
mp inicio 0 salta los datos
mensaeT'ola EF3E G\ola, mundoH, "d', "a', GUH
inicio*
mov a',+
mov d1, O$$SE3 mensaeT'ola
int .%'
mov a1, ;!""'
5#"

int .%'
main E8DP
E8D main
6l enla=ador de 4icro,of( re.uiere el parBme(ro GT para indicarle .ue de'e crear un arc*ivo
04 en ve= de un arc*ivo /6H6/ 3o, programa, 04 ,iempre ,on mB, pe.ue@o, .ue ,u,
con(rapar(e, 6H6[ por e>emplo8 $ola0om/a,m e, de ,lo 17 '7(e, cuando ,e almacena en el
di,co/ No o',(an(e8 al e,(ar en memoria8 un programa 04 ocupa (odo un ,egmen(o de
memoria de 64?"8 7a ,ea .ue ,e nece,i(e el e,pacio o no/ 3o, programa, 04 no ,e
di,e@aron para e>ecu(ar,e en un en(orno mul(i(area/
Programa, 6H6 Programa, 6H6 Programa, 6H6 Programa, 6H6
Cn programa 6H6 ,e almacena en el di,co con un enca'e=ado 6H68 ,eguido de un mdulo de
carga .ue con(iene el programa en ,-/ 6n realidad8 el enca'e=ado del programa no ,e carga en
memoria[ en ve= de ello8 con(iene informacin .ue 4!:5! u(ili=a para cargar 7 e>ecu(ar el
programa/
0uando 4!:5! carga un programa 6H68 ,e crea un prefi>o de ,egmen(o del programa (P!P)
en la primera ,eccin di,poni'le8 7 el programa ,e coloca en memoria >u,(o encima del prefi>o/
9 medida .ue 4!:5! decodifica el enca'e=ado del programa8 a,igna a 5! 7 6! la direccin
de carga del programa8 (am'iDn conocida como Prefijo de segmento del programa (P!P)/ 0! e
#P ,e e,(a'lecen con el pun(o de en(rada del cdigo del programa8 de,de donde el programa
empie=a a e>ecu(ar,e/ !! ,e e,(a'lece al inicio del ,egmen(o de pila8 7 !P ,e e,(a'lece con el
(ama@o de la pila/ $e a.u- un diagrama .ue mue,(ra lo, ,egmen(o, de cdigo8 da(o, 7 pila .ue
,e (ra,lapan2

6n e,(e programa8 el Brea del cdigo e, de 2&* '7(e,8 el Brea de da(o, e, de 1&* '7(e, 7 el
Brea de la pila e, de 1&* '7(e,/
Cn programa 6H6 puede con(ener *a,(a 658535 ,egmen(o,8 aun.ue ,er-a inu,ual (ener
(an(o,/ !i un programa (iene vario, ,egmen(o, de da(o,8 por lo general8 el programador (iene
.ue e,(a'lecer manualmen(e a 5! o 6! con cada nuevo ,egmen(o/
C,o de la memoria C,o de la memoria C,o de la memoria C,o de la memoria
3a can(idad de memoria .ue u(ili=a un programa 6H6 ,e e,pecifica median(e ,u enca'e=ado[
en e,pecial8 lo, valore, para el nAmero m-nimo 7 mB1imo de pBrrafo, (16 '7(e, cada uno)
5##

nece,ario, en memoria de,puD, del Brea de cdigo8 para mane>ar varia'le, 7 la pila en (iempo
de e>ecucin/ 5e manera prede(erminada8 el enla=ador e,(a'lece el valor mB1imo a 658535
pBrrafo,8 .ue e, mB, memoria de la .ue puede *a'er di,poni'le en 4!:5!/ Por ende8
cuando ,e carga el programa8 4!:5! a,igna de manera au(omB(ica la memoria .ue *a7a
di,poni'le/
3a a,ignacin mB1ima puede e,(a'lecer,e cuando ,e enla=a un programa8 median(e el u,o de
la opcin G0P/ 9.u- ,e mue,(ra para un programa llamado prog/7obj/ 6l nAmero 1&24 ,e
refiere al nAmero de parBme(ro, de 16 '7(e,8 e1pre,ado en decimal2
lina%/ Vcp*%".; prog%0
3o, valore, del enca'e=ado 6H6 pueden modificar,e de,puD, de compilar un programa 6H68
u,ando el progama e1e*dr e1e*dr e1e*dr e1e*dr .ue ,e inclu7e con el en,am'lador de 4icro,of(/ Por e>emplo8 el
comando para e,(a'lecer la a,ignacin mB1ima a 4&&* pBrrafo, (168384 '7(e,) para un
programa llamada prog/7exe e,2
e1e'dr prog% Vma1 ;""
61e*dr puede mo,(rar impor(an(e, e,(ad-,(ica, acerca de un programa/ 9 con(inuacin ,e
mue,(ra re,ul(ado, de e>emplo .ue de,cri'en el programa prog/7exe8 de,puD, de enla=arlo
con la a,ignacin mB1ima e,(a'lecida en 1&24 pBrrafo,2
PRO<) =>ex? =Dec?
E:E size (b5tes) #M/ .%//
2inimum load size (b5tes) M#/ %+./
Overla5 number " "
Initial !S*IP """"*""%" %/
Initial SS*SP ""/#*"%"" .</
2inimum allocation (para) %% %M
2a1imum allocation (para) ;"" %".;
\eader size (para) ." 7.
-elocation size offset %E 7"
-elocation entries % %

6nca'e=ado 6H6 6nca'e=ado 6H6 6nca'e=ado 6H6 6nca'e=ado 6H6
5#1

4!:5! u(ili=a el Brea de enca'e=ado de un programa 6H6 para calcular correc(amen(e la,
direccione, de lo, ,egmen(o, 7 o(ro, componen(e,/ 6l enca'e=ado con(iene la ,iguien(e
informacin2
Cna (a'la de reu'icacin8 la cual con(iene direccione, .ue de'en calcular,e cuando ,e
carga el programa/
6l (ama@o del arc*ivo del programa 6H68 .ue ,e mide en unidade, de 512 '7(e,/
9,ignacin m-nima2 el nAmero m-nimo de pBrrafo, de memoria .ue de'en re,ervar,e
de,puD, del Brea de cdigo del programa/ Par(e de e,(e almacenamien(o podr-a
u(ili=ar,e para un mon(n de da(o, en (iempo de e>ecucin .ue con(engan da(o,
dinBmico,/
9,ignacin mB1ima2 el nAmero mB1imo de pBrrafo, nece,ario, por encima del
programa/
+alore, iniciale, para dar a lo, regi,(ro, #P 7 !P/
Desplazamiento (medido en pBrrafo, de 16 '7(e,) de lo, ,egmen(o, de pila 7 de
cdigo8 a par(ir del inicio del mdulo de carga/
Dna suma de comprobacin de todas las palabras en el arc*ivo& (ue se utiliza para atrapar
errores de datos cuando el programa se carga en memoria.
4ane>o de in(errupcione, 4ane>o de in(errupcione, 4ane>o de in(errupcione, 4ane>o de in(errupcione,
6n e,(a ,eccin *a'laremo, ,o're la, forma, de per,onali=ar el "#! 7 el 4!:5! median(e la
in,(alacin de manejadores de interrupciones Drutinas de servicio de interrupcionesE/ 0omo
vimo, en cap-(ulo, an(eriore,8 el "#! 7 el 4!:5! con(ienen mane>adore, de in(errupcione,
.ue ,implifican la en(radaG,alida8 a,- como la, (area, 'B,ica, del ,i,(ema/ +imo, muc*o, de
D,(o,2 la, ru(ina, #NT 1&* para la manipulacin del video8 la, ru(ina, #NT 16* para el (eclado8
lo, ,ervicio, #NT 21* de 4!:5!8 e(cD(era/ Pero una par(e igualmen(e impor(an(e del ,i,(ema
opera(ivo e, ,u con>un(o de mane>adore, de in(errupcione,8 .ue re,ponden a la,
in(errupcione, del *ard%are/ 4!:5! no, permi(e ,u,(i(uir cual.uiera de e,(a, ru(ina, de
,ervicio con nue,(ra, propia, ru(ina,/
3imi(acione, 3imi(acione, 3imi(acione, 3imi(acione,2 lo, mane>adore, de in(errupcione, .ue pre,en(amo, en e,(e cap-(ulo funcionan
,lo cuando nue,(ra compu(adora ,e inicia en modo de 4!:5!/ Podemo, *acer e,(o u,ando
;indo%, P58 P88 pero no ;indo%, NT8 2&&& o HP/ 6,(o, Al(imo, ,i,(ema, opera(ivo,
enma,caran el *ard%are del ,i,(ema de lo, programa, de aplicacione,8 para o'(ener una
ma7or e,(a'ilidad8 7 ,eguridad del ,i,(ema/ !i el ! permi(iera .ue do, programa, .ue ,e
e>ecu(an al mi,mo (iempo modificaran la, configuracione, in(erna, en el mi,mo di,po,i(ivo
*ard%are8 lo, re,ul(ado, ,er-an cuando meno, impredeci'le,/

61i,(en varia, ra=one, para e,cri'ir un mane>ador de in(errupcione,/ Tal ve= .ueramo, .ue
nue,(ro progama ,e ac(ive al oprimir una (ecla activa8 inclu,o aun.ue el u,uario e,(D
e>ecu(ando o(ra aplicacin/ Por e>emplo8 el !ide?icb de "orland fue uno de lo, primero,
programa, en lo, .ue aparec-a un 'loc de no(a, o una calculadora cada ve= .ue ,e oprim-a
una com'inacin de (ecla, ac(iva,/
5#3

Podemo, ,u,(i(uir uno de lo, mane>adore, de in(errupcione, prede(erminado, de 4!:5!
para ofre,er ,ervicio, mB, comple(o,/ Por e>emplo8 la in(errupcin de divisin en(re cero ,e
ac(iva cuando la 0PC (ra(a de dividir un nAmero en(re cero8 pero no *a7 una manera e,(andar
para .ue un programa ,e recupere/
Podemo, ,u,(i(uir el mane>ador de errore, cr-(ico, de 4!:5! o el mane>ador de 0(rl:#n(er con
nue,(ro propio mane>ador/ 6l mane>ador de errore, cr-(ico, prede(erminado de 4!:5! *ace
.ue un programa a'or(e 7 regre,e a 4!:5!/ Nue,(ro mane>ador podr-a recuperar,e de un
error 7 de>ar .ue el u,uario con(inuara e>ecu(ando el programa de aplicacin ac(ual/
Cna ru(ina de ,ervicio de in(errupcione, e,cri(a por el u,uario puede mane>ar la,
in(errupcione, de *ard%are en forma mB, efec(iva .ue 4!:5!/ Por e>emplo8 el mane>ador de
comunicacin a,-ncrona de la P0 (#NT 14*) no u,a 'Afer en la, operacione, de en(radaG,alida/
6,(o ,ignifica .ue un carBc(er de en(rada ,e pierde ,i no ,e copia del puer(o an(e, de .ue
llegue o(ro carBc(er/ Cn programa re,iden(e en memoria podr-a e,perar a .ue un carBc(er
en(ran(e generara una in(errupcin de *ard%are8 reci'ir el carBc(er del puer(o 7 almacenarlo
en un 'Afer circular/ 6,(o evi(a .ue un programa de aplicacin invier(a ,u valio,o (iempo en
compro'ar el puer(o ,erial en forma repe(ida8 de,cuidando o(ra, le(ra,/
-abla de vectores de interrupcin 3a clave de la fle1i'ilidad de 4!:5! recae en la (a'la de
vec(ore, de in(errupcin .ue ,e encuen(ra en lo, primero, 1&24 '7(e, de <94 (u'icacione,
&2& a &2&3FF)/ 3a ,iguien(e (a'la con(iene un cor(o e>emplo de en(rada, en la (a'la de
vec(ore,/ 0ada en(rada en la (a'la (conocida como vec(or de in(errupcin) e, una direccin
(ipo ,egmen(o:de,pla=amien(o de 32 'i(,8 .ue apun(a a una de la, ru(ina, de ,ervicio
e1i,(en(e,/
6>emplo de (a'la de vec(ore, de in(errupcione,/
NAmero de NAmero de NAmero de NAmero de
in(errupcin in(errupcin in(errupcin in(errupcin
5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o +ec(ore, de in(errupcin +ec(ore, de in(errupcin +ec(ore, de in(errupcin +ec(ore, de in(errupcin
""K"7 """" ".!%*<%#/ ""M"*"!/M "DAD*.%!E ""M"*"!/M
";K"M ""%" ""M"*"!/M $"""*$$<; $"""*#7ME $"""*#7ME
"#K"E ""." "DM"*"..! "DAD*.EAD ""M"*"7.< ""M"*"7+$
"!K"$ ""7" ""M"*";%+ ""M"*";+7 ""M"*"<"D ""M"*"!/M
%"K%7 "";" !"""*"!DM $"""*$#;D $"""*$#;% ""M"*.7MD

6n cual.uier compu(adora dada8 lo, valore, de lo, vec(ore, variarBn de'ido a la, di,(in(a,
ver,ione, del "#! 7 de 4!:5!/ 0ada vec(or de in(errupcin corre,ponde a un nAmero de
in(errupcin/ 6n la (a'la8 la direccin del mane>ador de #NT & (divi,in en(re cero) e,
&20125186*/ Para o'(ener el de,pla=amien(o de cual.uier vec(or de in(errupcin8 ,e
5#5

mul(iplica ,u nAmero de in(errupcin por 4/ Por ende8 el de,pla=amien(o del vec(or para #NT P*
e, PJ48 o &&24 *e1adecimal/
jecucin de los manejadores de interrupciones Cn mane>ador de in(errupcione, puede
e>ecu(ar,e en una de do, forma, (1) un programa de aplicacin .ue con(enga una in,(ruccin
#NT podr-a producir una llamada a la ru(ina8 a lo cual ,e conoce como interrupcin de soft&are[
(2) una interrupcin de hard&are ocurre cuando un di,po,i(ivo de *ard%are (puer(o a,-ncrono8
(eclado8 (empori=ador8 e(cD(era)/ env-a una ,e@al al c*ip 0on(rolador de in(errupcione,
programa'le/
#n(errupcione, de *ard%are #n(errupcione, de *ard%are #n(errupcione, de *ard%are #n(errupcione, de *ard%are
Cna in(errupcin de *ard%are ,e genera median(e el 0on(rolador de interrupciones
programable (P#0) #n(el 825P8 el cual indica a la 0PC .ue de'e ,u,pender la e>ecucin del
programa ac(ual 7 e>ecu(ar una ru(ina de ,ervicio de in(errupcin/ Por e>emplo8 un carBc(er del
(eclado .ue e,pera en el puer(o de en(rada ,e perder-a ,i la 0PC no lo guarda8 o lo, carac(ere,
reci'ido, del puer(o ,erial ,e perder-an ,i no fuera por una ru(ina con(rolada por
in(errupcione,8 .ue almacena en un 'Afer/
6n ocacione,8 lo, programa, de'en de,*a'ili(ar la, in(errupcione, de *ard%are al reali=ar
operacione, delicada, en lo, regi,(ro, de ,egmen(o 7 pila/ 3a in,(ruccin 03# (borra bandera
de interrupcin) de,*a'ili(a la, in(errupcione,8 7 la in,(ruccin !T# (establece bandera de
interrupcin) *a'ili(a la, in(errupcione,/
(iveles de '.S 3a, in(errupcione, pueden ac(ivar,e por una variedad de di,po,i(ivo, en una
P08 inclu7endo lo, .ue ,e pre,en(an en la ,iguien(e (a'la/ 0ada di,po,i(ivo (iene una prioridad8
'a,ada en ,u nivel de peticin de interrupcin (#<L)/ 6l nivel & (iene la prioridad mB, al(a8 7 el
nivel 15 (iene la mB, 'a>a/ Cna in(errupcin de un nivel mB, 'a>o no puede in(errumpir a una
de nivel mB, al(o .ue ,e encuen(re en progre,o/ Por e>emplo8 ,i el puer(o de comunicacione, 1
(04 1) (ra(a de in(errumpir el mane>ador de in(errupcione, del (eclado8 (endr-a .ue e,perar
*a,(a .ue e,(e Al(imo (erminara/ 9demB,8 do, o mB pe(icione, de in(errupcion ,imul(anea, ,e
proce,an de acuerdo con ,u, nivele, de prioridad/ 3a programacin de in(errupcione, ,e
mane>a median(e el P#0 825P/
9,ignacin de #<0 ("u, #!9)
#<L #<L #<L #<L NAmero de NAmero de NAmero de NAmero de
in(errupcin in(errupcin in(errupcin in(errupcin
5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
& 8 Tempori=ador del ,i,(ema (18/2 vece,G,egundo)
1 P Teclado
2 &9* 0on(rolador de in(errupcione, programa'le
3 &"* 042 (puer(o ,erial 2)
5#6

4 &0* 041 (puer(o ,erial 1)
5 &5* 3PT2 (puer(o paralelo 2)
6 &6* 0on(rolador de di,co fle1i'le
7 &F* 3PT1 (puer(o paralelo 1)
8 7&* <elo> 04! en (iempo real
P 71* (!e redirige *acia #NT &9*)
1& 72* (5i,poni'le) (ar>e(a de ,onido
11 73* (5i,poni'le) (ar>e(a !0!#
12 74* <a(n P!G2
13 75* 0oproce,ador ma(emB(ico
14 76* 0on(rolador de di,co duro
15 77* (5i,poni'le

+amo, a u(ili=ar el (eclado como un e>emplo2 cuando ,e oprime una (ecla8 el P#0 825P env-a
una ,e@al #NT< a la 0PC 7 le pa,a el nAmero de in(errupcin[ ,i la in(errupcine, e1(erna, no
,e encuen(ran de,*a'ili(ada,8 la 0PC *ace lo ,iguien(e8 en ,ecuencia2
1/ 4e(e el regi,(ro Flag, en la pila/
2/ "orra la 'andera de #n(errupcin8 evi(ando cual.uier o(ra in(errupcin de *ard%are/
3/ 4e(e lo, valore, ac(uale, de 0! e #P en la pila/
4/ 3ocali=a la en(rada en la (a'la de vec(ore, de in(errupcin para #NT P 7 coloca e,(a
direccin en 0! e #P/
9 con(inuacin8 ,e e>ecu(a la ru(ina del "#! para #NT P 7 reali=a lo ,iguien(e8 en ,ecuencia2
1/ <e*a'ili(a la, in(errupcione, de *ard%are8 para .ue el (empori=ador del ,i,(ema no ,e
vea afec(ado/
2/ #n(roduce un cdigo de e1ploracin del puer(o del (eclado8 (ra(a de conver(irlo en un
carBc(er 9!0## o a,igna un cdigo 9!0## igual a cero/ 5e,puD, almacena el cdigo de
e1ploracin 7 el cdigo 9!0## en el 'Afer del (eclado8 un 'Afer circular de 32 '7(e, en el
Brea de da(o, del "#!/
3/ 6>ecu(a una in,(ruccin #<6T (re(orno de in(errupcin)8 la cual ,aca a #P8 0! 7 el regi,(ro
Flag, de la pila/ 6l con(rol regre,a al programa .ue ,e e,(a'a e>ecu(ando cuando
ocurri la in(errupcin
#n,(ruccione, de con(rol de in(errupcione, #n,(ruccione, de con(rol de in(errupcione, #n,(ruccione, de con(rol de in(errupcione, #n,(ruccione, de con(rol de in(errupcione,
5#7

3a 0PC (iene una 'andera llamada bandera de interrupcin (#F)8 la cual con(rola la forma en
.ue la 0PC re,ponde a la, in(errupcione, e1(erna, (*ard%are)/ !i la 'andera de in(errupcin ,e
ac(iva (#F R 1)8 decimo, .ue la, in(errupcione, e,(Bn habilitadas[ ,i la 'andera ,e 'orra (#F R
&)8 en(once, la, in,(ruccione, e,(Bn deshabilitadas/
'nstruccin !-' 3a in,(ruccin !T# *a'ili(a la, in(errupcione, e1(erna,/ Por e>emplo8 el ,i,(ema
re,ponde a la en(rada del (eclado ,u,pendiendo un programa en proce,o8 7 *ace lo ,iguien(e2
3lama a #NT P8 .ue almacena la (ecla pre,ionada en un 'Afer 7 de,puD, regre,a al programa
ac(ual/ Por lo general8 ,e *a'ili(a la 'andera #n(errupcin/ 6n ca,o con(rario8 el (empori=ador
del ,i,(ema no calcular-a la *ora 7 fec*a en forma aporpiada8 7 ,e perder-an la, ,iguien(e,
(ecla, in(roducida,/
'nstruccin "%' 3a in,(ruccin 03# de,*a'ili(a la, in(errupcione, e1(erna,/ 5e'e u(ili=ar,e con
precaucin[ ,lo cuando ,e va7a a reali=ar una operacin cr-(ica8 una .ue no pueda
in(errumpir,e/ Por e>emplo8 ,upongamo, .ue nue,(ro cdigo ,e in(errumpi cuando e,(a'a en
el proce,o de modificar lo, valore, !! 7 !P/ Nue,(ro regi,(ro !! podr-a apun(ar a un nuevo
,egmen(o de pila8 mien(ra, .ue el apun(ador de pila (endr-a .ue ac(uali=ar,e2
mov a1, mipila
mov ss,a1 0 restablece SS
0 jSE I83E--92PE AR9ld
mov sp,%""' 0 restablece SP
Para e,(ar ,eguro,8 *a7 .ue de,*a'ili(ar la, in(errupcione, 'orrando la 'andera #n(errupcin
(03#) 7 *a'ili(arla, u,ando !T#2
cli 0 des'abilita las interrupciones
mov a1, mipila 0 restablece SS
mov ss, a1
mov sp, %""' 0 restablece SP
sti 0 re'abilita las interrupciones
3a, in(errupcione, no de'en de,*a'ili(ar,e por mB, de uno, cuan(o, mili,egundo, en un
momen(o dado8 o podr-a perder,e lo, da(o, de (ecla, pre,ionada, 7 el (empori=ador del
,i,(ema reducir-a ,u velocidad/ 0uando la 0PC re,ponde a un mane>ador de in(errupcione,8 la,
demB, in(errupcione, ,e de,*a'ili(an de inmedia(o/ 3a, ru(ina, de ,ervicio de in(errupcione,
de 4!:5! 7 del "#! re*a'ili(an la, in(errupcione, (an pron(o como empie=an a e>ecu(ar,e/
6,cri(ura de un mane>ador de in(errupcione, per,onali=ado 6,cri(ura de un mane>ador de in(errupcione, per,onali=ado 6,cri(ura de un mane>ador de in(errupcione, per,onali=ado 6,cri(ura de un mane>ador de in(errupcione, per,onali=ado
Cno podr-a pregun(ar,e para .uD e1i,(e la (a'la de vec(ore, de in(errupcin/ 5e,de luego
podr-amo, llamar a lo, procedimien(o, e,pec-fico, en <4 para proce,ar la, in(errupcione,/
5#8

3o, di,e@adore, de la #"4:P0 .uer-an (ener la capacidad de reali=ar modificacione, 7
correccione, a la, ru(ina, del "#!8 ,in (ener .ue ,u,(i(uir lo, c*ip, de <4/ 9l (ener una (a'la
de in(errupcin8 era po,i'le ,u,(i(uir la, direccione, en la (a'la para .ue apun(aran a
procedimien(o, en la <94/
0ada direccin en la (a'la de vec(ore, de in(errupcin apun(a a un procedimien(o conocido
como manejador de interrupciones o rutina de servicio de interrupciones (#!<)/ 3o, programa,
de aplicacione, pueden ,u,(i(uir una direccin en la (a'la con o(ra .ue apun(e a un nuevo
mane>ador de in(errupcione,/ Por e>emplo8 podr-amo, e,cri'ir un mane>ador de in(errupcin
per,onali=ado para el (eclado/ Tendr-a .ue *a'er una ra=n mu7 fuer(e para *acerlo8 de'ido al
e,fuer=o implicado/ Cna al(erna(iva mB, convenien(e ,er-a .ue un mane>ador de
in(errupcione, llamara direc(amen(e a la in(errupcin #NT P prede(erminada del (eclado para
leer una (ecla pre,ionada del puer(o del (eclado/ Cna ve= .ue ,e colocara la (ecla en el 'Afer
de e,cri(ura adelan(ada del (eclado8 podr-amo, manipular ,u con(enido/
3a, funcione, 25* 7 35* de #NT 21* permi(en in,(alar mane>adore, de in(errupcione,/ 3a
funcin 35* (o'(ener vec(or de in(errupcin) devuelve la direccin (ipo ,egmen(o:
de,pla=amien(o de un vec(or de in(errupcin/ Para llamar a la funcin ,e coloca el nAmero de
in(errupcin de,eado en 93/ 4!:5! devuelve el vec(or de 32 'i(, en 6!2"H/ Por e>emplo8 la,
,iguien(e, in,(ruccione, o'(ienen el vec(or #NT P2
6data
guardarInt+ 4AEE4 ,O-D
D,O-D N 0 a@uA almacena la direccin anterior
0 de I83+
6code
mov a', 7<' 0 obtiene el vector de interrupcin
mov al, + 0 para I83 +
int .%' 0 llama a 2SKDOS
mov guardarI83+, E: 0 guarda el desplazamiento
mov guardarInt+L., ES 0 guarda el segmento
3a funcin 25* de #NT 21* (e,(a'lecer vec(or de in(errupcin) no, permi(e ,u,(i(uir un
mane>ador de in(errupcione, e1i,(en(e con uno nuevo/ Para llamar a e,(a funcin8 colocamo,
el nAmero de in(errupcin en 93 7 la direccin ,egmen(o:de,pla=amien(o de nue,(ro propio
mane>ador de in(errupcione, en 5!25H/ Por e>emplo8
mov a1, SES teclTretn 0 maneador del teclado
mov ds, a1 0 segmento
5#9

mov d1, O$$SE3 teclTrtn 0 desplazamiento
mov a', .<' 0 establece el vector de interrupcin
mov al, +' 0 para I83 +'
int .%'
6
6
teclTrtn P-O! 0 (a@uA empieza el nuevo maneador de
0 interrupciones)
6>emplo2 mane>ador de 0(rl 6>emplo2 mane>ador de 0(rl 6>emplo2 mane>ador de 0(rl 6>emplo2 mane>ador de 0(rl: :: :#n(er #n(er #n(er #n(er
!i el u,uario oprime 0(rl:#n(er cuando un programa de 4!:5! e,pera da(o, de en(rada8 el
con(rol pa,a al procedimien(o del mane>ador de in(errupcione, prede(erminado para #NT 23*/
6l mane>ador de 0(rl:#n(er prede(erminado (ermina el programa .ue e,(D e>ecu(ando/ 6,(o
puede de>ar al programa en un e,(ado ine,(a'le8 7a .ue ,e podr-an .uedar arc*ivo, a'ier(o,8
la memoria podr-a .uedar ,in li'erar,e8 e(cD(era/ No o',(an(e8 e, po,i'le ,u,(i(uir nue,(ro
propio cdigo en el mane>ador de #NT 23* 7 evi(ar .ue el programa ,e de(enga/ 6l ,iguien(e
programa in,(ala un mane>ador ,imple de 0(rl:#n(er2
3I34E maneador de !trlKInter (!trlInter6asm)
0 Este programa instala su propio maneador de !trlKInter 5
0 evita @ue el usuario utilice !trlKInter (o !trlK!)
0 para detener el programa6 -ecibe e imprime en pantalla
0 las teclas presionadas 'asta @ue se oprime Esc6
I8!49DE Irvine%/6inc
6data
2sInter EF3E OI83E-P,"
msg EF3E ODemostracion de !trlKInter6P
EF3E "d', "a'
EF3E OEste programa des'abilita !trlKEreaa (!trlK!)6 Oprima cual@uierP
EF3E "d', "a'
EF3E Otecla para continuar, u oprima ES! para terminar6P
51:

EF3E "d', "a'
6code
main P-O!
mov a1, Zdata
mov ds, a1
mov d1, O$$SE3 msg 0 muestra mensae de bienvenida
call ,riteString
instalarTmaneador*
pus' ds 0 guarda DS
mov a1, Zcode 0 inicializa DS a segmento de cdigo
mov ds, a1
mov a', .<' 0 establece vector de interrupcin
mov al, .7' 0 para la interrupcin .7'
mov d1, O$$SE3 maneadorTinter
int .%'
pop ds 0 restaura DS
4%* mov a', % 0 espera una tecla, la imprime en pantalla
int .%'
cmp al, %E' 0 cse oprimi ES!N
nz 4% 0 no* contin?a
e1it
main E8DP
0 El siguiente procedimiento se eecuta cuando
0 se oprime !trlKEreaa (!trlK!)6 3odos los registros deben preservarse6
maneadorTinter P-O!
pus' a1
51"

pus' d1
mov d1, O$$SE3 2sInter
call ,riteString
pop d1
pop a1
iret
maneadorTinter E8DP
E8D main
6l procedimien(o main main main main iniciali=a el vec(or de in(errupcin para #NT 23*/ 3o, parBme(ro,
re.uerido, de en(rada para la funcin 25* de #NT 21* ,on2
9$ R 25*/
93 R #n(errupcin .ue ,e va a mane>ar (23*)/
5!25H R direccin (ipo ,egmen(oGde,pla=amien(o del nuevo mane>ador de 0(rl:#n(er/
6l ciclo principal de e,(e programa ,implemen(e reci'e e imprime la, (ecla, pre,ionada, en
pan(alla *a,(a .ue ,e prime 6,c/
6n alguno, ,i,(ema,8 (al ve= (engamo, .ue oprimir 0(rl:0 en ve= de 0(rl:#n(er para ac(ivar el
men,a>e del mane>ador de 0(rl:#n(er

6l procedimien(o mane>adorSin(er mane>adorSin(er mane>adorSin(er mane>adorSin(er ,e e>ecu(a al oprimir 0(rl:#n(er[ mue,(ra un men,a>e
llamando a ;ri(e!(ring 7 regre,a de inmedia(o al programa .ue *i=o la llamada/ 0uando la
in,(ruccin #<6T (re(orno de in(errupcin) ,e e>ecu(a al final de mane>adorSin(er8 el con(rol
regre,a al programa principal 7 ,e reinicia cual.uier funcin de 4!:5! .ue *a(a e,(ado en
progre,o cuando ,e oprimi 0(rl:#n(er/ 6n general8 podemo, llamar a cual.uier in(errupcin 4!:
5! de,de el in(erior de un mane>ador 0(rl:"reab/ 5e'emo, pre,ervar (odo, lo, regi,(ro, en
un mane>ador de in(errupcione,/
No *a7 .ue re,(aurar el vec(or #NT 23*8 7a .ue 4!:5! lo *ace de manera au(omB(ica cuando
(ermina un programa/ 4!:5! almacena el vec(or original en el de,pla=amien(o &&&6F*8 en el
prefi>o de ,egmen(o del programa/
Programa Programa Programa Programa, T!< (Terminar 7 permanecer re,iden(e) , T!< (Terminar 7 permanecer re,iden(e) , T!< (Terminar 7 permanecer re,iden(e) , T!< (Terminar 7 permanecer re,iden(e)
Cn programa T!< (terminar y permanecer residente) ,e in,(ala en memoria 7 permanece a*-
*a,(a .ue lo elimina un ,of(%are de u(ilier-a e,pecial o cuando ,e reinicia la compu(adora/ Cn
T!< permanece dormido *a,(a .ue ,e ac(iva median(e algAn even(o8 como pre,ionar una
(ecla/
51#

6n lo, primero, d-a, de lo, T!<,8 ,urg-an pro'lema, de compa(i'ilidad cuando do, o mB,
progama, ,u,(i(u-an el mi,mo vec(or de in(errupcin/ 3o, programa, an(iguo, *ac-an .ue el
vec(or apun(ara a ,u propio programa 7 no proporciona'an una cadena de avance a lo, demB,
programa, .ue u(ili=a'an el mi,mo vec(or/ 5e,puD,8 para remediar e,(e pro'lema8 lo, au(ore,
de lo, T!<, guarda'an el vec(or e1i,(en(e para la in(errupcin .ue e,(a'an ,u,(i(u7endo 7
prove-an una cadena de avance al mane>ador de in(errupcione, original8 una ve= .ue ,u propio
procedimien(o (ermina'a de lidiar con la in(errupcin/ 5e,de luego .ue e,(o fue una me>ora en
comparacin con el mD(odo an(erior8 pero ,ignifica'a .ue el Al(imo T!< en in,(alar,e (en-a de
manera au(omB(ica la prioridad mB, al(a en cuan(o al mane>o de la in(errupcin/ 6,(o
,ignifica'a .ue lo, u,uario, alguna, vece, de'-an (ener cuidado de cargar lo, programa, T!<
en un orden e,pec-fico/ 0uando la, aplicacione, de 4!:5! ,e u(ili=a'an dema,iado8 e1i,(-an
*erramien(a, de programacin comerciale, para admini,(rar lo, diver,o, programa,
re,iden(e, en memoria/
6>emplo del (eclado 6>emplo del (eclado 6>emplo del (eclado 6>emplo del (eclado
!upongamo, .ue e,cri'imo, una ru(ina de ,ervicio de in(errupcione, .ue puede in,peccionar
cada carBc(er .ue ,e e,cri'e en el (eclado 7 .ue puede almacenarlo en la u'icacin
1&"22&&2&/ Para in,(alar la #!<8 o'(ene8p, el vec(or ac(ual de #NT P de la (a'la de vec(ore, de
in(errupcin8 lo guardamo, 7 ,u,(i(umo, la en(rada en la (a'la con la direccin de nue,(ra #!</
0uando ,e oprime una (ecla8 ,e (ran,fiee un '7(e individual al con(rolador del (eclado *acia el
puer(o de (eclado de la compu(adora8 7 ,e ac(iva una in(errupcin de *ad%are/ 6l P#0 825P
pa,a el nAmero de la in(errupcin a la 0PC8 D,(a ,al(a a la direccin #NT P en la (a'la de
vec(ore, de in(errupcin8 la direccin de nue,(ra #!</ Nue,(ro procedimien(o reci'e una
opor(unidad para in,peccionar el '7(e del (eclado/ 0uando nue,(ro mane>ador de (eclado
(ermina/ e>ecu(a un ,al(o *acia el procedimien(o original del mane>ador de (eclado del "#!/
6,(e proce,o de almacenamien(o ,e mue,(ra en la ,iguien(e figura/ 3a, direccione, ,on
*ipo(D(ica,/ 0uando (ermina la ru(ina #NT P* del "#!8 la in,(ruccin #<6T ,aca el regi,(ro Flag,
de la pila 7 devuelve el con(rol al programa .ue ,e e,(a'a e>ecu(ando cuando ,e oprimi el
carBc(er/
+ec(ori=acin de una in(errupcin/
511


9plicacin2 el programa NoSreinicio 9plicacin2 el programa NoSreinicio 9plicacin2 el programa NoSreinicio 9plicacin2 el programa NoSreinicio
Cn (ipo ,imple de programa re,iden(e en memoria de'e evi(ar .ue el ,i,(ema ,e reinicie
median(e la, (ecla, 0(rl:9l(:!upr/ Cna ve= .ue nue,(ro programa ,e in,(ala en memoria8 el
,i,(ema ,lo puede reiniciar,e oprimiendo una com'inacin e,pecial de (ecla,2 0(rl:9l(:
4a7A,5er:!upr (la Anica o(ra forma de de,ac(ivar el programa e, apagar 7 reiniciar la
compu(adora)/ 6,(e programa funciona ,lo ,i ,e inicia la compu(adora en 4!:5!/ 4icro,of(
;indo%, NT8 2&&& 7 HP evi(an .ue un programa T!< in(ercep(e la, (ecla,/
l byte de estado del teclado de M!6D#! Cn poco de informacin .ue nece,i(amo, ,a'er
an(e, de reempla=ar e, la u'icacin del '7(e de e,(ado del (eclado .ue man(iene 4!:5! en
la memoria inferior8 .ue ,e mue,(ra en la ,iguien(e figura2

Nue,(ro programa in,peccionarB e,(a 'andera para ver ,i e,(Bn oprimida, la, (ecla, 0(rl8 9l(8
!upr 7 4a7A,5er/ 3a 'andera de e,(ado del programa ,e almacena en <948 en la u'icacin
&&4&2&17*/ 3a e(i.ue(a del lado derec*o del diagrama mue,(ra lo .ue ,ignificada cada 'i(8
cuando e, igual a 1/
513

Cn '7(e de e,(ado adicional del (eclado8 u'icado en &&4&2&&18b8 duplica la, 'andera,
an(eriore,8 e1cep(o .ue el 'i( 3 mue,(ra cuando la, (ecla, 0(rl:"lo.NAm e,(Bn ac(ivada, en un
momen(o dado/
'nstalacin del programa 6l cdigo re,iden(e en memoria de'e in,(alar,e en la memoria
para .ue pueda funcionar/ 5e a*- en adelan(e8 (oda la en(rada provenien(e del (elcado ,e
fil(rarB a (ravD, del programa/ !i la ru(ina (iene errore,8 e, pro'a'le .ue el (eclado ,e 'lo.uee
7 (engamo, .ue reiniciar la mB.uina/ 6n e,pecial8 lo, mane>adore, de in(errupcione, del
(eclado ,on dif-cile, de depurar8 7a .ue e,(amo, u,ando el (eclado con,(an(emen(e al depurar
lo, programa,/ 3o, profe,ionale, .ue e,cri'en programa, T!< con frecuencia invier(en
generalmen(e en depuradore, a,i,(ido, por *ard%are8 lo, cuale, man(ienen un 'Afer de
ra,(reo en la memoria pro(egida/ Cno de lo, errore, mB, elu,ivo, aparece ,lo cuando un
programa ,e e>ecu(a en (iempo real8 no cuando e,(amo, avan=ando pa,o a pa,o a (ravD, de
Dl/ (ota1 debemos iniciarl la computadora en modo M!6D#! antes de instalar este programa7
%istado del programa 6n el ,iguien(e li,(ado del programa8 el cdigo de in,(alacin ,e
encuen(ra al final8 7a .ue no permanecerB re,iden(e en memoria/ 3a porcin re,iden(e8 .ue
empie=a con la e(i.ue(a mane>adprSin(P mane>adprSin(P mane>adprSin(P mane>adprSin(P8 ,e de>a en memoria 7 e, la .ue apun(a el vec(or #NT
P*2
3I34E Programa para des'abilitar reinicios (8oT-einicio6asm)
0 Este programa des'abilita el comando usual de reinicio del DOS
0 (!trlKAltKSupr), interceptando la interrupcin de 'ard=are
0 de teclado I83 +6 !omprueba los bits de estado de ma5?sculas
0 en la bandera del teclado de 2SKDOS 5 cambia cual@uier !trlKAltKDel
0 por AltKSupr6 4a computadora slo puede reiniciarse si
0 se escribe !trlKAlt L 2a5?s der L Supr6 Debemos ensamblar el cdigo,
0 enlazarlo 5 convertirlo en un programa !O2 inclu5endo el comando V3
0 en la lAnea de comandos de 2icrosoft 4I8>6
0 Debemos reiniciar en modo de 2SKDOS puro antes de eecutar este
0 programa6
6model tin5
67#/
6code
ma5usTder ER9 "%' 0 3ecla 2a5?s der* bit "
515

teclaTctrl ER9 ";' 0 3ecla !3-4* bit .
teclaTalt ER9 "#' 0 3ecla A43* bit 7
teclaTsupr ER9 <7' 0 cdigo de e1ploracin para la tecla S9P-
puertoTtecl ER9 /"' 0 puerto de entrada del teclado
O-S %""' 0 ^ste es un programa !O2
inicio*
mp configuracion 0 salta a la instalacin del 3S-
0 El cdigo residente en memoria empieza a@uA
maneadorTint+ P-O! $A-
sti 0 'abilita interrupciones de 'ard=are
pus'f 0 guarda registros 5 banderas
pus' es
pus' a1
pus' di
0 Apunta ES*DI al b5te de la bandera del teclado de DOS*
4%* mov a1, ;"' 0 el segmento de datos de DOS estI en ;"'
mov es, a1
mov di, %M' 0 ubicacin de la bandera del teclado
mov a', es*BdiC 0 copia la bandera del teclado en A\
0 Prueba las teclas !3-4 5 A43*
4.* test a', teclaTctrl 0 cEstI oprimida !3-4N
z 4< 0 no* termina
test a', teclaTalt 0 cEstI oprimida A43N
z 4< 0 no* termina
0 Prueba las teclas DE4 5 2a5?sKDer*
47* in al, puertoTtecl 0 lee el puerto del teclado
516

cmp al, teclaTsupr 0 cSe oprimi DE4N
ne 4< 0 no* termina
test a', ma5usTder 0 cse oprimi 2a5?s DerN
nz 4< 0 si* permite @ue el sistema se reinicie
4;* and a', 8O3 teclaTctrl 0 no* apaga el bit para !3-4
mov es*BdiC, a' 0 almacena banderaTtecl
4<* pop di 0 restaura registros 5 banderas
pop a1
pop es
popf
mp cs*Binterrup+TantC 0 salta a la rutina de I83 +
interrup+Tant D,O-D N
maneadorTint+ E8DP
finTIS- label EF3E
0 KKKKKKKKKKKKKKKKKKKK(fin del programa 3S-) KKKKKKKKKKKKKKKKKKKKKKK
0 Suarda una copia del vector I83 + original 5 establece
0 la direccin de nuestro programa como el nuevo vector6 3ermina
0 este programa 5 dea el procedimiento maneadorTint+ en la memoria6
configuracion*
mov a1, 7<"+' 0 obtiene el vector I83 +
int .%'
mov =ord ptr interrup+Tant, b1 0 guarda el vector I83 +
mov =ord ptr interrup+TantL., es
mov a1, .<"+ 0 establece el vector de interrupcin, I83 +
mov d1, offset maneadorTint+
int .%'
517

mov a1, 7%"""' 0 termina 5 permanece residente
mov d1, O$$SE3 finTIS- 0 apunta al final del cdigo residente
s'r d1, ; 0 divide entre %/
inc d1 0 redondea 'acia arriba, el siguiente
pIrrafo
int .%' 0 eecuta la funcin de 2SKDOS
E8D inicio
Primero vamo, a ver a la, in,(ruccione, .ue in,(alan el programa/ 6n la e(i.ue(a llamada
configuracion configuracion configuracion configuracion8 llamamo, a la funcin 35* de #NT 21* para o'(ener el vec(or #NT P* ac(ual8
de,puD, ,e almacena en in(errupPSan( in(errupPSan( in(errupPSan( in(errupPSan(/ 6,(o ,e *ace para .ue el programa pueda encadenar
*acia delan(e el procedimien(o del mane>ador de (eclado e1i,(en(e/ 6n la mi,ma par(e del
programa8 la funcin 25* de #NT 21* e,(a'lece el vec(or de in(errupcin P* a la direccin de la
porcin re,iden(e de e,(e programa/ 9l final del mi,mo8 la llamada a la funcin 31* de #NT 21*
,ale a 4!:5!8 de>ando el programa re,iden(e en memoria/ 3a funcin guarda de manera
au(omB(ica (odo8 de,de el inicio del P!P *a,(a el de,pla=amien(o .ue ,e coloca en 5H/
l programa residente 6l mane>ador de in(errupcione, re,iden(e en memoria empie=a en la
e(i.ue(a llamada mane>adorSin(P mane>adorSin(P mane>adorSin(P mane>adorSin(P/ !e e>ecu(a cada ve= .ue ,e oprime una (ecla/ <e*a'ili(amo,
la, in(errupcione, (an pron(o como el mane>ador o'(iene el con(rol8 de'ido a .ue el P#0 825P
*a de,*a'ili(ado la, in(errupcione, de manera au(omB(ica2
maneadorTint+ P-O! $A-
sti 0 'abilita interrupciones de 'ard=are
pus'f 0 guarda registros 5 banderas
(etcD)
5e'emo, (ener en cuen(a .ue a menudo una in(errupcin del (eclado ocurre mien(ra, o(ro
programa ,e e,(B e>ecu(ando/ !i modificamo, lo, regi,(ro, o la, 'andera, de e,(ado a.u-8
provocar-amo, re,ul(ado, impredeci'le, en un programa de aplicacin/
3a, ,iguien(e, in,(ruccione, locali=an el '7(e de la 'andera del (eclado .ue ,e almacena en la
direccin &&4&2&&17 7 lo copian en 9$/ 6l '7(e de'e pro'ar,e para ver .uD (ecla, ,e
man(ienen oprimida, en un momen(o dado2
4%* mov a1, ;"' 0 el segmento de datos de DOS estI en ;"'
mov es, a1
mov di, %M' 0 ubicacin de la bandera del teclado
mov a', es*BdiC 0 copia la bandera del teclado en A\
518

3a, ,iguien(e, in,(ruccione, comprue'a la, (ecla, 0(rl 7 9l(/ !i no ,e man(ienen am'a,
oprimida,8 no, ,alimo,2
4.* test a', teclaTctrl 0 cEstI oprimida !3-4N
z 4< 0 no* termina
test a', teclaTalt 0 cEstI oprimida A43N
z 4< 0 no* termina
!i la, (ecla, 0(rl 7 9l( ,e man(ienen oprimida, a la ve=8 alguien podr-a e,(ar (ra(ando de
reiniciar la compu(adora/ Para averiguar .uD carBc(er ,e pre,ion8 reci'imo, el carBc(er del
puer(o del (eclado 7 lo comparamo, con la (ecla !upr2
47* in al, puertoTtecl 0 lee el puerto del teclado
cmp al, teclaTsupr 0 cSe oprimi DE4N
ne 4< 0 no* termina
test a', ma5usTder 0 cSe oprimi 2a5?s DerN
nz 4< 0 si* permite @ue el sistema se reinicie
!i el u,uario no *a oprimida la (ecla !upr8 ,implemen(e ,alimo, 7 de>amo, .ue #NT P* proce,e
la (ecla pre,ionada/ !i la (ecla !upr ,e man(iene oprimida8 ,a'emo, .ue ,e oprimi 0(rl:9l(:5el[
,lo permi(imo, .ue el ,i,(ema ,e reinicie ,i el u,uario (am'iDn man(iene oprimida la (ecla
4a7A, derec*a/ 6n ca,o con(rario8 el 'i( de la (ecla 0(rl en el '7(e de la 'andera del (eclado ,e
'orra8 con lo cual ,e de,*a'ili(a efec(ivamen(e el in(en(o del u,uario por reiniciar la
compu(adora2
4;* and a', 8O3 teclaTctrl 0 no* apaga el bit para !3-4
mov es*BdiC, a' 0 almacena la banderaTtecl
Por Al(imo8 e>ecu(amo, un ,al(o le>ano a la ru(ina e1i,(en(e de "#! #NT P*8 almacenada en la
vari'le in(errupPSan( in(errupPSan( in(errupPSan( in(errupPSan(/ 6,(o permi(e proce,ar (oda, la, (ecla, pre,ionada, normale,8 lo cual e,
vi(al para la opracin 'B,ica de la compu(adora2
mp cs*Binterrup+TantC 0 salta a la rutina de I83 +
0on(rol de *ard%are median(e el u,o de puer(o de 6G! 0on(rol de *ard%are median(e el u,o de puer(o de 6G! 0on(rol de *ard%are median(e el u,o de puer(o de 6G! 0on(rol de *ard%are median(e el u,o de puer(o de 6G!
3o, ,i,(ema, #9:32 ofrecen do, (ipo, de en(rada:,alida de *ard%are2 por asignacin de
memoria 7 por asignacin de puerto/ 0uando ,e u(ili=a la 6G! por asignacin de memoria8 un
programa puede e,cri'ir da(o, a una direccin de memoria e,pec-fica8 7 lo, da(o, ,e
(ran,fieren al di,po,i(ivo de ,alida/ 5e manera ,imilar8 ,e pueden leer lo, da(o, de un
di,po,i(ivo de en(rada ,i ,e copian de,de una direccin de memoria predefinida/ 3a pan(alla
519

de video de (e1(o e, un e>emplo de un di,po,i(ivo de a,ignacin de memoria/ 0uando
colocamo, carac(ere, en el ,egmen(o de video8 aparecen de inmedia(o en la pan(alla/
3a 6G! por asignacin de puerto re.uiere .ue la, in,(ruccione, #N 7 CT lean 7 e,cri'an da(o,
en u'icacione, con numeracin e,pec-fica,8 conocida, como puertos/ 3o, puer(o, ,on
cone1ione,8 o compuer(a,8 en(re la 0PC 7 o(ro, di,po,i(ivo,8 como el (eclado8 lo, parlan(e,8 el
mdem 7 la (er>e(a de ,onido/
Puer(o, de en(rada Puer(o, de en(rada Puer(o, de en(rada Puer(o, de en(rada: :: :,alida ,alida ,alida ,alida
0ada puer(o de en(rada:,alida (iene un nAmero e,pec-fico en(re & 7 FFFF*/ Por e>emplo8 para
con(rolar lo, parlan(e, ,e u(ili=a un puer(o8 *aciendo .ue el cono de la mi,ma ,e mueva con
rapide= *acia den(ro 7 *acia afuera/ Podemo, comunicarno, direc(amen(e con el adap(ador
a,-ncrono a (ravD, de un puer(o ,erial8 e,(a'leciendo lo, parBme(ro, del puer(o (velocidad en
'audio,8 paridad8 e(cD(era) 7 enviando da(o, a (ravD, del puer(o/
6l puer(o del (eclado e, un 'uen e>emplo de un puer(o de en(rada:,alida/ 0uando ,e oprime
una (ecla8 el c*ip con(rolador del (eclado env-a un cdigo de e1ploracin de 8 'i(, al puer(o
6&*/ 0uando ,e pre,iona una (ecla8 ,e ac(iva una in(errupcin de *ard%are8 la cual pide a la
0PC .ue llame a #NT P en el "#! de <4/ #NT P reci'e el cdigo de e1ploracin del puer(o8
'u,ca el cdigo 9!0## de la (ecla 7 almacena am'o, valore, en el 'Afer de en(rada del (eclado/
5e *ec*o8 ,er-a po,i'le pa,ar por al(o el ,i,(ema opera(ivo por comple(o8 7 leer lo, carac(ere,
direc(amen(e del puer(o 6&*/
9demB, lo, puer(o, .ue (ran,fieren da(o,8 la ma7or-a de lo, di,po,i(ivo, de *ard%are (ienen
puer(o, .ue no, permi(en moni(orear el e,(ado de un di,po,i(ivo 7 con(rolar ,u
compor(amien(o/
'nstrucciones '( y #U- la in,(ruccin #N reci'e un '7(e8 pala'ra o do'le pala'ra de un puer(o/
6n con,(ra,(e8 la in,(ruccin CT env-a un valor a un puer(o/ 3a ,in(a1i, para am'a,
in,(ruccione, e,2
I8 ac#m#lador, p#erto
O93 p#erto, ac#m#lador
Puerto puede ,er una con,(an(e en el rango de & a FF*8 o puede ,er un valor en 5H[ en(re & 7
FFFF*/ Acumulador de'e ,er 93 para (ran,ferencia, de 8 'i(,8 9H para (ran,ferencia, de 16
'i(, 7 69H para (ran,ferencia, de 32 'i(,/ 9 con(inuacin ,e mue,(ran alguno, e>emplo,2
in al, 7!' 0 recibe b5te del puerto 7!'
out 7!', al 0 envAa b5te al puerto 7!'
mov d1, numeroPuerto 0 D: puede contener un n?mero de puerto
in a1, d1 0 recibe palabra del puerto nombrado en D:
out d1, a1 0 envAa palabra al mismo puerto
53:

in ea1, d1 0 doble palabra del puerto
out d1, ea1 0 envAa doble palabra al mismo puerto
Programa de ,onido de P0 Programa de ,onido de P0 Programa de ,onido de P0 Programa de ,onido de P0
Podemo, e,cri'ir un programa .ue u(ilice la, in,(ruccione, #N 7 CT para generar ,onido a
(ravD, del al(avo= in(egrado a la P0/ 6l puer(o de con(rol del al(avo= (nAmero 61*) enciende 7
apaga la 'ocina8 manipulando el c*ip de interfaz perifGrica programable #n(el 8255/ Para
encender el al(avo=8 ,e in(roduce el valor ac(ual en el puer(o 61*8 ,e e,(a'lecen lo, 2 'i(,
inferiore, 7 ,e env-a el '7(e de vuel(a a (ravD, del puer(o/ Para apagar el al(avo=8 ,e 'orran lo,
'i(, & 7 18 ,e imprime el e,(ado de nuevo/
Nue,(ro programa de ,onido no producir-a ,onido, en una compu(adora por(a(il ,i ,u al(avo= e,(B
conec(ado direc(amen(e a la (ar>e(a de ,onido8 en ve= de e,(ar conec(ado al puer(o de al(avo=
(61*)/

6l c*ip Tempori=ador #n(el 8253 con(rola la frecuencia ((ono) del ,onido .ue ,e va a generar/
Para u,arlo8 enviamo, un valor en(re & 7 255 al puer(o 42*/ 6l programa 5emo de al(avo=
mue,(ra cmo generar ,onido8 reproduciendo una ,erie de no(a, a,cenden(e,2
3I34E Programa Demo de altavoz (Altavoz6asm)
0 Este programa reproduce una serie de notas ascendentes en
0 el altavoz de la P!6
I84!9DE Irvine%/6inc
altavoz ( /%' 0 direccin del puerto de altavoz
temporizador ( ;.' 0 direccin del puerto del altavoz
retraso% ( <""
retraso. ( "D"""' 0 retraso entre las notas
6code
main P-O!
in al, altavoz 0 obtiene el estado del altavoz
pus' a1 0 guarda el estado
or al, """"""%%b 0 establece los dos bits inferiores
out altavoz, al 0 enciende el altavoz
53"

mov al, /" 0 tono inicial
4.* out temporizador, al 0 puerto del temporizador* envAa pulso al
altavoz
0 !rea un ciclo de retraso entre los tonos*
mov c1, retraso%
47* pus' c1 0 ciclo e1terior
mov c1, retraso.
47a* 0 ciclo interior
loop 47a
pop c1
loop 47
sub al, % 0 eleva el tono
nz 4. 0 reproduce otro tono
pop ea1 0 obtiene el estado original
and al, %%%%%%""b 0 borra los . bits inferiores
out altavoz, al 0 apaga el altavoz
e1it
main E8DP
E8D main
Primero8 el programa enciende el al(avo= u,ando el puer(o 61*8 para lo cual e,(a'lece lo, 2
'i(, inferiore, en el '7(e de e,(ado del al(avo=2
or al, """"""%%b 0 establece los . bits inferiores
out altavoz, al 0 enciende el altavoz
5e,puD, e,(a'lece el (ono8 enviando 6& al c*ip (empori=ador2
mov al, /" 0 tono inicial
4.* out temporizador, al 0 puerto del temporizador* envAa pulso al
altavoz
53#

Cn ciclo de re(ra,o *ace .ue el programa ,e de(enga an(e, de cam'iar el (ono de nuevo/ 3a
can(idad de re(ra,o var-a en(re di,(in(a, compu(adora,8 de'ido a la diferencia en la velocidad
de ,u, proce,adore,/ Tal ve= (engamo, .ue a>u,(ar lo, valore, de re(ra,o1 re(ra,o1 re(ra,o1 re(ra,o1 7 re(ra,o2 re(ra,o2 re(ra,o2 re(ra,o22
mov c1, retraso%
47* pus' c1 0 ciclo e1terior
mov c1, retraso. 0 ciclo interior
47a* loop 47a
pop c1
loop 47
5e,puD, del re(ra,o8 el programa re,(a 1 al periodo (/Bfrecuencia)8 lo cual eleva el (ono/ 3a
nueva frecuencia ,e env-a al (empori=ador cuando ,e repi(e el ciclo/ 6,(e proce,o con(inAa
*a,(a .ue el con(ador de frecuencia en 938 e, igual a &/ Por Al(imo8 el programa ,aca el '7(e de
e,(ado original del puer(o del al(avo= 7 lo apaga 'orrando lo, 2 'i(, inferiore,2
pop a1
and al, %%%%%%""b 0 borra los . bits inferiores
out altavoz, al
17 Proce,amien(o de pun(o flo(an(e 7 codificacin de 17 Proce,amien(o de pun(o flo(an(e 7 codificacin de 17 Proce,amien(o de pun(o flo(an(e 7 codificacin de 17 Proce,amien(o de pun(o flo(an(e 7 codificacin de
in,(ruccione, in,(ruccione, in,(ruccione, in,(ruccione,
<epre,en(acin 'inaria de pun(o flo(an(e <epre,en(acin 'inaria de pun(o flo(an(e <epre,en(acin 'inaria de pun(o flo(an(e <epre,en(acin 'inaria de pun(o flo(an(e
Cn nAmero de pun(o flo(an(e con(iene (re, componen(e,2 un ,igno8 una man(i,a 7 un
e1ponen(e/ Por e>emplo8 en el nAmero :1/23154 1 1&O58 el ,igno e, nega(ivo8 la man(i,a e,
1/23154 7 el e1ponen(e e, 5/
<epre,en(acin de pun(o flo(an(e 'inaria #666 <epre,en(acin de pun(o flo(an(e 'inaria #666 <epre,en(acin de pun(o flo(an(e 'inaria #666 <epre,en(acin de pun(o flo(an(e 'inaria #666
3o, proce,adore, #n(el u(ili=an (re, forma(o, de almacenamien(o 'inario de pun(o flo(an(e8 lo,
cuale, ,e e,pecifican en el st*ndar 754:1P85 para la aritmGtica binaria de punto flotante8
producido por la organi=acin #666/ 3a ,iguien(e (a'la de,cri'e ,u, carac(er-,(ica,/
Forma(o, 'inario, de pun(o flo(an(e de #666/
Preci,in ,imple Preci,in ,imple Preci,in ,imple Preci,in ,imple 32 'i(,2 1 'i( para el ,igno8 8 'i(, para el e1ponen(e 7 32 'i(, para la
par(e fraccional de la man(i,a/ <ango normali=ado apro1imado2 2O:
126 a 2O127/ Tam'iDn ,e le conoce como real corto/
531

Preci,in do'le Preci,in do'le Preci,in do'le Preci,in do'le 64 'i(,2 1 'i( para el ,igno8 11 'i(, para el e1ponen(e 7 52 'i(, para la
par(e fraccional de la man(i,a/ <ango normali=ado apro1imado2 2O:
1&22 a 2O1&23/ Tam'iDn ,e le conoce como real largo/
Preci,in do'le Preci,in do'le Preci,in do'le Preci,in do'le
e1(endida e1(endida e1(endida e1(endida
8& 'i(,2 1 'i( para para el ,igno8 16 'i(, para el e1ponen(e 7 63 'i(,
para la par(e fraccional de la man(i,a/ <ango normali=ado
apro1imado2 2O:16382 a 2O16383/ Tam'iDn ,e le conoce como real
extendido/

0omo lo, (re, forma(o, ,on mu7 ,imilare,8 no, enfocaremo, en el forma(o de preci,in ,imple
(figura a con(inuacin)/ 3o, 32 i(, ,e ordenan con el 'i( mB, ,ignifica(ivo (4!") a la i=.uierda/
6l ,egmen(o ,e marca como fraccin indica la par(e fraccional de la man(i,a/ 0omo podr-amo,
e,perar8 lo, '7(e, individuale, ,e almacenan en memoria en orden li((le endian (3!" en la
direccin inicial)/
Forma(o de preci,in ,imple/

6l ,igno 6l ,igno 6l ,igno 6l ,igno
!i el 'i( de ,igno e, 18 el nAmero e, nega(ivo2 ,i el 'i( e, &8 el nAmero e, po,i(ivo/ 0ero ,e
con,idera po,i(ivo/
3a man(i,a 3a man(i,a 3a man(i,a 3a man(i,a
6n el nAmero de pun(o flo(an(e repre,en(ado por la e1pre,in m T bUe8 a m mm m ,e le conoce como
man(i,a[ ' '' ' e, la 'a,e 7 e ee e e, el e1ponen(e/ 3a mantisa de un nAmero de pun(o flo(an(e con,i,(e
en lo, d-gi(o, decimale, a la i=.uierda 7 derec*a del pun(o decimal/ 6n el cap-(ulo 1
pre,en(amo, el concep(o de la no(acin po,icional ponderada al e1plicar lo, ,i,(ema,
numDrico, 'inario,8 decimal 7 *e1adecimal/ 6l mi,mo concep(o puede e1(ender,e para incluir
la par(e fraccional de un nAmero de pun(o flo(an(e/ Por e>emplo8 el valor decimal 123/154 ,e
repre,en(a median(e la ,iguien(e ,uma/
123/154 R (1 1 1&O2) E (211&O1) E (311&O&) E (111&O:1) E (511&O:2) E (411&O:3)
Todo, lo, d-gi(o, a la i=.uierda del pun(o decimal (ienen e1ponen(e, po,i(ivo,8 7 (odo, lo,
d-gi(o, a la derec*a (ienen e1ponen(e, nega(ivo,/
3o, nAmero, 'inario, de pun(o flo(an(e (am'iDn u(ili=an no(acin po,icional ponderada/ 6l
valor 'inario de pun(o flo(an(e 11/1&11 ,e e1pre,a como2
11/1&11 R (112O1) E (112O&) E (112O:1) E (&1O2O:2) E (112O:3) E (112O:4)
533

((ra forma de e1pre,ar lo, valore, a la derec*a del pun(o 'inario e, pre,en(arlo como una
,uma de fraccione,8 cu7o, denominadore, ,ean po(encia, de 2/ 6n nue,(ro e>emplo8 la ,uma
e, 11G16 (o &/6875)2
/1&11 R (1G2) E (&G4) E (1G8) E 1G16 R 11G16
6l proce,o de generar la fraccin decimal e, 'a,(an(e eviden(e/ 6l numerador decimal (11)
repre,en(a el pa(ron de 'i(, 'inario 1&11/ !i e e, el nAmero de 'i(, ,ignifica(ivo, a la derec*a
del pun(o 'inario8 el denominador decimal e, 2Oe/ 6n nue,(ro e>emplo e R 4 por lo .ue 2Oe R
16/ 3a ,iguien(e (a'la mue,(ra e>emplo, adicionale, de cmo (raducir no(acin 'inaria de
pun(o flo(an(e a fraccione, de 'a,e 1&/ 3a Al(ima en(rada en la (a'la con(iene la fraccin mB,
pe.ue@a .ue puede almacenar,e en una man(i,a normali=ada de 23 'i(,/
6>emplo,2 Traduccin de nAmero, 'inario, de pun(o flo(an(e a fraccione,/
"inario de pun(o flo(an(e "inario de pun(o flo(an(e "inario de pun(o flo(an(e "inario de pun(o flo(an(e Fraccin de 'a,e 1& Fraccin de 'a,e 1& Fraccin de 'a,e 1& Fraccin de 'a,e 1&
11/11 3 3G4
1&1/&&11 5 3G16
11&1/1&&1&1 13 37G64
&/&&1&1 5G32
1/&11 1 3G8
&/&&&&&&&&&&&&&&&&&&&&&&1 1G83886&8

3a preci,in de la man(i,a 3a preci,in de la man(i,a 3a preci,in de la man(i,a 3a preci,in de la man(i,a
6l con(-nuo comple(o de nAmero, reale, no puede repre,en(ar,e en ningAn forma(o de pun(o
flo(an(e .ue (enga un nAmero fini(o de 'i(,/ Por e>emplo8 ,upongamo, .ue un forma(o de
pun(o flo(an(e ,implificado (iene man(i,a de 5 'i(,/ No *a'r-a forma de repre,en(ar lo, valore,
.ue ,e encuen(ra en(re lo, nAmero, 1/1111 7 1&/&&&& 'inario,/ Por e>emplo8 el valor 1/1111
re.uiere una man(i,a mB, preci,a/ !i e1(endemo, e,(a idea al forma(o #666 de do'le
preci,in8 podemo, ver .ue una man(i,a de 53 'i(, no puede repre,en(ar un valor 'inario .ue
re.uiera 54 'i(, o mB,/
6l e1ponen(e 6l e1ponen(e 6l e1ponen(e 6l e1ponen(e
3o, e1ponen(e, de preci,in ,imple ,e almacena como en(ero, ,in ,igno de 8 'i(, con una
de,viacin de 127/ 6l e1ponen(e ac(ual del nAmero de'e ,umar,e a 127/ 0on,ideramo, el
valor 'inario 1/1&112O5/ 5e,puD, de .ue ,e le ,uma el e1ponen(e ac(ual (5) a 1278 el
e1ponen(e de de,viacin (132) ,e almacena en la repre,en(acin del nAmero/ 3a ,iguien(e
(a'la mue,(ra e>emplo, de e1ponen(e, en decimal con ,igno8 de,puD, en decimal con
de,viacin 78 por Al(imo8 en 'inario ,in ,igno/
535

6>emplo, de e1ponen(e, repre,en(ado, en 'inario/
61ponen(e (6) 61ponen(e (6) 61ponen(e (6) 61ponen(e (6) 0on de,viacin (6 E 0on de,viacin (6 E 0on de,viacin (6 E 0on de,viacin (6 E
127) 127) 127) 127)
"inario "inario "inario "inario
E 5 132 1&&&&&&&
& 127 &1111111
: 1& 117 &111&1&1
E 127 254 1111111&
: 126 1 &&&&&&&1
: 1 126 &111111&

6l e1ponen(e con de,viacin ,iempre e, po,i(ivo8 en(re 1 7 254/ 0omo di>imo, an(e,8 el rango
ac(ual del e1ponen(e e, de :126 a E 127/ 6l rango ,e eligi de manera .ue el menor rec-proco
po,ile del e1ponen(e no pueda oca,ionar un de,'ordamien(o/
NAmero, de pun(o 'inario, normali=ado, NAmero, de pun(o 'inario, normali=ado, NAmero, de pun(o 'inario, normali=ado, NAmero, de pun(o 'inario, normali=ado,
3a ma7or-a de lo, nAmero, 'inario, de pun(o flo(an(e ,e almacenan en forma(o normalizado8
para ma1imi=ar la preci,in de la man(i,a/ 5ado cual.uier nAmero 'inario de pun(o flo(an(e8
podemo, normali=arlo ,i de,pla=amo, el pun(o 'inario *a,(a .ue apare=ca un ,olo ]1W a la
i=.uierda del mi,mo/ 6l e1ponen(e e1pre,a el nAmero de po,icione, .ue ,e de,pla=a el pun(o
'inario a la i=.uierda (e1ponen(e po,i(ivo) o a la derec*a (e1ponen(e nega(ivo)/ $e a.u-
alguno, e>emplo,2
!in !in !in !in normali=ar normali=ar normali=ar normali=ar Normali=ado Normali=ado Normali=ado Normali=ado
111&/1 1/11&1 1 2O3
/&&&1&1 1/&1 1 2O:4
1&1&&&1/ 1/&1&&&1 1
2O6

5alores sin normalizar Podr-amo, decir denormalizar un nAmero 'inario de pun(o flo(an(e
,er-a inver(ir la operacin de normali=acin/ !e de,pla=a el pun(o 'inario *a,(a .ue el
e1ponen(e ,ea cero/ !i el e1ponen(e e, n po,i(ivo8 ,e de,pla=a el pun(o 'inario n po,icione, a
la derec*a[ ,i el e1ponen(e e, n nega(ivo8 ,e de,pla=a el pun(o 'inario n po,icione, a la
i=.uierda8 rellenando con cero, ,i e, nece,ario/
0reacin de la repre,en(acin #666 0reacin de la repre,en(acin #666 0reacin de la repre,en(acin #666 0reacin de la repre,en(acin #666
536

0odificacione, de nAmero, reale, 0odificacione, de nAmero, reale, 0odificacione, de nAmero, reale, 0odificacione, de nAmero, reale,
Cna ve= .ue ,e normali=an 7 codifican lo, campo, 'i( de ,igno8 e1ponen(e 7 man(i,a8 e, fBcil
generar un nAmero real cor(o #666 'inario comple(o/ !i u(ili=amo, la figura .ue mue,(ra el
8ormato de precisin simple (mo,(rada an(eriormen(e) como referencia8 podemo, colocar el
'i( de ,igno primero8 lo, 'i(, del e1ponen(e a con(inuacin8 7 la par(e fraccional de la man(i,a
al Al(imo/ Por e>emplo el nAmero 'inario 1/1&1 1 2O& ,e repre,en(a de la ,iguien(e manera2
"i( de ,igno2 &
61ponen(e2 &1111111
Fraccin2 1&1&&&&&&&&&&&&&&&&&&&&
6l e1ponen(e con de,viacin (&1111111) e, la repre,en(acin 'inaria de 127 decimal/ Toda,
la, man(i,a, normali=ada, (ienen 1 a la i=.uierda del pun(o 'inario8 por lo .ue no *a7
nece,idad de codificar el 'i( en forma e1pl-ci(a/ 6n la ,iguien(e (a'la ,e mue,(ran e>emplo,
adicionale,/
6>emplo, de codificacione, de 'i(, de preci,in ,imple/
+alor 'inario +alor 'inario +alor 'inario +alor 'inario 61ponen(e con 61ponen(e con 61ponen(e con 61ponen(e con
de,viacin de,viacin de,viacin de,viacin
!igno8 61ponen(e8 Fraccin !igno8 61ponen(e8 Fraccin !igno8 61ponen(e8 Fraccin !igno8 61ponen(e8 Fraccin
:1/11 127 1 &1111111 11&&&&&&&&&&&&&&&&&&&&&
E11&1/1&1 13& & 1&&&&&1& 1&11&1&&&&&&&&&&&&&&&&&
:/&&1&1 124 1 &11111&& &1&&&&&&&&&&&&&&&&&&&&&
E1&&111/& 132 & 1&&&&1&& &&111&&&&&&&&&&&&&&&&&&
E/&&&&&&11&1&11 12& & &1111&&& 1&1&11&&&&&&&&&&&&&&&&&
%a unidad 'ntel de punto flotante utiliza los n@meros indefinidos como respuestas para
algunas operaciones inv*lidas cn n@meros de punt flotante/
3a e,pecificacin #666 inclu7e varia, codificacione, de nAmero, real, 7 no numDrica,/
0ero po,i(ivo 7 nega(ivo/
NAmero, fini(o, denormali=ado,/
NAmero, fini(o, normali=ado,/
#nfini(o po,i(ivo 7 nega(ivo/
+alore, no numDrico, (NaN8 conocido como (o es un n@mero)/
NAmero, indefinido,/
(ormalizados y denormalizados 3o, n@meros finitos normalizados ,on (odo, lo, valore,
fini(o, di,(in(o, de cero .ue pueden codificar,e en un nAmero real normali=ado8 en(re cero e
infini(o/ 9un.ue podr-a parecer .ue (odo, lo, nAmero, de pun(o flo(an(e fini(o, di,(in(o de cero
de'en normali=ar,e8 no e, po,i'le cuando ,u, valore, e,(Bn cerca de cero/ 6,(o ocurre cuando
537

la FPC no puede de,pla=ar el pun(o 'inario *acia una po,icin normali=ada8 dada la limi(acin
impue,(a por el rango del e1ponen(e/ !upongamo, .ue la FPC calcula un re,ul(ado de
1/&1&1111 1 2O:12P8 .ue (iene un e1ponen(e dema,iado pe.ue@o como para almacenarlo en
un nAmero de preci,in ,imple/ !e genera una condicin de e1cepcin de de,'ordamien(o8 7 el
nAmero ,e denormali=a de forma gradual median(e el de,pla=amien(o del pun(o 'inario *acia
la i=.uierda 1 'i( a la ve=8 *a,(a .ue el e1ponen(e llega a un rango vBlido2
1/&1&1111&&&&&&&&&&&&1111 1 2O:12P
&/1&1&1111&&&&&&&&&&&&111 1 2O:128
&/&1&1&1111&&&&&&&&&&&&11 1 2O:127
&/&&1&1&1111&&&&&&&&&&&&1 1 2O:126
6n e,(e e>emplo ,e produ>o una cier(a pDrdida de preci,in en el ,ignificando8 como re,ul(ado
del de,pla=amien(o del pun(o decimal/
'nfinito positivo y negativo 6l infini(o po,i(ivo (E r) repre,en(a al mB1imo numero real
po,i(ivo8 el infini(o nega(ivo (: r) repre,en(a el mB1imo numero real nega(ivo/ Podemo,
comparar a lo, infini(o, con o(ro, valore,2 : r e, menor .ue E r8 : r e, menor .ue cual.uier
nAmero fini(o8 7 E r e, ma7or .ue cual.uier nAmero fini(o/ 0ual.uiera de lo, infini(o, puede
repre,en(ar una condicin de de,'ordamien(o de pun(o flo(an(e,/ 6l re,ul(ado de un cBlculo
no puede normali=ar,e8 7a .ue ,u e1ponen(e ,er-a dema,iado grando como para poder
repre,en(ar,e median(e el nAmero di,poin'le de 'i(, del e1ponen(e2
(a(s 3o, (ans ,on pa(rone, de 'i(, .ue no repre,en(an ningAn nAmero real vBlido/ 3a
ar.ui(ec(ura #9:32 inclu7e do, (ipo, de NaN,2 Cn (a( silencioso puede propagar,e a (ravD, de
la ma7or-a de la, operacione, ari(mD(ica, ,in provocar una e1cepcin/ Cn (a( de se,alizacin
puede u,ar,e para generar una e1cepcin de operacin invBlida de pun(o flo(an(e/ Cn
compilador podr-a llenar un arreglo ,in iniciali=ar con valore, NaN de ,e@ali=acin8 para .ue
cual.uier in(en(o de reali=ar cBlculo, en el arreglo genere una e1cepcin/ Cn NaN ,ilencio,o ,e
puede u,ar para guardar la informacin de diagn,(ico .ue ,e crea duran(e la, ,e,ione, de
depuarcin/
Cn programa e, li're de codificar cual.uier informacin .ue de,ee en un NaN/ 3a unidad de
pun(o flo(an(e no (ra(a de reali=ar operacione, con NaN,/ 6l manual de la familiar #n(el #9:32
de(alla un con>un(o de regla, .ue de(erminan lo, re,ul(ado, de la, in,(ruccione, cuando ,e
u(ili=an com'inacione, de lo, (ipo, de Nan, como operando,/
"odificaciones especficas $a7 varia, codificacione, para lo, valore, .ue encon(ramo, a
menudo en la, operacione, de pun(o flo(an(e[ e,(a, codificacione, ,e mue,(ran en la
,iguien(e (a'la/
+alor +alor +alor +alor !igno8 61ponen(e8 4an(i,a !igno8 61ponen(e8 4an(i,a !igno8 61ponen(e8 4an(i,a !igno8 61ponen(e8 4an(i,a
0ero po,i(ivo & &&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&
538

0ero nega(ivo 1 &&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&
#nfini(o po,i(ivo & 11111111 &&&&&&&&&&&&&&&&&&&&&&&
#nfini(o nega(ivo 1 11111111 &&&&&&&&&&&&&&&&&&&&&&&
LNaN 1 11111111 11111111111111111111111111
!NaN 1 11111111 &111111111111111111111111oa
J 6l campo de la man(i,a NaN empie=a con &8 pero por lo meno, uno de lo, 'i(, re,(an(e,
de'e ,er 1/
3a, po,icione, de 'i( marcada, con la le(ra 1 pueden ,er 1 o & LNaN e, un NaN ,ilecio,o8 7
,NaN e, un NaN de ,e@ali=acin/
0onv 0onv 0onv 0onver,in de fraccione, decimale, a reale, 'inario, er,in de fraccione, decimale, a reale, 'inario, er,in de fraccione, decimale, a reale, 'inario, er,in de fraccione, decimale, a reale, 'inario,
0uando una fraccin decimal puede repre,en(ar,e como una ,uma de fraccione, en la forma
(1G2 E 1G4 E 1G8 E d)8 e, mu7 ,encillo de,cu'rir el real 'inario corre,pondien(e/ 6n la
,iguien(e (a'la8 la ma7or-a de la, fraccione, en la columna i=.uierda no ,e encuen(ran en
forma(o .ue ,e (radu=ca facilmen(e a 'inario/ !in em'argo puede e,cri'ir,e como en la
,egunda columna/
6>emplo, de fraccione, decimale, 7 reale, 'inario,
Fraccin decimal Fraccin decimal Fraccin decimal Fraccin decimal !e fac(ori=a comod !e fac(ori=a comod !e fac(ori=a comod !e fac(ori=a comod <eal 'i <eal 'i <eal 'i <eal 'inario nario nario nario
1G2 1G2 /1
1G4 1G4 /&1
3G4 1G2 E 1G4 /11
1G8 1G8 /&&1
7G8 1G2 E 1G4 E 1G8 /111
3G8 1G4 E 1G8 /&11
1G16 1G16 /&&&1
3G16 1G8 E 1G16 /&&11
5G16 1G4 E 1G16 /&1&1

4uc*o, nAmero, reale, como 1G1& (&81) o 1G1&& (&8&1)8 no pueden repre,en(ar,e median(e
un nAmero fini(o de d-gi(o, 'inario,/ !lo podemo, apro1imarlo, a una fraccin a,- median(e
una ,uma de fraccione,8 cu7o, denominadore, ,ean po(encia, de 2/
539

MGtodo alternativo? Uso de la divisin de n@meros largos binarios 0uando ,e involucran
valore, decimale, pe.ue@o,8 una manera ,encilla de conver(ir la, fraccione, decimale, en
nAmero, 'inario, e, conver(ir primero el nAmerador 7 el denominador a 'inario 7 de,puD,
reali=ar la divi,in larga/ Por e>emplo8 el &85 decimal ,e repre,en(a como la fraccin 5G1&/ 6l 5
decimal e, el &1&1 'inario 7 el 1& decimal e, 1&1& 'inario/ !i reali=amo, una divi,in larga
'inaria8 encon(raremo, .ue el cocien(e e, el &/1 'inario2

0uando el 1&1& 'inario ,e re,(a del dividendo el re,iduo e, cero8 7 la divi,in ,e de(iene/ Por
lo (an(o8 la fraccin 5G1& decimal e, igual al nAmero &/1 'inario/ 9 e,(e mD(odo lo llamaremo,
mGtodo de divisin laga binaria/
.epresentacin de O73 en binario +amo, a conver(ir el &/2 (2G1&) decimal a 'inario8
median(e el mD(odo de divi,in larga 'inaria/ Primero dividimo, el 1& 'inario en(re 1&1&
'inario (1& decimal)2

6l primer cocien(e e, lo 'a,(an(e grande para u,ar 1&&&&/ 5e,puD, de dividir 1&1& en(re
1&&&&8 el re,iduo e, 11&/ !i le ad>un(amo, o(ro cero8 el nuevo dividendo e, 11&&/ 5e,puD, de
dividir 1&1& en(re 11&&8 el re,iduo e, 1&/ 5e,puD, de ad>un(ar (re, cero,8 el nuevo dividendo
e, 1&&&&/ Z,(e e, el mi,mo dividendo con el .ue empe=amo,/ 5e a.u- en adelan(e8 la
,ecuencia de lo, 'i(, en el cocien(e ,e repi(e (&&11d)8 por lo .ue ,a'emo, .ue no
encon(raremo, un cocien(e e1ac(o 7 .ue &2 no puede repre,en(ar,e median(e un nAmero
fini(o de 'i(,/ 3a man(i,a codificada de preci,in ,imple e, &&11&&11&&11&&11&&11&&1/
0onver,in de valore, de preci,in ,imple a decimale, 0onver,in de valore, de preci,in ,imple a decimale, 0onver,in de valore, de preci,in ,imple a decimale, 0onver,in de valore, de preci,in ,imple a decimale,
9 con(inuacin ,e mue,(ran lo, pa,o, ,ugerido, para conver(ir un valor #666 de pre,icin
,imple (!P) a decimal2
1/ !i el 4!" e, 18 el nAmero e, nega(ivo[ en ca,o con(rario e, po,i(ivo/
2/ 3o, ,iguien(e, 8 'i(, repre,en(an el e1ponen(e/ $a7 .ue re,(arle el &1111111 'inario
(decimal)8 con lo .ue ,e poduce el e1ponen(e ,in de,viacin/ 3uego ,e convier(e en
e1ponen(e ,in de,viacin a decimal/
55:

3/ 3o, ,iguien(e, 23 'i(, repre,en(an la man(i,a/ !e ano(a un ]1/W8 ,eguido de lo, 'i(, de
la man(i,a/ 3o, cero, a la i=.uierda pueden ignorar,e/ $a7 .ue crear un nAmero 'inario
de pun(o flo(an(e8 u,ando la man(i,a8 el ,igno .ue ,e de(ermin en el pa,o 1 7 el
e1ponen(e .ue ,e calcul en el pa,o 2/
4/ 5enormali=ar el nAmero 'inario producido en el pa,o 3/ $a7 .ue de,pla=ar el pun(o
'inario un nAmero de lugare, igual al valor del e1ponen(e/ !e de,pla=a a la derec*a ,i
el e1ponen(e e, po,i(ivo8 o a la i=.uierda ,i e, nega(ivo/
5/ 5e i=.uierda a derec*a8 *a7 .ue u,ar la no(acin po,icional ponderada para formar la
,uma decimal de la, po(encia, de 28 repre,en(ada, por el nAmero 'inario de pun(o
flo(an(e/
6>emplo2 conver(ir el nAmero #666 (& 1&&&&&&1& &1&11&&&&&&&&&&&&&&&&&&) a decimal 6>emplo2 conver(ir el nAmero #666 (& 1&&&&&&1& &1&11&&&&&&&&&&&&&&&&&&) a decimal 6>emplo2 conver(ir el nAmero #666 (& 1&&&&&&1& &1&11&&&&&&&&&&&&&&&&&&) a decimal 6>emplo2 conver(ir el nAmero #666 (& 1&&&&&&1& &1&11&&&&&&&&&&&&&&&&&&) a decimal
1/ 6l nAmero e, po,i(ivo/
2/ 6l e1ponen(e ,in de,viacin e, &&&&&&11 'inario8 o 3 decimal/
3/ !i com'inamo, ,igno8 e1ponen(e 7 man(i,a8 el nAmero 'inario e, E 1/&1&11 1 2O 3
4/ 6l nAmero 'inario denormali=ado e, E 1&1&/11:
5/ 6l valor decimal e, E 1& 3G4 o E 1&/75
Cnidad de pun(o flo(an(e Cnidad de pun(o flo(an(e Cnidad de pun(o flo(an(e Cnidad de pun(o flo(an(e
6l proce,ador #n(el 8&86 ,e di,e@ para mane>ar ,lo la ari(mD(ica de en(ero,/ 6,(o re,ul( ,er
un pro'lema para el ,of(%are de grBfico, 7 de u,o in(en,ivo de cBlculo,8 en donde ,e u(ili=a'an
lo, cBlculo, con nAmero, de pun(o flo(an(e/ 6ra po,i'le emular la ari(mD(ica de pun(o flo(an(e
,lo median(e el ,of(%are8 pero el ca,(igo en el rendimien(o era ,evero/ 3o, programa, como
Auto"ad (de 9u(ode,b) demanda'an un mD(odo mB, podero,o para reali=ar operacione,
ari(mD(ica, de pun(o flo(an(e/ #n(el vendi un c*ip coproce,ador de pun(o flo(an(e por
,eparado8 llamado 8&878 7 lo ac(uali= >un(o con cada generacin de proce,adore,/ 0on la
llegada del #n(el4868 el *ad%are de pun(o flo(an(e ,e in(egr a la 0PC principal 7 ,e llamo
Unidad de punto flotante (FPC)/
Pila de regi,(ro, FPC Pila de regi,(ro, FPC Pila de regi,(ro, FPC Pila de regi,(ro, FPC
3a FPC no u(ili=a lo, regi,(ro, de prop,i(o general (69H8 6"H e(cD(era)/ 6n ve= de ello8 (iene ,u
propio con>un(o de regi,(ro, llamado pila de registros/ 0arga lo, valore, de memoria 7 lo,
coloca en la pila de regi,(ro,8 reali=a cBlculo, 7 almacena lo, valore, de la pila en la memoria/
3a, in,(ruccione, de la FPC evalAan e1pre,ione, ma(emB(ica, en forma(o postfijo8 en forma
mu7 parecida a la, calculadora, $e%le((:Pacbard/ Por e>emplo8 a la ,iguien(e e1pre,in ,e le
conoce como expresin infijo2 (5 J 6) E 4/ 6l e.uivalen(e en po,(fi>o e,2
5 6 J 4 E
3a e1pre,in infi>o (9 E ") J 0 (9 E ") J 0 (9 E ") J 0 (9 E ") J 0 re.uiere parDn(e,i, para ignorar la, regla, de precedencia
prede(erminada, (la mul(iplicacin an(e, de la ,uma)/ 3a e1pre,in po,(fi>o e.uivalen(e no
re.uiere parDn(e,i,2
9 " J 0 E
55"

Pila de expresiones Cna pila almacena lo, valore, in(ermedio, duran(e la evaluacin de la,
e1pre,ione, po,(fi>o/ 3a ,iguien(e figura mue,(ra lo, pa,o, re.uerido, para evaluar la
e1pre,in po,(fi>o 5 6 J 4 5 6 J 4 5 6 J 4 5 6 J 4 : :: :/ // /

3a, en(rada, de la pila ,e e(i.ue(an como !T(&) 7 !T(1)8 en donde !T(&) indica la po,icin a la
.ue apun(ar-a generalmen(e el apun(ador de la pila/
3o, mD(odo, de u,o comAn para (raducir e1pre,ione, infi>o a e1pre,ione, po,(fi>o e,(Bn 'ien
documen(ada, en lo, (e1(o, de in(roduccin a la, ciencia, compu(acionale, 7 en #n(erne(8 por
lo .ue no lo e1plicaremo, a.u-/ 3a ,iguien(e (a'la con(iene alguno, e>emplo, de e1pre,ione,
e.uivalen(e,/
6>emplo, de infi>o a po,(fi>o
#nfi>o #nfi>o #nfi>o #nfi>o Po,(fi>o Po,(fi>o Po,(fi>o Po,(fi>o
9 E " 9 " E
(9 \ ") G 5 9 " \ 5 G
(9 E ") J (0 E 5) 9 " E 0 5 E J
((9 E ") G 0) J (6 \ F) 9 " E 0 G 6 F : J

<egi,(ro de da(o, de la FPC <egi,(ro de da(o, de la FPC <egi,(ro de da(o, de la FPC <egi,(ro de da(o, de la FPC
3a FPC (iene oc*o regi,(ro, de da(o, de 8& 'i(, .ue ,e pueden direccionar en forma individual8
denominado, <& a <7/ 6n con>un(o ,e le, conoce como pila de registros/ Cn campo de (re,
'i(, llamado TP en la pala'ra de e,(ado de la FPC iden(ifica el nAmero de regi,(ro .ue ,e
encuen(ra en la par(e ,uperior de la pila en e,e momen(o/ Por e>emplo en la ,iguien(e figura
TP e, igual al nAmero &11 'inario8 con lo cual inde(ifica a <3 como la par(e ,uperior de la
55#

pila/ 6,(a u'icacin ,e le conoce (am'iDn como !T(&) (o ,implemen(e !T) al reci'ir
in,(ruccione, de pun(o flo(an(e/ 6l Al(imo regi,(ro e, !T(7)/
Pila de regi,(ro, de da(o, de pun(o flo(an(e

0omo podr-amo, e,perar8 una operacin push ((am'iDn conocida como cargar) decremen(a a
TP en 1 7 copia un operando en el regi,(ro iden(ificado como !T(&)/ !i TP e, igual a & an(e,
de la operacin pu,*8 TP pa,a al regi,(ro !T(7)/ Cna operacin pop ((am'iDn conocida como
almacenar) copia lo, da(o, .ue *a7 en !T(&) a un operando 7 de,puD, ,uma 1 a TP/ !i TP
e, igual a 7 an(e, de la operacin pop8 pa,a al regi,(ro <&/ !i al cargar un valor en la pila ,e
,o'ree,cri'en lo, da(o, e1i,(en(e, en la pila de regi,(ro,8 ,e genera una excepcin de punto
flotante/ 3a ,iguien(e figura mue,(ra la mi,ma pila de,puD, de *a'er me(ido (cargado) lo,
valore, 1/& 7 2/&/

9un.ue e, in(ere,an(e comprender cmo la FPC implemen(a la pila u,ando un con>un(o
limi(ado de regi,(ro,8 ,lo (enemo, .ue enfocarno, en la no(acin !T(n)8 en donde !T(&)
551

,iempre e, la par(e ,uperior de la pila/ 5e a.u- en adelan(e8 no, referimo, a lo, regi,(ro, de la
pila como !T(&)8 !T(1)8 e(cD(era/ 3o, operando, de la, in,(ruccione, no pueden *acer
referencia direc(a a lo, nAmero, de lo, regi,(ro,/
3o, valore, de pun(o flo(an(e en lo, regi,(ro, u(ili=an el forma(o real extendido de 1& '7(e, del
#666 ((am'iDn conocido como real temporal)/ 0uando la FPC almacena el re,u(lado de una
operacin ari(mD(ica en memoria8 (raduce el re,ul(ado a uno de lo, ,iguien(e, forma(o,2
en(ero8 largo8 de preci,in ,imple (real cor(o)8 de preci,in do'le (real largo)8 o de decimal
codificado en 'inario empa.ue(ado/
<egi,(ro de prop,i(o e,pecial <egi,(ro de prop,i(o e,pecial <egi,(ro de prop,i(o e,pecial <egi,(ro de prop,i(o e,pecial
3a FPC (iene ,ei, regi,(ro, de propsito especial2

<egi,(ro de cdigo de operacin2 <egi,(ro de cdigo de operacin2 <egi,(ro de cdigo de operacin2 <egi,(ro de cdigo de operacin2 almacena el cdigo de operacin de la Al(ima
in,(ruccin e>ecu(ada .ue no ,ea de con(rol/
<egi,(ro de con(rol2 <egi,(ro de con(rol2 <egi,(ro de con(rol2 <egi,(ro de con(rol2 con(rola la preci,in 7 el mD(odo de redondeo u(ili=ado por la FPC
al reali=ar cBlculo,/ Tam'iDn puede ,er u,ado para enma,carar (ocul(ar) la,
e1cepcione, individuale, de pun(o flo(an(e/
<egi,(ro de e,(ado <egi,(ro de e,(ado <egi,(ro de e,(ado <egi,(ro de e,(ado2 con(iene el apun(ador de la par(e ,uperior de la pila8 lo, cdigo, de
condicin 7 la, adver(encia, ,o're la, e1pecione,/
<egi,(ro de e(i.ue(a2 <egi,(ro de e(i.ue(a2 <egi,(ro de e(i.ue(a2 <egi,(ro de e(i.ue(a2 indica el con(enido de cada regi,(ro en la pila de regi,(ro, de
da(o, de la FPC/ C(ili=a do, 'i( por regi,(ro para indicar ,i el regi,(ro con(iene un
nAmero vBlido8 cerp o un valor e,pecial (NaN8 infini(o8 denormali=ado o forma(o no
,opor(ado)8 o e,(B vac-o/
<egi,(ro de apun(ador a la Al(ima in,(ruccin <egi,(ro de apun(ador a la Al(ima in,(ruccin <egi,(ro de apun(ador a la Al(ima in,(ruccin <egi,(ro de apun(ador a la Al(ima in,(ruccin2 almacena un apun(ador a la Al(ima
in,(ruccin e>ecu(ada .ue no ,ea de con(rol/
<egi,(ro apun(ador a lo, Al(imo, <egi,(ro apun(ador a lo, Al(imo, <egi,(ro apun(ador a lo, Al(imo, <egi,(ro apun(ador a lo, Al(imo, da(o, (operando)2 da(o, (operando)2 da(o, (operando)2 da(o, (operando)2 almacena un apun(ador a un
operando de da(o,8 ,i lo *a78 .ue *a7a ,ido u(ili=ado por la Al(ima in,(ruccin
e>ecu(ada/
553

3o, ,i,(ema, opera(ivo, u(ili=an lo, regi,(ro de prop,i(o e,pecial para pre,ervar informacin
de e,(ado al cam'iar de una (area a o(ra/
<edondeo <edondeo <edondeo <edondeo
3a FPC (ra(a de generar un re,ul(ado infini(amen(e preci,o de un cBlculo de un pun(o flo(an(e/
6n muc*o, ca,o, e,(o e, impo,i'le8 7a .ue el operando de de,(ino (al ve= no pueda
repre,en(ar de manera preci,a el re,ul(ado calculado/ Por e>emplo8 ,upongamo, .ue cier(o
forma(o de almacenamien(o ,lo permi(e (re, 'i(, fraccionale,/ No, permi(ir-a almacenar
valore, como 1/&11 o 1/1&18 pero no 1/&1&1/ !upongamo, .ue el re,ul(ado preci,o de un
cBlculo produ>o E1/&111 (1/4375 decimal)/ Podr-amo, redondear el nAmero *a,(a el ,iguien(e
valor mB, al(o al ,umarle /&&&18 o redondeando *acia a'a>o8 re,(Bndole /&&&12
a/ 1/&111 1/1&&
'/ 1/&111 1/&11
!i el re,ul(ado preci,o fuera nega(ivo8 al ,umarle :/&&&18 el re,ul(ado redondeado ,e mover-a
cerca del infini(o nega(ivo/ 9l re,(arle :/&&&1 ,e mover-a mB, cerca de cero como del infini(o
po,i(ivo/
a/ :1/&111 :1/1&&
'/ :1/&111 :1/&11
3a FPC no, permi(e ,eleccionar uno de cua(ro mD(odo, de redondeo2
.edondeo al n@mero m*s cercano2 el re,ul(ado redondeado e, el mB, cercano al
re,ul(ado infini(amen(e preci,o/ !i do, valore, e,(Bn igual de cerca8 el re,ul(ado e, un
valor par ( 'i( meno, ,ignifica(ivo R &)/
.edondeo hacia 6 V1 el re,ul(ado redondeado e, menor o igual al re,ul(ado
infini(amen(e preci,o/
.edondeo hacia W V1 el re,ul(ado redondeado e, ma7or o igual .ue el re,ul(ado
infini(amen(e preci,o/
.edondeo hacia cero2 (am'iDn conocido como (runcamien(o[ el valor a',olu(o del
re,ul(ado redondeado e, menor o igual .ue el re,ul(ado infini(amen(e preci,o/
Palabra de contol de la 8PU 3a pala'ra de con(rol de la FPC con(iene do, 'i( llamado,
campo ."8 .ue e,pecifican el mD(odo de redondeo a u(ili=a/ 3o, valore, de lo, campo, ,on2
&& 'inario2 redondea el nAmero par mB, cercano (prede(erminado)/
&1 'inario2 redondea *acia infini(o nega(ivo/
1& 'inario2 redondea *acia infini(o po,i(ivo/
11 'inario redondea *acia cero ((runca)/
.edondear el n@mero par m*s cercano e, el mD(odo prede(erminado8 7 ,e con,idera el mB,
apropiado 7 preci,o para la ma7or-a de lo, programa, de aplicacione,/ 3a ,iguien(e (a'la
mue,(ra cmo ,e aplicar-an lo, cua(ro mD(odo, de redondea al nAmero E1/&111 'inario/ 5e
555

manera ,imilar la (a'la a con(inuacin mue,(ra lo, po,i'le, redondeo, del nAmero :1/&111
'inario2
6>emplo2 redondeo de E1/&111/
4D(odo 4D(odo 4D(odo 4D(odo <e,ul(ado preci,o <e,ul(ado preci,o <e,ul(ado preci,o <e,ul(ado preci,o <edondeado <edondeado <edondeado <edondeado
<edondea al nAmero par mB, cercano 1/&111 1/1&&
<edondea *acia : r 1/&111 1/&11
<edondea *acia E r 1/&111 1/1&&
<edondea *acia & 1/&111 1/&11

6>emplo redondeo de :1/&111/
4D(odo 4D(odo 4D(odo 4D(odo <e,ul(ado preci,o <e,ul(ado preci,o <e,ul(ado preci,o <e,ul(ado preci,o <edondeado <edondeado <edondeado <edondeado
<edondea al nAmero par mB, cercano :1/&111 :1/1&&
<edondea *acia : r :1/&111 :1/1&&
<edondea *acia E r :1/&111 :1/&11
<edondea *acia & :1/&111 :1/&11

61cepcione, de pun(o flo(an(e 61cepcione, de pun(o flo(an(e 61cepcione, de pun(o flo(an(e 61cepcione, de pun(o flo(an(e
6n (odo programa puede *a'er errore,8 7 la FPC (iene .ue lidiar con lo, re,ul(ado,/ 6n
con,ecuencia8 reconoce 7 de(ec(a ,ei, (ipo, de condicione, de e1cepcin2 peracin invBlida
(q#)8 5ivi,in en(re cero (qI)8 perando denormali=ado (q5)8 5e,'ordamien(o numDrico (q)8
!u'de,'ordamien(o numDrico (qC)8 7 Preci,in ine1ac(a (qP)/ 3o, primero, (re, (q#8 qI8 q5) ,e
de(ec(a an(e, de .ue ocurra cual.uier operacin ari(mD(ica/ 3o, Al(imo, (re, (q8 qC8 qP)8 ,e
de(ec(an de,puD, de .ue ,e reali=a una operacin/
0ada (ipo de e1cepcin (iene un 'i( de 'andera 7 un 'i( de mB,cara corre,pondien(e/ 0uando
,e de(ec(a una e1cepcin de pun(o flo(an(e8 el proce,ador ac(iva el 'i( de 'andera
corre,pondien(e/ Para cada e1cepcin marcada por el proce,ador8 *a7 do, cur,o, de accin2
!i ,e ac(iv ac(iv ac(iv ac(iv el corre,pondien(e 'i( de mB,cara8 el proce,ador mane>a la e1cepcin de
manera au(omB(ica 7 de>a .ue el programa con(inAe/
!i ,e 'orr 'orr 'orr 'orr el corre,pondien(e 'i( de mB,cara8 el proce,ador invoca a un mane>ador de
e1cepcin de ,of(%are/
556

Por lo general8 la, re,pue,(a, enma,carada, (au(omB(ica,) del proce,ador ,on acep(a'le,
para la ma7or-a de lo, programa,/ Pueden u(ili=ar,e mane>adore, de e1cepcione,
per,onali=ado, en ca,o, en .ue la aplicacin re.uiere re,pue,(a, e,pec-fica,/ Cna ,ola
in,(ruccin puede ac(ivar varia, e1cepcione,8 por lo .ue el proce,ador man(iene un regi,(ro
con(inuo de (oda, la, e1cepcione, .ue ocurren de,de la Al(ima ve= .ue ,e 'orraron la,
e1cepcione,/ 9l comple(ar,e una ,ecuancia de cBlculo,8 podemo, compro'ar ,i ocurri alguna
e1cepcin/
0on>un(o de in,(ruccione, de pun(o flo(an(e 0on>un(o de in,(ruccione, de pun(o flo(an(e 0on>un(o de in,(ruccione, de pun(o flo(an(e 0on>un(o de in,(ruccione, de pun(o flo(an(e
6l con>un(o de in,(ruccione, de la FPC e, algo comple>o8 por lo .ue a.u- (ra(aremo, de ver la,
generalidade, acerca de ,u, capacidade,8 >un(o con e>emplo, e,pec-fico, .ue demue,(ren el
cdigo .ue por lo regular generan lo, compiladore,/ 9demB,/ veremo, cmo podemo, e>ercer
un con(rol ,o're la FPC8 cam'iando ,u modo de redondeo/ 6l con>un(o de in,(ruccione,
con(iene la, ,iguien(e, ca(egor-a, 'B,ica, de in,(ruccione,2
Tran,ferencia de da(o,/
9ri(mD(ica 'B,ica/
0omparacin/
Tra,cenden(al/
0on,(an(e, de carga (,lo con,(an(e, predefinida, e,peciali=ada,)/
0on(rol de la FPC 187/
9dmini,(racin de e,(ado de !#45 7 de la FPC 187/
3o, nom're, de la, in,(ruccione, de pun(o flo(an(e empie=an con la le(ra F8 para di,(inguirla,
de la, in,(ruccione, de la 0PC/ 3a ,egunda le(ra del nemnico de in,(ruccin (por lo general8 "
o #) indica cmo ,e de'e in(erpre(ar un operando de memoria2 " indica un operando decimal
codificado en 'inario ("05) e # indica un operando en(ero 'inario/ !i no ,e e,pecifica ninguno8
,e a,ume .ue el operando de memoria e,(B en forma(o de nAmero real/ Por e>emplo8 F"35
opera con nAmero, "058 F#35 opera con en(ero, 8 7 F35 opera con nAmero, reale,/
#perandos Cna in,(ruccin de pun(o flo(an(e puede (ener cero8 uno o do, operando,/ !i *a7
do, operando,8 uno de'e ,er un regi,(ro de pun(o flo(an(e/ No *a7 operando, inmedia(o,8 pero
pueden cargar,e cier(a, con,(an(e, predefinida, (como &/&8 s) en la pila/ 3o, regi,(ro, de
prop,i(o general como 69H8 6"H8 60H 7 65H no pueden ,er operando, (la Anica e1cepcin
FN!T!;8 .ue almacena la pala'ra de e,(ado de la FPC en 9H)/ No ,e permi(en operacione, de
memoria a memoria/
3o, operando, en(ero, de'en cargar,e en la FPC de,de la memoria (nunca de,de lo, regi,(ro,
de la 0PC)[ ,e convier(en en forma au(omB(ica al forma(o de pun(o flo(an(e/ 5e manera
,imilar8 al almacenar valore, de pun(o flo(an(e en lo, operando, de memoria de en(ero,8 lo,
valore, ,e (runcan o ,e redondean de manera au(omB(ica a en(ero,/
#niciali=acin (F#N#T) #niciali=acin (F#N#T) #niciali=acin (F#N#T) #niciali=acin (F#N#T)
3a in,(ruccin F#N#T iniciali=a la unidad de pun(o flo(an(e/ 6,(a'lece la pala'ra de con(rol de la
FPC a &37F*8 .ue enma,cara (ocul(a) (oda, la, e1cepcione, de pun(o flo(an(e8 e,(a'lece el
557

redondeo al nAmero mB, cercano 7 la preci,in de cBlculo a 64 'i(,/ 6, recomenda'le llamar a
F#N#T al principio de lo, programa,8 para conocer el e,(ado inicial del proce,ador/
Tipo, de da(o, de pun(o flo(an(e Tipo, de da(o, de pun(o flo(an(e Tipo, de da(o, de pun(o flo(an(e Tipo, de da(o, de pun(o flo(an(e
+amo, a ver un 'reve repa,o de lo, (ipo, de da(o, de pun(o flo(an(e .ue ,opor(a 49!4
(L;<58 T"KT68 <69348 <6938 7 <6931&)/ .ue ,e pre,en(an en la ,iguien(e (a'la/ 5e'emo,
u(ili=ar e,(o, (ipo, cuando definamo, operando, de memoria para la, in,(ruccione, de la FPC/
Por e>emplo8 al cargar una varia'le de pun(o flo(an(e en la pila de la FPC)/ la varia'le ,e define
como <69348 <6938 o <6931&2
6data
valSrande -EA4%" %6.%.7;.7;..7<.7;.;7EL#/;
6code
fld valSrande 0 carga la variable en la pila
Tipo, de da(o, in(r-n,eco,/
Tipo Tipo Tipo Tipo C,o C,o C,o C,o
L;<5 6n(ero de 64 'i(,
T"KT6 6n(ero de 8& 'i(, (1& '7(e,)
<6934 <eal cor(o #666 de 32 'i(, (4 '7(e,)
<6938 <eal largo #666 de 64 'i(, (8 '7(e,)
<6931& <eal e1(endido #666 de 8& 'i(, (1& '7(e,)

0argar valor de pun(o flo(an(e (F35) 0argar valor de pun(o flo(an(e (F35) 0argar valor de pun(o flo(an(e (F35) 0argar valor de pun(o flo(an(e (F35)
3a in,(ruccin F35 (cargar valor de pun(o flo(an(e) copia un operando de pun(o flo(an(e a la
par(e ,uperior de la pila de la FPC (conocida como !T(&))/ 6l operando puede ,er un operando
de memoria de 32 'i(,8 64 'i(,8 8& 'i(, (<69348 <69388 <6931&)8 o cual.uier o(ro regi,(ro de la
FPC2
$4D m)2p&
$4D m*+p&
$4D m,-p&
$4D ./0i1
558

-ipos de operandos de memoria F35 ,opor(a lo, mi,mo, operando, de memoria .ue 4+8
$e a.u- alguno, e>emplo,2
6data
arreglo -EA4# %" D9P(N)
6code
fld arreglo 0 directo
fld BarregloL%/C 0 directoKdesplazamiento
fld -EA4# P3-BesiC 0 indirecto
fld arregloBesiC 0 inde1ado
fld arregloBesi&#C 0 inde1ado, escalado
fld arregloBesi&3FPE arregloC 0 inde1ado, escalado
fld -EA4# P3-Beb1LesiC 0 baseKindice
fld arregloBeb1LesiC 0 baseKindiceKdesplazamiento
fld arregloBeb1Lesi&3FPE arregloC 0 baseKindiceKdesplazamiento,
escalado
jemplo 6l ,iguien(e e>emplo carga do, operando, direc(o, en la pila de la FPC2
6data
dbl9no -EA4# .7;6</
dblDos -EA4# %"6%
6code
fld dbluno 0 S3(") ( dbl9no
fld dblDos 0 S3(") ( dblDos, S3(%) ( dbl9no
3a ,iguien(e figura mue,(ra el con(enido de la pila de,puD, de e>ecu(ar cada in,(ruccin2
559


0uando ,e e>ecu(a la ,egunda in,(ruccin F358 TP ,e decremen(a8 *aciendo .ue el elemen(o
de la pila .ue ,e *a'-a e(i.ue(ado an(e, como !T(&) ,e convier(a en !T(1)/
F#35 3a in,(ruccin F#35 (cargar en(ero) convier(e un operando de origen en(ero con ,igno de
64 'i(, en un valor de pun(o flo(an(e de pre,icin do'le 7 lo carga en !T(&)/ !e pre,erva el
,igno del operando de de,(ino/ 5emo,(ra(aremo, ,u u,o den(ro de la ,eccin 9ri(mD(ica en
modo mi1(o/ F#35 ,opor(a lo, mi,mo (ipo, de operando, de memoria .ue 4+ (indirec(o8
inde1ado8 'a,e:inde1ado8 e(cD(era)/
"arga de constantes 3a, ,iguien(e, in,(ruccione, cargan con,(an(e, e,peciali=ada, en la
pila/ No (ienen operando,2
3a in,(ruccin F351 me(e 1/& en la pila de regi,(ro,/
3a in,(ruccin F3532T me(e log de 1& en 'a,e 2 en la pila de regi,(ro,/
3a in,(ruccin F35326 me(e log de e en 'a,e 2 en la pila de regi,(ro,/
3a in,(ruccin F35P# me(e s en la pila de regi,(ro,/
3a in,(ruccin F353Y2 me(e log de 2 en 'a,e 1& en la pila de regi,(ro,/
3a in,(ruccin F353N2 me(e log de 2 en 'a,e e en la pila de regi,(ro,/
3a in,(ruccin F35I (cargar cero) me(e &/& en la pila de la FPC/
9lmacenar un valor de pun(o flo(an(e (F!T8 F!TP) 9lmacenar un valor de pun(o flo(an(e (F!T8 F!TP) 9lmacenar un valor de pun(o flo(an(e (F!T8 F!TP) 9lmacenar un valor de pun(o flo(an(e (F!T8 F!TP)
3a in,(ruccin F!T (almacenar valor de pun(o flo(an(e) copia un operando de pun(o flo(an(e de
la par(e ,uperior de la pila de la FPC a la memoria/ F!T ,opor(a lo, mi,mo, (ipo, de operando,
.ue F35/ 6l operando puede ,er un operando de memoria de 32 'i(,8 64 u 8& 'i(, (<69348
<69388 <6931&)8 o puede ,er o(ro regi,(ro de la FPC2
$S3 m)2p&
$S3 m*+p&
$S3 ./0i1
F!T no ,aca de la pila/ 3a, ,iguien(e, in,(ruccione, almacenan a !T(&) en la memoria/ +amo,
a ,uponer .ue !T(&) e, igual .ue 1&/1 7 .ue !T(1) e, igual a 234/562
56:

fst dbl3res * %"6%
fst dbl!uatro 0 %"6%
Por in(uicin8 podr-amo, *a'er e,perado .ue d'l0ua(ro fuera igual a 234/56/ Pero la primera
in,(ruccin F!T de> a 1&/1 en !T(&)/ !i nue,(ra in(encin e, copiar !T(1) en d'l0ua(ro8
de'er-amo, u,ar la in,(ruccin F!TP/
8!-P 3a in,(ruccin F!TP (almacenar valor de pun(o flo(an(e 7 ,acar) copia el valor .ue *a7 en
!T(&) a la memoria 7 ,aca a !T(&) de la pila/ +amo, a ,uponer .ue !T(&) e, igual a 1&/1 7 .ue
!T(1) e, igual .ue 234/568 an(e, de e>ecu(ar la, ,iguien(e, in,(ruccione,2
fstp dbl3res 0 %"6%
fstp db!uatro 0 .7;6</
5e,puD, de la e>ecucin8 lo, do, valore, ,e elimanro lgicamen(e de la li,(a/ F-,icamen(e el
apun(ador TP ,e incremen(a cada ve= .ue ,e e>ecu(a F!TP8 cam'iando la u'icacin de !T(&)/
3a in,(ruccin F#!T (almacenar en(ero) convier(e el valor .ue *a7 en !T(&) a un en(ero con
,igno 7 almacena el re,ul(ado en el operando de de,(ino/ 3o, valore, pueden almacenar,e
como pala'ra, o do'le, pala'ra,/ 5emo,(ra(aremo, ,u u,o den(ro de la ,eccin 9ri(mD(ica en
modo mi1(o/ F#!T ,opoar(a lo, mi,mo (ipo, de operando de memoria .ue F!T/
#n,(ruccione, ari(mD(ica, #n,(ruccione, ari(mD(ica, #n,(ruccione, ari(mD(ica, #n,(ruccione, ari(mD(ica,
6n la ,iguien(e (a'la ,e pre,en(an la, operacione, ari(mD(ca, 'B,ica,/ Toda, la, in,(ruccione,
ari(mD(ica, ,opor(adan lo, mi,mo, (ipo, de operando, .ue F35 (cargar) 7 F!T (almacenar)8 por
lo .ue lo, operando, pueden ,er indirec(o,8 inde1ado,8 de 'a,e:-ndice8 e(cD(era/
#n,(ruccione, 'B,ica, de ari(mD(ca de pun(o flo(an(e/
F0$! F0$! F0$! F0$! 0am'iar ,igno
F955 F955 F955 F955 !umar el origen al de,(ino
F!C" F!C" F!C" F!C" <e,(ar el origen del de,(ino
F!C"< F!C"< F!C"< F!C"< <e,(ar el de,(ino del origen
F4C3 F4C3 F4C3 F4C3 4ul(iplicar el origen por el de,(ino
F5#+ F5#+ F5#+ F5#+ 5ividir el de,(ino en(re el origen
F5#+< F5#+< F5#+< F5#+< 5ividir el origen en(re el de,(ino

F0$! 7 F9"! F0$! 7 F9"! F0$! 7 F9"! F0$! 7 F9"!
56"

3a in,(ruccin F0$! (cam'iar ,igno) invier(e el ,igno del valor de pun(o flo(an(e en !T(&)/ 3a
in,(ruccin F9"! (valor a',olu(o) 'orra el ,igno del nAmero en !T(&) para crear ,u valor
a',olu(o/ Ninguna in,(ruccin (iene operando,2
$!\S
$AES
F9558 F955P8 F#955 F9558 F955P8 F#955 F9558 F955P8 F#955 F9558 F955P8 F#955
3a in,(ruccin F955 (,umar) (iene lo, ,iguien(e, forma(o,8 en donde m23pf e, un operando de
memoria <69348 m0Npf e, un operando <69388 e i e, un nAmero de regi,(ro2
$ADD
$ADD m)2p&
$ADD m*+p&
$ADD S3("), S3(i)
$ADD S3(i), S3(")
!in operandos !i no ,e u(ili=an operando, con F9558 !T(&) ,e ,uma a !T(1)/ 6l re,ul(ado ,e
almacena (emporalmen(e en !T(1)/ 5e,puD,8 !T(&) ,e ,aca de la pila 7 el re,ul(ado .ueda en
la par(e ,uperior de la mi,ma/ 3a ,iguien(e figura demue,(ra a F9558 a,umiendo .ue la pila 7a
con(iene do, valore,2

#perandos de registro 6mpe=ando con el mi,mo con(enido de la pila8 la ,iguien(e ilu,(racin
demue,(ra cmo ,e ,uma !T(&) a !T(1)2
56#


#perando de memoria 9l u(ili=ar,e con un operando de memoria8 la in,(ruccin F955 ,uma
el operando a !T(&)/ $e a.u- alguno, e>emplo,2
fadd mi!imple [ !T(&) E R mi!imple
fadd <693 PT<^e,i_ [ !T(&) E R ^e,i_
F955P 3a in,(ruccin F955P (,umar con pop) ,aca a !T(&) de la pila8 de,puD, de reali=ar la
operacin de ,uma/ 49!4 ,opor(a el ,iguien(e forma(o2
$ADDP S3(i), S3(")
3a ,iguien(e figura mue,(ra cmo funciona F955P2

8'ADD 3a in,(ruccin F#955 (,umar en(ero) convier(e el operando de origen al forma(o de
pun(o flo(an(e 7 preci,in do'le e1(endida an(e, de ,umarlo a !T(&)/ Tiene la ,iguien(e ,in(a1i,2
F#955 m16en(
F#955 m32en(
6>emplo
/da(a
561

mi6n(ero 5;<5 1
/code
fiadd mi6n(ero [ !T (&) E R mi6n(ero
F!C"8 F!C"P8 F#!C" F!C"8 F!C"P8 F#!C" F!C"8 F!C"P8 F#!C" F!C"8 F!C"P8 F#!C"
3a in,(ruccin F!C" re,(a un operando de origen a un operando de de,(ino 7 almacena la
diferencia en el operando de de,(ino/ 6l de,(ino ,iempre e, un regi,(ro de la FPC 7 el origen
puede ,er un regi,(ro de la FPC o memoria/ 9cep(a lo, mi,mo, operando, .ue F9552
$S9E
$S9E m)2p&
$S9E m*+p&
$S9E S3("), S3(i)
$S9 S3(i), S3(")
3a operacin de F!C" e, ,imilar a la de F9558 ,olo .ue re,(a en ve= de ,umar/ Por e>emplo8 la
forma ,in operando de F!C" re,(a !T(&) de !T(1)/ 6l re,ul(ado ,e almacena (emporalmen(e en
!T(1)/ 5e,puD,8 !T(&) ,e ,aca de la piba8 de>ando el re,ul(ado en la par(e ,uperior de la
mi,ma/ F!C" con un operando de memoria re,(a el operando de !T(&) 7 no lo ,aca de la pila/
jemplos2
fsub miSimple 0 S3(") K ( miSimple
fsub arregloBedi&#C 0 S3(") K ( arregloBedi&#C
8!U$P 3a in,(ruccin F!C"P (re,(ar con pop) ,aca a !T(&) de la pila8 de,puD, de reali=ar la
re,(a/ 49!4 ,opor(a el ,iguien(e forma(o2
$S9EP S3(i), S3(")
F#!C" 3a in,(ruccin F#!C" (re,(ar en(ero) convier(e el operando de origen al forma(o de pun(o
flo(an(e 7 preci,in do'le e1(endida8 an(e, de re,(ar el operando de !T(&)2
$IS9E m1*ent
$IS9E m)2ent
F4C38 F4C3P8 F#4C3 F4C38 F4C3P8 F#4C3 F4C38 F4C3P8 F#4C3 F4C38 F4C3P8 F#4C3
3a in,(ruccin F4C3 mul(iplica un operando de origen por un operando de de,(ino8
almacenando el produc(o en el operando de de,(ino/ 6l de,(ino ,iempre e, un regi,(ro de la
FPC8 7 el origen puede ,er un regi,(ro o un operando de memoria/ C(ili=a la mi,ma ,in(a1i, .ue
F955 7 F!C"2
563

$294
$294 m)2p&
$294 m*+p&
$294 S3("), S3(i)
$294 S3(i), S3(")
3a operacin de F4C3 e, ,imilar a la de F9558 ,lo .ue mul(iplica en ve= de ,umar/ Por
e>emplo8 la forma ,in operando, de F4C3 mul(iplica a !T(&) por !T(1)/ 6l produc(o ,e
almacena (emporalmen(e en !T(1)/ 5e,puD,8 !T(&) ,e ,aca de la pila 7 el produc(o .ueda en la
par(e ,uperior de la mi,ma/ 5e manera ,imilar8 F4C3 con un operando de memoria mul(iplica
a !T(&) por el operando de memoria2
fmul miSimple 0 S3(") & ( miSimple
8MU%P 3a in,(ruccin F4C3P (mul(iplicar con pop) ,aca a !T(&) de la pila8 de,puD, de reali=ar
la mul(iplicacin/ 49!4 ,opor(a el ,iguien(e forma(o2
$294P S3(i), S3(")
F#4C3 F#4C3 F#4C3 F#4C3 e, idDn(ica a F#9558 ,lo .ue mul(iplica en ve= de ,umar2
$I294 m1*ent
$I294 m)2ent
F5#+8 F5#+P8 F#5#+ F5#+8 F5#+P8 F#5#+ F5#+8 F5#+P8 F#5#+ F5#+8 F5#+P8 F#5#+
3a in,(ruccin F5#+ divide un operando de de,(ino en(re un operando de origen8 almacenando
el dividendo en el operando de de,(ino/ 6l de,(ino ,iempre e, un regi,(ro 7 el operando de
origen puede ,er un regi,(ro o memoria/ Tiene la i,ma ,in(a1i, .ue F955 7 F!C"2
$DI)
$DI) m)2p&
$DI) m*+p&
$DI) S3("), S3(i)
$DI) S3(i), S3(")
3a operacin de F5#+ e, ,imilar a la de F9558 ,lo .ue divide en ve= de ,umar/ Por e>emplo8 la
forma de F5#+ ,in operando, divide a !T(1) en(re !T(&)/ !T(&) ,e ,aca de la pila 7 el dividendo
.ueda en la par(e ,uperior de la mi,ma/ F5#+ con un operando de memoria divide a !T(&)
en(re el operando de memoria/ 6l ,iguien(e cdigo divide a d'lCno d'lCno d'lCno d'lCno en(re d'l5o, d'l5o, d'l5o, d'l5o, 7 almacena el
cocien(e en d'l0oc d'l0oc d'l0oc d'l0oc2
565

6data
dbl9no -EA4# %.7;6</
dblDos -EA4# %"6"
dbl!oc -EA4# N
6code
fld dbl9no * lo carga en S3(")
fdiv dblDos 0 divide a S3(") entre dblDos
fstp dbl!oc 0 guarda S3(") en dbl!oc
!i el operando de origen e, cero8 ,e genera una e1cepcin de divi,in en(re cero/ !e aplica un
nAmero de ca,o, e,peciale, cuando ,e divide con operando, iguale, a infini(o po,i(ivo o
nega(ivo8 cero 7 (a(/ Para mB, de(alle de'emo, con,ul(ar el manual de 0on>un(o de
in,(ruccione, #n(el #9:32/
8'D'5 3a in,(ruccin F#5#+ convier(e un operando de origen en(ero al forma(o de pun(o flo(an(e
7 preci,in do'le e1(endida8 an(e, de dividirlo en(re !T(&)/ !in(a1i,2
$IDI) m1*ent
$IDI) m)2ent
0omparacin de valore, de pun(o flo(an(e 0omparacin de valore, de pun(o flo(an(e 0omparacin de valore, de pun(o flo(an(e 0omparacin de valore, de pun(o flo(an(e
3o, valore, de pun(o flo(an(e no pueden comparar,e median(e la in,(ruccin 04P8 7a .ue D,(a
u(ili=a la re,(a de en(ero, para reali=ar comparacione,/ 6n ve= de ello8 de'e u,ar,e la
in,(ruccin F04/5e,puD, de e>ecu(ar F048 *a7 .ue llevar a ca'o cier(o, pa,o, e,peciale,
para poder u(ili=ar la, in,(ruccione, de ,al(o condicional (F98 F"8 F68 e(cD(era/) en la,
in,(ruccione, #F lgica,/
8"#M? 8"#MP? 8"#MPP 3a in,(ruccin F04P (comparar valore, de pun(o flo(an(e)
compara a !T(&) con ,u operando de origen/ 6l origen puede ,er un operando de memoria o un
regi,(ro de la FPC/ !in(a1i,2
#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
F04 0ompara !T(&) con !T(1)
F04 m32pf 0ompara !T(&) con m32pf
F04 m64pf 0ompara !T(&) con m64pf
F04 !T(i) 0ompara !T(&) con !T(i)
566


3a, in,(ruccione, F04P lleva a ca'o la, mi,ma, operacione, 7 (ermina ,acando a !T(&) de la
pila/ 3a in,(ruccin F04PP e, igual .ue F04P8 ,lo .ue ,aca de la pila una ve= mB,/
"digos de condicin 3a FPC (iene (re, 'andera, de cdigo de condicin8 038 02 7 0&8 .ue
indican lo, re,ulado, de comparar valore, de pun(o flo(an(e2
0ondicin 0ondicin 0ondicin 0ondicin 03 ('andera 03 ('andera 03 ('andera 03 ('andera
0ero) 0ero) 0ero) 0ero)
02 ('andera 02 ('andera 02 ('andera 02 ('andera
Paridad) Paridad) Paridad) Paridad)
0& ("andera 0& ("andera 0& ("andera 0& ("andera
9carreo) 9carreo) 9carreo) 9carreo)
!al(o !al(o !al(o !al(o
condicional a condicional a condicional a condicional a
u(ili=ar u(ili=ar u(ili=ar u(ili=ar
!T(&)V!<0 & & & F98 FN"6
!T(&)U!<0 & & 1 F"8 FN96
!T(&) R !<0 1 & & F68 FI
!in orden 1 1 1 ((inguno)
J !i ,e genera una e1cepcin de operando ari(mD(ico invBlido (de'ido a operando, invBlido,) 7 la e1cepcin e,(B
enma,carada8 038 02 0& ,e e,(a'lecen de acuerdo con la fila marcada !in orden/
3o, enca'e=ado, de la, columna, mue,(ran 'andera, de e,(ado e.uivalen(e, de la 0PC8 7a
.ue 038 02 7 0& (ienen una funcin ,imilar a la, 'andera, 0ero8 Paridad 7 9carreo8
re,pec(ivamen(e/
6l principal re(o de,puD, de comparar do, valore, 7 e,(a'lecer lo, cdigo, de condicin de la
FPC e, 'u,car la forma de 'ifurcar *acia una e(i.ue(a 'a,ada en la, condicione,/ !e re.uieren
do, pa,o,2
C,ar la in,(ruccin FN!T!; para mover la pala'ra de e,(ado de la FPC *acia 9H/
C,ar la in,(ruccin !9$F para copiar 9$ al regi,(ro F39Y!/
Cna ve= .ue lo, cdigo, de condicin e,(Bn en 6F39Y!8 podemo, u,ar ,al(o, condicionale,
'a,ado, en la, 'andera, 0ero8 Paridad 7 9carreo/ 3a (a'la an(erior mo,(r el ,al(o condicional
apropiado para cada com'inacin de 'andera,/ Podemo, inferir lo, ,al(o, adicionale,2 3a
in,(ruccin F96 oca,iona una (ran,ferencia de con(rol ,i 0F R &/ F"6 oca,iona una
(ran,ferencia de con(rol ,i 0F R 1 o IF R 1/ FN6 (ran,fiere ,i IF R &/
jemplo 9,umimo, el ,iguien(e cdigo de 0EE2
double : ( %6.0
double F ( 76"0
int 8 ( "0
if ( : W F)
567

8 ( %0
9 con(inuacin ,e mue,(ra el cdigo e.uivalen(e en lengua>e en,am'lador2
6data
: -EA4# %6.
F -EA4# 76"
8 D,O-D "
6code
0 if ( : W F)
0 8 ( %
fld : 0 S3(") ( :
fcomp F 0 compara S3(") con F
fnsts= a1 0 mueve la palabra de estado 'acia A:
sa'f 0 copia A\ a E$4ASS
nb 4% 0 c: no es W FN salta
mov 8,% 0 8 ( %
4%*
Mejoras de P0 9lgo para de,(acar del e>emplo an(erior e, .ue la, comparacione, de pun(o
flo(an(e incurren en mB, ,o'recarga en (iempo de e>ecucin .ue la, comparacione, de
en(ero,/ 0on e,(o en men(e8 la familia P6 de #n(el pre,en( la in,(ruccin F04#/ 6,(a
in,(ruccin comapra lo, valore, de pun(o flo(an(e 7 ac(iva la, 'andera, 0ero8 Paridad 7 9carreo
de manera direc(a/ (3a familia P6 empe= con lo, proce,adore, Pen(ium Pro 7 Pen(iun ##)/
F04# (iene la ,iguien(e ,in(a1i,2
$!O2I S3("), S3(i)
+amo, a re,cri'ir nue,(ro e>emplo de cdigo an(erior (0omparar H con K) u,ando F0412
6code
0 if (: W F)
0 8 ( %
fld F 0 S3(") ( F
568

fld : 0 S3(") ( :, S3(%) ( F
fcomi S3("), S3(I) 0 compara a S3(") con S3(%)
nb 4% 0 cS3(") no es W S3(%)N Salta
mov 8,% 0 8 ( %
3a in,(ruccin F04# (om el lugar de (re, in,(ruccine, en la ver,in an(erior8 pero re.uiri
una in,(ruccin F35 mB,/ 3a in,(ruccin F04# no acep(a operando, de memoria/
0omparacin de igualdad 0omparacin de igualdad 0omparacin de igualdad 0omparacin de igualdad
J,.r( R rai= cuadrada
0a,i (odo, lo, li'ro, de (e1(o de programacin para principian(e, advier(en al lec(or .ue no
de'en comparar la igualdad en(re valore, de pun(o flo(an(e de'ido a lo, errore, de redondeo
.ue ocurren duran(e lo, cBlculo,/ Podemo, demo,(rar e,(e pro'lema calculando la ,iguien(e
e1pre,in2 (,.r((2/&)J,.r((2/&)) \ 2/&/ 6n (Drmino, ma(emB(ivo,8 de'er-a ,er igual a cero pero
lo, re,ul(ado, ,on 'a,(an(e, di,(in(o, (apro1imadamen(e 4/4&8P216:&16)/ C(ili=aremo, lo,
,iguien(e, da(o, 7 mo,(raremo, la pila de la FPC de,puD, de cada pa,o en la ,iguien(e (a'la2
0Blculo de (,.r((2/&) J ,.r((2/&)) \ 2/&
#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin Pila de la FPC Pila de la FPC Pila de la FPC Pila de la FPC
fld val% S3(")* L.6"""""""EL"""
fs@rt S3(")* L%6;%;.%7<EL"""
fmul S3("), S3(") S3(")* L.6"""""""EL"""
fsub val% S3(")* L;6;;"#+.%EK"%/

3a forma correc(a de comparar lo, valore, de pun(o flo(an(e 9 e : e, (omar el valor a',olu(o
de ,u diferencia8 c1 : 7c/ 7 compararlo con un valor pe.ue@o definido por el u,uario8 llamado
Gpsilon/ 9 con(inuacin ,e mue,(ra el cdigo en lengua>e en,am'lador para *acer e,(o8
u,ando Dp,ilon como mB1ima diferencia .ue puede (ener para ,eguir con,iderBndo,e iguale,2
6data
epsilon -EA4# %6"EK%.
val. -EA4# "6" 0 valor a comparar
val7 -EA4# %6""%EK%7 0 se considera igual a val.
6code
569

0 if (val. (( val7), mostrar O4os valores son igualesP6
fld epsilon
fld val.
fsub val7
fabs
fcomi S3("), S3(%)
a saltar
m,rite WP4os valores son igualesP, "d', "a'X
saltar*
3a ,iguien(e (a'la ra,(rea el progre,o del programa8 mo,(rando la pila de,puD, de la e>ecucin
de cada una de la, primera, cua(ro in,(ruccione,/
0Blculo de un produc(o pun(o (6/& J 2/&) E (4/5 J 3/2)
#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin Pila de la FPC Pila de la FPC Pila de la FPC Pila de la FPC
fld epsilon S3(")* L%6"""""""EK"%.
fld val. S3(")* L"6"""""""EL"""
S3(%)* L%6"""""""EK"%.
fsub val7 S3(")* K%6""%""""EK"%7
S3(%)* L%6"""""""EK"%.
fabs S3(")* L%6""%""""EK"%7
S3(%)* L%6"""""""EK"%.
fcomi S3("),
S3(%)
S3(") W S3(%), por lo @ue !$ ( %,
[$ ( "

!i redefinieramo, a val3 como ma7or .ue Dp,ilon8 no ,er-a igual a val22
val7 -EA4# %6""%EK%. 0 no es igual
3ec(ura 7 e,cri(ura de valore, de pun(o flo(an(e 3ec(ura 7 e,cri(ura de valore, de pun(o flo(an(e 3ec(ura 7 e,cri(ura de valore, de pun(o flo(an(e 3ec(ura 7 e,cri(ura de valore, de pun(o flo(an(e
57:

6n la 'i'lio(eca de v-nculo, del li'ro ,e inclu7en do, procedimien(o, para operacione, de
en(rada:,alida de pun(o flo(an(e8 .ue creo ;illian "arre( de la Cniver,idad 6,(a(al de !an Fo,e2
<eadFloa( <eadFloa( <eadFloa( <eadFloa(2 lee un valor de pun(o flo(an(e del (eclado 7 lo me(e en la pila de pun(o
flo(an(e/
;ri(eFloa( ;ri(eFloa( ;ri(eFloa( ;ri(eFloa(2 e,cri'e el valor de pun(o flo(an(e .ue *a7 en !T(&) en la ven(ana de
con,ola8 en forma(o e1ponencial/
<eadFloa( acep(a una amplia variedad de forma(o, de pun(o flo(an(e/ $e a.u- alguno,
e>emplo,2
35
E35/
:3/5
/35
3/565
:3/56E5
!ho&8PU!tac; (ro A(il procedimien(o8 .ue e,cri'i Fame, "rinb de la Cniver,idad Pacific
3eu(*eran8 mue,(ra la pila de la FPC/ !e llama ,in parBme(ro,2
call S'o=$P9Staca
!incroni=acin de e1cep !incroni=acin de e1cep !incroni=acin de e1cep !incroni=acin de e1cepcione, cione, cione, cione,
3a 0PC (en(ero,) 7 la FPC ,on unidade, ,eparada,8 por lo .ue la, in,(ruccione, de pun(o
flo(an(e ,e pueden e>ecu(ar al mi,mo (iempo .ue la, in,(ruccione, con en(ero, 7 la, del
,i,(ema/ 6,(a capacidad8 llamada concurrencia8 puede ,er un pro'lema po(encial ,i ,e
producen e1cepcione, de pun(o flo(an(e no enma,carada,/ Por o(ro lado8 la, e1cepcione,
enma,carada, no ,on un pro'lema8 7a .ue la FPC ,iempre comple(a la operacin ac(ual 7
almacena el re,ul(ado/
0uando ocurre una e1cepcin no enma,carada8 la in,(ruccin de pun(o flo(an(e ac(ual ,e
in(errumpe 7 la FPC indica el even(o de e1cepcin/ 0uando e,(B a pun(o de e>ecu(ar,e la
,iguien(e in,(ruccin de pun(o flo(an(e o la in,(ruccin F;9#T (;9#T)8 la FPC verifica la,
e1cepcione, pendien(e,/ !i encuen(ra alguna8 invoca al mane>ador de e1cepcione, de pun(o
flo(an(e (una ,u'ru(ina)/
QLuD pa,a ,i la in,(ruccin de pun(o flo(an(e .ue produce la e1cepcin va ,eguida de una
in,(ruccin con en(ero, o del ,i,(emaM Por de,gracia8 dic*a, in,(ruccione, no verifican la,
e1cepcione, pendien(e,[ ,e e>ecu(an en forma inmedia(a/ !i ,e ,upone .ue la primera
in,(ruccin va a almacenar ,u, re,ul(ado, en un operando de memoria 7 la ,egunda
in,(ruccin modifica a e,e mi,mo operando de memoria8 el mane>ador de e1cepcione, no ,e
puede e>ecu(ar en forma apropiada/ $e a.u- un e>emplo2
57"

6data
valEnt D,O-D .<
6code
fild valEnt 0 carga entero en S3(")
inc valEnt 0 incrementa el entero
3a, in,(ruccione, ;9#T 7 F;9#T ,e crearon para for=ar al proce,ador a verificar la, e1cepcione,
de pun(o flo(an(e pendien(e,8 no enma,carada,8 an(e, de con(inuar con la ,iguien(e
in,(ruccin/ 0ual.uiera de la, do, re,uelve nue,(ro pro'lema po(encial de ,incroni=acin8
evi(ando .ue la in,(ruccin #N0 ,e e>ecu(e *a,(a .ue el mane>ador de e1cepcione, (enga
opor(unidad de (erminar2
fild valEnt * carga entero en S3(")
f=ait 0 espera las e1cepciones pendientes
inc valEnt 0 incrementa el entero
6>emplo, de cdigo 6>emplo, de cdigo 6>emplo, de cdigo 6>emplo, de cdigo
6n e,(a ,eccin veremo, e>emplo, cor(o, .ue demue,(ran la, in,(ruccione, ari(mD(ica, de
pun(o flo(an(e/ Cna e1celen(e forma de aprender e, codificar la, e1pre,ione, en 0EE8
compilarla, e in,peccionar el cdigo .ue produce el compilador2
61pre,in 61pre,in 61pre,in 61pre,in
+amo, a codificar la e1pre,in val5 R :val9 E (val" J val0)/ Cna po,i'le ,olucin pa,o a pa,o
e,2 cargar val9 en la pila 7 negar ,u valor/ 0argar val" en !T(&)8 mover val9 *acia !T(1)/
4ul(iplicar !T(&) por val08 de>ando el produc(o en !T(&)/ !umar(1) 7 !T(&)8 almacenando la
,uma en val52
6data
valA -EA4# %6<
valE -EA4# .6<
val! -EA4# 76"
valD -EA4# N 0 L/6"
6code
fld valA 0 S3(") ( valA
fc's 0 cambia el signo de S3(")
57#

fld valE 0 carga valE en S3(")
fmul val! 0 S3(") &( S3(%)
fadd 0 S3(") L( S3(%)
fstp valD 0 almacena S3(") en valD
!uma de un arreglo !uma de un arreglo !uma de un arreglo !uma de un arreglo
6l ,iguien(e cdigo calcula 7 mue,(ra la ,uma de un arreglo de nAmero, reale, de do'le
preci,in2
3A2TA--ES4O ( ."
6data
arregloSimp -EA4# 3A2TA--ES4O D9P(N)
6code
mov esi, " 0 indice del arreglo
fldz 0 mete "6" en la pila
mov ec1, 3A2TA--ES4O
4%* fld arregloSimpBesiC 0 carga mem en S3(")
fadd 0 suma S3("), S3(%), pop
add esi, 3FPE -EA4# 0 se mueve el siguiente elemento
loop 4%
call ,rite$loat 0 muestra la suma en S3(")

!uma de raice, cuadrada, !uma de raice, cuadrada, !uma de raice, cuadrada, !uma de raice, cuadrada,
3a in(ruccin F!L<T ,u,(i(u7e el numero en !T(&) con ,u ra-= cuadrada/ 6l ,iguien(e cdigo
calcula la ,uma de do, raice, cuadrada,2
6data
valA -EA4# .<6"
valE -EA4# 7/6"
6code
571

fld valA 0 mete valA
fs@rt 0 S3(") ( s@rt(valA)
fld valE 0 mete valE
fs@rt 0 S3(") ( s@rt(valE)
fadd 0 suma S3("), S3(%)
Produc(o pun(o de un arreglo Produc(o pun(o de un arreglo Produc(o pun(o de un arreglo Produc(o pun(o de un arreglo
6l ,iguien(e cdigo calcula la e1pre,in (arreglo^&_ J arreglo^1_) E (arreglo^2_ J arreglo^3_)/ 9
e,(e cBlculo alguna, vece, ,e le conoce como producto punto/ 3a ,iguien(e (a'la mue,(ra la
pila de la FPC de,puD, de la e>ecucin de cada in,(ruccin/ $e a.u- lo, da(o, de en(rada
6data
arreglo -EA4; /6", .6", ;6<, 76.
0Blculo de un produc(o pun(o (6/& J 2/&) E (4/5 J 3/2)/
#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin Pila de la FPC Pila de la FPC Pila de la FPC Pila de la FPC
fld arreglo S3(")* L/6"""""""EL"""
fmul BarregloL;C S3(")* L%6.""""""EL""%
fld BarregloL#C S3(")* L;6<""""""EL"""
S3(%)* L%6.""""""EL""%
fmul BarregloL%.C S3(")* L%6;;"""""EL""%
S3(%)* L%6.""""""EL""%
fadd S3(")* L.6/;"""""EL""%

9ri(mD(ica de modo mi1(o 9ri(mD(ica de modo mi1(o 9ri(mD(ica de modo mi1(o 9ri(mD(ica de modo mi1(o
$a,(a e,(e pun(o *emo, reali=ado operacione, ari(mD(ica, .ue involucran ,olo nAmero,
reale,/ 9 menudo8 la, aplicacione, reali=an operacione, ari(mD(ica, en modo mi1(o8
com'inando en(ero, 7 reale,/ 3a, in,(ruccione, ari(mD(ica, de en(ero, como 955 7 4C3 no
pueden mane>ar reale,8 por lo .ue nue,(ra Anica opcin e, u(ili=ar in,(ruccione, de pun(o
flo(an(e/ 6l con>un(o de in,(ruccione, #n(el proporciona in,(ruccione, .ue promueven lo,
en(ero, a reale, 7 cargan lo, valore, en la pila de pun(o flo(an(e/
6>emplo 6l ,iguien(e cdigo en 0EE ,uma un en(ero a un do'le 7 almacena la ,uma en un
do'le/ 0EE promueve de manera au(omB(ica el en(ero a real8 an(e, de reali=ar la ,uma2
573

int 8 ( ."0
double : ( 76<0
double [ ( 8 L :0
$e a.u- el cdigo e.uivalen(e en lengua>e en,am'lador2
6data
8 SD,O-D ."
: -EA4# 76<
[ -EA4# N
6code
fild 8 0 carga entero en S3(")
fadd : 0 suma mem a S3(")
fstp [ 0 almacena S3(") en mem
jemplo 6l ,iguien(e programa en 0EE promueve N a un do'le8 evalAa una e1pre,in real 7
almacena el re,ul(ado en una varia'le en(era2
int 8 ( ."0
double : ( 76<0
int [ ( (int) (8 L :)0
6l cdigo generado por +i,ual 0EE llama a una funcin de conver,in (f(ol) an(e, de guardar el
re,ul(ado (runcado en I/ !i codificamo, la e1pre,in en lengua>e en,am'lador u,ando F#!T8
podemo, evi(ar la llamada a la funcin8 pero I (demanera prede(erminada) ,e redondea *a,(a
242
fild 8 0 carga entero en S3(")
fadd : 0 suma mem a S3(")
fist [ 0 guarda S3(") en entero de memoria
"ambio al modo de redondeo 6l campo <0 del con(rol de la FPC no, permi(e e,pecificar el
(ipo de redondeo a reali=ar/ Podemo, u,ar F!T0; para guardar la pala'ra de con(rol en una
varia'le8 modificar el campo <0 ('i( 1& 7 11)8 7 u(ili=ar la in,(ruccin F350; para cargar la
varia'le de vuel(a en la pala'ra de con(rol2
fstc= palab!trl 0 almacena palabra de control
575

or palab!trl, %%""""""""""b 0 establece -! ( truncar
fldc= palab!trl 0 carga palabra de control
5e,puD, reali=amo, cBlculo, .ue re.uieren (runcamien(o8 para producir I R 232
fild 8 0 carga entero en S3(")
fadd : 0 suma mem a S3(")
fist [ 0 guarda S3(") en entero de memoria
5e manera opcional8 re,(a'lecemo, el modo a ,u valor prede(erminado (se redondea al
n@mero par m*s cercano)2
fstc= palab!trl 0 almacena la palabra de control
and palab!trl, ""%%%%%%%%%%b 0 restablece el redondea al predeterminado
fldc= palab!trl 0 carga palabra de control
6nma,caramien(o 7 de,enma,caramien(o de e1cepcione, 6nma,caramien(o 7 de,enma,caramien(o de e1cepcione, 6nma,caramien(o 7 de,enma,caramien(o de e1cepcione, 6nma,caramien(o 7 de,enma,caramien(o de e1cepcione,
3a, e1cepcione, ,e enma,caran de manera prede(erminada8 de manera .ue cuando ,e
genera una e1cepcin de pun(o flo(an(e8 el proce,ador a,igna un valor prede(erminado al
re,ul(ado 7 con(inAa reali=ando ,u (ra'a>o ,ilencio,o/ Por e>emplo8 al dividir un nAmero de
pun(o flo(an(e en(re cero ,e produce infini(o ,in de(ener el programa2
6data
val% D,O-D %
val. -EA4# "6"
6code
fild val% 0 carga entero en S3(")
fdiv val. 0 S3(") ( infinito positivo
!i de,enma,caramo, la e1cepcin en la pala'ra de con(rol de la FPC8 el proce,ador (ra(ara de
e>ecu(ar un mane>ador de e1cepcin apropiado/ 6l de,enma,caramien(o ,e logra 'orrando el
'i( apropiada en la pala'ra de con(rol de la FPC2
0ampo, en la pala'ra de con(rol de la FPC
"i((,) "i((,) "i((,) "i((,) 5e,cripcin 5e,cripcin 5e,cripcin 5e,cripcin
& 4B,cara de e1cepcin por operacin invBlida
576

1 4B,cara de e1cepcin por operando denormali=ado
2 4B,cara de e1cepcin por divi,in en(re cero
3 4B,cara de e1cepcin por de,'ordamien(o
4 4B,cara de e1cepcin por ,u'de,'ordamien(o
5 4B,cara de e1cepcin por preci,in
8 \ P 0on(rol de preci,in
1& \ 11 0on(rol de redondeo
12 0on(rol de infini(o

!upongamo, .ue de,eamo, de,enma,carar la e1cepcin de divi,n en(re 0ero/ $e a.u- lo,
pa,o, re.uerido,2
1/ 9lmacenar la pala'ra de con(rol de la FPC en una varia'le de 16 'i(,/
2/ "orrar el 'i( 2 ('andera de divi,n en(re cero)/
3/ 0argar la varia'le de vuel(a en la pala'ra de con(rol/
6l ,iguien(e cdigo de,enma,cara la, e1cepcione, de pun(o flo(an(e2
6data
palab!trl ,O-D N
6code
fstc= palab!trl 0 obtiene la palabra de control
and palab!trl, %%%%%%%%%"%%b 0 desenmascara divisin entre cero
fldc= palab!trl 0 la carga de vuelta en la $P9
9*ora8 ,i e>ecu(amo, cdigo .ue divida en(re cero8 ,e genera una e1cepcin de,enma,carada2
fild val%
fdiv val.
fst val. 0 divisin entre cero
Tan pron(o como la in,(ruccin F!T empie=a a e>ecu(ar,e8 4! ;indo%, mue,(ra un cuadro de
dialogo indicando .ue *a ocurrido una e1cepcin/
577

nmascaramiento de excepciones Para enma,carar una e1cepcin8 ,e aciva el 'i(
apropiado en la pala'ra de con(rol de la FPC/ 6l ,iguien(e cdigo enma,cara la, e1cepcione,
de divi,in en(re cero2
6data
palab!trl ,O-D N
6code
fstc= palab!trl 0 obtiene la palabra de control
or palab!trl, %""b 0 enmascara la divisin entre cero
fldc= palab!trl 0 la carga de vuelta en la $P9
0odificac 0odificac 0odificac 0odificacin de in,(ruccione, #n(el in de in,(ruccione, #n(el in de in,(ruccione, #n(el in de in,(ruccione, #n(el
Para comprender el lengua>e en,am'lador por comple(o8 de'emo, inver(ir (iempo anali=ando
la forma en .ue la, in,(ruccione, en en,am'lador ,e (raducen a lengua>e mB.uina/ 6l (ema e,
'a,(an(e comple>o8 de'ido a la e1(en,a variedad de in,(ruccione, 7 modo, de
direccionamien(o, di,poni'le, en el con>un(o de in,(ruccione, #n(el/ 6mpe=aremo, con el
proce,ador 8&86G8&88 como un e>emplo ilu,(ra(ivo8 e>ecu(Bndo,e en modo de
direccionamien(o real/ 4B, adelan(e mo,(raremo, alguno, cam'io, .ue reali= #n(el al
in(roducir lo, proce,adore, de 32 'i(,/
0omo mencionamo, en el cap-(ulo 28 el proce,ador #n(el 8&86 fue el primero en la l-nea de
proce,adore, .ue u(ili=an el di,e@o de "omputadora con un conjunto complejo de
instrucciones (0#!0/) 6l con>un(o de in,(ruccione, inclu7e una amplia variedad de operacione,
de direccionamien(o de memoria8 de de,pla=amien(o8 ari(mD(ica8 de movimien(o de da(o, 7
lgica,/ 6n comparacin con la, in,(ruccione, <#!0 ("omputadora con un conjunto reducido
de instrucciones)8 la, in,(ruccione, de #n(el ,on algo dif-cile, de codificar 7 decodificar/
"odificar una in,(ruccin ,ignifica conver(ir una in,(ruccin en cdigo mB.uina a lengua>e
en,am'lador/
Forma(o de in,(ruccione, #9 Forma(o de in,(ruccione, #9 Forma(o de in,(ruccione, #9 Forma(o de in,(ruccione, #9: :: :32 32 32 32

578

6l forma(o general de in,(ruccione, de mB.uina de #9:32 con(iene un '7(e de prefi>o de
in,(ruccin8 cdigo de operacin8 '7(e 4od <G48 '7(e de -ndice de e,cala (!#")8
de,pla=amien(o de direccin 7 da(o, inmedia(o,/ 3a, in,(ruccione, ,e almacenan en orden
li((le endian8 por lo .ue el '7(e de prefi>o ,e encuen(ra en la direccin inicial de la in,(ruccin/
0ada in,(ruccin (iene un cdigo de operacin8 pero el re,(o de lo, campo, ,on opcionale,/
Poca, in,(ruccione, con(ienen (odo, lo, campo,[ en promedio8 la ma7or-a de la, in,(ruccione,
,on de 2 o 3 '7(e,/ $e a.u- un 'reve re,umen de lo, campo,2
6l prefi>o de in,(ruccin prefi>o de in,(ruccin prefi>o de in,(ruccin prefi>o de in,(ruccin ignora lo, (ama@o, prede(erminado, de lo, operando,/
6l cdigo de operacin cdigo de operacin cdigo de operacin cdigo de operacin (opcode) iden(ifica a una varia'le e,pec-fica de una in,(ruccin/
Por e>emplo la in,(ruccin 955 (iene nueve cdigo, de operacin di,(in(o,8
dependiendo de lo, (ipo, de parBme(ro, .ue ,e u(ilicen/
6l campo 4od <G4 4od <G4 4od <G4 4od <G4 iden(ifica el modo de direccionamien(o 7 lo, operando,/ 3a
no(acin ]<G4W ,ignifica registro 7 modo/ 3a ,iguien(e (a'la de,cri'e el campo 4od/
+alore, del campo 4od/
4od 4od 4od 4od 5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o 5e,pla=amien(o
&& 5#!P R &8 di,p:'a>o 7 di,p:al(o e,(Bn au,en(e, ( a meno, .ue rGm R
11&)
&1 5#!P R di,p:'a>o con e1(en,in de ,igno a 16 'i(,[ di,p:al(o e,(B
au,en(e
1& 5#!P R ,e u(ili=an di,p:al(o 7 di,p:'a>o
11 6l campo <G4 con(iene un nAmero de regi,(ro

3a ,iguien(e (a'la de,cri'e el campo <G4 para la, aplicacione, de 16 'i(,8 cuando 45 R 1&
'inario/
+alore, del campo <G4 de 16 'i(, (para 4od R 1&)
<G4 <G4 <G4 <G4 5ireccin efec(iva 5ireccin efec(iva 5ireccin efec(iva 5ireccin efec(iva
&&& ^"H E !#_ E 516
&&1 ^"H E 5#_ E 516
&1& ^"P E !#_ E 516
&11 ^"P E 5#_ E 516
1&& ^!#_ E 516
1&1 ^5#_ E 516
579

11& ^"P_ E 516
111 ^"H_ E 516
J516 indica un de,pla=amien(o de 16 'i(,/
6l '7(e indice de e,cala '7(e indice de e,cala '7(e indice de e,cala '7(e indice de e,cala (!#") ,e u(ili=a para calcular lo, de,pla=amien(o, de lo, -ndice,
de un arreglo/
6l campo de,pla=amien(o de direccin de,pla=amien(o de direccin de,pla=amien(o de direccin de,pla=amien(o de direccin con(iene el de,pla=amien(o de un operando8 o
puede ,umar,e a lo, regi,(ro, 'a,e e -ndice en lo, modo, de direccionamien(o como
'a,e:de,pla=amien(o o 'a,e:-ndice:de,pla=amien(o/
6l campo da(o, inmedia(o, da(o, inmedia(o, da(o, inmedia(o, da(o, inmedia(o, con(iene operando, con,(an(e,/
#n,(ruccione, de un ,olo '7(e #n,(ruccione, de un ,olo '7(e #n,(ruccione, de un ,olo '7(e #n,(ruccione, de un ,olo '7(e
6l (ipo mB, ,imple de in,(ruccin e, uno ,in operando8 o con un operando impl-ci(o/ 5ic*a,
in,(ruccione, re.uieren ,lo el campo de cdigo de operacin8 cu7o valor e,(B prede(erminado
por el con>un(o de in,(ruccione, del proce,ador/ 3a ,iguien(e (a'la pre,en(a alguna,
in,(ruccione, comune, de un ,olo '7(e/ Pareciera .ue la in,(ruccin #N0 5H ,e e,ca'ull en la
(a'la por error8 pero lo, di,e@adore, del con>un(o de in,(ruccione, #n(el decidieron ,umini,(rar
cdigo, de operacin Anico, para cier(a, in,(ruccione, de u,o comAn/ 0omo con,ecuencia8 lo,
incremen(o, de lo, regi,(ro, e,(Bn op(imi=ado, para el (ama@o del cdigo 7 la velocidad de
e>ecucin/



in,(ruccin de un ,olo '7(e/
#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin 0digo de operacin 0digo de operacin 0digo de operacin 0digo de operacin
9999 37
99! 3F
0"; P8
35!" 90
H39T 57
#N0 5H 42

4ovimien(o inmedia(o a un regi,(ro 4ovimien(o inmedia(o a un regi,(ro 4ovimien(o inmedia(o a un regi,(ro 4ovimien(o inmedia(o a un regi,(ro
58:

3o, operando, inmedia(o, (con,(an(e,) ,e ad>un(an a la, in,(ruccione, en orden li((le endian
(el menor '7(e primero)/ No, enfocaremo, primero en la, in,(ruccione, .ue mueven valore,
inmedia(o, a lo, regi,(ro,8 de>ando pendien(e la, complicacione, de lo, modo, de
direccionamien(o de memoria/ 6l forma(o de codificacion de una in,(ruccin 4+ .ue mueve
una pala'ra inmedia(a a un regi,(ro e, "8 E r% d% "8 E r% d% "8 E r% d% "8 E r% d%8 en donde el valor del '7(e del cdigo de
operacin e, "8 E r% "8 E r% "8 E r% "8 E r%8 indicando .ue ,e agrega un nAmero de regi,(ro (del & al 7) a "8[ d& e,
el operando (ipo pala'ra inmedia(o8 el '7(e inferior primero/ 3o, nAmero, de lo, regi,(ro, .ue
,e u(ili=an en lo, cdigo, de operacin ,e pre,en(an en la ,iguien(e (a'la/ Todo, lo, valore,
numDrico, en lo, ,iguien(e, e>emplo, ,on *e1adecimale,2
NAmero de lo, regi,(ro, (8G16 'i(,)/
<egi,(ro <egi,(ro <egi,(ro <egi,(ro 0digo 0digo 0digo 0digo
9HG93 &
0HG03 1
5HG53 2
"HG"3 3
!PG9$ 4
"PG0$ 5
!#G5$ 6
5#G"$ 7

6>emplo2 6>emplo2 6>emplo2 6>emplo2 PU!< "9 3a in,(ruccin de mB.uina e, 51 51 51 51/ 3o, pa,o, de codificacin ,on lo,
,iguien(e,2
1/ 6l cdigo de operacin para PC!$ con un operando (ipo de 16 'i(, e, 5& 5& 5& 5&/
2/ 6l nAmero de regi,(ro para 0H e, 18 por lo .ue ,e ,uma 1 a 5& para producir el cdigo
de operacin 51 51 51 51/
6>emplo2 6>emplo2 6>emplo2 6>emplo2 M#5 A9? / 3a in,(ruccin de mB.uina e, "8 &1 && "8 &1 && "8 &1 && "8 &1 && (*e1adecimal)/ $e a.u- cmo
e,(B codificada2
1/ 6l cdigo de operacin para mover un valor inmedia(o a un regi,(ro de 16 'i(, e, "8 "8 "8 "8/
2/ 6l nAmero de regi,(ro para 9H e, &8 por lo .ue ,e ,uma & a "8/
3/ 6l operando inmedia(o (&&1) ,e a>un(a a la in,(ruccin en orden li((le endian (&18 &&)/
6>emplo2 M#5 $9? /32Nh 3a in,(ruccin de mB.uina e, "" 34 12 "" 34 12 "" 34 12 "" 34 12/ 3o, pa,o, de codificacin
,on lo, ,iguien(e,2
58"

1/ 6l cdigo de operacin para mover un valor inmedia(o a un regi,(ro de 16 'i(, e, "8 "8 "8 "8/
2/ 6l nAmero de regi,(ro "H e, 38 por lo .ue ,e le ,uma 3 a "8 para producir el cdigo de
operacin "" "" "" ""/
3/ 3o, '7(e, del operando inmedia(o ,on 34 12 34 12 34 12 34 12/
#n,(ruccione, en modo de regi,(ro #n,(ruccione, en modo de regi,(ro #n,(ruccione, en modo de regi,(ro #n,(ruccione, en modo de regi,(ro
6n la, in,(ruccione, .ue u(ili=an operando, (ipo regi,(ro8 el '7(e 4od <G4 con(iene un
iden(ificador de 3 'i(, para cada operando (ipo regi,(ro/ 3a ,iguien(e (a'la pre,en(a la,
codificacione, de lo, 'i(, para lo, regi,(ro,/ 3a eleccin de un regi,(ro de 8 o 16 'i(, depende
del 'i( & del campo del cdigo de operacin2 1 indica un regi,(ro de 16 'i(, 7 & indica un
regi,(ro de 8 'i(,/
#den(ificacin de regi,(ro, en el campo 4od <G48
<G4 <G4 <G4 <G4 <egi,(ro <egi,(ro <egi,(ro <egi,(ro <G4 <G4 <G4 <G4 <egi,(ro <egi,(ro <egi,(ro <egi,(ro
&&& 9H o 93 1&& !P o 9$
&&1 0H o 03 1&1 "P o 0$
&1& 5H o 53 11& !# o 5$
&11 "H o "3 111 5# o "$

Por e>emplo8 el lengua>e mB.uina para 4+ 9H8 "H 4+ 9H8 "H 4+ 9H8 "H 4+ 9H8 "H e, 8P 58 8P 58 8P 58 8P 58/ 3a codificacin #n(el de una
in,(ruccin 4+ de 16 'i(,8 de un regi,(ro a cual.uier o(ro operando e, 8PGr 8PGr 8PGr 8PGr8 mien(ra, .ue Gr
indica .ue un '7(e 4od <G4 ,igue el cdigo de operacin/ 6l '7(e <G4 e,(B compue,(o de (re,
campo, (mod8 reg 7 rGm)/ Por e>emplo8 un valor 4od <G4 de 58 con(iene lo, ,iguien(e,
campo,2
mod mod mod mod reg reg reg reg rGm rGm rGm rGm
11 &11 &&&
3o, 'i(, 6 a 7 ,on el campo mod8 .ue iden(ifica el modo de direccionamien(o/ 6l campo
mod e, 118 .ue indica .ue el campo rGm con(iene un nAmero de regi,(ro/
3o, 'i(, 3 a 5 ,on el campo reg8 .ue iden(ifica el operando de origen/ 6n nue,(ro
e>emplo8 "H e, el regi,(ro &11/
3o, 'i(, & a 2 ,on el campo rBm8 .ue iden(ifica al operando de de,(ino/ 6n nue,(ro
e>emplo8 9H e, el regi,(ro &&&/
3a ,iguien(e (a'la pre,en(a alguno, e>emplo, mB, .ue u(ili=an operando, (ipo regi,(ro de 8
'i(, 7 16 'i(,/
6>emplo, de codificacione, de in,(ruccione, 4+8 operando, de regi,(ro/
58#

#n,(ruccin #n,(ruccin #n,(ruccin #n,(ruccin 0digo de operacn 0digo de operacn 0digo de operacn 0digo de operacn mod mod mod mod reg reg reg reg rGm rGm rGm rGm
mov a18 d1 8" 11 &&& &1&
mov al8 dl 89 11 &&& &1&
mov c18 d1 8" 11 &&1 &1&
mov cl8 dl 8a 11 &&1 &1&

Prefi>o de (ama@o de operando del proce,ador #9 Prefi>o de (ama@o de operando del proce,ador #9 Prefi>o de (ama@o de operando del proce,ador #9 Prefi>o de (ama@o de operando del proce,ador #9: :: :32 32 32 32
9*ora vamo, a poner nue,(ra a(encin en la codificacin de in,(ruccione, para lo,
proce,adore, de 32 'i(, (#9:32)/ 9lguna, in,(ruccione, en lengua>e mB.uina8 generada, para
lo, proce,adore, #9:328 empie=an con un prefi>o de (ama@o (66*) .ue redefine el a(ri'u(o de
,egmen(o prede(erminado para la in,(ruccin .ue modifica/ 3a pregun(a e, QPor .uD (ener un
prefi>o de in,(ruccinM 0uando ,e cre el con>un(o de in,(ruccione, del 8&88G8&868 ,e u,aron
ca,i (odo, lo, 256 cdigo, de operacin po,i'le, para mane>ar in,(ruccione, median(e
operando, de 8 7 16 'i(,/ 0uando #n(el pre,en( lo, proce,adore, de 32 'i(,8 (uvieron .ue
'u,car la forma de inven(ar nuevo, cdigo, de operacin para mane>ar operando, de 32 'i(,
,in perder la compa(i'ilidad con lo, proce,adore, an(eriore,/ Para lo, programa, orien(ado, a
lo, proce,adore, de 16 'i(,8 agregaron un '7(e de prefi>o a cual.uier in,(ruccin .ue u(ili=ara
operando, de 32 'i(,/ Para lo, programa, orien(ado, a lo, proce,adore, de 32 'i(,8 lo,
operando, de 32 'i(, eran lo, prede(erminado,8 por lo .ue ,e agreg un '7(e de prefi>o a
cual.uier in,(ruccin .ue u(ili=ara operando, de 16 'i(,/ 3o, operadore, de oc*o 'i(, no
nece,i(an prefi>o/
jemplo1 operandos de /0 bits podemo, ver cmo funcionan lo, '7(e, de prefi>o en el modo
de 16 'i(,[ para ello *a7 .ue en,am'lar la in,(ruccin 4+ .ue pre,en(amo, an(eriormen(e/
3a direc(iva /286 indica el proce,ador de de,(ino para el cdigo compilado8 a,egurando (por
una par(e) .ue no ,e u(ilicen regi,(ro, de 32 'i(,/ Fun(o con cada in,(ruccin 4+8
mo,(raremo, ,u codificacin2
6model small
6.#/
6code
6staca %""'
main P-O!
mov a1, d1 0 #E !.
mov al, dl 0 #A !.
581

No u(iii=amo, el arc*ivo #rvine16/inc8 7a .ue e,(B orien(ado al proce,ador 386/
+amo, a en,am'lar la mi,ma, in,(ruccione, para un proce,ador de 32 'i(,8 u,ando la
direc(iva /386[ el (ama@o de operando prede(erminado e, de 32 'i(,/ #ncluiremo, operando,
de 16 'i(, 7 de 32 'i(,/ 3a primera in,(ruccin 4+ (69H8 65H) no nece,i(a prefi>o8 7a .ue
u(ili=a operando, de 32 'i(,/ 3a ,egunda in,(ruccin 4+ (9H8 5H) re.uiere un prefi>o de
(ama@o de operando (66)8 7a .ue u(ili=a operando, de 16 'i(,2
6model small
67#/
6staca %""'
6code
main P-O!
mov ea1, ed1 0 #E !.
mov a1, d1 0 66 #E !.
mov al, dl 0 #A !.

#n,(ruccione, en modo de memoria #n,(ruccione, en modo de memoria #n,(ruccione, en modo de memoria #n,(ruccione, en modo de memoria
!i el '7(e 4od <G4 ,e u(ili=ara ,lo para iden(ificar lo, operando, de (ipo regi,(ro8 la
codificacin de la, in,(ruccione, #n(el ,er-a mu7 ,imple/ 5e *ec*o8 el lengua>e en,am'lador de
#n(el (iene una amplia variedad de modo, de direccionamien(o de memoria8 lo cual *ace .ue la
codificacin del '7(e 4od <G4 ,ea 'a,(an(e comple>a (la comple>idad del con>un(o de
in,(ruccione, #9:32 e, un 'lanco con,(an(e de cr-(ica por par(e de lo, .ue proponen di,e@o, de
compu(adora, con el con>un(o reducido de in,(ruccione,)/
Pueden e,pecificar,e e1ac(amen(e 256 com'inacione, di,(in(a, median(e el '7(e 4od <G4/
3a ,iguien(e (a'la pre,en(a lo, '7(e, 4od <G4 (en *e1adecimal) para 4od &&2
3i,(a parcial de '7(e, 4od <G4 (,egmen(o, de 16 'i(,)/
583


$e a.u- como funciona la codificacin de '7(e, 4od <G4 3o, do, 'i(, en la columna 4od 4od 4od 4od
indican grupo, de modo, de direccionamien(o/ Por e>emplo8 4od && (iene oc*o valore,
po,i'le, para <G4 <G4 <G4 <G4 (&&& a 111 'inario) .ue iden(ifican lo, (ipo, de operando, pre,en(ado, en
la columna de direccin efec(iva/ direccin efec(iva/ direccin efec(iva/ direccin efec(iva/
!upongamo, .ue .ueremo, codificar 4+ 9H8 ^!#_ 4+ 9H8 ^!#_ 4+ 9H8 ^!#_ 4+ 9H8 ^!#_[ lo, 'i(, 4od ,on && 7 lo, 'i(, <G4 ,on 1&&
'inario/ !a'emo,/ !a'emo, .ue 9H e, el nAmero de regi,(ro &&& 'inario8 por lo .ue el '7(e
4od <G4 comple(o e, && &&& 1&& 'inario o &4 *e1adecimal2
mod mod mod mod reg reg reg reg rGm rGm rGm rGm
&& &&& 1&&


<e,umen por2 +ic(or Yu(ierre= Yu(ierre=/ <e,umen por2 +ic(or Yu(ierre= Yu(ierre=/ <e,umen por2 +ic(or Yu(ierre= Yu(ierre=/ <e,umen por2 +ic(or Yu(ierre= Yu(ierre=/

También podría gustarte