You are on page 1of 53

ASSEMBLER

DESDE CERO
e
·, , ~

INTERRUPCIONES ·-i.. .
. ....

,~- '

. ~
" . . ,.:.
.. r .
MARI O CARLOS GINZBURG
INGENIERO ELECTRONICO (UBA) ·'
\

DIRECTOR DE LA CATEDRA DE "ESTRUCTURA
DEL COMPUTADOR" E INVESTIGAD OR EN LA
FACULTAD DE INGENIERIA DE LA
UNIVERSIDAD DE BUENOS AIRES

A Piyi, Jerónimo y Rafael

A mis alumnos

- ...ll~i ::·: . .

/NTRODUCCION GENERAL A LA INFORMATICA:
3 ASSEMBLER DESDE CERO

M.C.Ginzburg

Es propiedad - Queda hecho el depósito que marca la ley
Impreso en la Argentina - Printed In Argentina

DERECHOS RESERVADOS © 2000

I.S.B.N. 987-43-2203-9

Impreso en talleres prensa & acabado, Concepción Arenal 4866, Capital Federal
en el mes de agosto de 2000

No se permite la reproducción total o parcial de esta obra, ni el almacenamiento en un sistema de informática,
ni transmisión en cualquier forma o por cualquier medio electrónico, mecánico, fotocopia, registro u otros
medios, sin el permiso previo y la autorización escrita del autor.

INDICE

UTILIZACION DEL LENGUAJE ASSEMBLER .. . .. . ...... . ............................ 1

--REGISTROS DE LA UCP A UTILIZAR .. -..... . ...... .. .................... .....- · ~···-· ~ . . .. . . 1
. i •. ~- . ~ .. .. . ... ). .
EJERCICIOS .......... ........ ... . . . .................. .... ....... . .. ... ..... . 2
EJERCICIOS DONDE SE DEFINEN INSTRUCCIONES DE SALTO......... ...... ...... 4 a 8
EJERCICIO CON UNA LISTA (VECTOR) .. . ...... . ... . .... , ....... . ........ . .... 9
EJERCICIO DONDE SE DEFINE LA INSTRUCCIÓN DE COMPARACIÓN Y DOS LISTAS 1O
EJERCICIOS CON NUEVAS INSTRUCCIONES DE SALTO ........ . . ................ 12 a 15
EJERCICIOS CON SUMA DE NUMEROS NATURALES Y ENTEROS DE UNA LISTA .. ... 16 a 17
EJERCICIO CON TRES LISTAS........ .... ..... .. ........... .. ........ ....... . 17
EJERCICIO PARA VERIFICAR MEMORIA Y EXTENDER SIGNO.......... . ..... . .. . 19
EJERCICIO CON MODO INDIRECTO POR REGISTRO CON DESPLAZAMIENTO
MEDIANTE REGISTRO Y EJERCICIO CON DIVISIONES . . . . . . . . . . . . . . . . . . . . . . . . . 20
EJERCICIO CON USO DE INSTRUCCIONES AND, ROL ~ OR . . . . . . . . . . . . . . . . . . . . . . . 22
EJERCICIOS CON REORDENAMIENTO DE LISTAS . ...... . . ... .. .. .... .. ...... .. 23 a 26 .
EJERCICIOS DE MULTIPLICACION Y DE SUMA EN BCD ............. . .. .. ....... 25
EJERCICIO PARA OBTENER RAIZ CUADRADA .. . ... . ...... . ... . ..... . ... . ... . 27.
EJERCICIOS .P ARA MULTIPLICAR ENTEROS ... .. . ... . .... .. . .. . . . ....... . .... 28 .. ...
~·· ;

DIRECCIONES EFECTIVAS Y REGISTROS DE SEGMENTO ... . ... .. .... ... . ...... 29 a 30
LLAMADOS A SUBRUTINAS Y USO DE LA PILA .......... ............... ....... 31 a 38
PASAJE DE PARAMETROS .. .. . ............ . .. .. ..... ... . .. . .. .. . ... . . .... . 36 a 37
INTERRUPCIONES POR SOFTWARE (INSTRUCCIÓN INT) .. .. .. . . . . ............. 39 a 41
INTERRUPCIONES POR HARDWARE .. ... ... . . . . ......... . . . . . ...... . ... . ... 41
MNEMONICOS DE LAS INSTRUCCIONES MAS USADAS . . ..... . ... .. ... . ... . .... 43

CUSPIDE


Av. Gral. Paz 57

PROLOGO

Esta corta edición previa salió a pedido de los alumnos, dada la inexistencia de textos que expliquen
en forma progresiva la enseñanza del Assembler.
Se trata en realidad de la mitad del texto final de la Unidad 3, que usa el programa _Debug del DOS
para ensamblar los programas escritos en Assembler. El objetivo de esta mitad es que el alumno incorpore las
estructuras básicas de programación en Assembler, conozca las instrucciones más comunes, maneje los flags
y se vincule con el hardware. Se trata de aportarle las "7 notas musicales", para que pueda combinarlas en.
estructuras cada vez más complejas. Esto es, se definen los modos de direccionamiento básicos que
combinados permiten operar cualquier estructura de datos.
También se ha tratado que los ejercicios vayan progresando en complejidad.
No podía faltar el llamado a subrutinas con el consiguiente uso de la pila, instrucciones PUSH y
POP, y el pasaje de parámetros. Dado que tanto las interrupc·iones por hardware (mediante las líneas IRQ),
como las interrupciones por software (mediante la instrucción L.~ xx) son formas de llamado a subrutinas
(del BIOS o del sistema operativo), por extensión se tratan éstas, indicando su proceso en detalle.
Si bien el Assembler está dedicado a procesadores de Intel (dada la facilidad de acceder al DOS
desde cualquier PC para practicarlo) los conceptos desarrollados pueden aplicarse a otros microprocesadores
y microcontroladores.

La otra mitad (en preparación), a cargo del Ing. Carlos Robello, trata en esencia los nusmos
ejercicios desarrollados en la primer mitad, pero realizados con directivas para programas ensambladores más
poderosos, como el T ASM y el MASM. Esta mitad se incorporará a la primera en una próxima edición
completa.
De esta forma, el alumno primero se concentra en lo fundamental del lenguaje, para luego manejar
un Assembler de más alto nivel, con mayores posibilidades y flexibilidad de programación. Asimismo está
planeado agregar nuevos ejercicios más complejos.

U3-1

UTILIZACION DEL LENGUAJE ASSEMBLER

Conviene aclarar que en nuestro país se habla de programar en "assernbler'', siendo que en realidad el lenguaje se
denomina assembly. Assembler ("ensamblador"} es el programa traductor de assembly a código de máquina, por Jo que
lenguaje assembly puede traducirse corno lenguaje "ensamblable" o lenguaje para ensamblador. Siguiendo la costumbre,
seguiremos llamando assembler al lenguaje simbólico de máquina, y ensamblador al programa traductor citado.
Recordemos (Historia de la Computación, unidad l) que el assembler fue el primer lenguaje simbólico creado. Permitió
escribir programas desde el teclado de un computador (salida código ASCII), Jo cual suponía la existencia de un
programa ensamblador, para pasar los símbolos en ASCII a código de máquina.
Cada modelo de procesador tiene su correspondiente lenguaje assernbler, y su ensamblador. Por lo gen<;.i:al. los nuevos
modelos de un mismo fabricanTu"conservan instrucciones en assernbler de modelos anteriores. Así, un Pentium tiene, en
su repertorio de instrucciones en assembler. instrucciones del 80286, por razones de compatibilidad.
Si bien cada fabricante de microprocesadores define notaciones y aspectos parti culares para simbolizar in.strucciones en
assembler, con un poco de práctica no resulta difícil para quien sabe programar un determinado assembler;pasar a otro.
Dado que la mayoría de las PC usa procesadores de Intel o sus clones, y que desde una PC se puede programar
cómodamente en assembler, desarrollaremos el assembler de lntel como lenguaje representativo.
En el presente, se programa en Assembler para distintas aplicaciones. Lo más corriente quizás sea programar porciones
de un programa que necesitan ser ejecutadas en corto tiempo, siendo que la mayor parte del programa se desarrolla con
un lenguaje de alto nivel (C, Pascal, Basic, etc). Esto se debe a que un Compilador para CISC (unidad 1), al pasar de alto
nivel a código de máquina genera código en exceso, en comparación con el obtenido a partir de assembler, lo cual
redunda en mayores tiempos de ejecución de porciones de programa cuyo tiempo de ejecución es crítico. Como
contrapartida, en general lleva más tiempo programar en assembler que en alto nivel.
También suele usarse el assembler para desarrollar manejadores de periféricos, y para controlar directamente el hardware,
··dada la flexibilidad de este lenguaje. ..
El lenguaje assembler, por otra parte, es una herramienta imprescindible para dominaar a fondo el funcionamiento de un
computador, de modo de sacarle el máximo provecho.
.. , ¿' ~ ·, I
• ,l (t .

_ft~
. ·~ .....
.... '"'-..·t ~ .
~

. ,_
• -:;.!". :
1

-·· ,..
i'.,.
, ....
-· • .«-

... ,. .
.
UCP
...
r •
16 bits 16 bits
~···----·---------- --- --------~--+

a bits a bits
AXI AH AL SI

sxl BH BL I, DI

\
cxl CH CL ·. IP
.,
l 1
•.
r •• • - - · - - - · •.

oxl OH DL

Figura 3.1

En las unidades 1 y 2 se trataron distintos ejemplos que empleaban el registro AX, de 16 bits, de la UCP como
a~~rnulaci()r, y para operaciones d e entrada y salida. Este registro también e~. iri.disp~nsable usarlo cuando se
multipl_ica o div ic!e" según se ve~~· Pero en la UCP existen otros registros de 16 bits que pueden elegirse
ingistintamente como acumuladores, como BX, CX y ,P~. {figura 3.1), que serán empleados en assembler a
partir .del ejercicio 3. · ·· ·
También se dis pone en la UCP de l()S registros SI y DI para guardar exclusivamentt: direcciones que apunten
a p_gsic;;ipnes .de memoria (registros- p't.mt-erosfcorno se eje~plifica a partir del ejercicio 6
BX. es el único acurnufad'or que también puede utilizarse como registro puntero (ejercicio 16).
- -- -:.>..: El registro IP (instruction pointer) es afectado por las instrucciones de salto (jurnp).
Si se n ecesita operar datos de 8 bits, los registros de 16 bits: AX, BX, CX o D X (o sea Jos terminados en X), pueden
dividirse en dos registros de 8 bits. Por ejemplo, AX se descompone en AH y AL ; BX en BH y BL, etc.
~. 'J• ;:. Las. let~a~ H (de "high"), y!:-.(de '.'low") hace11 ref~xenc:i~ .C! ~ª- par.te .<\lt!\ y b9ja de.un registro. de .16.bits.

Así. designados AX.. de la página 31 citada. AX .····-·· ··· -··. siendo que directamente así se d_a la d.... La letra E hace referencia a "extended". las variables R.i!:. A 0200 . se usará una mitad del mismo. según se enunció. respectivamente. En otros ejercicios posteriores hemos elegido arbitrariamente la dirección 0100.. [5000] .iiiodo diTecto. Al lado de la letra A se debe colocar la dirección (en general arbitraria) a partir de la cual se quiere escribir el programa. xxxx:0200 MOV AX.«)_·er¡modo de e ·: direccionamiento directo. EIP. en el cual los datos están en su memoria. las 4 instrucciones que se corresponden con 1. el programa traductor Ensamblador (que viene con el Debug) traduce los caracteres de la instrucción en assembler Figura 3. a I. el mismo tendrá s_I:!..s corchetes que aparecen en las instrucciones del assembler de Intel. según se elija.. A la derecha de cada rectángulo aparece el valor que tendría el AX ~--. [5000] queda codificada como A10050. Mediante el comando A del Debug se pueden escribir programas en assembler. EJERCICIO 1 Es-cr-ii'. xxxx:0207 SUB AX. para el Debug. cuyo valor puede ser distinto en cada PC. 486 y Pentium.c~j?n_'f>ar.a 105 _a lizar en memoria el dato a ·procesa( · · ·· · · ·· · ·· · --· ··-·--. [5006] .· ·· ··· · · · · · ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ En Ja figura 3. ··. 5000 y 5006. U3-2 Entonces. y los cálculos se efectúan usando c-qn:io acumulador el visor. y de pulsar [5010 /11] . Según se explicó.2 (que están en ASCII)..segunda letra terminada en X.AX+ [5000 /01] AX= [5000 /01 ] se quiere indicar los valores contenidos en las 2040 posiciones de memoria 5000 y 5001 (dos bytes de información). A Jos fines de continuidad con la Unidad I.J Llevar a AX una copia del dato (P) que está-en 5000 y 5001 de la memoria 1 xxxx:0203 ADD AX. . Con AX.. ·~. Usando el programa Debug para codificar en assembler.. Enter escribirá automáticamente xxxx:0203. en este último. y en caso de ser necesario em_plear un registro para datos o resultados de _8 bits. indicándose EAX. ! EDI.:·:~.. . EBX. ESI..eñ assembler las instruccigug_~nec. BX. Lo. · · Razonando de igual forma que en la Unidad I. se encuentran distintos registros que pueden ser usados a elección como acumuladores.esaria. luego del. usaremos la misma dirección (0200) para comienzo del programa. ex y DX. ···.' Cuando una instrucción tiene un número entre corchetes Sl! dice qu~ · está én. \J l En los procesadores 386. y que son magnitudes.AX . en assembler. Esto m ismo se repite con cada instrucción. mediante la simbología antes definida. pues dichas direcciones (en general arbitrarias) son las que usaremos directamente en assembler para identificar variables en las instrucciones que escribiremos.Q Suponer que.s para codificar la operación .¡. indican posiciones de memoria.os registros también pueden elegirse para guardar 16 ·. ~~ando se necesita definir un registro para datos o resultados de 16 bits. El mismo también muestra los valores que iría tomando AX durante el proceso. se debe también tener siempre presente en assembler el esquema del calculador de bolsillo. como en la página 31 de la Ú~Údad I. Luego de tipear una instrucción en assembler. ·. es necesario partir siempre de una asignación de direcciones de las variables (datos) en memoria. Did-.J i . Como se describió.J .J Restar a AX una copia del dato (Q) que está en 5006 y 5007 de la memoria ¡ xxxx:020B xxxx:020E MOV [5010]. en un computador también por un lado_se tiene los datos en memoria. El Debug sólo permite definir registros de 16 11 8 bits. Escribiremos a continuación en assembler.J Sumar a AX una copia del dato (P) que está en 5000 y 5001 de la memoria. u 8 bits. ~.._ AX [SOlO/ll]=OOOO "Enter" (. . y por otro lado se tiene el procesador (supuesto de Intel en esta obra). o sea suponer : que previamente están escritas en determinadas direcciones de memoria. la cual se identificará por ser su segunda letra una H o una L.. en el correspondiente código de máquina.J para salir del comando A) i 1 (El guión ind ica que el Debug espera otro comando) •-.)ir. [5000) .2 aparece un diagrama lógico.[5006 /07] AX=OOOO registro o posición si se ejecutaría la instrucción. Puesto que el Debug ahora sabe qúé--dicha instrucción ocupa 3 bytes. que es conveniente ~-AX-- _-. 5000 y 5006. Con xxxx se han querido indicar 4 símbolos hexadecimales. En este caso se asume que las variables se encuentran en las direcciones 5010. .:. según aparece en la página 31 de la Unidad I..J Transferir a 5010_y 5011 de memoria una copia del contenido de AX (Se vuelve a pulsar . P y Q están en las· direcciones 5010. los registros citados pueden tener 32 bits..- [5_ 0_00_l_0_1]~ AX= 1020 realizar antes de codificar en assembler.'. a partir de la dirección 0200 la instrucción MOV AX.~_=:: P + P .J). · -.

__[_2_ º 1_2_1_1_31__·-__AX _ ___. [xxxx] sólo puéden sumárse dos núºmeros ae 16 bits 1 ·· ··· Los valores de M y Nen decimal son: ~ =. de la secuencia anterior escrita en assembler.._[2 AX= SO?O ..AX _ _ _. [2012113]=0009 Figura 3. . después de tipear las 4 ins trucciones. • • ~ . ._0_0_0_I0_1_] _~ _ _---. .°!. en memoria quedará la secuencia de códigos de máquina indicada en dicha página 31.~. "' ' ·-·.. primero Sl' debe dar ¡ valores a las variables en las direcciones. Lt1ego se debe proceder conforme a Jo rea lizado de la página 36 a 39 de la Unidad l. . Esto es.\ • . szvc szvc 0001 0011 ~ 2000 70 o--- 1 90 ~-AX . •'J. y Ñ~ 3. efectuando el proceso contrario al que realiza el programa traductor Ensamblador. sólo hubiesen cambiado los códigos de máquina de las instrucciones. se evita tener que escribir con el comando E todos los códigos de instrucción.a nuestro problema. AX ¡ Los puntos suspensivos indican otras instrucciones que arroja el comando U.l •• EJERCICIO 2 ... . las var"iables c~n bit de signo.. pero que no interesan . p ágina 34.~·. . CX o DX.. . Escribir una secuencia para realizar la suma R = M + N de dos números enteros qe :f2 bits ("J ~. \ \ En cualquier momento que se quiere verificar si la secuencia a ejecutar o en ejecución es la correcta se usa el -:. Son "basura".... • .250.J. Con fines didácticos ~an sido sumados y expresados en hexa. · . ~ " ~ •. \l _..... .. " .J. mediante el comando E.w· M = 11111111110101111001000001110000 = FFD790 7 O N = 00000000001100011001io1010111100 = 00 319ABC R =M+N = 100000000000010010010101100101100 10009 2B2C .3 .. integers"). . ( xxxx:0200 Al0050 MOV AX. Este comando realiza lo que se d enomina "disassembler" o " un assembler". A continua ción se indican los valores de.. [5006] 1 1 xxxx:020B A31050 MOV [5010].000 • . ·· C=l . [5000] xxxx:0203 03060050 ADD AX.876 .-. como los dejaría e~ memori a un programa traductor.. (2010/1 1]=2B2C 9 9A 200A 31 B 00 ~-AX __-_ _ [2_ 0_02_1_0_3]_~1 A X=FFD? AX--. d ado que mediante ADD.AX + [200A/OB] + C AX=OOOS zvc 2010 1 2012 3 } . 'F ··~ o\ \.1...___ [2_º_ 1 0_/~1 _ 1 ]_ •__.. como se hi zo en la página 33 de la Unidad l. .... .J.. ~ _. como se hizo en la Unidad I. a partir de la dirécción dada (0200 en este caso) interpreta los códigos de máquina de un programa en sus correspondientes instrucciones en assembler.. [5000] xxxx:0207 28060650 SUB AX. ¡i .2. • . i. De esta forma.650. Los conceptos hasta acá vertidos sirven para todos los ejercicios planteados. 03-3 En definitiva..AX + [2008 /09] AX=2B2C szvc 2008 BC .AX. Debe notarse que en lugar del registro AX podríamos haber usado BX.. ! Si se quiere ejecutar las instrucciones .._ comando u seguido por la dirección donde comienza la secuencia: ~ "'!'•· n 0200 . no quedando rastro alguno de lo tipeado en assembler. 2002 07 3 FF AX .1 • ! _:·~ ~~-..

3 Arhitraria~ente escribiremos en assembler la secuencia a partir de la dirección 0100. [2002] Llevar a AX una copia del dato que está en memoria en 2002 y 2003 xxxx:OlOD ADC AX. a continuación de donde estarán los 16 bits de la suma de la mitad inferior. qu_e pifmero. . Separados en dos grupos de 16 bits se sumarán en forma fraccionada. (conditional . no cambia ningún flag. y almacenará los 16 bits del resultado parcial obtenido en las direcciones 2010 y 2011 (que después de ejecutarse el programa deberán contener 2C y 2B. se asigne inmediatamente a Ia·variable R el valor O. de salto . de · · La usaremos para . t:I i~ultado de·la·· súma de la mitad superior (que en hexa deberá ser 0009) se guardará en 2012 y 2013.s. Efectuaremos R = M x N = O + M + M + . AX Transferir a 2012 y 2013 de memoria una copia del contenido de AX La instrucción ADC ("Add with Carry") es distinta de ADD.3 con los de N (en las direcciones 2008 y 2009). condicional . . .j'.. supondremos: que M y N son números enteros positivos de dos byte~. que sólo puede puede sumar hasta dos números de 16 bits cada uno.m ac. ~- Emplearemos un_a h1strucdón de salto condicional para repetir la ejecución de una secuencia . . Podemos decir que la secuencia anterior duplica por software el formato con que opera una UAL de 16 bits (hardware) en una suma rnultibyte. Esto podrá concretarse luego de que definamos la instrucción comparar. el valor de C es el proveniente de realizar ADD AX. ·repitiendo.Se supone una UAL como la del 80286. se repetirá el lazo N veces. AX Transferir a 2010 y 2011 de memoria una copia del contenido de AX xxxx:OlOA MOV AX. . . Esta_estructura será u_sada repetidamente_en la mayoría los ejercicio~.i nstrucción ' .a.M: xN ~3 x 4 = (11x100)~. [2008] Sumar a AX una copia del dato que está en memoriá en 2008 y 2009 xxxx:0107 MOV [2010]. Estos pasos se indican en el diagrama lógico de la figura 3. . dado que en el presente los micro- procesadores poseen instrucciones para multiplicar y dividir mediante una sola instrucción..a.· Lo hacemos por razones didácticas..-s _e l p~og~~~--ad.. existiendo corresponden- cia entre los 6 pasos del diagrama lógico y las 6 instrucciones siguientes: AlOO xxxx:OlOO MOV AX. -. Puesto que una instrucción tipo MOV. . .. . EJERCICIO . .ü muladgr. + M ¡ ó sea mediante N sumas con sumando M. Otras limitaciones que tendrá la secuencia a desarrollar. respectivamente. jtlmp) . . . . posiciones consecutivas de memoria (200A y200B) más el valor que tenía el flag C de carry antes de ejecutar la instrucción..· corno MOV [2010].. 1 A fin de que resulte una secuencia sencilla... el programa sumará primero los 16 bits menos significativos de M (arbitrariamente escritos en las direcciones 2000 y 2001 como se indica en Ja figura . habiéndose indicado en negrita los que se sumarán primero.. realizar el pro~uct() R -= M x N. como se deduce de la suma anticipada realizada con fines didácticos) · Luego se sumarán los 16 bits superiores de M (localizados en 2002 y 2003) con los correspondientes de N (en 200! y 2008)... [2000] Llevar a AX una copia del dato que está en memoria en 2000 y 2001 xxxx:0103 ADD AX.. E_sto es. 11 + 11 (N = 4 sumas con el sumando M = 11 5 ) Asignaremos (figura 3.. . . si bien el resultado será P=O. . Los números enteros se tratan en la Unidad 4 de esta obra. ·. iremos registrando los resultados de las sumas sucesivas. ..~~Y0Ilar·¡:.3 . [200A] Sumar a AX copia del dato que está en 200A y 200B más Carry anterior xxxx:Olll MOV [2012]. Eñ-i.·~·1a:?peracióri.¡ O.(2008].. En este ejemplo se ha buscado la simplicidad didáctica en lugar de la rigurosidad. a los cuales se les adicionará el valor O ó 1 con que resulta el carry C generado de Ja suma de los 16 bits de la mitad inferior (en nuestro ejempío resultó C=l.U3-4 Los número M y N de 32 bits serán los datos para el programa a desarrollar.. AX. y a la variable N (con valor 0004 H) las direcciones B310 y B31 l..:( veces un procedimiento que consiste en una s_urn. uso de • '" . . capaz de detectar desde su inicio si M 6 N valen cero..se pone en O.x N = O + 11 + 11_+.. " . es que si M=O.4) a Ja variable M (con valor 0003 H) las direcciones de memoria B300 y B301. como se indica en la·Stt'ñ~~'üidáctica). pues ordena sumar a AX el contenido de dos.. y q~e es el ~esultado R $ 32767. a efectua~~~ -~omo R = M . una·.. Se ha reservado para el resultado R la B320 y B321.:r.e.. . Surge así la necesidad de un programa más genérico. ql1e i. L~ego se verá como detectar si se supera este máximo • 2 Ej~~pJifiqu~~. 3: .

..··--·. ..ta obra...~i~o __!:?..____ .. puede . restánc!9lo des{ ~f!\O_ [~pti_¡\X. BX se construirá (ver secuencia siguiente en a::.. de __la~_Y\=~'. . ordmcisaltar-·a· fa.a ex · ···- le . qui:_ aparece~ en la _s_ecuen~ia.. ... un~· c. .. [B310] Ll!'!YaS..9. Figura 3. .-.. y que si es falso que Z=O ordena ... que . .SSJ9!1-.(que inicialr:nente es N).. -·-· ·--· -· . pues pu e..(z~ro si)..1!!~s. . La -~irec:_ción de esta instrucción a la qu!! _s. ..q1i'é"s'igfrcra·1Nz~ --. . . l\!. _ ._e_ r_~p~_ti!.--... Como se observa en el diagrama lógico de la figura 35...----.üCCi611 dedireéCTóñilhhh ~ói~ ... .-~L~C?.._ B~ . . . _~pera~ció!1~sigw~nte des¡:uenta uno aJ cont~nido del registro _ ex .. . .._..!_9...in~ "modo registre..del Debug. de~cfu:~Ssi. BX=0003 (~.r es_~i:~J. -· ." ..n _esc_i:i~a u_11_~. cualquier .. ..... . . AX ·s:.:~:gn• elr""ul~ado a R.<.!l.o po z. . .t.l R. .~!"i!.r AlOO. . ex ..ei·flag es Z. Sumar a AX una copia del. hacer pe~der el programa tipea¡!Q.·~1) -. . . ~!... del' --~-._dicha instrucció.si és cero. BX En AX está el resultado .r que disminuirá cada vez que se_ejecute DEC CX.e .. · X))f<X.'!:f_!:_o}'}!. .--.:_ · ñ ~[E[~'!n. restándolo de sí mismo xxxx:OlOA AD_DAX. [B300] Llevar a BX una copia de M que está en 8300 y 8301 SUB AX.c a· en la ~ni dad 4 de'es.. . la.)$..~~de1.OP-!a _dé l\J.. N. > MOV [B320J.-_ _AX_~I [83201211=0012 hhhh.. '•2.~~~~~~?~. . La única instrucción nueva es SUB AX. -.¡...~rni11uir ~n uno} ~l valoi:. . ~i z~o -(~~~~--~o).. -···---· . . . q!_!!!.!~l~~· En definitiva.··<.: t ..la instrucción .con~rolable. ·. -. CX . -~º.( ~ fin d~. .. .. .:O!QC . P!eYi!'lp:le..---~ -.__. una_secuen~ia_p3:ra _r~aliz~_r.[8_3_0_0_I0_1_)_. se salta a ejecutar nuevamente la instrucción ~DD AX.LresulE. N9 q>nfundirel hecho de.99..sembler) un lazo ~.m~n¡l9 J. AX _Poner acurnula_d or AX en cero.!tar_á el l~zo.. ·. U3-5 8300 Conforme a las instrucciones conocida_s.._c?~~aJ!!..~Aq_: ~------·---- En definitiva.§!: g~nqqi.. . con la indicación del flago para ese caso: Z=O que significa Zero no Tene~ presente que cuando un resultado .c:l. a B320 . .xx:QlO~. t~mbién..E'..m_11La.BX Sumar a AX el valor.· ~ñ-~.-~2'­ Idem 1 00 ADD ADD AX.:. • También existen otra~ formas de hacerlo...-.. lH..AX Poner acumulador AX en cero... ~J...4 plieéié nacerse ' para limpiar . \'.. cas..... o sea mientras él résulfado -de "resfa-i üñO. . . AX·usada para llevar_el_ ~~~s~~.--------------------------------------------. .una ._.... AX+ zero = NZ).•. copia . de.··~ xxxx:Oll2 INT20 Instrucción de final .lll:~_!!!c_e_~.. · .! ~.d... ··.>.....UJ.· l . 1 éoñ trñ ¡·í-ií'i·-éoii' la fiistñiccióli..!!!ien. .e !t~a el reg_istro ac~1..!:!. .. '~~~.· ······ · " -.. [83101111 el _procedimiento básico que se debe repetir N veces consiste en este caso en la instrucción ADD · AX~ Bx:· ~8_X_.. ._ ._$ta. que ordena decrementar '. r!:!g~_tr.sigue a .. . . ~y_i_ta. 1 . JNZ '• . .. .... . .memoria. fio~_instr~c.~-. MQV C)(~ W3~Qj-~_e_~~a-rg~ra. inst~c:. . . . AX Llevar .s. .corresponda 2 . la• indicación' Z=O (condición . 51... .~-~P.-. BX Idem LADD AX. (di.. que está en 8320 y 8321 • ·-~f' . que un resultado no sea cero (NZ)...do IF anterior no es cero.. tli3001 Llevar_a BX una copia de M..la-ffistiucc:ló_r\ ariterfor 09. registro). ._ (cierto) .._f~ ..X.Q....s:_tjta.Y JN~ ..de.. . que en assembler se escribe JNZ ~[_B_32_º_1_2 1~l_. . --· · ... de M que está en BX .~~~~~~tidas seria: 1 MOV BX. . .-..le está en B310 y B311 . . como se expli... fyfientras ("while") este número en ex no sea cero (not AX ..9_r. BX de comienzo de la secuencia que se debe repetir.... para co_ntar las N veces que se eje¡:l. ..Gump if not cero).¡~-. ..... y la _operación subsiguiente determina si el número contenido en ex alcanzó o no el valor cero.~!~. o~_c f:X Rf'. instrucción en modo registro.... . l .~!V?_.~ de JNZ) ..~·--. valor de BX = M 8310 04 N veces ADp A~t... ..-.. _. . <... ..¡.-ª. .star uno -~·ex (con lo cual pueden cambiar los fla~ SZVC) .9.decirse~ qúe-JNZ-'ñhnfi0rdena saltar Figura 3·5 a ·¡a 'instrucción de dirección · hhhh si es verdadero continuar._.~t~.. m~qia~t~. . (~X rió~~~~o) saítáf" ~JHQ_~ . ···.(• "· xxxx:OlOO MOV ex. ' ' xxxx:OlOF MOV [}J3201. q':1e est_á en B300 y B301 xxxx:0108 SUB AX.de AX ·· ..·('z. .cqv"Bx. g~e obligue ~ ej«:c~t~r !-J v~ce5..ciones ~i:~vas~ D~<. . ...· j.-~ ·.J.··--··..~ ! V quiere saltar es el n__úmero que aco~P.P~r.ción noconv!ene ejecutarle rneqi:n:ite e[ 9. .P~ti.X a c_~r....CXur:ia copia de N q'l..r. ~~la_ vez. " _. ~..v~z _ qúe sé realiza e~ta ' ~ú'r!ia....L.~·. . ~on la ayuda de .~. con..!llo.l d!!:t~ a _9perar_no. de salto . ..que 8 ____Z=O. ---. _.f..s~r.:. una secuencia en assernbler puede ser: ' C)/~.valor . ··-· .cJ_eb.?-·. y B321 .i~srnC?____ ~ $ . . xxxx:OlOD JNZOl~~ S_i lÜ~go de.____ ....i!_ r:-J vec_e_s ADD AX.Il~.~a.~.A..._.----·· .~do_ .. ..

. . Resta~ uno a ex (con lo cual pueden cambiar los flags SZVC) xxxx:OlOF JNZOlOA_ Si luego de la instrucción anterior Z=O (eX no zero) saltar a OlQA xxxx:Ol11 ~()V [J?3. .1) a una instrucción que no forma parte de lél -.. ~. ox. sajtar s1 el resultado antenor genero ove_r~_lo~ que en assembler se escnbe JO hhhh. con lo cual la UAL genera indicación de overflow. el contenido de CX. ·- -~ . . . y si V=1 se pasa a e}~c-~t~~ ¡~-·s-~cue~d~ q-. sigue. realizándose en cada oportunidad las siguientes operaciones-qi:1!:!·0.~mpieza en-130 y termina en 136. restándolo de sí rnisrnQ xxxx:OlOA ADDAX. La º!tima resta que efectuará la UAL con el vaior de CX será 1-i' =O.estaáitilla-deTproceso. si lue~ de una suma es V=O se ejecuta la secuencia del ejercicio anterior.. · ·· · En este ejemplo. ----·-·.. manejo de constantes. trncción .... ~ ~ ~. 'exls. .. La instrucció~ de · ..fff_ Llevar a AX una copia de Ja constante FFFF ·•"' xxxx:0133 MOV (8320]. La d irección 130 fue (•:eg_~~~-ª~~~t~aria'.~~-~~e! _lugar ~e destino para la EE~-~..instr ucción JO 01:30 ordena saltar (si V..Jn$.. . ..:FFFF en B320 y _B321·. -·-··---. "· s~pera el valor 32767.... AX Poner acumulador AX en cero. una copia dt:!l valor de AX xxxx:0114 INT20 Instrucción de final A0130 xxxx:0130 MOYAX. . .te overflow si por ejemplo.-.e:~ . el valor de M que está en BX xxxx:OlOC J_Q_9_~~-º Si de la instrucción anterior resulta V=l. que empieza con MOV AX. / el que tienen los registros AX.6 ' .: :t ¡' En~9nc~s la secuencia que e:npieza e~ 0100 es la del ejercicio anteri()r con ~l agregado de JO. .. .3 de la Unidad 4 se define el overflow para números enteros.. se le habrá restado N veces uno..:. -.. . el__si"güiente saltó éon la condición que sea Z=O no se realizará.. _ y)a Sf?C~encia continuará cm~__MOVJB320]....· . ___. Por tal m~ti"vo. _.... Esto puede verse en el diagrama de la figura 3.. . . .. En definitiva. . En la sección N.~]! !:-~ Llevar a B320 y B321 de memoria. con lo cual será Z=l . mediante el comando T del Debug. empleo de la . ... --~-· EJERCICIO 4: Mejora del ejercicio 3 usando JO (Jump if overflow).!l~n.. U3-6 Al _!~9_<. .'. · · ·· ·-· En consonancia se habrán realizado N sumas. con lo"s iescrltados eri hexadeci mal que se indican.dadas. . [B300] Llevar a BX una copia de M que está en B300 y B301 xxxx:0108 SUB AX. Para un formato de 16 bits. ..tñlúl~foJMr. . Para tal fin. ·.. ...2 . . ~Y.. Modificaremos la s_e_c uencia del ejercicio anterior para que si por los valores M y N alguna suma parcial o total excede 32767. en correspondencia con G..t~i_9n.-~~ -. BX_ Si:i'mar a AJ:....~:t~_s _ · · .1 _f. AX.1 (Z=O) eX=l Salta a OlOA pues Z::O 4ta vez: AXr9+3 AX=e ex r 1-1 (Z=l) eX=O No salta. . . A 100 xxxx:OlOO MOV ex... ejecutando la secuencia dada... m~diante A 0130 hubo qu~ escribir la otra secuencia. FFFF. .-.l!és de realizar N veces el laz·o. ·. . ADDAX. . (V=O). que era N.ita en memori. [B310] Llevar a ex una copia de N que está en B310 y B311 xxxx:0104 I\'fOV BX...!e· .. una suma de enteros positivos ..jecu~!?~ d_~ lil:~ instru:ci~nes del lazo.X.. ~ ... de dirección hhhh sólo si V=l.. ~n la secuencia anterior luego de la instrucción de suma agregamos la instrucción JO como s~ jndica a continuación. . pue•· :. . ~ Llevar a B320 y 8321 de memoria.=O 2da vez: AXr3+3 AX=6 eXr3-1 (Z=O) eX=2 Salta a 010A pues Z-=O 3ra vez: AXr6+3 AX=9 ex(--'. Esta última ordena pasar a AX una copia de la cons tante FFFF. la cual será luego eser... BX. . una copia del valor de AX xxxx:Ol36 INT20 Ins tr~cción de finai ~ Figura 3. caso coi1trario ..t.. con N=4 se ejecutará 4 veces el lazo. se indique esto escribiendo. por no ver ificarse esa co_f!9.1 medi<1nte la_ejecución d e MOV [83: . ·.indicación V=l de existencia de overflow.7 L~ .. BX DEeex JNZOlOA Ira vez: AX rO +3 AX=3 ex r 4-1 (Z=O) eX=3 Salta a OlOA pues L:..·. A. En ese caso la UAL genera la.-·-·--. ex. .:=-i Esto puede verificarse paso a paso.. orde11a saltar 11 la ms- '.:¡~.~9..-ü~4~.. .~!!Ci. como •.ecunicia. .. . AX _escrH~ a_con~in:i~~j§!1-... ~C?SP...... . saltar a 0130 xxxx:OlOE DEeex .·-· -· · · · ··-· -·-· ---·· ····· · .rdenarán las instrucciones..>_ ci~--c~~Aa rectáng~o ~e_l diagr~ma lógic_C?Jf!g~~(l ~:~)se in~i~a _e l co_i:t~n. ordena ·co11ti11uar con la i11strncció11 que sigue a JO....__ -·· .

AX xxxx:0136 CD20 INT20 Se observa que en memc)ria.. Es equivalente a .9~. Es el único caso que un dato se halla en la zona gg instrucciones... luego del código de operación B8 inmediatamente le sigue la constante FFFF.Q~.!!n..!en. dos últimas ins trucciones de la secuencia que empieza en 0100.X..____ (8320 /21] ·---. registro (en ~st~.füLc!..se. · . que p~ra !?lÍo ..ns tan te a .O. y _ll}~g9 ... y.• . [B3101111 CX=0004 BX .' . L-ª. No es necesario ind.icar con un rectángulo la existencia de la instrucción JMP.aje de alto niv~L Csmforme al uso de JMP.. .P • xxxx:0130 B8FFFF MOV AX.~ '· . . .. . Mi:diante el comando lJ del Debug hallaremos el código de MOV AX. La instrucción JMP 0111 de salto Gump) cumplirá ~~te cometido. ~ .d~j_n_struc~i_ón J:MP _(jump)__ El programa de la figura 3.6 puede escribirse con menos instrucciones.un r~gistro están en modo de direccionamiento " inmediato".trucciones.' • ·t· · .?.g e d~~qs _§e encuel\tra formando parte de la instrucción.u. ~a~~? .m~gi~!. AX . FFFF '--------.6 quedarían corno indica la figura 3.fO] ..!!Ünación "in.c!e..!l.8 .j -~as instrucciones qu~. ...c:i~ 9. y MOV~!0 [_FFFF] ~~odo directo. FFFF en modo inmediato. [8300 /01] BX=0003 AX• . AX+ BX AX=0003 szvc V AX·-.. En general una instrucción JMP hhhh ordena saltar incondic:ie>nalmeryte (".cpqigo de má. . De esta manera. como en la figura 3.AX el.iT~c:cj()_fl.100 y en 130 terminan con las mismas dos ins.'GO. En el mismo el dato (constante) en lugar de estar en urn1 ?...7 se indica una línea en punteado que luego de la orden de pasar FFFF a AX sigue con la orden de p!lS?J" qe AX a I~~..AX 1 8 Figura 3.' '1.f.----~ AX::::FFFF V _ / 2-. ~a.P-l}_g_qe exp_lic:ar~~--ª ··· partir ciel .X). el número ·que-''.TO" en @ l~ngu.. En el diagrama lógico de la figura 3. ~ . q~b~ p-asar primer~ a. ord~nan pa.'.8 dado que las secuencias_que empiezan en. Obsérvese la diferencia entre MOV _AX.1_] -_ _AX_~ [8320/21]=FFFF [ 8_3_2 0 . lJ. FFFF xxxx:0133 A320B3 MOV [B320].7 No existe una instrucción como MOV [B320]. .Ó sea.A. que son también las dos últimas de la secuencia iniciada en 0130. U3-7 ex .~ dirE!cci<?n d~ m~moria_FFf..~i9 s() a la instrucción que está en la dirección hhhh.q~ma de una· instrucción en est(! : . ~.sa~ .- J!lOciQ.n'llT!ero FFFF.. luego de ejecutar la primer instrucción que está en 0130 se saltaría sin condición alguna a ejecutar las.AX AX==OOOO szvc AX. las secuencias de la figura 3.._to. una. sin p9sibilidad de seguir con la instrucción que sigue a JMP en memoria.!11. <:e donde proviene el nombre "inmediato" de este modo.9_12!-l .. mientras qu_e l~ segunda -~~~e!}°! sargar e~A.está en l. ' . La 1 pr_ime_ra orden~ cargar_en . FFFF (lueg? d~ -~aber escrito la secuencia en assembler) · u 013.~rp9ri.~s!~ ª-ffi.. fFFF que ordene pasar diredamente uña éo~tante_ a memoria . .

i~bel?). es.8 Figura 3.-~tiquetas s~ usan para indicar direcciones simbólicas .10 8 s?mp~és!a "por dos ins_trucciones: &j)¿)i. ..~-~~-~0-~. . se ex . puesto que el rombo que repr. eJ pebug.~~~~p~p:~(iJ~P.'"-fl'_•• ...~rJJ. . .· · · ·.~41... ····-~·. c_or.iéndos~ elegido la dirección 130 en forma arbitraria: Si bien.-. FFFF xxxx:0133 JMPOlp JMPBETA Figura 3. BX OTRA ADD AX. pues recién entonces s~f~__?.mo. . ·. BX xxxx:OlOC JO 0130 JO ALFA xxxx:OlOE DECCX DECCX xxxx:OlOF JNZOlOA JNZ OTRA xxxx:0111 MOV [B320]. ' .!9!1 B320.Y~~: -. a~~t:~~fri_. En lugar de ~stas aparec~n las etic¡~~t~.~· ..a las que apuntan las instrucciones de salto.---.. AX xxxx:OIOA ADDAX.9 repite la secuencia de la figura 3.ex CX=0003 ordena. AX ·-·.. p~-i~ ~~~~ibi_~ se<:ue·~~i~s e~ .--e. Así se vuelve a ar. secuencia.. Est~ .·--··.. pero que no son i?i~~úid~~-¡.-· • A0130 xxxx:0130 MOVAX. sino qu"e" se""salta . la secuencia continúa con otra instrn cción.~P~~~-. . sino que se continúa (por el no.que Z=O se hubiese puesto que Z=l ···. saltar incondicionalmente a la instruccióI} .Pi9. cada vez que se le resta uno a ex no se sálta. a otra instrucción. [B300) MOV BX.ltarÍa .s.=1_y_~e _p¡¡sa~a . BX=0003 .s e usara JZ en vez de JNZ. ésta se continúa -· una con i~st~{i·cció"n 'ql"lé ordena salta_r . ~dado que es Z=O)) con la instrucción siguiente (en AX 4. para mostrar que cuando no se cumple la condi ción en una instrucción de salto incondicional.o-tra": "beta.. del valor de . . . a ejecutar la secuencia que BX 4.-~·¡ª!~:-ciue dich·a·s ·. [83101111 CX=0004 Sf. no es necesario representar mediante un rectángulo esta instrucción. ..10). AX 1 Obsérvese (figura 3. . el.-· -...: EJERC......-.5..esenta una instrucción de salto condicional sólamente permite S~!a_r por uno sólo de sus vértices-Taferaies.: . . J?~t~_!nstr~cción ex..10) que el salto condicional no 1 [8320/21 ]=0012 se realiza sobre la misma secuencia. (B300] xxxx:0108 SUB AX. ..AX a la direc. .~ ·y En ese caso (diagrama lógico de la figura 3.~. .· c:0-rn0 ·.. incondidonáfrnénte.. 1 punteado en la figura 3. U3-8 A 100 xxxx:OlOO MOV ex. AX BETA MOV [B320].. AX SUB AX... ~º1: el f!elmg fue nec~sarioi_n?~c_ar _~ 1. -·.cuando sea ex = O. AX AX AX=OOOO Pero mientras tanto. ·"· · -. El lector puede preguntarse qué ocurrirí~ sre~-[~g~r d~ poner fa condición. __ ..:_. [8300 /01] erripieza.~?' ha?.Ji.FFFF ALFA MOV AX.•• ._u. ..lCIQ.. [8320 /21] . ºsiendó que su vértice inferior está ligado la continuación a de una secuencia.s9.fü.. [B310] MOV ex. como se dijo más arriba. Figura 3. . a la que sigue ~l fin de la secuencia. .-¿r-·ei t..• . En la presente etapa usaremos etiquetas ... -..··· "si o si".. que . . . De esta forma nos.---· · · "·-----· ----~--~· ··.ebug.~am1Ji!!i:fa.alfa'¡~ qüe"séín- aamiffdasporotr~~ t~aductores.n~ J?<IE~.mar un ciclo comó en la figura 3.ür ·q:~·rL..10 ) a la del salto AX=0003 coi}gi_c_i_qn. esta vez lo haremos por razones didácticas.11 esta secuencia se escribe aparte. como en · 1a figura 3. •· ..~j_e_~f1 S~º 3 si .t _~l e~vío . . [B310] xxxx:0104 tv10V BX._. ____ __ _ __ _ _. i!l.. en la figúra 3.eú(. que indica sumar AX con BX.1'-.5) V Es!o. AX xxxx:0114 INT20 INT20 .-···· .~t.-.al. que en este caso particular es de salto incondicional..9 La figura 3. ql1~ d~l:J~ s~t úrt]MP..~-·--·.~pendizamos del Debug_ y de _!~~ ~~~.···-.· · .8 pero sin las direcciones. --· · ~ ---. .----. a otra . ~ .

f.SJ . 1006 Pi!:..do inmedi_ato süma~ 2 al.• de un listaJo • •· .. p..p) tant~s instrucciones para sumar.. s~cuencia.. celda. .__ _ .!!..~!9!1-~S AD.d~Il s~~ar.~~-~.. restándolo de sí mismo xxxx:OlOA .I>~-~X.iena C!lrgar en AX el contenid_ o de d.i11directamente a través de un registro.J_ Figura_ ~:g etc .ADD AX. d.l~.<!t!-ª '. 2 .~!~_n.13 SI --·~ ~1 1000 ]Nt E~_ el corchete de cada instrucción ADD AX. i11s.16) se e':I!~. xxxx:0104 MOV BX. 2 • . rs.en 1~~.14 \ ~i_r~c~iot:iaJTI.e corchet~. una copia del valor.AX MOV SI.t o:·e s. - Figura 3. xx~x:Ol30 '· ·~ . .i11rn. C<:>_l)~e_c~!!?!iS .. 8300 y 830.. .Ua.eP.~l r~g:i~Q:.. -Es.? . 3.• ..Q.. ~~-~!.e?_sj~¡npr~.ia. 1000 Cargar en modo inmediato SI con el valor 1000 ADD AX...o a vaiiable R que -~st~ .a.e overflow se considera en otro eje~cicio posterior.esente. ~ ~ ._~ p_~rª_.c:l. como sumandos conforman la lista.á.~ !e~°.!..9~--!l'~rn. AX ADD SI..q~~l:?S~ión_ 1000 de memoria.!f!}_~~~-~.~S-~.· . cÚreéción)e µna <.Restar un9 ª·ex (con. presenta el valor del registro SI como dirección de una celda de memo. .contenido de S! (~~-=:=_lgQ~) ADD AX...emoria se~ª.2.:.o... como SI.J.eJ_g_q~. ... a ~X: ~i:i~ copia de.'. ?.~! !=Ol}t~!Mó.~!. y en posiciones consecutivas.~trq.... Mediante un lazo (figuras 3. ..el'.~L.13...escribJr (figura .1:..l_Ey_mP.. [1004) ADD SI. N 3 ••• Nn .O!?.de AX Instrucción de final · · ·. D~cho número aum. ADD AX.cirr~~~i~·~ ~~-i'w~ . DI. 1006. . U3-9 A 100 xxxx:OlOO MOV CX.°.. . 1004.~ ADD AX.·. las ~!re.._.1.Q. si.a--AX ~1·~~nte.14) que a partir de la .t~ !!l!~m-~J~gpp 9 !:!..r~_s__ °.c:> _ql}e.. . . [SI] .or::ia.. o ax. el 1004 5 y~~gr_ci.--'-"---·~·.tenga.Q_6_y)QOZ . !?~.{AX:::N...~...=:=1'J._(?I._ífioS.~_ ?LY~Yª . LJ!s...IC>r.. .tr~.\L. 1500 05 J.13 La . ....n . sin lazo d~_!_epetic:ión. coE. [10001 ~~~.15 y 3.. i.i:~o ___ Si Juego de la instrucción anterior Z=l (CX zero) saltar a 0130 . _ Poner acumulador AX en cero.~ esJª dir..~}.· · ····· en memoria .J:i.l..~._. ~~!-..: Una instrucción de este tipo corr~~ponde al modo de_._ tro qa_tos .lli._.2iiLS~l!t~.ra 3. [B310] _____ _!:.C:~. :ypJ!.r~. [hhhh) hay un número de valor fijo_ Q:hhh).i~nt~'_in~ir~c~~ po~ registr~)..X.Jl~ .\_t. u. --. .!.o._y..--~·--"'~ ~~~~ .. i..!E.~le..Y_ADO SJ..e ~?.~~~~~. Figura 3.~.....~.. [SI] s~~-~r a AX el contenido de l~s· dir_~:ci()p~s 10._~Dp .1... .t!l. Üene lli1a lista de números enteros de dos bytes ca~a -~_C>'.. ..:~~.~ec~~ncia solic:ita4a co~ lq~ modos .~-~~Pi~-~~-t±-9. la de la . Llevar a 8320 y B321 de memoria.ia . .e._~ que ~~.Q.J. • de datos •consecutivos ~.Q y.e~sada c~!l:l:~. .~'!C .. y ~o considerando el overflow..dc?.: .f La_i!'_St~uc¡:ión .. Ll~var..-!'.003 (AX=:=N2) ~.~~!}~_!~-~.los flags SZVC} - xxxx:OlOD rz:. ~~ la figy. Todos los. ..-~J..x l11~g9 .°.~~!~: En modo inmediato sumar 2 al contenido de SI (SI=1004l 1:....(A.A. N 2.AX. .lo CU¡'ll pued.:aire<. ·-· .¿~OÍOF JMP lOA Saitar incondiciorialmente a lOA .~!!1!!.el p.·. . BX Sllinar a °AX el valor de M que está ~n BX ·-x-~-Xx:oió'c-·-···otccx ·.!~E~°.lineal de. [SI] .e! _yalor inic.~'!. dado ] N3 q~e.1 .r. se.) MOV [2000].i. que es la dirección de una celda de memoria. ~ ..0_~A>!­ Llevar AX a cero . hasta que SI contenga Ja _d!rección del último ~_ato Nn cie_l_a li~ta Figura 3._ lp que .en cambiar.JC>r.X.c:cione~J'\DP..._p¿:g.13.. _f?_º!.truccioi. • 6: manejo ~· ·.nim.xxxx:0133 MOV [B320]. ADD AX.... habría.. 9~ . vector) ~ -. ~! valpr_que .•• ..~~~stá en_ l?~l.i al 1900.¡¡s: cii~e<i~_nesJOQ._l_~~ar_ a.AP:O t.·.. [SI].l§H ·$!-!rnªLª AX . t.dÓ_~¡it:niento dfi!finidos hasta ..·~ ··~··..___ (lista o• .~Ida. ~!1 QT\JkL.9~ ._ una <:!_~~ec~ióñ~s}O~oy 2Q01. '"-·•· De tener q_~e cod!ficar~e J_a_ . Una instrucción com o ADD AX..fig41'.. La cantidad n de_ nlimeros de la lista (long~~d). se da en la dirección 1500_.¿..~s..~t!11cc~o1!e. [1002) ~P..J. sy~esiva_m!!I\t~ _19~ . AX ..C.hJ1Ld~ .11 EJERCICIO -·. S!'!C):l. 9~ _ ia I)J._que.~_Y.e.. ' · .x:0108 SUB AX.e~ta en \1 00~ ] N2 dos de una instrucción a la siguiente.rn ..7l!!. [B300] . ...!!_~P. S~i:nar .g?r_$}con .i~~:. L~posibilidad d...!..e~t~ ~ritr.4~.mmP-rende.~J~!n~Jla_b~...~· . 1008 ] N5 1002.~~n_??E!!!.~q_!!..coc:ll{es 1000 y 100L(AX:::N1) ...Í~_oj.. Se supone (figura 3.!e.o.q!:!. .eq:jém ?~ría . -· .. .. ~ 1 . ..~t!?-~~~t. · . el pr. · Al30 . ·. que . " · · · .JP..2.\': .tf!l.2 En roo...~D:!.i~~~-!!E...~~ . _qµe_s?r._ ] N4 7 cac!_a ve~ irJ~~~I}Q2..!!11. AX INT20 ._ffirg~q9.Íli.M~ .ª _3..'!. - .t:?ncia . SUB AX.e_ndo que la dirección de)¡¡ primer de _ellas está 4 dada por el registr9 _SI.~. :J.. números de la lista deben ser s~mados~ y -el resultado total de la suma debe ser asignad.os.ªAX e~ c_o ntenido de..1 xxx..~'!.. .0..cig_1.oi:c. [1006] ~DJ:?.~LC~hlO..es.n.· .Y!l.-r-·• .

.U3-10 A 100 xxx~:OlOO MOV CL. [1500] Carga. y escritura en una lista .c:J. primero se ·-i-nicializan los regis tros." 2) el valor dé SI a fin de CL ~.. . ~ . ·Luego en el lazo es-~e'c~~sario SI ... A partir de la dirección 2000 se tiene una lista de caracteres codificados en ASCII (figura 3.· Es .--· .. pues AX tiene 16 bits y cada dato es de 8 bits). siendo 'l~.1 ~_arrer ·tuda ia lista.riqr de CX) l_a_l.16 EJJ. . . .filf!f. . Jv1j~n_t~as.. .)~s_t~.. . cada elemento de la lista es llevado en modo 2005 (G) indirecto por registro hacia AL (mitad inferior de AX.m entar seglin corresponda (en este caso ñ..· Encontrar ·ei núffiero·de veces que ~n la µsta se enc~_~tra la_ letra E (código 45). ~. . . 1000 SI apunta al comienzo de la lista de datos xxxx:Ol07 SUB AX.17). ixi-iportante n_o tar que CL=04 esto no se hace automáticamente.45..lista Sl-•2000 (4) DI --··-·-• 6000 . que al registro puntero SI (o cualquiera que sea) p rimero es necesario darle un valor inicial AX-AX+ conforme a la dirección donde comienza la lis- ta (mediante la i'nstrucción en mdo inri:iediato MOV SI.. Q~5'l1éi _ . . ' . CL .xx:o109 Ano -~x.. .:.. A continuación se compara el elemento cargado en AX Figura 3. AX Carga en _pl _ [1500] 2b00 y 2001 el resultado de la suma '------~-----'CL=. •' . .. Asirrúsmo. sino que debe srvc estar a cargo del programador. .. .Q_T\gi~d__de la lista que _e_stá . AX Pone AX en cero ..17 Figura 3.1~..AX [2000 /01]=N1 +N2+ . y dicho número guardarlo en la dirección 1600. xx.-~i r_e gistro SI con la dirección inicial de la. 8 Figura 3. ... .18 con el valor 45 (valor en hexa del código ASCII de la letra E). . V En el ejercicio 13 se amplía esta secuencia (Z=O) considerando la posibilidad de overflow. ~.. .. q1da vez que se 'encuentra una E..i.er usado como -fcjñtador de las veces-que se encontró una A 2004 (E) Luego. y el registro BL (mitad 2003 (O) 3 inferior de BX) se p one a cero.. . ..199 xxxx:Oll2 MOV [2000].19).OS. r_?IJ Su~'! :a ·A.500. ...~~-~A!:..:9104_ _MOV SI. F (Z=1) [2000 /01] .~«:!-~ 9_. Para tal fin se resta en la instrucción de C?:X:Pª_ración AX . . ' '· . SI +2 srvc Sl=1002 incre.15 Obsérvese en el diagrama o en la secuencia. indicar en una segunda lista que empieza en 6000. . El registro CL con la longitud de_l¡¡.. la dirección donde se encon~ªPª E_(!!itir~:?:. .e caracteres A_s cü. .s instrucciones de comparación y JZ (Jump if Z=l). que guarda las direcciones 2002 (E) donde se encontro una A..en CL (mitad infe._yoly~r . pues va a !. .. ·.~Y)§!lg~~cf éstá-~~--~ª dlr. el registro DI con la dlreccfón ~ 2001' ~ 600~ (A) inicial de la segunda lista.~cdon..enJSOO X2<_~~. ' . ' . S l=1000 Figura 3.edfañte ÁDb SI. xxxx:OlOB ADD SI.· xxxx:OllS INT 20 -fün ~_S_ I -- -~10_o_o_ ___. lobo).. . a fin de que la UAL genere valores de los flags SZVC.X un número de la lista apuntada_por SI .---·-·-. ... 2 Suma 2 a SI xxxx:OlOE DEC CL Decrementa CL x~~)( :Opo JNZ 109_. -~ ..IS'-2..~ff)-.. 1500 06 Como indica el diagrama lógico (figura 3. ' . ...

. 1 CL --. que el elemento cargado en AX es la letra E. 6000 ... j CL - ¡ CL . •.¡01=6000 [j_~ •.i°e . . --:_ 2000 '-·---~---~'81=2000 [.BL + 1 j BL=l -.e]j"a0r ·~~ -...· Si son igüiiles (Z=l) salfiú .ue_n~i_as escrita~ a cor:t~nu..¿xx:ói07 . 41 Compara el valor de AL con 41 -~~. J ¡.effieñtá:"sc·· · · · · . por)~ qu~ d~~erán realizarse las a_ccion~s indicadas en la frase anterior.: ~¡¡--------1 V Z=O (AL/~.-·-····· .cx:. l.=:::::::. .o~ to_·:._I V (Z=O) --- FI (Z=1) ¡ . xxxx:oiOc. U3. x.~L • BL_J BL=OOOO _!'L .:.--._ ____ ~Sí+171 F j (Z=1) 1 SI · - SZVC 151=1002 ¡ : l .!. .i~i?.SI · ' • \. 2 Suma 2 al puntero DI · -· · · ·xxxx.¡1 soo1 lc1..z'..-0_00 1 ! i Sl=.~=1L~-- ¡1soo1 · ·-· BL ! . ·130 a 1.da _por SI xxxx:OlOE CMP AL.n..A DD DI. para determinar con JNZ si no se terminó con la lista de datos.· y se escribe en la lista que ·comienza en 6000 la dirección donde se ence>"ntró "iina E. .ciiagrama lógico de _la fig:ir~ 3) 9 resultan_l~s. I_ -·-D. J~)~p ..L un.. 2000 SI apunta al comienzo de la lista de datos . · ~--2. Entonces se salta a la instrucción que incrementa a BL (contador). Luego se debe aumentar en dos al puntero DI (pues cada dirección ocupa 2 bytes) y s·a1tar (mediante JMP) á la sec"ueñcia principaL En ésta se incrementa el puntero SI a fin de apuntar al siguiente elemento de la lista. . 1_12 ..s _1_+_1~~c ¡51=1002 ¿ ~ . .>-(Z=O) -. L _______¡ szvc 01=6002 I>DI ·-.+_2_.0137 JMP 112 Saltar a la instrucción que está en.. 'CL Decrementa cL ._[_D_ t_ _ 6~º-º-º___. Si es Z=l implica que AX= 45. . 45 [ AL • 45 j i S"Z>/C ¡ szvc ----.l l Po_~_ si eLv_alor delflag Z ~s 1.º1y~_i:~_10_c: xxxx:Ol 17 MOV [1600].__ e Figura 3.. SlJifBi. [1500) icL=-0 6 ·. [1500] Carga en CL (mitad infer ior de CX) la longitud de la lista que está en 1500 xxxx:0104 MOV SI.BL Pone AL en cero· .·-.1 . BL J [1600]= ~s_1_ __~.Y. se pregunta en la instrucción de salto siguiente JZ. BL - ¡ BL + 1 J S"Z>/C BW.rvi'ov ·xc· lSI1 Lle~~ ~ f\..20 A 100 xxxx:OlOO MOV CL..SI Escribe el valor de SI en la lista apuntada por DI xxxx:Ol34 . -~i_ __ ____ ___¡ 1 -.· ~-( CXI~ ~D-1-. sec.enA)_(_n_()_~tá la_l~tra E. J szvc' Dl=6002 . 1CL=OS szvc v' Figura3.· · · ·. ·~ l .=os j CL .. .~~x:Ol 15 _J~_?:__}º-~ M[enfx:a~~z: ~e-~_o. (SI) __ AL= j 1 AL . ¡16001= °-~~ . [DIJ SI i[6000/01]=2002 ! i [DI] •·. [1600] . y se decrementa CL. A 130 xxxx:Ól30 INC BL Incrementa BL xxxx:Ol32 MOV [DI].-... MOV DC6·oocr· DI apunta al coffiien zo de la otra lista ·· xxxx:OlbA."cara-~ter de la lista_ apunta. esto es. szvc i • _.- • ¡- · J[6000/01l=-2002 •' . median te la instrucción MOV [DI].• [ ---~:-==-¡ CL ~---·--J CL=OS... ic .'. Si° . BL Carga en 1600 el valor del contador -X-i<xx-Ofiíf-tNi' 20 · -· Fin . SI...-._e~~implica ql.-.1 [ sL •-.. ·-··· ·. ' : i S"Z>/C .-· · · · xxxx:Oll2 INC SI xxxx:OI13""''DEC.Df + ~ 2......2000 1 DI ..19 ~' (Z=o~_ ._ V -=-----'---.. .-.. .

·-".o r apuntado por SI .·..detálle el uso del flag e .!. . ·i. AL Carga en 3000 el número mayor .... podda haber sidÓ-cualquier otra cercana). Incrementa BL · -~~~.. xxxx:OlOA SUB BL.:~I Incrementa SI preparándose para apuntar al próximo elemento xxxx:0113 DEC CL Decrémenta CL · · · · . ..~~~~~. escdl:ifr. BL . INC SI Incrementa SI xxxx:ÓilÁ DEC CL Decrementa CL xxxx:Oll C JNZ . que empieza en la dirección 2000.-----··(!~T _ñí.. E!}.°-~-~~ ~º-...nliffiero. ··· --. -------.~_!jj!~·.. !ist~. 2000 SI apunta al comienzo de Ja lista de datos . -.~r_ u!: elemento ?e_ tma.~. .l_g_ IN<. . caso contrario contiríuár coii..):::n. C~_rga en CL (mitad inferior de CX) la longitud de la lista que está en 1500.:_i}ó~~o.!. (1:500}. Fin .-.~o~í~~ffr_ec~-por regis. . xxx~9!97 MOVAt. lQ~l. en el rombo correspondiente a la ....Síeñaéi conod<liisu.ñiimei-o may. condición de sªIJº P..109 ___M_QV S::. . y éUando.en . pero er el momento de.0:~.'~ ü:ist~~c~~~n COI!:'°. Inéiementa ei punteró SI para tomar el segundo elemento de la lista . ._h<J. .- ~~)(:_0_!9<.~~Y. cambiando JZ por JNZ.. .~. -.MQ.- xxxx:OlOE _Jb.· ---.···· __ ·x:xxx:ó1¡~ Jt~rz iQ~-=­ __ -------Mi"enfrasZ-se·ao. ~XXJ<:Ü. .t:r<:i_~~-ª_P_1:1?t_~~°.. La instrucción] A 112 que sigue a CMP AL..: SL Luego corregimos como sigue la instrucción JNZ i"oo-{.. .. -....~~es·~~--~~:~Ie-s-igüal_·arápünt. conforme a las figura 3.20 y a la secuencia siguiente: .:oii4 .19 ep_)a di1:'. nos encontramos con un problema nuevo: se debe saltar hacia _l~ ~s~ruq:jón INC SI. ..(S1je-nliicomp-aradóri anterior..~~s_:~. ··-·--·...· -~-xxx:OllA iN·T-io..que.:~~~. 1 ~ ..a_l:!rí<l.J. suponiendo que es el mayor ~:9109_jN~_ ~i ~ ·---. . ·-.be. 41 Compara el valor de AL con 41 xxxx:OllO JNZ 119 Si no son iguales (Z=O) saltar ·á Í19 -xxxx:0112 . . · -~.s ecuencias anteriores pueden escribirse en una sola.~éryes~ que u!.··~--.Y A_L. ~~~~~b~r. ..pües·y·a··5e· fomó el primer n úmero de la lista ..----.i~ xxxx:OlOE CMP AL.-· . . . L~~ dos . (SI). que haya ..n~r-~~--~-~-1ª · ~st~ y gµ~_rciar. (1500] Carga en CL Ja longitud de la lista que está en 1500 ~~xx:0104MOV SI. AlOO xxxx~ÓlOOMOV CL.condición. l?~l Carg~~ ·AL ~¡ ~uévó.·... car11bio MOV [DIJ.. AUQ X.. " ' ..L> [SI] Lleva a AL un caracter de la lista apuntada por SI 1 . qu~ e_scr!~ir C:::=O. .··-··.._~str~~~i~~~Z)_l?.:1. SI Escribe el valor de SI en la lista apuntada por DI _ -xxxx:0116 ADD DI. .dfrecdóñí 10): . dt: ~s.L. · . .ll~~I:-:-~~-º.. ~i!J?~_gif~ª~:~5-tf e~)ª-~·~~~~iór. siempre .Y.~::·~~-5?rnº nos~ cumplé la·.. ·--· ··.·. Y cargarlo _en AL..--·· · ·-·-·· -·· -··· · · ·· · ·-····· . la . sea .SI)_ ordeI1a I~.·~~_Il c?. 10C Mientras Z sea O. .i nstrucción que sigue a JA 1n_si e!__~Ú~~!~il.jNZ~.t eúnfriam()S 4e. "hacia .:1-iento . Pone AL en cero xxxx:OlOC Mov'. Jv!:O..·.. . de la lis ta·a -AL. A 109 ~~~~Q. ········· .)(XX: 0110 JNZ 119 Este procedimiento . !()da !a secuencia. ._ • . Para-sófüdoña·r esto primero escribimos JNZ 100 (elegimos 100 por ser una dirección próxima.~P~~~~I~r~~~~p_uesto:~~y~r-. 112 __ _ Saltar a 112 si el nro que está en AL está por arriba del apuntado por SI xxxx:QlJ_Q__.i. INC BL .· · ·.. 6000 Di apunta al comienzo de la otra iista ...tr~:cori-de~p!a~. entonces conoceremos que 119 ~~_l!i_ c:ifr_ección.. .la Unidad 4 (p~g 88~ Sf! t:_~!~-.~QQQ_. . 2000 SI apunta al comienzo de la lista de datos xxxx:Ol07 MOV DI..P. (. Al. .. la secuencia ¿!g~~-P-~!.. ordena saltar a la instrucción que está en 112 si al hacer la resta o si AL . saltar ..el número ·na tural que está en AL está por arriba (es mayorfdeCniiméro natural apuntado por SI..ado_~~-1. debe ' hacerse .s~ r~~l!'.: ___<. s~n_cl~--qti~-.__núi.P?! ~. .··-· ··· ·· .. Se tiene una lista de números naturales de un byte cada uno.. U3-12 \Yl:>. [Sij Üeva el primer.~. 2 Suma 2 al puntero DI --xxxx:0119 . -evitantando la instrucdón JMP.. xxxx:OlOA DEC Decrementa-CL..-n"c) coñocemós·rá-dfr-écéion 1T9. B_L Carga en 1600 el valor del contador xxxx:Ol22 INT 20 Fin ~ara l_é!.ªn. .·resÜltaC=o. MÓV [DI]. SI ordena escribir un elemento de una lista cuyo valor está por SI. v·olver a lOC xxxx:o117 MOV [3000]. • EJERCICIO 8: uso de la instrucción JA <Jump if above = saltar si está por arriba) para números natu ral~~~ y -.~~AL.!'::!~-$~~ O.. volver a lOC ~xxx:OllE MOV [16001. .s_~p~_ ~nc~~~:. xxxx:Ol04 MOV SI..~. adelante" .···-CL.· · ··· .

....do$. Decrementa CL -· · -._l~.Eir:n~r.!.t~--C._ebajQJ~~ m~_i:1.?!~11br~ _q1:1~Jrc:.1rn élPuntaqo por SI + 1 ·. AX Carga en 3000 y .eTpri.-[SC-t-.--------.ótbS9._SJ!. ñ-ó.Y-~~<!r-l~Jii~Jrit2..' .de los flags (unida·d 4.?~J~ _9_rd_e11a_. ·una-ffiisrrúi i.~~J. ·· ._~_n..~~-~_'..(~-:}_:-'fambién se-púeC:i~é-esci-ib_fr Clv!P A). EJE~CICIO 10: us_~~~--~as i[1S lf\l ~~it?n. [SI+ 2] Carg"ien. ordena saltar a la instrucción que está en 113 si al hacer la r~~t~ bX.!!P. us_o _de _la i~s_t~~~}?_~ J._or)_c:!~I núm~_ro_ naf:l.él mayor de los la lista.OiT6 _b_E"t. y JG para enteros. resilltadO-positivo) · y Z=O. .MientrasZsea O.l!__(j_~~p__i_~ 1'_~1.<:i~~-~~i_!>i_r _la secu(!nci_a anterior de la manera siguiente."!.ª cl:i_s~-~!:. . nat\lrales.!.bEC ..~E~~!:~p_~1_13_~_:_ s~ando s~... caso.. _:.. Firi.us9911. ----·---------- ·~--····· · xxxx:OlOE JA 113 Saltar a 113 s i el nro que está en AL está por arriba del apuntado por SI xxxx:OÚO .<.ADtna..if3--.... Dec~-~~e0. .O _ .:Z_p_o!J1 . .iso~c.<:.. ' · ·· · .l~a.ido.:.f!!_Pª~~-3.a~~al~~.:.9.3 001 eI nu me-ro mayor xxxx:OTflfiNT 2ó____ __ _ ...::J~I±. (Jum:p if Greate~-= Saltar si _es mayor~ l'ª~ª ~~~-~-~~~~~~ero~- Se tiene una lista de números enteros de dos bytes cada µno. pues ya se tomó el primer-número de la listá --.~--~_i YI1 P.::· p-¿. con la diferencia que'se trata de l)úmeros enteros que ocupan dos bytes. .meros d.S.Q¡_QQ__ J\1QY_ ~~tl~SQ_QJ C~rg~ ~f!fL_!a _l~ngi~u(de la lista que está en 1500 xx~~=9_Hl4 _ .~te. -~ . Fl~ -· ~J~~CI<.-es tó es.-- xxxx:ÓlOB° -CMP-ÁX~ [SI + 2] Compara el nro supuesto mayor ef. · · · . por JB l'. A 100 ~ .e_flie_iifa_r10_!::~ .1yor _que _c:¡tro_~egi:r.api:i-~tad~· po-~ SI. donde las instrucciones INC SI y CMP AL.¡: ()fr~.. _[SIJ 7: l. ~.hr....Cel nuevo ñtimero mayot apuntad_Ó_por SI + 2 . --· .e y g:l. - Esta forma de direccionar el operando se conoce como "Based ~~~1:~~sing Mode" A 100 ~?95?. ---._ l~~-ej~~c~~-i(lS_..iá Ü~tá a AL. pág...-. JA 11~.!_~_q!!.-- xxXX:on~rTN'c-sT ___ --- Incrementa SI preparándose para apuntar aiprÓximo ele~ento xxxx:0114 DEC CL Decrementa CL · xxxx:Ol i6 JNZ lOB .n . Este ejercicio es similar al anterior.instrucción que Sigue a)LT13.~ ~-~m:r~s ent.-·-·--··· ·· .?__y ?.. pues y_a_se:tórrió el primer número de la lista ~-~~~~füoa crVlrA.~~~?. 03-13 ~~E'.!_!:ucci9~)B__~~~ _g_u_t:: ?~-~!~~~. 2000 SI ap unta al comienzo de la lista de datos .greathe?.~~!!~_n_~-~~lt~a.---·····-· --. ·en Ün. volver a lOB x. [SI + 1] Carga en AL el nuevo niímero mayor apuntad.i.)J~_er~s. otio nro apüntado por SI+ 2 .~r. y en el rombo correspondiente a JG habría que escribir S=V z.''!!!~e!_o_s Centeros o naturales) Ja i11st~11c.!~_emplazar JG 11.do) .<:. contrario conlin_uar con la instrµcción que sigue a JB 113_... . CL .· xxxx:OlOE JG 113 Saii:ar a lÚsi el nro g_~-e est{e~-AL ~s mayor q~e el . y_J~ _ (j_u~p _i.l..diagráma lógico.º· · · ~ ·. [SI] ~~-~<:ln r~emplazado por la insfruccfón ·c:MP AL.~~-~~r. Váfe decir.. [SI+2].·· ·· ·· ~xxx :o1 ü3 -JN"z 10B Mienfraii z·se-a: O.d_o pcir..or c!. . resulta s =v-(s : o yV=ffó s:::1 yv::::1. le_s.() en ft.. y se compa~a ~1-~-º~~a.1. · -· ··...~~~-~~~~~~do JG__p~r..me·r-n~méro..: __ ci~~~:..) que el ·n \Jm.n.. -····· · ····-. y _eI\ el ej~rcic~() 9 .~> p¡¡~a e.f'. volver a lOB xxxx:0118 MüV"r:foooJ.MQYSI:-! r1sooJ Carga en CL la longitud de la lista que está en_1500 xxxx:0104 MOV SI. · · .r~_.~~~~i.cc-. . Se su p one que la instrucción an terior a la de salto es una comparación (resta del primero meno·s-er seguºti.E'.--. o sea si el número entero que está en Ax es mayor (. se d~b.J.AL.~-~ -~~)ist~_cl.'. y ~sár_-~_x _e~ñ ~ve-~··4~·. . síendo qüe -su-longífoa-estf éri fa -dfré-cdón 15bo: E"ncoritrar .J1:3 La in~...l AL cori..:9J.11par_~__el nro supuest~ mayor .~~Úl!"eros n..ºtro_I.~ C=:!-..c:l.E. 29-º--q SI apunta al comienzo de la lista de datos xxxx_:0107 MOV ~dS_Il Llev~..E.mtá~~-P~E}.· -··.e ro-enteroapuñhid·a por·-.A.Sal~élr élJ.1_~-~n ~~---~~-~~c~~~n 3~?. -eri.º .r\·s trücdón-se frici-ementa ·sr.-[SI] Lleva el primer número de la lista a AL.~ _ usar JA pa~a. xx~x~füTo--MOV-Ax. -·· ··-.I.:~..c:fe.1r BSfo-es.fl~~r~-~~mpariidón~anterior.r~s M9_c:lifi_~a~ -~~~ secueJ:lci~~.·-. r~~~_lt.1_i!:_lstrucción__ que _está en 113 si a_l hac~rla__ !~Sta AL__ --:J~I] ~~ --~ c:ompar_ac_ión -~11teri_()r.· sí+2i:¿..-r.t~t:r.o por SI+ i .··.c.trario :se debe co~ti"ñu"ú: eón h.-.~[Sr + 11 Cor.inclón . La instrucción JG 113 que sigue a CMP AX. suponiendo que ~sel mayor xxxx:Ol09 DEC CL Decrementa CL...__sa~:_:__!!_~. 88) .r. AL Carga en 3000 el número m ayor xxxx~Ül f BTr\Jt_fo_______ --.C.~.IQ_ 9_'. En el ej~si5i~ § ~~E..· · - Es_ imp_o_~~~!.MóV..· · .-xx. P-~r_-un ladó _e l_ Pl1!1~i:..c:>~l__par~--~~~~~-1~~'... Ii-icrementa s rp-r eparándose para apunta r al próximo elemento -xxxx'. . -· .. -·.-·· ---.f.:OÜA MOV [3000]. ~~-!._3. .. JQStc_~.!1-. o _sea si_el _I1_~rnero natural que está en AL está p.XXxx:o107 MOV"AL..l:-~.~~~~-~~)~g_ar de~J~~ p~op!~~-~~ . ·suponiendo que es el rn<lYºr xxxx:Ol09 . pa_r_a _e!1-c9ntr~~~l--~~!l'?.M QY. '&. que empieza en la dirección 2000.- xxxx:b.'!!1.MP J\h._i~~1__~e sa!.Q. -~~-r:_?i:ii~~-~E~.1:.J!_aJ ªPtlf.

la_co~d_i~~ón_ $.l. U3-14 1'~..:..~~ril:._tµl~~ If.a-~n-restiltado en la lista apuntada por DI xxxi off6.J11strti~~-ió. Increin~nta o( · ·· · · ._!P .e c_ol}ti11~a.?!TIP.-·· ~ ---- Suma 30 a AL xxxx:Ol 14--MOV. Esto es. volver a lOA ""xxxx:óilc INT io Fin ( La instr~!?!=.. F).ccior\'iObr.tv.KonAL.i sta c:l!7 ._rjQ__g~_q~b."3o -·-. s~__tiene una l. -.en el ro~b_C? _q~e c:_or._A..i:espoi:.inaci0ries· bmariás de un byte que corr~sponde cada una a dígitos h~?5.ia"rél..>!!J~.···· ·. debajo (es menor) o es igual al número 9..~!?.~~ ~ ]L ~JPRCICIO 11: uso de JBE (Jump if below or equal) Se_ti~D.~t.A i. 9 Co~~~~~~9~t~-en_~L . ordena saltar a la i11strucción que está en 112 si al hacer la resta . 2001 SI apunta al comienzo de ia lista de datos xxxx:óior·-M:ov Di. \ EJERCICIO 12: Este ejerddo-es contrario al anterior.-1Ñc···i n ._arga en AL un dato de la lista apuntada por_?J xxxx~ó10c··c:M::r..d~ co11ll?. ····. ·· ·· Dato = 06"001010 = A +7 =+ 111 00010001 +30 = 00110000 ·~' .dirección 2000.el número n atural que está en AL está: por. caso contrario continuar con la instrucción que sigue a JBE 112. )iiE.contra 9 .t~~. De lo a~terior. csii <. 01000001=41 en ASCII .á~e_sifü~J~$JenJ:>iri~río) cofrespcind1~0tes~d. que seguiría a CMP AX. 3001 DI_?punta al comienzo de la li~ta de resultados _ -·xxxx:o10A I\. ordena saltar a la instrucción que está en 113 si al hacer la r~~ta. ._ta _. - .n. [SI+2].X_::J~!±~L~r:i.r:i la .· - xxxx~O"ü7 ·i"Ñc -·s1 incrementa SI · · xxxx:Ol18 DEC CL Decrementa CL xxxx:OllA JNZ ·ioÁ Mientras z sea o..····- · · xxxx:Oi"ú.~~~. .J.[DI(AL Gi'.~~. siendo que su longitud a es~á _e.aci_~c~_a!~s aislados (O.. o sea si el número entero que está en AX es menor ("less") que el número entero apuntado por Sl+2.· · -··· · ·· · · ·· ·· ····. o sea si . />: 1' . Se la quiere convertir en otra lista que empiece en 3001 con Jos n~m~rgs h.Tcho~-~~racteres -en.. X-XXX:oüó-· Ario ·..1ov At. x"X"x-~-~óibE . AL.y_?:=O... [200~] Carga en CL la longitud de la lista xxxx:0104 MOV SI.<.B_E}~2 gue sigue a CMP AL..z::tJL. caso contr:_é!. J\L . la cual empieza en la dire. Los caracteres ASCII obtenidos guardarlos en otra lista que comienza en 3001 Binario Hexa ASCII 2001 00000000 (00) 3001 00110000 (30) 2002 00000100 (04) 3002 00110100 (34) 2003 00001001 (09) ==> 3003 00111001 (39) 2004 00001010 (OA) 3004 01000001 (41) 2005 00001101 (OD) 3005 01000100 (44) 2006 00001111 (OF) 3006 01000110 (46) $j_~ato < 9 es en ASC_ II igual a dicho dato + 30 Si dato > 9 es en ASCII igual a dicho dato+ 7 + 30 rüreJemp10:·· ·. re_sulta C=l 6 Z=l..a.:Ascn: -_. O_se~_3üe·~~~n a~{~~I:i:~ :·1og!co:·enel rombO ·correspondiente a-JBE habría que· escribir C=l 6 Z=l. iÚ .o y"V. hexadecimal su correspondiente carácter ASCII según se ejemplifica a contir\uación. y cuya longitud está en 2000.9__en la comparación ant~rior.-·estc>"es.r .!!.. 7 stiiñi7aAL.~!.\-!~9. 2.t~_r:e~_f>. resultado negativo) y Z=O. A 100 _ ::<~::<~:0100 MOV CL.<s.~1! que _s\g1:1e a JG 113.iC:!!. 1. Si es menor o igual que 9 salta a 112 .~__. 9....r~~1:1lt~ S_"#-V_(S=::l y V=O ó 5_ ..S_qJ q-µe ewpieza en 2001. resulta que en un diagrama lógicp_ha bría que escribir .~c.l~-C<.. Convertir cada dígito.

. ... ~-~J:lg!~~ _est~_t:::nJa dire-cCión 26ó(i. c:i~JZ. xxxx:o109 . Si elresultado de esta restq es cero (Z=1) impli- ca_que los números son iguales. . . _xxxx:OllA JNZ lOA .-A:i. FF J~~icación de u_n_(. 20001 SI apunta al comienzo de la lista de ·d-atos xxxx~owi.que-c1tréi.lcl<?_ q~t::5U.J9_si al hci. xxxx:OllA INT 20 Fin ~-ª instrucción JPE 111 que __s. Decrementa CL < i . que se halla restando 37. .e salto puedan escribir~~ d_ed_o_s_q !l!á~ I11?Xl~n~s. volver a iÜ? .r .-la_' tnstrucciÓn j~((Jí..··· · --. . · · ~~. '• ••._-r. •t • '•-e xxxx:OlOO MOV CL._Jg~ti~I~ª'~i11-~-~:~r.:~ci?_n d_~ sa. xxxx:OllO JBE 114 Si es menor o igual salta a 114 (Sí AL< 9 es un símbolo del O al 9) xxxx:0112 SUB AL.. o sea paridad par). U3-15 A 100 xxxx:OlOO MOV CL.~E~: de ~-C:~~-~~~=~~~-f~~-~~ -~~ d!-t'~cción 3000 AlOO ..?-~~1? . p~rmite que el programador se desentienda de los flags. 'siendo que antes ya se restaron 30) 1 -~· xxxx:0114 MOV [DI]. .alto éondi_ci()nar U·JZ-~i~!llplific~~~' _si~e __de f!l()delo .· -···-----~··· --.struccione~ d. .~i-~~_q':!~ es. - (.u57_ción ADD AL. [Sij Suma contra AL para que pueda cambiar el indicador de paridad Pt ·). 2001 . ..~p if Z=l) . · · ·· ...Str. ~ · · · ·. xxxx:OlOF MOV DL. para q\de_de acuerdo con est. L~-~ue b-.~J~F ::: i(. v·olver a lOA xxxx:OllC INT 20 Fin EJ~RCICIO 13: uso de la instrucción JPE (Jump if parity is even =Saltar si la paridad es par) Se tiene una lista de caracteres ASCII _é1: p_a~t!:_~-~-1-~ -~-ir. ~!':f.. Ur. [SI].!~5-~r.·" xxxx:0114 JNZ 109 Mienfrás Z='O.lá-HS'rrtapuntada por DI -~ \ l~ ·~1i -x-x:xx·:ni16 · 1Nc Df' Incrementa DI ._ADD _AL. Hace cero el registro AL \.. ~~sl1lta _PE (paridad even.. ~~~~i5-~':1 m?~~' ¡:m_ed~ us_arse J~E (Jumpif not egua!) en vez de JNZ (Jump if Z=O)..Pªf. ~ ".se_'eje~l1t~yn.~1:1to cc:n_paridad errada ~~u~(· ·:..DEC CL..·M:av--6( 3001 DI apunta al comienzo de la lista de resultados ·xxxx:OlOA MOVAL..!~a instru_ c.. · · · xxxx:OlOD JPE 111 Si paridad :n AL~¿ p~r. ..de.x:x-:0117 · 1Nc si ini::rementa SI xxxx:Ol 18. Sí'laparldad de Ünos . x-x. ~'-> .. 7 Resta 7 a AL (Si AL > 9 es un símbolo de A a F. DL q~~rda indic_a ción de paridad .. Mientras Z sea o. P~~-ejemplo.. 1 xx:xx:blOB ADD AL.f.Pr. cada uno de los caracteres es p~r.lista de datos :· -. . [2000] Carga en CL la longitud de la lista xxxx:0104 MOV SI. . Guarda el resultado en.. ·· · ' "~.!lefr'.. ..~~c~~!2 ?.struc~í~n _d~_s.:_ ~-~.!1:~~~d.qQ_~!.. debie~do existir siemp.1~~--P.. dado que la instrucción de comparación anterio_r resta dos números.· ' Sistematización: INSTRUCCIONES DE SALTO CONDICIONAL · t::. · . _.·sulfA:L. Si bien Ct1ªI1cfº.~á __~n _1'.<:9. salta~ a 11_1. xxxx:0107 MOV DL.U~ ~~. el_v~lor de uno o varios flags combinados (realizando en este último caso operaciones lógicas entre los mismos). .· •• • • "' -· · · · tI{-'' 1'· ·.cer lª Sl..~ccí~[l cie_s~l!<J..a i~tr.det:rffiina.ª cof!lpren_d er c~~l !!_~~!_O. 00 .n (r~sta) anterio. Registro SI apunta al comienzo de l?.. in...( xxxx:Ol 12 DEC CL Decrementa CL .imer.. 30 Resta 30 a AL xxxx:OlOE CMP AL. " .~!º ~on~í_cíon~l sól_o ~íf~~r. Carga 00 en DL suponiendo que_todq ~~tá P..< ·· xxxx:Olll INC SI Inc::rementa SI · . - .~~ el ejercicio6_es equivalente a JE (Jump if equal). ·x:xx:0116 MOV [3000]. ordena s_alta! ~l__a_jn_s?"u. ~s-~d~.l~~ida para ~altar.·---.i..igue _?. • . caso contrario (paridad impar) continuar con la instrucción que sigue a JPE 111.lE)~_ AL... [SI} Carga en AL un dato de la lista apuntada por SI xxxx:OlOC SUB AL.. L?.. . .e una instrucción de compara"c:íó.i__la de !)aj to.ción d_~ salto. ·· . [SI] debe insertarse a los fines de sumar AL= O más el número apuntado por SI...9~~--~~}~_ c~~-~i_ci_ón _~~~ab.ien -· . Usar JE en yg~. .I'l<ÍI~~I1'-:. escri}Jir oo en !a _direc_~i~n 3óoo~ si ~P~-~~~~ct~~ pr~~=!.¡._ -.. [SI] eI1 la suma anterior.e número p~eda detectarse la· paridad del mismo.a_i_i:. AL . en assembler la condición r~ede establecerse er1· foncíón· ~:~ sr un·nilrr-tera · es--!i1~x~y. Esto hace· que-CiertasTii. [2000] Carga en CL la longitud_d_~j~ J~§ta · xxxx:0103 MOV SI. 9 Compara el contenido de AL con 9 .

.~ª. }'.se pueden resumir así: A< B si S:t:._V=l y Z=O.iie!\Zo cie la_li~t~ ~~_da~?S __ _SUB xxxx:0107_ AX. 2 Incrementa SI en 2. ~i aLs~rp. la)ongitud de la lista x~-~-~O. . ~1:1.~.~. _Il'... .~i re_ c ordar.Le. y el resultado guardarlo en 15_0~ . ~AE . da_d~.J~QOOL Carga_e_n.. ·dado ·que además no debe haber overflow (V=O).r (U?idad 4.~.V y Z=O.c:J~. J°t'._ágina_. · xxxx:Ol 12 DEC CL Decrementa CL xxxx:Ol14 JNZ 109 Mientras Z sea O. ____. debe ser: S=l.c.-gúiú-dár-eñ.Q1QP_l\JOY C~. JZ.n.~.i:o__!l.. escribir 00 en dicha direq::ión.._r_~l~~-: .i?l~s d~E]_~n~j_aq~~!:~. AL Guarda 00 de AL en 1502 xxxx:OllF INT 20 Fin A 130 xxxx:0130 MOV · [1500]. .imp~r.' np utili~a~-~1!-.--··· . escribir Ff_en_la dirección 1502. SI Guarda en 1600 la dirección apuntada por SI \ xxxx:013E INT 20 Fin ~ ( ET\... .-~~~~~=~~:ci~I_l-~:.~uede -~esu~!se ~sí en función de lo_s flags: ~ ~ B si S-:tN ó Z= 1.E~~-<. las instrucciones de salto condicional para .~~--~l1:1~.cit?n.9sJ1~g~_!lQ2.. 11~1!1e!_ºs__~1:1. ..W_4_ _~_ov ~~~}00_!__ SI ~l!_nta al_~orr.~~~-:~_t_e. .l~ciiant~--- ~. AL Guarda FF de AL en 1502 xxxx:013A MOV [1600]...no y_a_se 9.· .J~~7~~~~~~i~~~fi~f~~~~~~~~~~~~:=~ha~longitud.. . enteros..100 ~g:. Esto. Pone AX en cero Guarda una copia de AX en DX xxxx:OlOB ADD AX. c_~d.~.!!Ü~!g~S. ill..:jcme~.cciones J_~/JE y JN~[JNE se usan tanto para números naturales como para enteros. qll:~ en 2000 ~s_t.i:!.~p~tad0.9.. l~gi~~s g~~ . JNZ.. \ ~?.E~c_!:!_!:>_!_r en_i:s1~~!?._t_!. ~i):iay over~l~w.~~~'-!..t:~l~ej~rcic!Q. Resum. AX.t_~_r?~. JGE.. EJERCICIO 14 s~.~~-º.. FF Carga FF en AL xxxx:0137 MOV [1502].. U3-16 ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ $ ( L~~. _.si1!11J?~i.. AX Guarda en 1500 y 1501 la suma total xxxx:Oll9 MOV AL.Jj?J. . JB_E. que és_tos están relacionados ::r. 1?_. ~o) g. Tamjiié~ par_a enteros se pueden_~jar_!~~-condi_~!~~es de sal_to JLE (Jump if less or equal) 3.s~ry§. números .~µ.r en ~-?ü_Q_x)601)a.. tales. Por otra parte si "e l resultado es positivo (S=O).E!S:~i_ta. JNO " l Par'!. .._q_~J:l-9J.rsoo·y1501-rasuma. Asimismo.C!. y si_no lo hay.. pero si hay overflow CV:==l) implica que en realidad_es 5=1.~g~a_f!.CI... .J.at.:!~.!:. . [SIJ Su~a contra AX un número d~ la llsta apuntado por SI xxxx:OlOD JO 130 Si overflow (V=l) saltar a 130 xxxx:OlOF ADD SI..>_n_~lcl?_na~: ~( Para enteros: JL.t. ªJ:!)P!iS das_es_d~ nún\er~s..suficiente. siendo. JLE. ~~~ccióE d~ dicho J:lúmero que prociujo oyerflow.B el resultado es negativo (S=l) y no cero (Z=O) implicaría que A < B. puesto que _el · nún:i~J9_c::~ro. JO..ar <l:lgebraicamente dichos números..9gn~~-e__<:..u. pues cada dato ocupa 2 bytes. 00 Carga 00 en AL xxxx:OllC MOV [1502].. I}ece~ariamE!nte conocer. ~~!1:git_l1?· S_l!:m..l!!!..· ·..l~do~ . . en ErinciEio si al restar A .edia~_~e.~~lto 1 1 JL (Jurnp if Less) también es equivalente a Jump if Not Greater than or Equal (JNGE) 1 2 JG (Jurnp if Greater) también es eq~ivalente a Jump if Not Léss than or Equál (JNLE) 3 / JLE también es equivalente a Jump if Not Greater (JNG) 4 JGE también es equivalente a Jump if Not Less (JNL) 5 JB es equivalente a Jump if Not Above or Equal (JNAE) y también a Jurnp if Carry (JC) 6 JAE (Jump if above or Equal) es equivalen te a Jurnp if Not Below (JNB) y también a Jump if Not Carry (JNC) .._g~~~~í:l. S=O.f&'.e ernrieza en 2001. ~t\.!Z 5 6 \ \ CQ. pues significaría que el signo es incorrecto. ---··-·--··..?. volver a 109 xxxx:Ol 16 MOV [1500].a e11.l!?.. tie~~ -~-ª.~a. Pero er.~~~~}9. o sea por un lado para que A < B. por lo que < ta~bié~ ·5·é~TA (si. DX Guarda la suma parcial en 1501 y 1502 xxxx:Ol34 MOV AL.a )Q~gj-~~!! .t~~te_t~i:i_~r pr_~~~t~ _l~~--~-~~~~~t-~ i~~t~~c_i_o~es de_~alt() c<.disQ~Jl.. JZ. ..-· . ti~ne..ª1q uierª..co- ~o JL.:.QDJ. Estc:1 <i~..parcjal anterior_ cor!_~c:. JG.f!!l-gs int~i:-yin~-~~tes..-6.:. xxxx:Ol09 MOV DX.· · · · · ·· ·..!~QQJ.b. V=O y Z=O. AX -- .~J¿~ le.?~~pi?. y JG.. ._. s~_p_pgrí_c~.a_:~.B8) el~o n~ es. e~ _::_~C::.P..él . y JGE (Jump if greater or _equa~( L~ _co_ndición_ J~E.· Las dos situaciones.(~_~yte_~.r.. P..ª~~ número se produce -ov~r~~~. igual r~PX:E!S!i!~ta..Y 150}... ·__ Según 1se ha visto l en ejercicios anteriores. es. un c(... . pa_r~-1~~ -~-~~~~º-~-=~.E.

. AlOO x~. 00 es n~~saria._~~Qs. .YJlQ?.. n~g~~~~-~.e__~C?.. ·.····-.~_L}¡t longi~d-~l~_!i~!_~ x.'~~Q~!f! .a.-~6 ... .'.. ~Lfü>Ja..q:y _qµe.i:s__negatiy? sa~ta. -·· • · .~..-·---------·· · ··. ri_ x _____ _ _~ua_rda_ e.~<?!"0. ·-· ----· -.is~:o~_9r-·M:9..S.<. loJ:!gitu9-. .~·-.~Es':.49Jª~ SJ.a:b.. xxxx:0107 ~Q_~_!)!.~s. .!~. 1 Se.~Le_ng_o.. Ysfi Suma contra AX un dato de la lista · xxxx:OlOD ADC DX.~l}t_a_d_a. -•• . DH Guarda la cantidad de_ po?itivos en _1 700 xx.a:_t~y~ se_g~!l.?Q_q~zx. e!~gi.S. xxxx:OlOF MOV AX. xxxx:011F MOV [DIJ.M. 2 Inc_rementa SI en 2.----..0. _ ._c_ada vez_que ellp _ocu~ra hay que ir sumapdo eL \ ..P..AX.Uliltur. D!._c_!ón .-.I?.9iagrama lógico.P:!eros ente!.~~!l~~-e-~_la tj!t:~~c.~i~~i~f~ricir. Y. ...' :·~-·"~~·J'~ ._apuntad_a por B.19.~~:OÍlB..éln el for:_~a.él . .~!_~_eP.. •..a. DL Guarda la cantidad de negatiyos_e~J§OO xxxx:0123 MOV [1700}..__la ¡· ~ ~ .~. !?..(4~.X xxx-x:Ol 18 ADD BX. xxxx:Oll F MOV [BX].?~e~!!:~".. ...a:J30 .~9. xxxx:OlOA MOV BX. [SI] c~~g~ ~~~ -i\~--~~"ª~~o ~~ -~. .)}q.rga ~.1-_c_l!?:t~l~_n. 2 Suma 2 a BX -'.:>• .PO.:Qnh~_O xxxx:Ol14 JL 130 ?! .0.µ:ai:los. saTfaaTfs -.bª§_t_?. . . .111502 y 1503 l_QS 16 b_its superiore..B..d() !o_c.-·h ·· -·... 03-17 EJ!!f:lCiq_( )___l§_~ Se -~~~~-ª-~~~. . C~!ltªE _0lánt9~ ne_g~-!~Y-º?.. q~~~~Ei_e~~-e_!!_~90!d~!end~ __ql. _J)EC: ~-!-­ Decrementa CL xxxx:OllS JNZ lOB Mientras Z sea O. ·..Il1J~t~.. A 100 .tieñe ·\i!iTtiis~~-<!t:__~~. . [1500] C. . JNC PH I!l~rementa. - -.g?.1MR ns Salta a 118 ---· ----- De__ ~.l!!!.~~tjyg~ Zi. DX Pone DX en cero ..!.~.-it.!~.._<l~ 1ª.~1..~ts-~~de _Q_ar c9~~ r:_e~~!~ª-~.!n.)()~ _ C!l. ~9!XlP<!ra eJ. ·• -· ..$__ c. suma _R~!ciaJ_y_l~~!~L~:_~Q~E~~n.~~--c_u~n~~. . ..._ 3. '\ La instrucción ADC DX.?.':..! ?..E~_r~JE.t~)_ .._o~__ql::l. DX se lleva a cero .~ f!!~:nfon):__y_s_ep. • ·xx><~~o10B· A. _ DI _~pun~a al_~o. "".. pues cada dato ocupa 2 bytes..__ ~~sp~-~~2-. 4000 BX apunta al comienzo de la lista de positivos ~. DEC .:.J1lieri~<?__d~.!__ _g?ta._ Q!i _.b. a_!. _)(xxx:orntr~·sy~ J?~. : 1 -_.:.~-~~i:()_S _nél t_u_r~~~~ -~~-? _Ex_!~~~~da uno.J:!lie~9-f!~_l~J~st?.... _.I9:~1'!:-~n. -··---. [2000) C~rg~~__CI:_l~_l?ngi_!~~-d!':}'-1 l_i~ta ~~~~x:q1_ó4 ·. _apuntada po~ DI xxxx:oüs· ADb DI.9-C: . ~ u )' l bit ~. uno para JL y otro para JG. .!~-ªs sup~r._~arda en y 1500 lSÓi iO-:S-J§..E..M'óy·:_stiqooi ~egistro SI apunta al co. ~ . AX (.9:~ .X:Oí27-..~~ .~S~~~<?_S · gyardarla en la?_q_g:~-~Si~nes 1600 y 1700.zOlOO MOV CL.Q~~. 00 i1eya ~n DX la suma de acarre()S qu~ ocurrep cu_a_f!.i~_gr}Q_ .s~~ -~!a .!~... -~e_ pr9q.-·~ ---------~·~ --i::-- · ' . SI.~ .la _li!'t_a ~-E'._t() de J\~ _(}J~_c~__!?_0 ~ I?)(_+ 00 ~ S:a_rry =DX + Carry) xxxx:Ol 10 ADD SI.J9Jffi$l. ~-~~x :OÚA MÓV [1502]._... ). " •• .Ett_ ese ca_so. . _c..a.~ dirección 1500.Y ~~J~~~~tjºº~ El_ regi~_ti:~. dato en A2<.. AX Guarda número negativo en lista.._ xxxx_:OlP..el resu1télc!Q.):JK . n.onH~~.5~~ry__~_l_!_:gistro_!?X. x-.. j / _..cu~les l()~.~~~9_e}~_li~t.~J~J~ -~-~ec~~~n -~º9Q: Sµmarlos( y . 9-_e_}_~i-~ _ ~i-~~Y-~~~rY:. .¡ EJERCICIO 16 .:.i:._.Vi·· io . AX Guarda el número positivo en lis ta.J~s.. Mientras z.. .d...?. Fin ----·--. ._pgr s1 xxxx:üj ff--~Mf AX:·( --.'. 2 Suma 2 a SI .~. volver a lOB xxxx:Ol17 Mby'[isoo].ie_la_suma · xxxx:OlOE INT ~~ Fip_. .~olver a lOF xxxx:OllF MOV [1600].! _ap~_n!a.Y.:: .an .~~Y-~}.1...1.e nJfls_dir_ecciones l?QOél... 2 Suma 2 a D I x~~-x:Q:JJ~)MP1j8 ..suma .de datos x~~~OLOJ __S'GIJ. existirían dos rombos consecutivos.. xxxx:OlOO MOV CL.!i. ..l'.a~~~-c:l~l...~º '::1'..t}. respectivamente..§__qµe ~mpi~~~!1... . JG-Í40 Si es positivo salta a 140 xxxx:Oi18--A[)¡j.l_~J>!:!. .en..n:~ga~ygs :... ..~~-__3_QQO _y_:4_Q_q9.-· A 130 xX'x..-~..Qp_c!_g_que l<! suma de dos niilllern._~i.~ne -~« en cero xxxx:Ol09 SUB DX.nenas significa~iY..- A 140 i2ci('x:Qll.~.(~ÓllB INC DL I_ncrem~_nta P1. )5Q1.i. ..t\X f.S-~~-E-~!1:. ._de}? l:>it s. . ~- x-xxx:Ol 16 . ..<:> ~--nú!!_le!~. i que los 16 más ~Jg!!ifac.CL Decrementa CL xxxx:OÜD JNZ lOF..

200~ _ Registro SI apunta al comienzo de una lista .~. 20 ._ú._iqs q\le ~stán a .i~n~JJJLDY. BX.tr~te <:le un núm~!º entero. [SI] Carga en AX un número de la lista apuntada por SI .'#~~-:~~-P. [2000] Carga en CL la longitud de la lista xxxx:Ol04 .e_t. MOV st2001 Registro SI apunta al corrlienzode ia lista de datos x~xx~0107 MOV AL. volver a lOB xxxx:Oll9 INT 20 Fin . y los mayores en otra. ~J . Carga 20 en BL xxxx:OlOB CMP ~~!JSIL_ . t''..ia ·derecha del punto. 2E Car-g a 2E en AL ._2tra li._ Ejemplo: 2000 05 2000 05 2000 03 2000 03 2001 34 (4) 2001 34 2001 39 (9) 2001 39 2002 33 (3) 2002 33 2002 36 (6) ===> 2002 36 2003 2E (. BL El ·c~ntenido de BL (20) se guarda donde apunta SI xxxx:Ol14 _INC SJ Incrementa SI xxxx:Ol15 DEC CL.~f~if .· · · · · xxxx:0109 MOV BL.9.~_s9__qu_e_§. y _dejar todos Jos elemeJ!t_OS m_e n9_res en una lista.2 Incrementa SI en 2 xxxx:OllC DEC CL Decrementa et xxxx:Ol lE JNZ l _OA Mieñtras z.II._ ~iendo que en 2000 se indica cuántas P.xx:0104 . ~1.V SI..~e )a _ ~irecdón 200~.s ta .OsiciQ!l~~-º~-t1Pª · ~D c.xxxx:0107 MOV DI.. . _frª~fi. co~parte entera y parte fraccionaria separadas por un punto (codificación 2E en ASCII).. Decrementa CL xxxx:Olll INC SI Incrementa SI xxxx:Ol 12 MOV [SI].:_o_9iij_c_~q_o__e~ _AS~. como se indica. no lleva punto. Comp_ara AL con el número apuntado por SI xxxx:OlOD JNZ 114 Si no son iguales (no ~ay un punto) saltar a 114.t\_DlJ. AX Ll_eva a la lista apuntada por DI el número mayor xxxx:Ol14 MOV [SI].. de. El número.c4nªLc. 3000 Registro DI apunta.meros Correspondientes. BX Compara los números correspondientes de ambas listas xxxx:Ol 10 JL 116 Si AX< BX saltar a 116 xxxx:Ol 12 MOV [DI].2 Incrementa DI en 2 XX~>::Ol 19.comienzo d~_l~. Ia d ireccón lSOCf° Comparar los r. que empiezan en las d_irecciones 2000 y 3000 respectivamente. por el código ASCil del espacio (SP = 20). Decrementa CL xxxx:Ól17 JNZ _lOB Mientras Z=O. U3-18 EJERCICIO 17 Existen dos listas de igual longitud de números enteros (2 bytes cada uno).pl¡izar lo_s qígitos. xxxx:OlOA MOV AX. MO. ·: xJQ<x:OlOC MOV. ocupa n posiciones co~~~c-~~-va:~:-d~~~~-íi.onar. volver a lOA xxxx:0120 INT 20 Fin S. La longitud -está eñ . . sin parte fraccionaria. [1500] Carga en CL la longitud de las listas xx.) ===> 2003 2E 2003 38 (8) 2003 38 2004 35 (5) 2004 20 (SP) 2005 30 (O) 2005 20 (SP) Antes Después Antes Después AlOO xxxx:OlOO MOV CL... Re~JJJ.. xxxx:OlOF DEC _" <:J.~ ~.o. BX Lleva a la lista apuntada por SI el número menor xxxx:Ol16 ADD DI. AlOO xxxx:OlOO MOV CL. [DIJ Carga en BX un número de la lista apuntada PC?r DI ~xxx :OlOE CMP AX._~~ro.

.. JMP 1~~ Salta a 112 . - xxxx-:blOA MOV A( [sir . :::'~_x:Ol04 MOV AH.~pe 1_6 bit_s. 1 ('.u~o. Pasar._90 <. . S~l~I}~ .--FF . que_~mpieza _e_~ Ja· d~~cdón 2000.x::Ql1A IN~ -~H .·izqüi~rdá'" (prop_ agá-ci"óñ de signoy: ·- A 100 ~~X)(_:O!O_Q !Yf9V CL.· . ' t . .¡ -: -~.MdV DC. i. : . Compara el dato en AC contra a· -. A 100 xxxx:-OiOO MOV S_I. ·'·"e'!" ' ..da por SI_. volver a lOA xxxx:OllA INT 20 Fin A 130 . 2000 xxxx:Oi06.. ." "1 . xxxx:o108M:ovlsífAL x·x_x. C~IEP..:_tl_~!l­ posición que no contenga 8 "unos" xxxx:OllC ADD DI. los números a otra lista. -~ . AX ~arga en la lista apuntada por DI el número de 16 bits x~xx:010A .. . donde cada número Q. 2 SÜma 2 a DI (las direcé:iories ocupan 2 bytes) xxxx:OllF INC s1-_ ---.~_t_tl<_:>Séi~)_ 4e.<.· . . ' .SI . 5Q01 ...· • .:arga 8 ceros en AH para propagar sign() ~~~x:_OlOA MOV [DI] 1_AX ~!irga en la lista apuntada por DI el número de 16 bi_ts -~xxx:OlOA JMP 112 Salta a 112 A 140 x_~-~~-:Q19:4___ MOV AH.-·-··· r• xxxx:0120 CMP SI. . MOV -AL. xxxx:OlOE . ~ ~ .!e}~ !i~~!i xxxx:0104 MOV SI.: ' ·:~~ :_\ t' (\.arga 8 unos en AH para propagar signo ?_<xxx:OlOA MOV [DI].b~n guardarse en una lista que comien_za en la dirección 2oqo. y a los números con bit de signo 1 se le agreguen 8 Únos_á ra. FF Compara el contenido de AL con FF x~xx:Ol 18 JZ llA Si Z=l. . --·.2 Suma 2 a DI (los números resultantes _c:>cupan 2 byt~s) xxxx:Oti'6--DEC CL . siendo que su longitud está en la dirección 1500. "'Carga en AL' un dafo de ·la lista apuntada por SI ·xxxx:óiac· c"Mr ·Ai. de modo que a' los números con bit-de' sigño o se le-agreguen 8 -c~~Ós a la G:qi:iierda... xxxx:Oll B CMP _SI.. SI Guarda en la lista apuntada por DI la dirección (de 16 bits de_~!)_9_i. ir a llA xx~:OllA MÓV[DI]._ S. . Decrementa CL xxxx:Ol 18 JNZ lOA Mientras Z=O. 5001 C~mpara SI con 5000 + 1 xxxx:Ol24 JNZ Ü4 Mientras SI no sea 5001volvera114 xxxx:Ol26 INT 2o' • l.esult_~~~S. .~~a SI con _5000 + 1 · xxxx:OllF JNZ}~_B _ xxxx:Oll l MOV SI. " ¡<.. ·-· . 4000 xxxx:b103 MOV DI..·· -. 4000 xxxx:0114 MOV.3000 DI apunta al coriUeiúio de la-lista. JGE 130 ..-AL. ' . [1500] C:arga en CL la l()~git:i_g_c. -de i. · E(co-ntenido""de ACpasa a la posición ap~~t.. o --. . -:\·p . Se tra_ta de _escribir ocho "~~s:' en_ cada una de las posiciones de memoria que_van_ de la dirección 4000 a la 5000... El r_e gistro SI apunta a la dirección 4000 DI apunta al comienzo de la lista de direcciones AL se carga con 8 "unos" Incrementa . Luego se debe verificar que realmente existan ocho "unos" en cada ··Zi~a: --de la~ posic-i ones escritas.a dirección de las posiciones que no pr0senten ocho "lli1os" (p_~sisi~!l~~~~fe._w_}~Ji§tél de números enteros de un ~y~e :c~da. . F_!. U3-19 EJERCICIO 19 La siguiente secuencia puede ser p_~~te de un programa para verificar el estado de la memoria de U!!_computador.. Iñcrementá sr --·. 2000 El registro SI apunta al comienzo de la lista de datos xxxx:Oí67 ". o ~C~s mayor igual que O (positivo) s_alt0: a BO ·xxxx:ono JL -140 ·· Si es menor que O_(negativo)__saltíi -~ 1_49 xxxx~Oii2" INC SI Incrementa SI xxxx:0113 ADD Dl. tsü Mientras SI no sea 5001volvera108 El registro SI apunta nuevamente a la dirección 4000 El contenido de la posición apuntada por SI pasa a AL ! - xxxx:Ol 16 CMP AL.

9. 1:1aturaies de un byte. DEC CL Décrementa CL xxxx:Oli6" JNZ io. .~·a·iOñgítucfde 'cúñbas está en la diiección-iSdó:·D"etermmar·erorden .1??.. xxxx:ói01r··Mav s1.·"í:omjiierididosentre O y 9· inclusl.. . q~e. colocar FF en 1600.'.!. 00 Pone . (iifooJ. .r~~R~ct~vá}ftE. Incrementa Si xxxx:0113 INC DI Incrementa DI xxxx:Oll4 . ··----·-. " xxxx:OllE INT 20 Fin Al20 xxxX:0120 MOV BL. 3oóéi bI apunta al comienzo de la otra lista .)L__ Guarda resultado en BL "· xxxx:0. 21_) . ~l...zoo9--~~.~~-º.:0112 INC .Q~y-~ó@. xxxx:OlOÁ MOV AL.. [1500] Carga en CL la longitud de las listas . [SI( Carga en Al._I~ . • ·-•.. ~·· 3000~1 2 2000 00000000 (O= 0 ) 2 2001 00000001 (1 = 1 ) 3001 N2 (4 =2 ) 2 2002 00000100 3002 2003 00001001 (9 =3 2 ) 3003 2 2004 00010000 (16 = 4 ) 2005 00011001 = (25 5 ) 2 2 2006 00100100 (36 = 6 ) 2007 00110001 = (49 7 ) 2 (64 =8 ) 2 2008 01000000 2 2009 01010001 (81=9 ) .. y el ___ resu1tado 'dejarlo en 3002 y 3003 . Mov 01.~ _21_ Se tjene dos listas L1 y L2 de caracteres ASCII de igual longitud.!.-----·-· ··-· -··-. FF Pone BLen FF xxxx:Ol32 MOV [i6oo]...'BL ··Guarda resultado en BL xxxx:ó1~~ .-tiene ~~ lf~t~ -~·on Íos-~~~-drados de los números b~a~ió·s-"dei'Oaf9~ · Eri ra. al~~!:>~tico_ de una respecto de la-otra. Si L2 va primero..126 .x:oioc cM·P AL [oíl c~~.'XX'.a tal que Li sea si primera en orden alfabético.·2000·-. -· .P~i~-:~_r~ato ~n:-At con el ·correspondiente dato de la o~a lista xxxx:óTof-Js··120··· ·· " Si es menor salta a 120 · x:XxX:ono· JA" 130 Si es ·m ayor salta a 130 xxxx. .:~.¡~ ·2oÓ-o··~ .~t. Se ne. Registro SI ·a punta al "c omienzo dé U!lª_li~t~ xxxx1>iói. cero. ~e~~·.sumar los cuadrados de Nl y _ N2. .·~{)~ ... . BL en.de.~ :. -GuardaresÜitado . 4 •t.2. de forrr.~.Á Mie~tras Z=O.~. ~ X_'.ve.. ···-····· ·- _.dirécciónes 3ooo·y· 3001 se tiene dos ntim~r-os .·· .cesita .. U3-20 ~JE~~IS_I. 3000 ~1 (A) 2001 42 (B) 3001 44 (D) 2002 41 (A) · 3002 41 (A) .:~~11: ~1.B.J. o tiene ~g:ia~ ?. INT 20 ··.Ni y N2. -·. uso del modo indirecto por registro con desplazamiento mediante valor de registro De las direccion~~. : 2000 ~1 (A) . B.~2!. que empiezan en las direcciones 20Q. 00 Pone BL en cero Xxx~:OllA MOV [1600]. volver a lOA xxxx:Oll8 MOV BL..!~?~.. A 100 xxxx:OlOO MOV CL.~ .Ifl:lT .-5.\·~· A130 xxxx:Ol30 MOV BL._ p~n:r 00 en la dirección 1600. Fin EJERq<.. .• • .. en BL . un dato de una lista ~xx..

"Q~ Registro SI apunta a 2000 + Nl. -~···. . BX Pone BX en cero xxxx:0107 ·suB ox.!~ 9-~recci. L_C?.tsí +·BX] cN2)2 se lleva a la mitad inferior de DX .l~ " xxxx:Ol lA INT 20 . [SIJ ..:. DX xxxx:Ol17 MO:V [3002]. .Át. rViov···sCc3óooJ Carg~_.()(i<~:OÜ>F.. y rese~a para_e_l. de 16 bits. y Gúarda el resultado en 3002 y 3003 reserva . .. · . BX Pone BX en cero xxxx:0107 SUB DX... _)'v lQY _º~(_(30Q_Ql <. cuya long~tud se indica en la dirección 2000.. J<.w. los cuadr~dos. :=..:~r_g~_!':J_l _~z: _I?~ .....)l)Q_Q SI ap'!-lllta al comienzo de _la lista de datos .~!!.3002 .. y los 16 de menor peso a AX. AX Suma ..EJERClc. . Fin · ._Q) x... _i\__~9-º- ~'SX~~OJQQ_ MOV AX.. [2000] Carga en AX los 16 bits inferiores del dividendo xxxx:Ol03 MÓV t>x:üoo2j Carga en "fosl6 bX hits superio res-del dividendo xxxx:OlÓ7 .-·.. ·en sl. "'xxx:Ol 15 ADD AX. · ·ca!iá_~2..-~~_!!__!3~.. · .5-.Registro SI apunta a ?QQO + N~-..E'.:ZQ . que comienza en la . DX .. .s _16 bits de más peso de los 32 bits del d ividendo deben ir a DX. [SI + BX)..r lo en la dirección 1500 .?. . -· .Y S!..!() ci~ 16_~_its xxxx:OllD MOV [3002).. [30011 ... xxxx:Ol 13 MOV oi. . x'p~x:Ol H __ U~I...-.--.... .... DX ... . .r. ser. xx:Ol ÓD MOV .-. resultado .:(nó3 ··sus AX... - ~xxx:fül 3 MOV ói. .~a ~~~.QP..-. y e~ resto en 1502 y 1503'. AX Pone AX en cero xxxx:óios SUB BX. º-uard a ~n 1?00 el cocienti:.MOV. . U3-2 1 A 100 xx~:OlOO MO.:.Tsf+BX] (Nl )2 se lleva a la mitad inferior de AX . u11 flÚ_fl!. AX Guarda Fin . . -. ··[1500). ._ ?'?'Xx:OlOD A. MoV ·ex. cerÓ .(N2)2 se lleva a la mitad inferior de BX xxxx:OllB ADD AX.: xxx~ :0119 MOV BL.IQ · --~~ - Se__Ji~ne una lista de números naturales de un byte. .... ~ ~f · { La instrucción MOV DL... BX S~ma los cuad~ados.. .) . D:X Ei puntero SI vuelve al valor ·2600 . Hallar el promedio de dichos -nlfo-ieros. · ·· ---- .....(~_o~ B._.000 por otro ..DL. [3001] Carga N2 en DL xxxx :0117 ADD SI.¿xx ~oí20" INT 20 · · · qtra forma más compacta de_ escr. ·----.-. ¿-: [B2(]. .•AX e1::t. - xxxx:o109 . 20og SI apun~a al comie...el. ~ ·T.. rrntural de 3_2 bit_s que está a partir de la dirección 2.. [SI] (N1)2 se lleva a la mitad inferior de AX xxxx:Ol 11 SUB SI.t f._i~.!l_lq~~·. -f.. .DX Guard a en 1502 el resto . xxxx:OlOF MOV AL. y 3003 . .Nl e_ n ~~.· ar ·-· d ·. .:..natural de 16 :-1 bJt?.l!~~da_ a_nt~~i~r A HJQ. -1·.~ · · · · ·- -~xx~:Ql0?.Q~.. (~on _ BH·.... . D)( en •'· .El _resultado_guardarlo en 15_0 0y1501.. xxxx:Ol lO MQV [1502].q~~-~~-~~.dirección 2001.~~ti!d_<?_ ~ re:gi_~í. -MOV si. DX -Pone .-. .i?. IióóoJ Carga en CX el divisor xxxx:OlOB DIV CX Realiza la división x'x. . que tambi~~ se puede escribir MOV ..-..¿. El divisor debe ir a CX. · -· . para el resultado : un . .. ·j" guarda. xxxx:0103 SUB AX. . El resultado . AX ~01.. .~ ...~tº.. en. .... [SI] .". · . Poné DX en cero xxxx:Q!.S_I. .1 '. · · · · · · ~ · · ·.. P!y_idir .AX .~ o cie_la lista de d_a tos_ -~.• .registro .q ueda en AX '(ñ~ debe sup:rar 16 bits)~ y efresto va a DX. está en "modo de 1 i iYeccio1iamiento indexado"..(~x:ó10ó. XX?'X:OlO() _ _MQ:V __ SI..

. -... [2000] Carga en DL la longitud de la lista xxxx:Ofo4 ...!. ~~.¿qu'ierda confOnne indican-fasflechas de la figura 3. c~fQrl!I~ ~ 9. O J\ i -= O.!:}~strucciones ANO. ~~~o~~s... OF realiza bit a bit la operación lógica And (A) entre el valor de AL y el númen 1 ~)F.-eI cociente va a AL.-•• ••.4-J'~jj~:AL~ OF Pone en Ofos 4 bits más altos de AL .AX Pone AX en cero J<:XXX:Ül09 . manteniéndose sus 4 bits inferiores. 4 veces el contenido de AL xxxx:0118 ORAL. AL Güarda· el byte·empaquetado en la otra lista xxxx"':'OllC INC DI DI apunta al siguiente lugar xxxx:Ol 1 D ADD SI. volver a_l09 xxxx:Ol13 MOV BL. pues se tomaron dos datos consecutiv-o- xxxx:Ol22 JNZ lOA Mientras Z sea O. que ocuran un número par de posiciones de memoria.AND _BJ. 2 A la l_o ngitud se le resta 2. 35.ROL AL. 1 (ROtates a register Left =rotar un registro a izquierda) ordena rotar el contenido del registro AL-hacia. /-} U3-22 AlOO xxxx:OlOO MOV CL. 31.. [2000] Carga en BL !a cantidad de números de la lisl~ xxxx:0117 DIVBL Háce..· !. La ..I?_ ~L.C:~::í~~lfs~-'_0uévé · Úna poskión hacia · la izquierda. 32.. Guarda en 2000 el resultado de la división (el prom~dio} xxxx:OllC INT20 Fiñ EJJ!Rpq9~_?. AlOQ_ xxxx:OlOO MOV DL.l~~_da en este ejemplo. pues ya se tomaron dos datos consecutivos xxxx:0120 SUB DL. ~e•. 1 A O= O. ROL_ AL. •• • -. Eiflag e toma~¡ valor d~l bit que-q'ueda en el exti-'emo izr¡uierdo deAL (o el registro que sea).. '--·~-.a. MOV SI..·· ~~_instru~~ió~-~~-~--1.. . · 1J\1 =l. · . 2001 si apunta al comienzo de fa lista de datos xxxx:Ol07 SUB AX. volver a lOA · xxxx:0125 INT 20 Fin La in. y el resto a AH xxxx:Ol19 MOV [2000]. 2001 Inicializa SI para que apurÍ. que se almacenan a partir d.AL 'j BL.E~~-E...01!6 .. . mediante la "máscara" OF se enmascaran los 4 bits superiores de 31.~~srementa CL xxxx:Olll JNZ 109 Mientras Z sea O.~~-en _b_!O_ xxxx:Ol14 MOV CL.. BL F9rma el byte empaquetado xxxx:Ol lA MOV [DI]..21.mdo las sumas superan el formato de AL (Hace AH<= AH + 00 + Cmy =AH +Carry) xxxx:OlOE INC SI Incrementa SI xxxx:OlOF DEC CL I). .Qf. 2 SI se incrementa 2.JÜ.iüi-muestra e1résli1faclo-en AL de ejecufár lá instrucción.. ..jd1a_operación A~d: O A O= Ó.~ Rofa. 38 RESULTADOS xxxx:3001 12. ~!?. .. S_e tiene a partir de la dirección 2001 una lista de dígitos aislados codificados en ASCII.te al comienzo de la lista de datos xxxx:0107 MÓV nt 3oói Inicializa DI pá._. ROL y OR . obligándolos a ser ceros. [SI] Carga en AL un dato de la lista · xxxx:OlOC MOV . .. [2000] Carga en CL la longitud de la lista xxxx:0104 MOV SI. ~· --· •• • -._ ----• -. la operación será bit a bit: 00110001 = 31 A 00001111 = OF 00000001 D~_ esta manera.-[sI+iJ Carga en BL el dato siguiente de la lista xxx~:_QJOF _ .ia que apunte al coqüénzo de la lista de resultados xxxx:OlOA MOV AL. .flgura3. xxxx:Ol 11 _.Ía i._!?I! Suma a AL un número de la lista apuntada por SI XX~)C010B ADCAH. Conve ~ir cada dos dígitos ASCII consecutivos-en un byte BCD empaquetado.-~ •' • .~ -. como ei1este ejemplo 3Í.· Süp_oniendo _que en AL se tenga..00 Lleva en AH la suma de acarreos que ocurren cu. siendo que el bit de la extrema izquierda se la reinyecta a derecha.~trucción AND AL. .a dirección 3001 · Ejemplo: DATOS xxxx:2000 04.<. Este número se indica en la dirección 2000. 58. 4 Prepara CL para indicar 4 rotaciones xxxx:. s4-b-Hs Iñás-aHos-del3L -1'.

U3-23 e D Figura 3.Í..está en AL con el que está en 1500 J0'..tos\ xxxx:O_lJ J.· .c~~~i_::::!:· La iongitud de la lista está en la dirección 2000 E..!JL.< ._ •-•-·• • · ·.a e [] Figura 3.'..o _e.26: U~ n~~ero ·~~e está en la dirección 1500 agregarlo al final de una lista no ordenada de números de .l9. Guarda en 2000 la nueva longitud de la lista _ xxxx:Ol2A INT 20 Fin EJERCICIO 27: S~!i. púes el núTI1ero e~'tá en la lista Si Z=O el número no está en_la _lista( y lo p~sa _a_AL 1 xxxx:o11D MOV AL.· .._'. [2000] 'targa en CL la longitud inicial de la lista - ~~-x~:óió6-·i\1ov ·51.. saltar ~Ti3 -·­ son-dlsúii. antes de ROL en AL se tenía 00000001.x:Ol14 DEC CL xxxx:0116 JNZ 10.-.gn.·i(~)(jjfoi' MOV CL. + .ti._SI _fue _inctem~ntaqo en~l lazo} xxxx:Ol22 MOV AL.RO~.re o~~-e~~!:__e~_!?_rfi1~ . •• --·· •••• + .· . FF C~rri.. · + · •+·· · • · .•_ .. o. • ~~~-ff~: f....... y se l. .'_)(:QJ9!:__J~. · • ~-~--l?Y~~--9-1!-~--~gipi~?:ª.'c. ..21. volver _a io~ ·~1t .·· Inicializa SI para que apunte al comienzo de _la lista ·:xx-xx:oío9 _ ·Mov--A.-.!_i::e_~ani~mo de ordenación que usaremos es el de "burbujeo"..~~i:_stro caso me~iante MOV CL..~·-• • ••O • · ..?..__oo_ Asume éon la indicación~~-"". 6 4 4 2 2 4 6 2 4 4 8 2 6 6 6 2 8 8 8 8 Los círc_u los indican comparaciones realizadas. _~1. que empieza en la dirección 2001..21. [2000] Carga en AL la longi~tj.para 'el número que_e~tá __~I1 P!:-__ c.X.. Si Z=l indica con FF en DL__q~e.b Para rotar más que una posición.• • .Z__g~ s{i=ó (los .~:(· ._ de la lista xxxx:0113 INC AL Incrementa la longitud xxxx:_D122 MQV [2000].. como se ejemplifica. ·· .?!á _e!:lla_lii..sop] Compara el niii:nero que.!núlT\~rg__:i:i.'. y las flechas.a contir~uación Inici() PriilJ. p.· .L. 4) y luego escribir ROL AL. - A 100 xxxx:ÜlOO ~QY R_.núme-ros-compai-ados.. . _!. >· xxxx:Ol18 CMP DL.lJ...-rsiJ carg-a en -xc lin dato de la lista · . de función semejante?... . _ ~¡es FF (Z=l) sa!ta a fil'.u¿ción ROR (ROtate a register Right)._.MX .-· ·• • --•••• __.ta de n~meros naturales de un byte. por lo que luego de ejecutar ROL se tendrá 00010000. Mientrá-~ Z=O.9 Incrementa SI Decrem~nta CL . 9. _ • . si dicho número no se encuentra en la lista.e e.ón anterior {~~.~ _l~ gs ~él.--..G. Asimismo. [1500] . • . T~~bién exist~ la i~st.___MO_V .e_r _Luego del ler Seg:-indo Luego del 2do Tercer Luego del 3er Cuarto Luego 4to Ordenam ordenamiento ordenam. resultando C =O.·· · ._ lis!a ~ . aum. .A-J. los casos en que hubo intercarn(¡~_o__de lugar entre do? nÚineros. EJERCICI0. ~~m~rg~~---~_le_~_~l} t2?: 9. ..~ri:? ~~t~ ~n_la. .neroáTfin~Yci~ la Ú~t~ _(El -i~g.!. .. ' o+ .Q9 ~.e ntar en_ u_1.:<xx:_0120 MOV [SI]. . el J. -• '' --. CL (si se usa AL): ·· · En el ejemplo de la se_c:uencia anterior. A!..lúrn.FF.. iiíoi·-. ... Lleva -efnli..· O· -. 00 q~..~ __ .~ ~s~~ en)~ 4_ire~~!~J].a q1.1!~."' •''·· . . · ..·.en ?091.. se debe poner el número de p~sicione~_ a rotar en el registro CL en la instruc- _c..~~I2X··----.. - ~-~xx~QWl? .. ·• C•o A~--·••· · ' • ._ ..~-~-ii~~~J1::. Ordenamiento ordenam ordenamiento ordenam ordenam. .. . SI xxxx:0113 INC xxx.

Fin A 120 xxxx:Ol20 MOV AL. [2000_) C~rga en AL la longitud de la lista xxxx:012D DEC AL . [2000] Carga en CL la longitud inicial de la lista · · xxxx:0106 -MOY-SI~ 2ooi Inicialfza SI para que api. En caso que !'. MOV CL. Decrementa CL xxxx:Ol lA JNZ 109 Mientras Z=O.'<X. ' ªERCICJ. [lSOO] Compara el número que está en AL con el que está en 1500 xxxx_:O __lOD JZ 120_ Si Z es 1 (los números comparados son iguales)·.1. SI. ~ov J?. DEC CL .!º se encuentre en la list_a. xxxx:0104 MOV .~x:OllF JZ 100 Si es 00 (2'. .:c~:Ql_~. siendo que su longitud e~tá en 2000. [SI+11 . Incrementa SI xxxx:0126 . U3-24 A 100 ~?<xx:Oloo . -· .~~O}}_B_ MOV [SJ].·-.-' 1 Asume con Ja indicación DL = 1 que no se produjo ningún cambio xxxx:0102 MOV CL. volver a 107 xxxx:Ol14 INT 20 .la indicación DL =O que hubo un intercambio · xxxx:Ol17 INC SI Incrementa SI · xxxx:Ol18 DEC ci._[$11 C~rga en AL un dato de la lista · · · · · xxxx:OlOB CMP AL.9.... O As. [SI] Carga en AL "uñ.inte al comienzo de la lista xxi<x:áTó9·-~M9Y. saltar a 120 . Compara el n<imero que está en.. volver a 120 xxxx:012A MOV. ! 2000 05 2ÓOO 04 ' 2001 20 2001 20 2002 52 2002 16 \ 2003 16 2003 98 \ 2004 98 2004 90 \ 2005 90 Se ha s upuesto que el número q~e está en la dir~cción 1~00 es e_l S~ AlOO xxxx:ólOO . .xxx:Oll e'.=1) salt~ a 100 p_a ra iniciar_lll1 I1ll:evo ordenamiento xxx~. volver a 109 ~.Ol41 INT 20 Fin (recorriendo Ja lista no se produjeron más intercambios) .~~liG A~. Si el número que está en la drrección iSOO se encuentra en· l~ l ista eliminarlo... AL Guarda el nuevo contenido de AL en la dirección ap untada por SI xxxx:Ol 15 MOV DL. la longitud d:e_la lista .:-si ----.ume cc:iñ.··-· ~·- ~x.º. AL .AL con el siguiente xxxx:019E JBE 11_~ · Si es menor o igual saltará i17 para-seguir recorriendo la Jist!l ~~. . d~splazando un(l posición hacia arriba los números que están debajo de dicho número.L. 20001 SI apunta al comienzo de la lista de datos xxxx:0107 MOV AL.SI xxxx:Ol23 MOV [SI]. [2000] ~~~ga_en."d. [SI+l] Carga en AL el número que sigue al que apunt~_. Decrementa CL xxxx:0129 JNZ 120 Mientras Z=O. {SI_:t:lJ Inter~ambia el _co_n tenido de AL coi:\ el d e memoria apunta'do por SI+1 ~. Q_ Compara el número que está en DL con 00 . CMP bL.~8_:_ Se tie~e una lista no ordenada de números de un byte que empieza en 2001.. AL G~arda donde apunta SI el número q ue estaba en la d irección siguiente xxxx:Oi25 IN'<'. ~L. Decrementa la longitud xxxx:Ol2F MOV [2000].. -AL.. Guarda en 2000 la nueva longitud de la lista xxxx:Ol32 INT 20 Fin . no m odificarla · . Á·L.ato de la lista apuntada por SI xxxx:Ol09 CMP "A. xxxx:OlOE INC SI Incrementa SI xxxx:OllO DEC CL Decrementa CL xxxx:Ol12 JNZ 107 Mientras Z =O.

[2000] Carga en DL la longitud de la lista xxxx:Ol04 MOV SI.:l~. CL Rota 4 posicio_n es a la derecha el contenido de AL xxxx:Oll7 MOV BH.q~l .fo eñ. 20 Fin .!~..- xxxx:0125 INT . 4. ~QQl ~~ .c?-. .O.. En ..BCD..•. el resultado entra en 8 bits....!~~~fect_u-ª. O· al 9. EJERCICIO 30: ~t. AL Guarda indicación de paridad xxxx:Ol14 INT 20 Fin EJERCICIO 31: S~tiene=®a-iista de números de un byte que empieza en la dirección 2001...~~. .' r•+í'.AL xxxx:Oll3 MOV CL.. SUB AL.... A·~ xxxx:OlOD DEC CL Decrementa CL xxxx:OlOF JNZ 109 Mientras Z no sea 1. >:'':.~Je. La lista empieza en 2001. OA El multiplicador BH se hace de valor diez xxxx:Ol19 MUL BH M_11l~iplica Al.. Á.. siendo que su longitud está en la direcdón 2óo6~ .. '. ~l.)~t!llÍ:Il!eJ. Asimismo. • .~ direccion 2000_: AlOO . .. s_l.. de. _ S~~arlos en BCJ?.~ . [SI] Car¡!a en AL los dos dígitos en BCD xxxx:OlOC MOV BL.. reemplazarlo por el que le sigue.: . 3001 Inicializa DI para que apunte al comienzo de la lista de resultados X:xxx:OlOA MOV AL.qQ xxxx:OllD MOV [DI].c~so qÜe el númer() . R~gistro SI apunta al comienzo de la lista de datos _.. volver a 109 xxxx:Olll MOV [1500]. 1 . siendo qúe la longitud .~. U3-25 EJERCICIO 29: uso de la instrucción MUL para multiplicar números naturales.. al hallado... . p_r.\. restarle uno a la longitud de la lista que está en la dirección 2000.it. AL . . xxxx:Ol23 JNZ l~OA fyfie11tras_Z=O.. ' .09. betermiñaf" sfeCñ~meró conténiC. . cg_gificados __en . comienza en la dii:ecdcm 2001. AL CÓpia en BL el contenido de AL xxxx:OlOE AND BL.L .besplazar cada número de la lista una· posición más abajo.O AL.() Uo = OBH está err la ·!.~t<?. 2001 Inicializa SI para que apunte al comienzo de la lista de datos xxxx:Ol07 MOV DI. citado sea WlO de los de la lista (salvo el último).. [2000] <:. : . 2001. x·xxX:jn_Q. . y_c:l res_ul..u. :~ • . OF Pone en Olos 4 bits más altos de BL xxxx:Ol 11 AND AL. Secuencia que convierte una lista de números de dos dígitos que están en BCD empaquetado a binario puro.· ~..de fa lista es.:arga en CL la longitud de Ja lista xxx.. .' .!1 _1?Q. . [SI] St. •.xxxx:Ol09 AD. . Prepara CL para indicar 4 rotaciones xxxx:Ol 15 ROR AL. AL Guarda el byte empaquetado en la otra lista ..tie. xxxx:OllF INC SI El registro SI apunta al siguiente lug~_í:_ xxxx:0120 INC DÍ DI apunta al siguiente lugar xxxx:Ol21 DEC DL Decrementa DL . modo de recihii "fodas· · fos' "riuméros que siguen . y su longitud está en 2000.' . vol.O__!'vI_OV CL. ~-2.>c_xxx:Ol09 .nalfaei\ la lista que . y así súcesivamente.ia las unid ade~.~.v er a IOA . DAA xxxx:OlOC INC SI C_Qrrección para suma BCD Incrementa SI <-·--.:l'l:>iéndolos 0ta· posición.~:0104 MOV SI. · Ejemplo: 98 = 9xl0 + 8 10011000 BCD 1001X1010 + 1000 = 1100010 = 62 H Si se multiplican dos números de 4 bits (XXXX x 1010).· · -. A 100 xxxx:OlOO MOV DL. .· ···· ·· · · .t á en la direcéi~n 2000..c:!4~. BL Sui:r.lma un elemento de la lista contra AL xxxx:OlOB.I}~ _urn1_ lísta de 11 __dígitos. FO Pone en Olos 4 bits más bajos de..tél~() __ g~~-~darlo _e~}_a_A!i:l:~E!§. . éste por el "51gwente. _!-lace cero el registro.cg_<)n.el'. fa"<iiieccioii 1500--sé. por BH y el resultado va a AL xxxx:OlOB ADD AL.

En la dirección 1500 ~~. 2001 Registro SI apunta al comienzo de la lista de datos xxxx:0107 MOV AL.. 2001 R_egistro SI apunta al comienzo de la lista de datos xxxx:Ol07 MOV AL. -CMP . [SI+1] Si no es el último. . [2000] Carga en AL la longitud de la lis ta xxxx:Ol30 INC AL Incrementa AL ·· ~J:<_lq<.·. AL. [SI] Salva el número que apuntaba SI en AH· · xxxx:0124 MOV [SI]. Si el número a tD.0V _SI. reubican9:c» una posición más abajo cada uno de lOs.MOV ~L. [2QOO] Carga en CL la longitud de la lista xxxx:0103 . ordenados en forma creciente..~~-~:Q. ésta no debe modificarse .100 .. cargar en BL el elemento siguiente xxxx:Ol2F MOV [SI]. el que le sigue xxxx:Ol31 INC SI Incrementa SI xxxx:0132 DEC CL Decrementa CL xxxx:0134 JNZ 12C Mientras Z=O. natural de un byte.. Intercalarlo según su valor en ia lista citada. INC SI Iñcrernenta SI xxxx:0129 DEC CL Decrementa CL xxxx:Ol2B JNZ· 122 Mientras Z=O. xx_. que está en la dirección 2000.. BL Guarda la nueva longitud de la lista xxxx:Ol29 DECCX Decrementar CX xxxx:Ol2A JZ 136 Si es el último elemento de la lista saltar a 136 xxxx. número.U3-26 A~OQ.:OlQC _JA 129.012C MOV BL. MOV AH.número apuntado por SI ~on AL . .12§ . el número de la lista es mayor hay que intercalar. Fin .O))S INT 20 _fin A120.m.l!:xx:Q¡I3 J~Z lOA Mientras Z=O.o12D MO_V Ai.. volver a lOA xxx~.~~rcal_ar ya se encuentra en la lista._ :\!-_ Guarda en 2000 la longitud de la lista incrementada XX)<X:0135 INT -~º. ~i. xxxx:0120 INC CL Incrementa CL. AL Guarda el número a intercalar (u otro) donde apunta SI xxxx:Ol26 MOV AL. incrementar en uno la ·longitud de la lista.ip. AH LÍevá a AL el próximo número a "bajar" XXl<l'=Q. ... [SI] C_o mpara AL con el número apuntado por SI xxxx:OlOC JZ 120 Si son iguales saltar a 120 xxxx:OlOE INC ~. volver a 122 x~~.. . a partir de la dire~~i6!\~. . ..0134 _MO~ [~~OO_!. . (2000] Carga en BL la longitud de la lista xxxx:Ol24 DEC BL Decrementa la longitud de la lista xxxx:Ol26 MOV (2000]. . 1\1.. [1500] Carga 2E en AL . . Incrementa s i xxxx:OlOF DEC CL Decrementa CL xxxx:Olll JNZ lOA Mientras Z=O.SI -· . ."· AlQO__ '5. [1500] C~rga el número a intercalar en AL · xx~x:OlOA . x-~~x:OlOO MOV SI. volver a 12C xxxx:0136 INT20 Fin EJERCICIO 32: Se tiene ~a-Üsta de números naturales de un byte.sf_end6 que en la dirección 2000 está la longitud de dicha lista. ' ~ Co~para el . xxxx:OlOA CMP AL.titme t. s:t Increrrien ta SI xxxx:Oll 1 DJ~C CL Decrementa CL X'.'n úmeros de la lista que le siguen (salvo que sea el últim~)­ Asimismo.xx:0122 . . INC .. BL Guarda en el lugar de un elemen to. pues hay un elemento más xx. saltar a 120 xxxx:OlOE JZ 115 Si son iguales (está en la lista) saltar a 115 xxxx:OÚO . {SI].7_Qbj. volver a lOA xxxx:Ol13 INT20 Fin A 120 xxxx:Ol20 MOV BL.

JN = An = [(N/ An-1) + An-1]/2 ~~algoritmo se detendrá cuando la diferencia entre dos aproximaciones sucesivas sea~~:º.-~ ·-- a si ~l cara~t~. ·y el caráder 03 .Móv-·Ax. -1 Pone en -1 al contador xxxx:OlOD MOV AL. csn Vl:l~_lye a cargar en AX los 16 bits inferiores de N x.----·----._ _S. AL C()mpara-el número apuntado por SI con AL xxxx:0113 JNZ lOF ~ientras Z=O.xxx:OlOD _ADD AX. -1 Si no es igual a 1 determina si es -1 = FFFF .:.·¿~ l~ iisúi e~-c:iiküntó:~~-a.-----·-------------------·---------' ~- AlOO xxxx:OlOO MOV SI.<.QQ.:Ql. y el resultado queda en AX x..¿:bias ·· ·Mo-v··nx..1 se hace otra aprnximación xxxx:Ol2D MOV ex.:x <. '\ ~. para h'allar A2 ?SX..~~ Resta Ál -A2 xxxx:Ol23 CMP ex.·---. CX:_ Suma_N/ Al que está en AX con A1 que está en CX ~xxx:OllB SHR AX. _ c. 2000 Inicializa · ·· . [SI] Carga en AX los 16 bits inferiores de N . . terminar -~~-~-~.. Determinar el número de caracteres enh"~ el caradei:-02 = STX (sfart of text). ~l..it"i'r 103 xxxx:OlOA MOV CX. 2 Suma 2 como pide el algoritmo xxxx:Ol 10 MOV CX. U3-27 EJERC_IC_I()_}~_:- Se tiene una lista de caracteres ASCII que empieza en 2000. ~x_x..tr.. -. _1:_ Divide por 2 la suma antes hallada. 1 -~-~P~-- - -·""- .~~para A2 con A_ l_ xxxx:OllF JZ 12D Si son iguales.l?t.X..CMP [SIJ>Af _.xxx:Oll4 )'vl()y _px1 [SI-±-_2J Carga en DX los 16 bits superiores de N xxxx:Oll7 DIV CX D~vic:i~ por A_l xxxx_:_0119_ -~DD AX:. JZ 12J:? Si es igual a 1.~~-.A2) contra 1 ~~~~Op6 . 03 Carga 03 = ETX en AL xxxx:OlOF INC CX Iñcrementa CX -- xxxx:0110 INC SI Decrementa SI xxxx:0111 CMP [SI].> Enésima aproximación .xx:Ol2B JNZ 110 Si no es i~ual a .·-----.·es · El divisor ex toma el valor C8H = 2000 xxxx:OlOB DIV CX Dfvide por 200..OHD_ eMP A.~.I. · xxxx:0104-. lFFF Registro SI apunta al comienzo de la lista menos uno xxxx:0103 INC SI -· Incrementa.X. resultado dejarloen el regis_tro ex_ . .?<x.·------·--·.__ . ._OQ ___fy!()_Y. volver a lOF _ xxxx:0115 MOV [ÍSÓO].. ex Guarda en 1500 el resultado xxxx:Ol19 INT 20 Fin EJERCICIO 34: En las direcciones 2000 a 2003 se tiene un número N de 32 bits.8! . AX Guarda An válida en CX xxxx:Ol2F INT 20 fin .9. e indicárlo e~ Iá d h-ec~ión isoo ----· ··---·-------.SI . AX Lleva Al (cociente) que está en AX hacia CX (divisor) -~~~~:ciíi2 .X. 02 Carga 02 = STX en AL xxxx:010fi Compara el número apuntado por SI con AL .""'~ ·-· xxxx_:0108 .·-·· · .-----------. rsi+il Carga en DX los 16 bits superiores de N ~x_xx:o10s · Mov-cx.. -SI xxxx:0103 MOV AX. JNZ _103 · · .-MOVAL. 1 C9mpara (Al . .~ ETX (end of text). 1 A 1. terminar xxxx :Ol~ 8 CMP ex.

4 bits. .. · . ...r:~q-t1. .de 8 bits en A.• •••h• • ·. con ~esultado en DX y AX -~-.e_ . para un registro d e n bits.. ' ' 1-: ' ' ..stro de 16 bits. @... -·.)r-. . . .. .~mei:. . en cualquier regi.2C. ll 21.word). AlQ_D. . Al OO xxxx:OlOO MOV BX. .. se encuentra en el registro AX.!_6 bits.· ····· . ~~ cm:i.r~c:ha ("silift rig~~-" ).C9onvert b}'te to . . .la i~stru cción CBW .d_e_\~ _bits. ... ... 1100 ' ·· · ·~ . El resultdo.. •• • ... XXxX:Ol OA 'iNT 20_ . l .• xxxx:0109 . m.derecha .i'~q~i~~·d...~_<.111110101 LJ....iiffieró ~º-~ FFFAH . . .en ÓÜO (6).• .~j~~~. I?..__(.._J.. que ejemplifica ... . cualquier registro de 8 bits... FFFA._. y uso de CBW M~ÜipÜcar ~l número entero que está en la diiección 2000 y 2001 por el número -60 . ..___.. . 9.~anera inversa.. .J.. ... dos ....L. .J. xxxx:Ol04 MOV AX.. . en FFFA queocupa AX xxxx:Ol07 IMUL BX Or~_e.: C_cinvierte FA que está en AL. . . .. .en_cµentra en los registros DX (mitad superior). \'.Q. . -· -·... Carga en AL el otro número entero de 8 bits xxxx:Ol 06 IMUL CL Ordena multiplicar CL. :A es\e último se le debe p_~opagar e_ l _signo \unidad 4).. cómo el número .Tiq~i~r·dop. en_ct!alquier reg~s~ro._ un~ posición. CBW.. median te . XJO(x:O~O'! .. ~~~-ó~.... .y 2001. . [2000) Carga en BX el número entero de 16 bits que está en 2000 y 2001 x~X.... J J.~~-f~ J?·?~I~íóñ-~treiii~. .asa a ser el valor del flag c.)i~ar J32C por. . c_on _resultad.. .. ' En general.. J__. .Ie....tepjdo . y el otro en AL El resultdÓ.ediante ________ una sol~_i. ipcxx:019.~. ..._ag~eg~ ~ce¡¿._. .~.. con resultado en AX FiTI . fy!QY _c...ón _IMUL. ·-· . merced a que desplaza h~~ta l~. ··-INT . J..· Así es posible ...~~~~~O. U3-28 La instrucción SHR AX. M.. •• •·•••· • ..."J!.. en.• • . _J . 20 .mediante Ja instrucci..•. P¡¡ra multiplicar !fos números enteros de 16 bits..:i-~Ttliár''fiacia"i~"LZ:qt.. y DX (mitad inferior) .. BX el número entero de 16 bits que está en 2090..¡.ferci'a"' (sbi'it left). . que puede s~r un núrriero de has~ª . l~~-'\)Ús d~l ~~gf~:~ &~·-y_.. . C:arga en AX el otro número' entero de 16 bits xx~x~ófo7 IMÜL BX Org_eJla !11.. ELnúmeros... uno de ellos puedC! estar en.bits.~9.uL~iP. • ·: llevando-Ü~-c~"fó-.. .eTVif~~-t~éffi(.x :0104 . MOV AL.pc)r AL...: •.d e f0 ... Acción de la instrucción 101111101 e Resultado º-L. ·-. SHR di:splaz_¡i _uz:t J~gªr: .· ~ la izquierda: Esto se in~ica en la figura que sigue.. FAH ..t.-u. ca~a uno mediante IMUL Multiplicar el nÚinero entero que est_á en la dirección 2000 por el número -60 = 111~1010 8 =F~_H Para multiplicar dos números enteros de 8 bits. . . p... . ·. ._.A. Fin EJERCICIO 37 : Multiplicación de un número entero de 16 bits por otro de 8 bits.. ..(J Generalización paran bits .está en la 'aírecdón ... . qué.na multiplicar BX por AX.ero ... mediante la instrucción IMUL. que puede ser un número de hasta 16 bits.. i)'....J. . 2bóby'2bói p'or elíi. [2000) Carga ~n. _. 16 bits de AX.. por ...se transforma. ~J~RCICIQ 35: .. AlOO xxxx:OlOO MOV BX.· · • • .MOY_At. SHL-AX~i despla~-.y . __. una mul_tiplicación entre dos números de 16 bits..• .~Hiplicación de dos números enteros de 8 .[209Pl Carga en CL uno de los números enteros de 8 bits ..~:-Ei bit d~-¡~-. (12) .-·. xxxx:Ol09 INT 20 Fin .b.. cada ilnü'<le los. 1 permite r~pi~amente dividir por dos un número binario.• .. F~.3_2J~i~.. el o·--J. ·~-·· multiplicar ._.iª.. • • •• . en·--·-- binario. y el otro en AX. y ~l .hX... para .::J.~C! .___ .. para que result!'.~t~~~a derech~ pasa a ser el nuevo valor del flag C (Carry) .. •• .. FA Qirga en AL el otro número entero de 8 bits xxxx:0106 ...o. p_u_ede estar..· :: EJERCICIO 36 : Multiplicación de dos números enteros de 16 bits cada uno mediante IMUL M~itipli~~r-~i'número ..el contenido del registro. . .. uno de dios pued~ est~r. • .~-~D...

:-~ En la figura 3.(P)..·-."<~do dentrp d~(~e~J.. . . . Qe la direct.~~ q~!= resulte11 de la ejecución del mismo.mo_do n~a.ª debe. .\i.valor del d~?... segmmto . .. del segI!1ento de da_t_os. ··..'. • . eJ prograrr:i:a_.ªD. . los procesadores pueden operar en . . tres.-~4'-9-_~i9}..!nte!'Q~:.máql!ina de las irlstruccion~?.. p_t. el par de valores ES:D~ ?!rve par..}~~}~:§. ge.....los .en.24).rección )Jase) + 1723 (desplazamiento) 2C883 (dirección efectiva) Se observa que a 2B16 se le agregó un cero a la derech~ (eq_l_:!_iy_í'.:ent_~ pa_ r a. En laf1gura 3.~r. .:'.~r.. En la figura 3. se ha 5µpuesto CS:_IP = 302B:B01C.. _ Ei}__el _~spa.guardar datos tipo "string~lf _.azamiento .2Ii. .ión (2B16 en.e. (DS = data segrn~n~ · ~egis!er) Confgr.7?! o ~_ea una memoria de 1 MB.modo real o en modo protegido. 2. .a. Segm~ntq ~~tra: u._ siendo que la celqa localizadél. .a_l?s dato~ que _el.~_}1l._que co!l!p~_ l()_que_se denomina el "c?....~l~.24 se ha .[1t()_ ... z J:?esde el 80286 hasta el Pentium.-q'-1~.r ior implica ~figura 3. .:c:lél..if~iJ. o ~orno pro}ongaciól1.ier.·-··-··-···- St9bservamos'elDebug"vemos que normalmente los registros CS.noriª _cigLª_ü2J~§-~ª4. S.g()_S_ ~e. en i¿na dirección que en el Debug aparecía corno 2B16:1723 sólo considerªl:Jarnos didácticamente la porción derecha 17~3: Ello suponía considerar una memoria (figura 3. que en hexadecimal es: 2Bl60 (qi. Ca~a instrucción es localiza~a dentro del . uno.et'. denominado regi_stro desegm~11_t():__ l. ?P~ra.1Í!~~~~._ .é1~~I1~º _i:~specto .i:I9_S~~-°-?.J2. ~~.!ltg!'iO~_Q!l__g~tQ_?.24). cual el valor 172~ r~"_i)resenta un "desplazaJJ]. pp_r ciirección efectiva 2Bl60 (2Bl60 + 0000).regi:?. "registró d~ ségmento de .24)..plaz.FF . dentro _del . . Lª_dirección donde comienza .~~).. . a l()~élli:z:ar un da fo en eI segrñ.ciatos: qu_e guat9:. disponE: d~ cuatro segment()_S indepe_ndientes de <?4 KB. ··--··-· ..trq .__ Cad<! _~~tos _es ~oca!iz.~~e1··:~¿~:~~9~.~~~'.~~E7_P. El origen de este segmento es direccionado (apuntado) por.~!!!~PJO.!() por . "iegz~fra([e· segnieiito extra" (ES .048.~!:. .g. una ins~ucci_ón se localizfl ~ ~J~~f~~~~~go Ir\~drai:te el par de valores CS:IP.. ~o~ lo tanto_el par..22) cuyas <li!ecciones iban de 0000 a FFFF = 65.?.)~f]i1l~L<?:ª~~r~·e.. . de_l o_rigen A~_l__ ?. .~~c!i. .24 se hasµpu.l)~~t-~-ª~-l1~.e ~()ffi() ._ PLC?.25). .'gfr~f~iQDéld() pQr... y. d~ va~()!_es S.~. DS.S:KP.supuesto ?S:SP = A3232:7.t~.u~n.~Jocalii~-~P.s ado mayorm. .. datos'.24....I.~l registro puntero DI (figura 3. ~stqs.}?~:Pl.5--c~I~. · · .-· -· .~!1 ~ultitasking (multiprogramación). qireccionados en su origen por unJegistro. (figura_ 3. .nen.J.= 1. \!_~'. d~r de~p~#~~stit9.24 se ha supuesto ES:DI = E230:5420 Los registros de segmento permiten cambiar de lugar programas.._~L!~g~!~q_Ae_~eg~~?!_~q_qep_il_a :' (~~ = stack segrne11t_ reg_~s~e.~83 = ?B160 + 1723 = 2B16:17~3. E_~te o.536..._Así.nento e~ pi:oporr:ionada por.Q...23) que_la UCP (80286) din:~c_:ciona una memoria cuyas direcCÍ<?!leS Y. un eji.i!él_ ipf9_rm. · · L .C:!... .'...~~~~:-·-- 3.S:SP per:m. . ···-·. ~eg~~~t() _ de . en :r:~lac:ión ~9_I1 el orig~n del segi.a __p!ograma.. pr9pq~ciqnan el valor.exha~· .P-ªIt~jzgu.-~L?~grr{e11t_o_ de dat()S mediarif{ alguno de los s~gl1i_e11J_es P~!es _g~_Xªl?~~§: ..c:j9.• . . Este ú_ltimo_es el que se utiliza . ~-~.~:25_1A ·r ~i:~:~6~~a~cr~~¡-&.··-····--···· ~f·t- código_"_(CS =code segment registerLJ.º1plo anterior). l... . Ello implica que Jos cuatro seg- me~!~_s_ c~t~-~~5-.. ~rnpiezan en la misma direcció]'\ (2B~60). . co~t"enido -en..?23 tier).' r~specto _del __~rigen relc1tivo 0000.....·.i~~tº''.gP:i~rifo::cie p_Úa: es. ._~. ED .· Lo-anté. qu~_ pr()porciona el . .'..(cacienas.. _d~ntro de la pila (figura 3.. sea que están superpuestos (figura 3. ..~... que c9n~f!t:gy~D-. .1!1-edi_~ <!el ~p!. . En la figura 3. . . cii])9Q. segm.Pº! . ..S.cliJ~<. . •..to.~4~~~5·f0~~i1%itJr¿:~~. co11 desp1.9-!~n.cic)n ~fect~va 2C. extra segment register). prog1::ª111. Cada dato es apuntado dentro del segi. con tan solo cambiar el valor mismos: ·.r).62A 4. d~_<:9:~9-.ite localizar e~ e_l s~g?:i:i::r:.m~ªJº---ª.P?.b"b ~ fFf. l!Pª dirección efecÚ~a es formada con las dos porciones (2B16 y 17~~) que la c_omponen.i~~~lº~~!Üf~~~ik:.~~do~riepl~~~'..esto p~:DI =:=?04.. '· ~ ~~~\ :. . d.r e_~ .. a}gl!Dº_ d~.. ~¿~ .30~.~c!ón. . .24).. .~n. Ul}_ !~g~~trojieri'Q~fu-ªEii~~J... .. o sea una memoria de 64 KB. Las direcciones que van de 0000 a FFFF c"nstituyen un "segmento" de 64 KB _de la meinori~ __d _e_) __MB..<>-~º-~ª-~ . 1 Este punto es necesario para desarrollar los temas siguientes. SS y ES ~stáf1 con ~1 valor qe l~.e~t~: seg. _dg .lo tanto..negt_o (fÍ~?: 3..r igen tiene. ºfü.rc:iof1a_d_a_p_o. La direccién1 de inicio _d e este segmento es propo.. para lo cual la UCP realiza una suma binaria. ~. ._egn.o: do~~-~2~-g~~r-~l} ]()~ ~§5. U3-29 DIRECCIONES EFECTIVAS Y REGISTROS DE SEGMENT0 1 Hasta el presente.rnd. el ..· . el.

.~:i ' -.- ..~-~~ti~!'e un_pr(?grama pequeño. '.··-·.25 .24 Figura 3. .. . úfil. . en área$ separadas.23 ' FFFFF L--·-··-·---·-·J Figura 3.P:t.. como un solo segmento de 64 KB. ... . 1 28160 5299A (5048:251A) 2C883 2816:1723) ! :. U3-30 E~~.. up programa.~ ' AA83A (A321 :762A) l 1 E2300 (ES=E230) 1 1 ! l i FFFFF I.t ' 64 KB 30280 (CS=302B) ' ... i ····-··-·----···-----·._ ' '• 1 1 i FFFF ·-·····---·-.~.¡-:: .hemos estado usando dichos segmentos..__ _ Figura 3.. . ! ·¡ •• . .··--J 3B2CC Figura 3.e~__que . .. . ~·... como son los .r •. ooooq 00000¡---------·1 1 : ¡ ¡ ! 1 .. y una pila (figura 3...r .~Q.COM...· . ·· ¡'. En este segmento pueden convivir.22 (3028:801 C) ººººº¡ ·. ·1 ••• ..25) 0000 .• ·• ! A3210 : ' (SS=A321) ··-"'·~ : . datos... es la f_orm~ .~ ··· .

) ··-·-· p________ _.. ejecutacf~~ =~-ñ c~~~güie! p~t_o _de un P!ogr~~~:.--------L ·. · · ·· Como se verá.~taJé.de la ·ejecución de la SR (2a) instrucciones ordenan guardar en la .qli<.ª R~1:"!ll!t. ...maqo" ("caW) a ~ubrutin. . . .. que venía usando -el _programa llamador. que puede ser incorporada. ...· · -..1l. · 2.'~~esapHar"!__() ?~ª-!!... y en beneficio de una mej<.~!) dé-la memoria principal denominada "pila" ..encima de la d~rección de retorno citad~.a. . con la consiguiente economía de memoria.------ ¡ 13 Ik.. ..ienzo. -~ico p~ograrrÍ<:_ejec~_té1ble_-::. prol:>arse y a4nacenarse para formaar parte de una "bibli~tec:. para ser \ '. tradl. (CALL en ass:e mbler de Intel). . La dirección de memoria donde se escribe (o lee) la dirección de retomo es proporcionada por un regISfro dé la UCP denominado "puntero de pila" ("stack pointer" ~ SP). :· . ··-·. . Luego se ejecutan I. de la SR.il}lJin~s~'.~ª~.. cada vez que _se la nece__sita se la invoca como subrutina..J....te la ejernción de cada Figura 3. 1 del programa llamador de la SR~ o sea r--··-·····-···········-····-·············· ¡-- ¡ ---------- '· a refoinar este' prograi:n~ 2b ~~~i~~ La dirección de Il•t' o sea la "dirección de _retorno''.a . :§!1 g~_!:l_e~_a!!_l.s.. en cada oportunidad .en una· zoí1a MEMORIA t. 11 ..J!l~ s~p~utina es llamada sucesivamente desde distintos puntos del pr9grarn·a. Existen ~~~!:u tinas que se es~riben corno programas independientes..9.. Las últim_as instrucciones de la SR (2b) ordenan. U3-31 LLAMADO A SUBRUTINAS Una subrutina es una porción específica de un programa.. ll!l.. .~~J~ fl:rnción se necesite. . ¡' pasar a ejec_u tar una subrutina (~R).·-···-······ !r.. una vez que ésta se haya ejecutado.. Cuando desde un prográma se quiere .ia de suficientes.-?~~~~. .~JriadÓs e~_ m. Corn~ tales pueden..a en el p~~grama prindpal.e c~. ~a misma porción de programa escrito una sola vez pued~ ser usada muchas veces. Así. · MEMORIA La pila · se usa duran.de requerir lá ejecudón dé üna~ subruthi~a­ 1" ·(} qµe se incorpora a un programa. la denominación "pila" se debe a que al com.. 1 . instrucción con la que continuará la ejecución del programa que llamó a la SR. . acdóñ. principal Pélf_~ pr()_v~f. ·· -· .. En lugar de incluir repetidamente dicha porción de prograµi. s1. debe ordenaar saltar a la prim_~ra i:tstrucción (! 1) de dicha S.· Las -caüsas'" más COITiunes para co9-ificaar un programa en "v arios supprograrnas separa<. Otra razón para usar subrutinas es la división de programas largos en módulos más pequeños. . . una .?~ una función.d~..· Previamente (paso O) Ik ordena gu~dar en · memoria principal la dirección de Il.~i~r~n coffi..q~e ~e quiere re_sohrer ·\\ • Agilizar la fase de depuración de errores 1 • CE-_"i-1~ eidste-n c.:E.~~n.·.i~s ' -que lu.(-....~.26 sitbrutina que haya sido llarnadá... :2000 :fo·______ 1t _________ 3: La última de estas instrucciones I" (RET ¡ 1 er:i assernbler) ordena saltar a la dirección de '-. i l. es guardada -paso a·de la ejecücíón ·····-···-···-1~~---·--··-·· de la instrucción Il de llamada. Dichos contenidos se "apilan" -como una pila de platos.~ng~ ªi~~if\~()S_pr_og_~~~~s.. ya 1 • :Erarovecfüiiriierito ·d·e sübrüHñas ·exiSteiúes ··-. (" stack").1 .. regi. y las siguientes instrucciones . se conoce corno.. _ _.q}p_~rj:~~-?.. <~.Stros de la UCP para un programa extenso • La división de un programa largo entre varios programad~res · · ! .l¡:irse..>r estructuración de los prograrna.·~ I intrucción Ik del mismo denominada de "1Íarr1adi{ 'a-sübrutirla''.La.pila contenidos de registros de la UCP.....fl _ser: \ • _f~~git_a_r la S()lución del problem~.. . . .

C:O...--·..:=:=.. '~·"""'·· :Unsign~.. --- -~· ··· ·· automáticamente por la UC... el cual en el programa es asignado en memoria a la variable correspondiente. Asimismo. -·· -"'-----. [4000] La variable R pasa a AX xxxx:0507 ADD AX. .. .DX Suma el valor del multiplicando supuesto en DX y deja 'resultado en AX xxxx:2005 DEC ex Resta en cada ciclo uno a CX. para usarlo luego xxxx:2009 RET Vuelve al programa llamador.. . figura ~. Esta exigencia surge de observar la subrutina... Este pase de datos del programa a la subrutina. .=:: . .27 En el programa llamador.-··------··-·· ----··-· . ú1strucci~ñ-es ___ ------~ ..ié!?......P. ·.. .... ..ada~· los· c.. 1 Esto. .. __ ...cu.. ····--·-----· R~ 4000/l Q ~ 5000/ l p ~ 5500/1 T ~ 6000/1 N ~ 6500/1 Entonces. -.~--S. ... DESCRlPCION MAS DETALLADA DEL PROCESO -- 1~·-c:o·itüicacú>n -~i"e.anejado . . . la subrutina deja en AX el resultado.... como se verá. ~ ....Ternos usando para ·m.. [6500] Pasa el valor del multiplicand o (N) a DX. ..l?._ _ ______ ____.... ""· T = NxQ será11. Existe otra forma de pasaje de parámetros por medio de la pila. -·· · .. --·-··- Efmismo .. N ..m.es_ didácticos seguí. .. [5000] La variable Q pasa a ex 1 xxxx:0504 MOV AX.rr~P. [5500] Pasa el valor del multiplicando (P) a DX. en-forma . una forma de presentar las instrucciones es la siguiente: ASOO xxxx:OSOO MOV ex.. los contenidos que tenían en el momento del llamado a SR El registro SP-es usadó paára apilar ydesapilar. .. de la pila hacia los registros.... ~_jnstrucc:.------.xQ . Los parámetros se han pasado a r egistros..!ia·: . se pasa al registro DX el valor del multiplicando (R ó P según sea).~vel: ··. la pila. con llamadas a SR para efectuar las multiplicaci(_?nes S!. y de resultados de la subrutina al programa se conoce como "pasaje de parámetros".f. pues así lo exige la subrutina xxxx:0519 CALL2000 Vuelve a llamar a la subrutina para hacer NxQ xxxx:OSle MOV (6000].X:~. dado que ésta emplea los registros DX y ex para dichos datos.-- : U3-32 pa_sa~do ~~~-:!:i.i_?~~s en a_sse~~ler.R:t Q . que luego se ilustrará.._asumiendo para la.a lpor su iTitermedio controla ·--· ·.51.·-.o ñterudos de pila. volver a 2003 xxxx:2008 POPCX Pasa el valor Q de la pila ª ·ex.e_J:DP. ... .. xxxx:0513 MOV [4000]. Figura 3.. la .~~~!:_~_t_e. es ni.. antes de cada CALL..d. pues así lo exige la subrutina xxxx:0510 CALL2000 Llama a la subrutina que está en 2000 para hacer PxQ .. también lo exige la subrutina paara hacer el producto .. AX Asigna a la variable R el resultado de PxQ que la SR acumuló en AX xxxx:0516 MOV DX.~ .~J:1. hasta que sea CX=O xxxx:2006 JNZ 2003 Mientras Z sea O.. AX Asigna a Ja variable T el resultado de PxQ que la SR acumuló en AX A2000 xxxx:2000 PUSHCX Guarda en la pila el valor de eX=Q para poder luego recuperarlo xxxx:2001 SUB AX..t~nc:_ia:5 en alt_o__:i...~~_v~aría~ies"i~s-~Í~eñtes aueccí()~~~~~-~~~~1!.CX Realiza en AX: N = R + Q xxxx:0509 MOV [6500].1:!~....ultlpllcai (é'on sus lirilitaciones) la secuencia ~la. AX Pone AX en cero xxxx:2003 ADDAX. y al comienzo del programa se pasó el valor del multiplicador (Q) a ex.. -. así en ex se vuelve a recuperar el valor de Q (que en Ja subrutina se hace O). . R .. AX Asigna a la variable N el valor d e AX xxxx:OSOe MOV DX........i<.. ··. la.. -. ' ' Ejercicio 38: Las·:~rglitin~. orden..

usada para almacenar tamporariamente direcciones y datos relacionados con la ejecución de subrutinas.27 y 3 .3 1 Figura 3..32 De la descripción anterior resultan las siguien tes características d e la pila: .·' l l ¡ í FFEA (FFEB FFEC 13 . Esto es. la instrucción POP CX ordena un movimiento contrario a PUSH CX./ / ~o+ FFED 05 FFED SP:<l. o sea PUSH CX.28 Figura 3. ú ltima d e la sub rutina también afecta e1 la pila. permanece SP = FFEE. La siguiente instrucción que se pasa a ejecutar es la p r imera de la subrutina. Es conveniente seguir este proceso usando el Deb ug. pues. que tenía antes que se llamase a la subrutina. Al desapilar sólo cambia el valor del SP. o sea que determina la dirección de memoria FFEE (figura 3. Esta instrucción ordena guardar en la pila el contenido (supuesto 0002) d el registro CX (figura 3.. Con el Deb ug. de modo que se puede reanúdar el programa en la mstrucción que sigue a CALL (figu ras 3.28). U3-33 11. En lo que sigue veremos cómo progresa el SP desde que se llama a una subrutina hasta qu e se retorna al programa llamador.30). 1 ·~ t• ~' ' ' IP '~-----~ 0513 ex¡ · 0002 =i . siendo que el SP apunta ahora a FFEC. m ediante el coman do E se examina la pila en distintas oportunidades. siendo que se ha apilado el valor 0513. ADD AX.:' FFEB 13· . Ob servando el Debug (ejemplificado a continuación ). SP: FFEE Figura 3. indicando la nueva cima de la pila.29 Figura 3.. aunque momentáneamente siga en la memoria..• FFEC ) . apuntando al dato que está en la cima de la pila.32)./ tf' FFED 05 SP . el m ismo deja de formar parte de la pila. DX. al comenzar la secuencia. La instrucción RET.FFEC • . Asimismo. Uso de la pila ("stack") y d el stack pointer (S P) Como se planteó anteriormente. '"' .29).31). mientras se ejecuta CALL 2000: n o es necesaario insertar en el p rograma ninguna instrucción que modifique el valor del SP.-. la pila es una zona de memoria principal. Si se ejecuta la instrucción CALL 2000 d e la secuencia anterior.___ __. automáticnmente. El valor de SP cambia. luego de ejecutar RET. luego cons tataríamos con el Debug_que en la pila se guard a la. AX.o FFEE sp·:Bu FFEE Figura 3. el va lor del SP pasará al valor FFEA. Hacia el final de la subrutina. y que en correspon dencia SP=FFEC (figura 3. El d esap ilamiento que ocasiona hace que el v alor de la direc¿ión d e retorno se restaure en el IP. Las instrucciones SUB AX. cuando no se usa la pila. Siempre que se desapila un dato. DEC CX y JNZ 2003 no afectan a la pila. el SP pasa a l valor FFEE. FFEE .30 ex! 0002 IP I 0513 -·-j / / 1 FFEA ___ / i i ·. retornar el dato (0002) que está en la cima de la pila (ap untado p or SP) al registro CX (figura 3. En consonancia con el nuevo apilamiento. Además POP produce un desapilamiento. El puntero d e pila (SP) es un registro de la UCP que proporciona la dirección del último dato que se ha ahnacenado. dirección de retorno 0513.

que es el . respectivamente. Cuando 2 ó 4 bytes son desapilados de la cima. la UC durante la ejecución de ·..32 se ejecutará la secuencia de la figura 3. AX DS:6500=0000 -T AX=0007 BX=OOOO CX=0002 DX=OOOO SP=FFEE BP=OOOO SI=OOOO DI=OOOO DS=l06E ES=l06E SS=J06E CS=l06E IP=050C NY UP ET PL NZ NA PO Ne 106E:050C 8BI60055 MOV DX.eX -T AX=0007 BX=OOOO CX=0002 DX=OOOO SP=FFEE BP=OOOO SI=OOOO DI=OOOO DS= l06E ES=l 06E SS= l06E CS= l06E IP=0509 NV UP EI PL NZ NA PO NC 106E:0509 A30065 MOV (6500). conocido como "cima".28 a 3. mie·n tras se ejecuta una subrutina. Los datos tienen una restricción de acceso: sólo pueden agregarse o eliminarse por un extremo de la pila. mediante el comando E. [5500) DS:5500=0004 -T AX=0007 BX=OOOO CX=0002 DX=0004 SP=FFEE BP=OOOO SI=OOOO DI=OOOO DS=l06E ES= l06E SS=106E CS=l06E IP=0510 NY UP EI PL NZ NA PO Ne 106E:05 I OE8ED 1A eALL 2000 -T AX=0007 BX=OOOO CX=0002 DX=0004 SP=FFEC BP=OOOO SI=OOOO DI=OOOO DS= l 06E ES= l06E SS= l06E CS= l06E IP=2000 NV UP El PL NZ NA PO NC 106E:2000 51 PUSH ex . El último dato colocado en la pila es el primero en quitarse..27. el valor-aeJc-sp es previainerite decrementado en 2 ó 4. a posteriori el SP es incrementados en 2 ó 4. first out". POP y RET) A los efectos de visúa!izar mediante el Debug el proceso indicado en las figuras 3. cuando se comienza a retirar datos. desde la dirección 0500 a 0513. [4000] DS:4000=0005 -T AX=0005 BX=OOOO CX=0002 DX=OOOO SP=FFEE BP=OOOO Sl=OOOO Dl=OOOO DS=l06E ES=106E SS=l06E CS=I06E IP=0507 NY UP El PL NZ NA PO NC 106E:0507 OIC8 ADD AX. i.:.qu~ está en la cima de ella. PUSH. respectivamente. (5000) DS:5000=0002 -T AX=OOOO BX=OOOO CX=0002 DX=OOOO SP=FFEE BP=OOOO SI=OOOO DI=OOOO DS= 106E ES= 106E SS= 106E e S= 106E IP=0504 NV UP EI PL NZ NA PO Ne 106E:0504 Al0040 MOV AX. y el SP es controlado por.:~:. IP 0100 :500 -R ' AX=OOOO BX=OOOO CX=OOOO DX=OOOO SP=FFEE BP=OOOO SI=OOOO DI=OOOO :. y sacar o tirar ("pop") para señalar la operación de retirar el dato de la cima. Cada vez que 2 ó 4 bytes son~ almacenac:tos ("apilados") en la pila.U3-34 La pila guarda temporariamente datos en forma ordenada. Previamente será necesario suponer valores pa ra las variables. En inglés esto lo expresan las siglas UFO: "last in. Asumiremos: R (4000/1) = 0005H Q (5000/1) = 0002H p (5500 / 1) = 0004H Estos va lores se escriben en memoria. El SP controla el orden de la pila. El puntero de pila (SP) proporciona la dirección del último dato almacenado en la pila.:J DS= 106E ES= 106E SS= 106E CS= 106E IP=0500 NV UP ETPL NZ NA PO NC • 106E:0500 8BOE0050 MOV ex. Se usa la palabra introducir o empujar ("pusli") para indicar la operación de colocar un nuevo dato en la cima de la pila. en las posiciones de las variables. como se hizo en la unidad l. instrucciones que afectan a la pila (como CALL.

. AX -EFFEA 106E:FFEA 02. DEe ex t.-.DX (Se observa que la pila no cambió.. manteniéndose 13 en FFEC. '¿' • • • ~ -T . .DX . -- -T AX=OOOO BX=OOOO CX=0002 DX=0004 SP=FFEA BP=OOOO SI=OOOO DI=OOOO DS=l06E ES=l06E SS=l06E CS=l06E IP=2003 NV UP EI PL ZR NA PE Ne 106E:2003 OIDO ADD AX... 05. que es la dirección de retomo) ~T AX=0007 BX=OOOO CX=0002 DX=0004 SP=FFEA BP=OOOO SI=OOOO Dl=OOOO DS=l06E ES=l06E SS=l06E eS=106E IP=2001 NV UP El PL NZ NA PO NC 106E:2001 29CO SUB AX. .AX DS :4000=0005 (Luego de ejecutar RET...·.: . . 13. el SP volvió a su valor inicial FFEE. siendo que en FFED guarda 05) -T AX=0008 BX=OOOO CX=0002 DX=0004 SP=FFEE BP=OOOO SI=OOOO Dl=OOOO DS=l06E ES=l06E SS=l06E eS:::l06E IP=0513 NV UP EI PL ZR NA PE NC 106E:0513 A30040 MOV [4000).. ...... de 0513.. pasó al lP) -T AX=0008 BX=OOOO CX=0002 DX=0004 SP=FFEE BP=OOOO SI=OOOO DI=OOOO DS=106E ES=l06E SS=l06E CS=l06E IP=05 16 NV UP El PLZR NA PE NC 106E:0516 8B 160065 MOV DX.. -T AX=0008 BX=OOOO CX=OOOO DX=0004 SP=FFEA BP=OOOO SI=OOOO DI=OOOO DS=l06E ES=l06E SS=l06E CS=l06E IP=2006 NV UP ETPL ZR NA PE NC 106E:2006 75FB JNZ 2003 -T AX=0008 BX=OOOO CX=OOOO DX=0004 SP=FFEA BP=OOOO SI=OOOO DI=OOOO DS=106E ES= l06E SS=l06E CS=l06E IP=2008 NV UP El PLZR NA PE NC 106E:2008 59 POP ex -T AX=0008 BX=OOOO CX=0002 DX=0004 SP=FFEC BP=OOOO Sl=OOOO Dl=OOOO DS=l06E ES=l06E SS=l06E CS=l06E IP=2009 NV UP EI PL ZR NA PE NC l 06E:2009 C3 RET -EFFEC 106E:FFEC 13. y en FFEA el 02. (Se verifica que en Ja pila guardó en FFEB el 00. y la dirección 0513.. .·:~·~ ~":... 05.. .. pues SP continúa apuntando a la cima que está en FFEA) -T AX=0004 BX:OOOO CX=0002 DX=0004 SP=FFEA BP=OOOO SI=OOOO DI=OOOO DS= l 06E ES= 106E SS= 106E CS= 106E IP=2005 NV UP El PL NZ NA PO NC 106E:2005 49 DEC ex -T AX=0004 BX=OOOO CX=0001 DX=0004 SP=FFEA BP=OOOO SI=OOOO DI=OOOO DS= 106E ES= l 06E SS= 106E CS= 106E IP=2006 NV UP El PL NZ NA PO NC . de 0002 ' contenido en ex.: ')fJ:. OO. 106E:2006 75FB JNZ 2003 -T AX=0004 BX=OOOO CX=OOO 1 DX=0004 SP=FFEA BP=OOOO SI=OOOO Dl=OOOO DS=l06E ES=l06E SS=l06E CS=l06E IP=2003 NV UP El PL NZ NA PO NC 106E:2003 O1DO ADD AX.. (El SP pasó a FFEC donde guarda 13.. ·~· .. (Se verifica que en la pila guardó en FFED el 05. guardada en la pila.'<: AX=0008 BX=OOOO CX=OOO 1 DX=0004 SP=FFEA BP=OOOO SI=OOOO DI=OOOO . 05.. ::. 03-35 -E FFEC (Examina la pila) l 06E:FFEC 13. DS=106E ES=106E SS=106E CS=106E IP=2005 NV UP El PL NZ NA PO NC ' ': ~' ~~ .' 106E:2005 49 ..[6500] DS:6500=0007 ..¡·y<. .. y 05 en FFED) . t. y en FFEC el 13.~ ' .

-1 Si no es igual a 1 determina si es -1 = FFFF xxxx:502A JNZ 5010 Si no es igual a -1 se hace otra aproximación ¡ ' ¡· xxxx:502C MOV BX. volver a lOA xxxx:Ol20 INT 20 Fin ASOOO 1 xxxx:SOOO PUSHF Guarda los flags (Registro de Estado) en la pila xxxx:SOOl PUSH AX Guarda AX en la pila xxxx:5002 PUSH ex Guarda BX en la pila xxxx:5003 PUSH DX Guarda DX en la pila xxxx:5004 SUB DX. [SI] Carga en BX (para la subrutina) un dato de la lista apuntada por SI ·: ·. 2 Incrementa en 2 el puntero SI xxxx:0119 ADD DI. . o sea el Registro de Estado. dado que cuando se ejecute la subruti~a cambiará el valor de los flags. en la pila.. BX Vuelve a cargar en AX el número N de 16 bits xxxx:5016 DIV CX Divide por Al xxxx:5018 ADD AX. BX Carga en AX el número N de 16 bits (dejado en BX) cuya raíz se quiere hallar xxxx:5008 MOV ex. 3000¡. a) Resolución por medio de pasaje de parámetros a través de ~egistros (en este caso se usó BX) A 100 xxxx:OlOO MOV CL. . terminar xxxx:5020 SUB ex. esto es necesario hac~rlo. Como se verá. sumarle 3. CX Compara A2 con Al xxxx:SOlE JZ 502C Si son iguales. terminar xxxx:5027 CMP ex. siendo que se requiere volver a la secuencia principal con los mismos valores que tenían los flags antes del llamado a la subrutina. AX Guarda el número resultante en la lista apuntada por DI xxxx:Ol 16 ADD SI. 1 Compara (Al . Determinar la raíz cuadrada de cada uno. 1 Divide por 2 la suma antes hallada. 2000 El registro SI apunta al comienzo d e la lista de datos . Este problema se basa en el ejercicio 34. AX Guarda An válida en BX xxxx:502E POP DX Restaura DX desde la pila xxxx:502F POP CX Restaura CX desde la pila xxxx:S030 POP AX Restaura AX desde la pila xxxx:5031 POPF Restaura los flags en el Registro de Estado desde la pila xxxx:5032 RET Retorna al programa principal b) Resolución por medio de pasaje de parámetros a través de la pila ' En general. AX Lleva Al (cociente) que está en AX hacia ex (divisor) xxxx:5012 SUB DX.. BX Suma 3 al resultado de la raíz cuadrada dejado por la subrutina en BX xxxx:0114 MOV [DIJ. DX Lleva a cero el registro DX xxxx:5014 MOV AX.Dlapu::ita-:a:l-comienzo de la lista de resultados - xxxx:OlOA MOV BX. 2 Suma 2 como pide el algoritmo xxxx:5010 MOV CX. ex Suma N/ Al que está en AX con Al que está en ex xxxx:501A SHR AX. 3 Carga en AX el valor 3 xxxx:Ol 12 ADD AX.. y al número resultante guardarlo en otra lista a partir de la dirección 3000. C8 El divisor ex toma el valor CSH = 2000 xxxx:SOOB DIV CX Divide por 200..-.1. en cualquier tipo de interrupción se guardan automáticamente los flags.U3-36 EJERCICIO 39: A partir de la dirección 2000 existe una lista de números naturales de 2 bytes. -~•.!~ xxxx:OlOC CALL 5000 Llama a subrutina que está en 5000 para calcular raíz cuadrada xxxx:OlOF MOV AX. ·. AX Resta Al-A2 xxxx:5022 CMP ex. 2 Incrementa en 2 el puntero DI xxxx:OllC DEC CL Decrementa eL xxxx:Ol l E JNZ lOA Mientras Z=O. (1500] Carga en CL la longitud de la lista xxxx:0104 MOV SI. DX Lleva a cero·el registro DX xxxx:5006 MOV AX.A2) contra 1 xxxx:5025 JZ 502C Si es igual a 1. y el resultado queda en AX xxxx:OlOD ADD AX.y. cuya longitud está en la dirección 1500. J¡j xxxx:0107 MOV DI. para hallar A2 xxxx:501 C eMP AX.

. . así también BP apunta a la cima de la pila xxxx:5007 SUB DX.e_...t POP AX i ADDAX.el algoritmo : .3: el número N cuya ra íz se quiere hallar está en Ja base de la pila.. o sea de N. xxxx:5014 MOVCX.AX Lleva Al (cociente) que está en AX hacia CX (divisor) ' xxxx:5016 SUBDX. :. AX Guarda An válida en la pila. determina si es -1 ::: FFFF xxxx:502F JNZ 5014 Si no es igual a . entre ésta y el comienzo de N en este caso exis ten doce posiciones (C posiciones en hexa). en lugar del dato cuya raiz se quería cakular1 xxxx:5034 POP BP Restaura BP desde la pila xxxx:5035 POP DX Restaura DX desde la pila xxxx:5036 POP CX Restaura CX desde la pila xxxx:5037 POP AX Restau ra AX desde la pila xxxx:5038 POPF Restaura los flags desde la pila xxxx:5039 RET Retoma al programa principal 1 Indicado como AH y AL en la base d e la pila de la figura 3. [BP+C] Carga en AX el número cuya raíz se quier e hallar' . DX Lleva a cero el registro DX.33 2 Este nuevo apilamiento de AX. [SI] Carga en AX un dato de la lista apuntada por SI xxxx:SOOC PUSH AX Guarda AX en la pila (es el número N cuya raiz se quiere hallar)' xxxx:OlOD CALL 5000 Llama a subrutina para calcular raíz cuadrada que está en 5000 xxxx:OllO POP AX Restaura AX desde la pila (la raíz cuadrada calculada) xxxx:Ol12 ADD AX. pues los números son de 16 bits . ·:.. ~ xxxx:SOOC MOVCX. xxxx:5009 MOV AX. .. 2 Incrementa en 2 el puntero SL . \ . y siend o que ahora BP apunta a la cima. ¡ ..2 Suma 2 como pide. por ejemplo. SP Cargél e~ BP el valor de SP. A X . volver a lOA xxxx:Ol 20 INT 20 Fin ASOOO xxxx:SOOO PUSHF Guarda los flags en la pila (designados REH y REL en la figura 3...CS El divisor ex to~a el valor C8H ::: 2000 . xxxx:Oll 9 ADD DI. .A2) contra 1 xxxx:502A JZ 5031 Si es igual a 1.. ~..33) xxxx:5003 PUSHDX Guarda DX en la pila (en sus porciones OH y DL en la figura 3.. CX Suma N/ Al que está en AX con Al que está en CX xxxx:SOlF SHR AX. 3 Suma 3 a la raíz cuadrada calculada xxxx:Oll4 MOV [DI]. xxxx:SOOF DIVCX Divide por 200. 1 Compara (Al . : ..A2 xxxx:5027 CMP CX.33) xxxx:5004 PUSH BP Guarda BP en la pila (en sus porciones BPH y BPL en la figura 3. D X ' Figura 3. terminar xxxx:502C CMP ex. U3-37 AlOO xxxx:OlOO MOV CL. -1 Si no es igual a 1. 2000 El registro SI apunta al comienzo de la lista de datos xxxx:0107 MOV DI..33) xxxx:SOOl PUSHAX Guarda AX en la pila (designado por sus porciones AH y AL en la figura 3.. • Serán los nuevos valores que toman los denominados AH y AL en la base de la pila de la figura 3. 1 Divide pór 2 la suma antes hallada.. AX Guarda el número resultante en la lista apuntada por DI xxxx:0116 · ADD SI. para hacer '1N +N (en vez de '1N +3) en cuyo caso la secuencia principal se podría modificar como sigue: CALL 5000 rj MOVDX. indicado también como AH y AL.1. [BP+C] Carga en AX el número N cuya raíz se quiere hallar xxxx:SOlB DIVCX Div ide por Al xxxx:SOlD ADD AX. [1500) Carga en CL la longitud de la lista xxxx:Ol04 MOV SI. 2 Incrementa en 2 el puntero DI · xxxx:OllC DEC CL Decrementa CL xxxx:OllE JNZ 10A Mientras Z no sea l . terminar xxxx:5025 SUB ex.33) xxxx:SOOS MOV BP. se hace otra aproximación xxxx:5031 MOV [BP+C]. puede servir. . ~".:·:~·ir .· .. y el resultado queda en AX xxxx:0111 ADDAX. para hallar A2 xxxx:5021 CMP AX. ex Compara A2 con Al xxxx:5023 JZ 5031 Si son iguales. DX Lleva a c~ro el registre· o:x.. : . xxxx:5018 MOV AX.33) xxxx:5002 PUSHCX Guarda CX en la pila (en sus porciones CH y CL en la figura 3. f . AX Resta Al .33 1 l 1 ' . 3000 DI apunta al comienzo de la lista de resultados xxxx:OlOA MOV AX.. ·. " -~J .

/ . sección 1.:· ~· subprograma de la ROM BIOS o del sistem a operativo.~~ ~ -\~ ejecución de un programa. así sucesivamente. FFEDl xx SP ~.. Subrutina que Zona de Vectores sirve a INT 21 OOOO:OOB4 ~~~: llP ~ EA304C20 ~~~~ ~~ t. ésta a una tercera.. y. Conforme a lo visto.da. ésta a la que la llamó.= XXXX:0104 MOV AH. sino a un ·::. como SVC..se estableció. ) FFEd¡:":~~-:~~:.11.. Vale decir.. POP BX POP AX EA30:hhhh IRET FFE8 ! 81 .¡~:. DETALLE DE LA EJECUCION DE INT (INTERRUPCION POR SOFTWARE) En la U nidad 1.~."+ :~ ¡.. y en su lugar se pasa a ejecutar dicho subprograma de la ROM BIOS o del ----: .ga!:. :-. etc. l sistema operativo llamado por el programa en cuestión. Una subrutina puede llamar a otra.-: }} ~. 2 XXXX:0106 INT 21 XXXX:0108 INC DL f @..33 · -·~~-··· Anidamiento de subrutinas ...g. se suspende momentáneamente la .. en relación con el u_so d e la pila v alen las consideraciones h echas al tratar ese tema. se introdujeron los conceptos fundamentales acerca de las interrupciones por hardware y software. -.h¡. el mecanismo de operación de la pila permite cuidar el orden en el anidamiento de subrutinas.. como se ejem p lificará. . Cuando la última subrutina llamada termina de ejecutarse. CH }ex BL / BH }sx // AL AH AEL REH }Ax } RE(flags) IPL / IPH ·p (Dirección } 1 de retorno) / AL AH } AX (N y'/N) Figura 3. . y así de seguido..... ..--~~. en el sentido que desde un programa de usuario no se llama a una porción del mismo.. la ejecución de la instrucción INT xx. Figura 3.Como. TRAP. ... __Q_ª__=:=:_J FFEA! 08 : FFEsr--·-----or·---. Este proceso se conoce como "anidamiento de subrutinas". . De este modo los retornos se van sucediendo en orden inverso al de las llamadas. . Por tal motivo se habla de "a utointerrupción". habiéndose planteado que en esencia son una forma de llamado a subutina. (ª) FFE9 [_.. ... Puesto que u n a interrupción es una forma de llamado a subru?na. ' ..l BPH CL (/j / . ' . FFEE[...a una int~rrupción por softyv:ar:e. se retorna a la subrutina que la llamó. . El último retomo será hacia el programa principal.34 E n otros procesadores la instrucción INT tiene otros nombre5..! provocada por la ejecución de 1NT xx.~. que efectuó el primer llamado..... i. .. 03-38 BPL }sP d!fh¡.. .

~ . Esto es. Por ello.. . . .. [2000] Carga el contenido de 2000 y 2001 en BL y BH.. El RE en el 80286 tiene 16 bits. _.. Multiplica por 4 el número que acompaña a INT. guardados mediante las instrucciones PUSH.• . 4 Carga en CL la cantidad de bits a rotar en BX xxxx:0108 ROL BX. Por otro lado. Ejecuta la subrutina llamada por INT 21. están al final de la subrutina ordenarán restaurar desde Ja pila los contenidos de los registroºs •. i • • • • .}ª . U3-39 Dada la secuencia: xxxx:0104 MOV AH.. como INT 21. La dirección de esta instrucción está en la pila.~~ ' -# . La UC guarda en la pila la dirección de retomo (xxxx:0108) de la instrucción que sigue a INT 21 Sobre ella apila el registro de estado (RE) conteniendo los flags (entre otros SZVC 1).. Por lo tanto. dado que además de la dirección de retorno. Por ejempo...34): . . con INT además de salvarse la dirección de retorno (CS:IP). 2 Los valores que se dan a AH (pasaje de parámetros) se obtienen de Internet y de manuales.•.i\ 4.. .. las·iristrucctones PQP qu~· ·· · >. • .. ordena restaurar los flags en RE. lolololol1lololol1lololorolo·10111 =0881 · · .. \. También retorna desde la pila el contenido del RE.... . 2 xxxx:0106 INT 21 xxxx:0108 INC DL durante la ejecución de una instrucción INT xx.. el SP pasa de FFEE a FFE8.tinua~ión. . . .....r~::. en que con INT xx la dirección de la subrutina se halla a través de la zona de vectores (figura 3. usado para operar en BCD. • · • .pLresultaclo.. .• -· • ·~ • .34): 1. :.r etornar a la instrucción que sigue a INT 21 en el programa llamador (o sea a INC DL). Asimismo. la UC forma la dirección 0000:0084. el contenido del RE en hexa será (como se ha: guardado en la figura 3. respectivamente xxxx:0104 MOV CH. • • ... . también se guarda en la pila el registro RE (flags).. Los flags están dispuestos como sigue (figura 3.3s ... de la dirección (CS:IP) de la subrutina que sirve a INT 21.. La última instrucción de la subrutina. . 5.33).! !. BL Carga en AL el valor de BL 1 El flag A. No se han dibujado dos flags para modo protegido. (en hexa) 21 x 4 = 84 = 0084 ~-t. O sea que 0084 es la dirección...el primer segmento donde empie0:J. de direcciones 2000 y 2001.. la instrucción de retorno se llama IRET ("interrupt return"). Esta es la dirección donde se encuentra la dirección CS:IP de la subrutina que atiende a INT 21. se observan grandes similitudes con lo visto al tratar el llamado a subrutina. El flag T (Trap) se usa por ejemplo cuando en el Dcbug se ejecuta instrucción por instrucción . J "' i ' • .1 . Las instrucciones PUSH con que empieza ésta.~·...._.>.. supuesta en la dirección CS:IP = EA30:4C20.. Salvo pequeñas diferencias. Las diferencias consisten. Suponiendo que los flags SZVC tengan los valores supuestos a C0!1. cobtenidoes el desplazamiento dentro 9.. es el Auxiliar Carry.35) 1 1 1 1 lvloi t ITISIZI !A! !PI lcl Figura3. Luego de ejecutarse IRET. ..:.. 4 Carga en CH el número de loops a repetir xxxx:0106 MOV CL. La dirección CS:IP apunta al comienzo de la subrutina. por lo cual se llama "vector interrupción" 3.""'1 memoria principal (CS = 0000) denominada "zona de vectores interrupción". que necesariamente debe ser IRET ordena . en primer lugar. Los flags l y D se describen más adelante....· ' · rán guardar en la pila el contenido de registros de la U~P.. . . CL Rota a izquierda 4 veces en BX xxxx:OlOA MOV AL. el SP vuelve a su valor inicial FFEE. la UC realiza los siguientes pasos (figura 3. y mostrarlos en hexa en la pantalla en orden inverso (como se establece en Intel) A 100 xxxx:OlOO MOV BX. '' t . A continuación se dan casos de uso de INT 21 2 Secuencia para leer los contenidos (binarios) de dos posiciones consecutivas de memoria. ordena.

A 100 xxxx:OlOO MOV CL... 2 Inicializa parámetros para ver en pantalla caracteres ASCll xxxx:Ol06 INT 21 Llama a subrutina del BIOS xxxx:0108 INC DL Para el BIOS carga el número de AL en DL xxxx:OlOA DEC CL Determina el siguiente carácter ASCII a visualiza r xxxx:OlOC JNZ 104 Mientras Z=O. quedando _. volver a 104 1 xxxx:OlOE INT 20 Fin i' 1 Secuencia para ingresar caracteres por teclado..•.la limitación que al apretar la tecla Enter.o! • • • • ' ¡ Secuencia para vis ualizar en pantalla 255 =FFH caracteres ASCII. t· · · A 100 ~ . 3A + 7 = 41 =A) xxxx:Ol16 MOV DL. ~-· . AL Guarda cada carácter tipeado en lis ta apuntada por DI . . ~. [2000] Carga en CL el número de caracteres a tipear xxxx:0104 MOV AH.120.U3-40 xxxx:OlOC AND AL. 2 Inicializa parámetros para ver en pantalla caracteres ASCII xxxx:OllA INT 21 Llama a subrutina del BIOS xxxx:OllC DEC CH Decrementa cantidad de loops a realizar xxxx:Ol lE JNZ 106 Mientras Z=O.. ~· por pantalla . AL Para el BIOS carga E::l número de AL en DL xxxx:Oll8 MOV AH. siendo que los mismos a medida q ue van ingresando deben obser varse repetidos en pantalla. 2001 xxxx:0107 MOV AH. '~ .) NT 20 Fin • -~ . 1 Inicializa a DI en 2001 Inicializa parámetros para entrar un caracter por teclado. cuyo número se indica en la dirección 2000. xxxx:OlOD INC DI Incrementa DI . 1 Inicializa parámetros para entrar un caracter por teclado. [2000] Carga en CL el número de caracteres a tipear xxxx:0104 MOV BI. volver a 106 --· ·-. xxxx:0109 INT 21 Llama a subrutina del DOS . El número de caracteres a tipear se indica en la dirección i ¡ 2000. el cual luego aparece . FF Carga en CL el total de repeticiones a realizar xxxx:0102 MOV DL. .caracteres. El programa queda esperando hasta que se ti pee el caracter. . 2 Inicializa parámetros para que un carácter en DL se vea en pantalla xxxx:OlOC INT 21 Llama a subrutina del DOS xxxx:OlOE DEC CL Decrementa cantidad de repeticiones a realizar xxxx:OllO JNZ 104 Mientras Z=O. a partir del carácter ASCII 00 ·. 39 Compara con 39 ASCu= 9 xxxx:Oll2 JBE 116 Pregunta si es < 39 xxxx:Oll4 ADD AL.. :'·. volver a 104 xxxx:011 2 INT 20 Fin . OF Pone en O el cuarteto superior de AL xxxx:OlOE ADD AL. Tiene la lim itació n que al apretar Ja tecla Enter se v uelve al comienzo de renglón. .T:·. A 100 xxxx:OlOO MOV CL.. Jos cuales a f medida que van ingresando se observan en pantalla y se deben g uard ar a partir de Ja dirección 2001...f-· esperando el programa hasta que se tipee el caracter. El programa se queda esperando hasta que se han tipeado todos los caracteres. sin saltar al renglón siguiente.i ~ xxxx:OlOE DEC CL Decrementa cantidad de repeticiones a realizar f· xxxx:OllO JNZ 109 Mientras Z =O. . sin saltar al renglón siguie nte. 07 Si es m ayor suma 7 (por ej. volver a 109 xxxx:Ol12 INT 20 Fin f t· t Secue ncia que co mbina Ja secuencia anterior para ingresar caracteres por teclado y visualizaarlos.. El programa se qued a esperando hasta que se han tipeado todos los . con la que ¡ visualiza un carácter que está en el registro DL. xxxx:OlOO MOV CL. : xxxx:0.f. 30 Suma 30 para convertir el número de AL en ASCII xxxx:OllO CMP AL. Tiene . ··· ¡ · xxxx:Olo"B MOV [DI]. el cual luego aparece por pantalla xxxx:0106 INT 21 Llama a subrutina del DOS xxxx:0108 MOV DL. 00 Carga en DL el código ASCII del primer carácter a visualizar xxxx:0104 MOV AH. en la pantalla se vuelve al comienzo de renglón. AL Guarda en DL el carácter dejado en AL por la subrutina anterior xxxx:OlOA MOV AH.t'.

a una interrupción se le puede dar curso o "enmascarar". salen de las interfaces y van a un chip donde. El tipo de interrupción tratado se denomina "enmascarable". en los correspondientes registros de la UCP. empezará con la instrucción STI (Set I).. y la UC enviará al árbitró INTA (A de acknowledge = aceptación) 5. y luego el IP y CS de la dirección de retorno. no da curso a la solicitud de interrupción indicada por INTR (y comenzada por la activación de)a línea IRQ2). entre otros circuitos. Si INTR está activada. que es la dirección de la dirección donde se encuentra la subrutina preparada exclusivamente para atender la activación de la línea IRQ2' La dirección de la subrutina es el vector interrupción. Como se anticipó. Según se estableció (figura 3.. La UC ordena escribir en la pila (como en las interrupciones P.-. Existen también interrupciones por hardware "no enmascarables" mediante el bitl. Este. no pudiendo ser interrumpido el programa. El árbitro envía hacia la UC por el bus· de datos.QrJa UC . Todos estos valores se restauran :. el valor de 1 puede establecerse por software.. contenido en el Registro de Estado (RE). .. la UC se fija en el valor del Interrupt flag 1. 2. la UC . En el Debug.. En correspondencia con la príorización de una línea IRQ. que hace I = 1.. si un programa no debe ser interrumpido. -.. la UC sensa si la línea INTR está activa o no. . y luego el valor de los flags cont_e nidos en RE: · 7. se encuentra un "arbitro". 3. ~. en caso de que haya varias líneas IRQ11 activadas simultáneamente.36. pues según el valor del flag 1. como ser la In. En caso negativo. se aceptará la solicitud de interrupción que llegó a la UC a través de la activación de INTR. Con la dirección obtenida en el paso 5.¡. 8.r ésta y ~a~iiJentes..-. l. En este caso la interrupción no enmascarable llamará a una subrutina preparada para tal evento.· que llega al microprocesador1 pat~er sensada. las líneas IRQn de solicitud de interrupción ("interrupt request")..Or software) el CS e IP de la dirección de retorno.36). Como se especifica en el diagrama lógico de la figura 3. con . luego de tem1inar de ejecutar cada instrucción. Cuando ejecuta la instrucción IRET. U3-41 ESQUEMA DETALLADO DE INTERRUPCIONES POR HARDWARE ENMASCARABLES EN PC Habiendo tratado en forma global las interrupciones por hardware en la sección 11 de la unidad 1..~~·: primer instrucción de la subrutina que atiende la interrúpdón.lo cual se reanuaa la ejecución del programa interrumpido. el flag I aparece en sus dos valores como El (Enable I) y DI (Disable 1). y pasa a ejéc_titá. pasaremos a ver más en detalle el p roceso que tiene lugar durante las mismas. de la pila la UC lee el valor ·Jé1 registro RE del programa interrumpido. pasando a ejecutar la instrucción In+t • 4. direcciona ·~. 6. Si 1=0. y al terminar debe hacerse I = O mediante la instrucción CLI (Clear I). bit que mediante instrucciones se lo puede poner en 1 ó O.:e. In+l . que son sensadas por el microprocesador a través de su "pata" NMI (Not Mascarables Interrupt). el "árbitro" activa la línea INTR. '"<>\l.. le otorga prioridad a la de menor subíndice n. En caso de que sea I=l. una combinación binaria. Esto último significa que la interrupción se tiene que quedar esperando hasta que sea 1 =O.. ·Así. Un caso de activación de la línea NMI tiene lugar cuando la fuente de alimentación deja de proveer tensión. pasa a ejecutar la instrucción siguiente.

..-. ¡ ·1 .. • • IRQ ®I IRET • • Programa ARBITRO interrumpido • • PERIFERICO n INTERFAZ n 1. E3 la 10 1 IRQ ~.INTR _!!...-..:i.. "~~· . .. ~. .:tina BIOS subrutina hasta la E320:5000 1 PUSH . .. instrucción IRQ ® (Í) PUSH .---i..•.. ...... . . IRET CD IRQ •• .. IRQ POP .~---~~~~~--:-. .PERIFERICO 1 INTERFAZ 1 ew ... uc envía INTA(4 1 PORT 1 ARBITRO envía Zona de vectores dlrde dir I@ • • 0000:024m0 • ® 50 Se~sa J@ -·º • la pila y • • se ejecuta .. .2-.. . -....36 1 PORT 1 p ® ''· ··-··· ..··. ·. ...~ .--i--H CD IRQDir ret (CS:IP . N UAL uc 1 PORT 1 @ r---~-~[SzyCJJ [YoRTU 1 0000:0240 r------.... 1 PORT 1 .·.--.~] IRQ IRQ POP .... ki_ 1 PORT 1 ~ Pila E Figura 3. ..

AAS (ASeU Adjust for Substráction): #~~~o:. BL = 00111000 = 8 ADD AL. · AAM luego de ejecutar est?. el flag C es tenido en cuenta para los dígitos siguientes. uno de Jos cuales está en el registro AL. • .._ SUB AL.. CALL Ordena transferir la ejecución a una subrutina.l . Esta instrucción puede hacer cambiar los flags AC y C. Esta conversión se usa antes de dividir dichos dígitos BCD por un dígito BCD desempaquetado en CX. ADC Instrucción ejemplificada en el ejercicio 2 para sumar dos operandos más el carry existente. y C=l Si dos números de varios dígitos son restados. siendo_<:. j MUL BH luego de ejecutar esta instrucción resulta AX= 00000~000~10000 = 48 ~ · . usando la instrucción SBB. pero para una • resta -"'. la instrucción AAD los convierte en un número binario puro contenido en AL. El resultado de la división aparece desempaquetado en AL. que actúa como acumulador. CBW Instrucción ejemplificada en el ejercicio 37. Ejemplo: AL= 00110110 = 6.8 ..l. BH = 00001000 = 8 BCD desempáquetado ' ' ~ ~ '~..:. . _ AAD (Conversión de BCD a binario antes de dividir) Dados dos dígitos BCD desempaquetados en AH y AL. semejante a AAA. Puede cambiar los flags AC y C.. .instrucción resulta AX= 00000100 00001000 = 0408 des_e mpaquetado AAM puede cambiar los flags S y Z..~_::~icado Pº\~· . CX = 0009 AAD luego de ejecutar esta instrucción resulta: AX = 0000000000011100 (28 en binario) DIV ex luego de ejecutar esta instrucción resulta: AL= 00000011 °"' 03 (cociente) AH= 00000001 = 01 (resto) AAM (Conversión de binario a BCD después de multiplicar dos dígitos desempaquetados) Ejemplo: AL= 00000110 = 6 BCD desempaquetado. AAS luego de ejecutar esta instrucción resulta AL= 00000011 = 03 desemp~quetado. BL luego de ejecutar esta instrucción resulta: AL= 01101110 (resultado incorrecto en BCD) AAA luego de ejecutar esta instrucción resulta: AL= 00000100 = 4 (desempaquetado) y C=l Esto i~ica que el resultado en BCD es 14 = 6 + 8. AAS opern sólo sobre el registro AL. y en AH aparece el resto. AND Instrucción ejemplificada en el ejercicio 25 para realizar la operación lógica AND. Después se caarga es__ con el valor de CS de la subrutina. . ' .. U3-43 MNEMONICOS DE LAS INSTRUCCIONES MAS USADAS AAA (ASCII Adjust for Addition): Ordena obtener una suma en BCD a partir de dos dígitos que están en ASCII. . Un near o intrasegmento eALL llama una subrutina que está en el mismo CS que el de la instrucción CALL.¡ · ~ ~ Ejemplo: AL = 00110101 = ASCII s· BL = 001111000 = ASCI. y se copia en la pila el IP con el offset de la instrucción que sigue a CALL. como se ejemplifica en el ejercicio 38 Un far o intersegmento CALL llama a una subrutina que está en un es distinto que el de la instrucción CALL En este caso primero se decrementa SP en dos y se copia en la pila el valor de CS..· :. y se carga IP con el offset de la primera instrucción de la subrutina. f \ ..:-~~-_ .fi(JJ. BL luego de ejecutar esta instrucción resulta AL= 11111101 = -3 y e ·=_L . AAD puede cambiar los flags S y Z. Ejemplo: AX= AH AL = 0000001000001000 = 0208 = 28 desempaquetado. ADD Instrucción ejemplificada en el ejercicio 1 para sumar dos operandos. para duplicar el tamaño del registro AL CLC (Clear Carry) Ordena poner en cero el flag C . Luego otra vez se decremen- ta SP en d~s.

Instrucción ejemplificada en el ejercicio 3 DIV (Divide magnitudes) Divide una magnitud de 16 bits por otra de 8 bits especificada en la instrucción. o hasta que los bytes comparados sean distintos Si en luegar de usar CLD se bugiera usado STD (Set D.. respectivamente. Ejemplo: MOVSI. para que la UCP no responda (enmascare) l o~ pedidos de interrupción que activan las líneas IRQ. ' ejemplo en instrucción CMPB) CLI (Clear Interrupt flag). CMPSW Semejante a CMPB. Los operandos no son afectados por la resta. convierte dicho resultado en dos dígitos BCD. Siempre es seguida por una instrucción de salto condicionado CMPSB Ordena compara un byte en un string origen (source) con un byte en otro string (destination).. Para ello previamente el flag D (de dirección) debe ser llevado a cero con la instrucción CLD. . a fin de que se enciendan los flags. hasta completar 50 elementos. ! IMUL Instrucción para multiplicar números signados. agregando CLD o STD. en el segmento extra. y el apuntado por DI. Se trata de una instrucción de resta. y DX contiene el resto. para que se enciendan los flags según el resultado (que no se asigna a ningún destino). Luego de sumar dos números BCD y dejar el resultado en AL. CMC (Complement Carry flag) Ordena poner el flag Cal valor contrario al que tenía antes de ejecutar esta instrucción. Instrucción ejemplificada en el ejercicio 23 1· IDIV (Divide integers) ' l ¡· Cuando el dividendo tiene 32 bits. CWD (Convert signed Word to signed Doble word) Extiende el signo de AX a todos los bits de DX. Ordena poner a cero el flag I. SI y DI pueden ser incrementados automáticamente a fin de apuntar a los siguientes elementos correspondientes de los strings. ejemplificada en el ejercicio 36 . siendo que un string es una cadena de caracteres del mismo tipo (como ser caracteres ASCII). El string apuntado por SI debe estar en el segmento de datos. del mismo signo que el dividendo. La instrucción CMPSB puede ser usado con REPE para comparar todos los elementos sucesivos de un string. y la menos significativa en 1 AX. El divisor puede estar en cualquier otro registro de 16 bits. También. para comparar dos operandos.50 Pone en CX el número de elementos del string REPE CMPSB Repite la comparación de los bytes correspondientes d e los strings. Después de la comparación. pero para operar elementos de strings que tengan 2 bytes. los punteros SI y DI pueden autoincrementarse o decrementarsee en dos. Instrucción ejemplificada en el ejercicio 30 DAS (Decimal Adjust AL after BCD Substraction) Realiza correcciones seméjantes a DAA si va luego de la instrucción SUB AL. CMP Instrucción ejemplificada en el ejercicio 7. ó una de 32 q bits por otra de 16 bits especificada en la instrucción. los punteros SI y DI se hubieran decrementado. 1000 DI apunta al comienzo del otro string CLD Pone el flag Den cero para indicar autoincrementar a DI y SI MOVCX. De esta forma los registros SI y DI pueden autoincrementarse autom~t mente (en uno o dos. DEC Decrementa uno el operando. El cociente resultante está en AX. 3000 SI apunta al comienzo del primer string MOVDI. según sea) en las instrucciones para operar sobre strings (como MOVS o CMPS. poner a uno a D). su parte más significativa tiene que estar en DX. Semejante a CBW DAA (Decimal Adjust AL after BCD Addition).03-44 CLD (Clear Direction flag) Ordena poner en cero el flag D. La comparacion se realiza tomando el byte apuntado por SI. y restándolo del byte apuntado por DI..

Ejemplo: IN AL. en el assembler para T ASM y MASM LODSB (Load String Byte in to AL) Ordena copiar en AL un byte de una locación de un string apuntada por SI. U3-45 IN (Input). Jurnp Not Less) ..-. . . .trucción"ejempli_ficada en el ej:r.. LODSW (Load String Word into AX) Ordena copiar en AX dos bytes consecutivos de un string... . el registro SI se incrementa automáticamente para apuntar al siguiente elemento del string.0. según que el port sea de 8 6 16 bits.A.. Cada vez que LOOP se ejecuta.eO salta a ejecutar la instrucción . 4COA (Ver aplicaciones en la Unidad 2) INC Instrucción ejemplificada en el ejercicio 7 INT Instrucción ejemplificada en el ejercicio 39 IRET Instrucción ejemplificada en el ejercicio 39 JA=JNBE Instrucció!'l. Jump if Not Below::. Mediante el flag 0::.i··• . . Ordena copiar el contenido de un port en AL ó AX.1. Jurnp N~t Greather) · . respectivamente. ·~1 JNE = JNZ . Instrucción ejemplificada más adelante. Jump if Not Carry) JB =JC=JNAE Instrucción ejemplificada en el ejercicio 10 JBE =JNA Instrucción ejemplificada en el ejercicio 11 JCXZ Uump if the ex register is Zero) JE=JZ Instrucción ejemplificada en el ejercicio 5 JG = JNLE Instrucción ejemplificada en el ejerci~io 9 JGE=JNL Qurnp if Greather or Equal ::. Si 0 ::. ....: .. saltar si hay paridad impar) JNS Uump if not signed = jump if positive) JO Instrucción ejemplificada en el ejercicio 4 JPE = JP Instrucción ejemplificada en el ejercicio 13 JS Oump if Sign is negative (S::.._. apuntados por SI.9.. CX es automáticamente decrementada en l. Mientras CX:. JL =JNGE Instrucción ejemplificada en el ejercicio 10 JLE = JNG Ournp if Less or Equal::..sj~•... 3080¡ IN AX. JMP } !1... ' • . . SI se decrementa automáticamente. LOOP Ordena repetir una secuencia de instrucciones un número de veces dado por el contenido de CX.... JNP =JPO (Saltar si no hay paridad par ::..l) LEA Transfiere a un registro el valor de la dirección del operando fuente..~-tr l(.//'. Instrucción ejemplificada en el ejercicio 3 -" " "' - JNO Qurnp if Not Overflow) ..ejemplificada en el ejercicio 8 JAE = JNB = JNC Uump if Above or Equal::.

U3-46 ejemplificada por la dirección que acompaña a LOOP. entonces DI y SI serán automáticamente decrementados en uno. entonces DI y SI serán automáticamente incrementados en uno. El número de elementos a ser transferidos es puesto en CX. O y Z = 1 1 1 MOV Transfiere el valor del operando fuente hacia el operando dest~I!o)nstrucción ejemplificada en el ejercicio 1 · MOVSB (Move String Byte) Ordena transferir un byte de un string apuntado por SI en el segmento de datos. des tino indicado en la instrucción.4 RCL BX. Si flag D=l. . Ningún flag es afectado por esta instrucción.:. Ejemplificada en el ejercicio 38. en la que se incluye al flag C (comparar con ROL) C ~ MSB LSB l~~~~~~~-t Ejemplos: RCL BX. PUSHF Instrucción ejemplificada en el ejercicio 39 RCL Ordena la rotación a izquierda dibujada un cierto número de v eces. CL RCR Ordena Ja rotación a derecha dibujada. Ejemplificada en el ejercicio 38 . NOT Ordena invertir cada bit dell operando. Luego se incrementa en dos el SP. Se usa para aumentar el retardo de un loop que genera retardo. MOVSW Semejante a MOVSB. Si flag D=O.. hacia una posición en el segmento extra apuntado por DI. PUSH Primero ordena decrementar en dos al SP. · y los transfiere al registro o :::. y luego salva 2 bytes (que típicamente estaban en un registro) en la cima de la pila''. Instrucción ejemplificada en el ejercicio 25 OUTxxxx Transfiere el contenido del registro AL (ó AX) hacia el port de dirección xxxx POP Copia 2 bytes desde la cima de la pila (apuntadada por SP). para comparar dos cadenas hasta que ex= O ó hasta que los elementos del string no sean iguales. o y Z=1 1 LOOPNE = LOOPNZ 1 Ordena repetir la secuencia mientras sea ex : /:.'. MUL Instrucción ejemplificada en el ejercicio 29 NEG Genera el complemento a dos del número contenido en un registro NOP Su ejecución emplea hasta 3 ciclos reloj. (Esta dirección ~o puede superar el rango de +127 a 1 -128 bytes desde la instrucción que sigue a LOOP) 1 ' LOOPE = LOOPZ 1 Ordena repetir la secuencia mientras sea ex:¡. 1 MOVCL. pero copia 2 bytes. A menudo usada con CMPS. OR Realiza una operación OR. :_>kc<·: POPF Instrucción ejemplificada en el ejercicio 39. en la que incluye al flag C (comparar con ROR) e~ MSB LSB t l REPZ = REPE Ordena repetir una ins trucción para stringsd hasta que se de una cierta condición. y luego incrementa el IP para apuntar la próxima instrucción.

.. ~ado q~e el 0 MSB es copiado nuevamente como MSB.:) · . • • . conforme el que era bit de signo es desplazado a la dere"'Clta....··' ' . ·. STOSB (Store Byte in String) Ordena almacenar una copia de un byte desde AL en una locación de memoria apuntada por DI en el ES..:.' SAR MSB --? MSB LSB --? C • ~ · ·::.."'_-~·. .· Ordena comparar un byte en AL con un byte' de uh string.. un cierto número de veces MSB LSB--? C . • • : . · STC (Set Carry flag): ordena hacer C=l STD (Set Direction flag): ordena hacer 1 el flag D. '?~ t:1il· ~ . SHL =SAL (Shift Left) C (-. El flag D puede usarse para incrementar o decrementar DI en dos. ~ :· r ' Si flag D=O entonces DI será incrementado luego de SCASB. ~~·t .MSB ~------LSB (-.. .. STOSW (Store Word in String) Ordena almacenar una copia de AX en dos bytes sucesivos apuntados por DI en el ES.. o una potencia de dos.. :·!~~-~ :· '.MSB +--. 1 Si el número de desplazamiento es uno.. un número de veces C (-.~}- SBB (Substract with borrow). para números na turales. U3-47 Ejemplo: REPE CMPSB compara bytes de cadenas hasta el fin de la cadena. . Instrucción ejemplificada en el ejercicio 38 ROL (Rotate Left) Ordena la rotación a izquierda dibuja... el flag C toma. . el valor del bit más recientemente desplazado desde la posición más significativa. . o hasta que bytes de las cadenas no sean iguales.. Esta operación puede usarse para multiplicar un número natural por dos.._ _ __ _ i ROR (Rotate Right) Ordena la rotación a derecha dibujada. apuntado por DI en ES.. _. ·un cero es puesto en dicha posición.O Como indica el dibujo. p·~~o pa. "'\ .. . ... reemplazando un byte de un string. .: • •• ...:. \ . ello puede especificarse colocando un uno a la derecha de la coma en la instrucción.. STI (Set Interrupt flag): Ordena hacer 1 el flag I.. i _ _ _ _ __ J. RET Ordena saltar a la instrucción que sigue a la última CALL ejecutada.~. respectivamente... Conforme un bit es desplazado d e la posición menos significativa (LSB). para habilitar las interrupciones por hardware enmascarables. En el caso de varios desplazamientos sucesivos.-..-. .. o una potenda~s'e:d6s. Como ADC. .~. .:~ . 1 ¡ .• . SHR Instrucción ejemplificada en el ejercicio 34. de dirección.. y si D=l entonces DI puede ser de~rementado luego de SCASB SCASW (Sean a String Word) Ordena comparar AX con 2 bytes consecutivos de un string apuntados por DI en ES. SCASB (ScanaStringByte) ··": ~ .. . a la par que el valor del bit que está en la posición más significativa (MSB) es puesto como valor del flag C.........'1 ·' Esta instrucción puede usarse para dividir un número signado por dos.. ordena desplazar hacia la izquierda cada bit del operando un cierto número de posiciones (indicado por CL').¿ ·.:~. reemplazando 2 bytes de un string. . ---LSB J.~ la resta. . Luego DI puede ser automáticamente incrementado o decrementado según que el flag D valga Oó l. DI puede autoincrementarse o decrementarse en 2 mediante el flag D.

AX.· · Ordena intercambiar el contenido de un registro con el otro. el registro AX se pone en cero. y el resultado colocarlo en el destino. Semejante CMP respecto de SUB. o el contenido de un registro con contenidos de locaciones de memoria. o hasta que la entrada TEST resulte baja. sin asignar resultados. Instrucción ejemplificada en el ejercicio 1 TEST Realiza una operación AND para activar los flags. Reemplaza un byte en AL con un byte punteado por BX. en el cual no procesa hasta que se active la entrada de interrupción INTR o NMI. Si se hace XOR AX. XLATB (Translate Byte in AL) Translada un byte de un código a otro código. Se usa para sincronizar al procesador con hardware exterior..U3-48 SUB Ordena restar dos operandos. XCHG (Exchange source and destination) 'i:C ~: . WAIT Ordena aque el procesador pase al estado IDLE. en una tabla de memoria XOR Ordena realizar Ja operación X-OR entre cada bit de un operando fuente con cada bit del operando destino. ¡ ¡ .

128 O'OH JNSTRUCClONES DE SALTO .s lgunl n JC c-1 Crfr.Mr que • JLE ZnloS. .ll si ostó pór abajó JU!: e= t oZ"' 1 [1rln<.'t. JCXZ ex~ o ílrlncAr si ex .a si no hay !lgno JNP/JP. "....O P=O n1J11ca si no ltay paridod o con paridad lm¡'iar JO o . o tlilfll:a si és r'l'lé. +2 +1 02H 01H - 130 _ __Olli__ +O OOH 129 OIH -1 r-ni 128 801-1 -2 FEH ---...---.. ---- ~ 4 1 124 84H 3 03_11_ _ +125 03H -- 04H 2 O~H -! 126 0QH 1 OIH ..y !obreflufo JNS S=O tltlnl'.C 81tnca si é'S Mé. .. .·.JGE S=O rwnca si o·s mtiyór quo... . TE°CNÍCAS DIGITALES Il lnstrucci6n Co11dlci61) pro!JtJtl~ Cótllellfrlfio ---···--·- JA e ~oy?:"o ürlr..n s! ést~ por abajo o . -.ca si Oi:tá pór oriib¡\ JAE e=O fJr:ncn si éslÓ f)ór nrriliá ·o bs igUal n JD e= 1 Brln!.· . . .cn (lor ocoirco • JE o JZ z= 1 f:lrlnM si os Igual o ·corfi •JG Z=OyS=O f:llititll SI éS mliyor C]UO .... 1 Utlilcl\ si llny sobteílufo JP/JPE I' =1 13rlncá .... o si no es coro JNO o= o íl11nca si no ho. .127 OIH o 001-1 .'.127~ +126 1~H 132 131 04H 03H . o . ·.. d lgUal D JL s ..Mr qun.. Núm6ros aln 1lgno· Númeiós co11 ~lgho 255~ 254=® .~I hay ¡'>1\rh:Jad o paridad par JS SR1 Orlnco si hay signo . o 1yu111 a JNe e=O Ot!nca si M héy ac1meo •JNE o JNZ Z=O Otinca si no os tg11al a...