Está en la página 1de 63

INDICE

Pg.
Introduccin .......................................................................................
1
0
Movimiento de
Datos ..........................................................................
5
Movimiento de datos genera l.............................................................
5
Intercambio ........................................................................................
.
7
Manipulacin de
pila ..........................................................................
7
Conversin de Tipos ...........................................................................
10
Operaciones con Strings ....................................................................
11
Repitiendo las operaciones con Strings .............................................
13
Entrada/Salida ...................................................................................
.
13
Instrucciones Aritmticas Binarias
Instrucciones de Suma y Resta ..........................................................
15
Instrucciones de Incremento y
Decremento ......................................
17
Instrucciones de Multiplicacin y Divisin .......................................
18
Instrucciones Aritmticas Decimales
Instrucciones para austar !CD
pac"ed ............................................
23
Instrucciones para austar !CD unpac"ed .......................................
24
Instrucciones
#gicas .........................................................................
26
Instrucciones de Desplazamiento y Rotacin
Instrucciones de Despla$amiento ......................................................
29
Instrucciones de Doble
Despla$amiento ............................................
31
Instrucciones de
Rotacin ..................................................................
32
Instrucciones de %egacin y
Comparacin .......................................
34
Transferencia de Control...................................................................
36
Salto Incondicional
&'M() .................................................................
36
'M( s*ort ...........................................................................................
38
Salto Condicional &'nnn) ...................................................................
38
!ucle &#OO() .....................................................................................
42
#lamada a Interrupciones o +unciones
&I%T) ..................................
43
1
#lamada a (rocedimiento &C,##) ....................................................
45
Declaracin de -ariables ...................................................................
47
Declaracin de Macros ......................................................................
47
Instrucciones de maneo de bit .
byte ...............................................
48
Instrucciones de control de /lags........................................................
50
Instrucciones de segment register.......................................................
52
Instrucciones miscel0neas .................................................................
53
Introduccin
Mientras que con el lenguaje de mquina nosotros o!tenemos un control total del
micro"rocesador la "rogramaci#n en este lenguaje resulta mu$ di%&cil $ %cil "ara
cometer errores. 'o tanto "or el (ec(o de que las instrucciones son s#lo n)meros sino
"orque se de!e calcular $ tra!ajar con las direcciones de memoria de los datos los
saltos $ las direcciones de llamadas a su!rutinas adems de que "ara "oder (acer
ejecuta!le un "rograma se de!en enla*ar las rutinas de run-time $ ser+icios del sistema
o"erati+o. ,ste "roceso es al que se le denomina ensamblado de cdigo. Para %acilitar la
ela!oraci#n de "rogramas a este ni+el se desarrollaron los Ensambladores $ el
en!ua"e Assembler#
,-iste una corres"ondencia 1 a 1 entre las instrucciones del lenguaje de mquina $ las el
lenguaje ensam!lador. .ada uno de los +alores num/ricos del lenguaje de mquina tiene
una re"resentaci#n sim!#lica de 3 a 5 letras como instrucci#n del lenguaje ensam!lador.
Relacin entre el ,ssembler y lenguaes de medio o alto nivel
0un cuando el lenguaje ensam!lador %ue dise1ado "ara (acer ms %cil la "rogramaci#n
de !ajo ni+el /sta resulta toda+&a com"licada $ mu$ la!oriosa. Por tal moti+o se
desarrollaron los lenguajes de alto ni+el "ara %acilitar la "rogramaci#n de los
com"utadores minimi*ando la cantidad de instrucciones a es"eci%icar. 2in em!argo
esto no quiere decir que el micro"rocesador ejecute dic(os lenguajes. .ada una de las
instrucciones de un lenguaje de alto ni+el o de un ni+el intermedio equi+alen a +arias
de lenguaje mquina o lenguaje ensam!lador.
3a traducci#n de las instrucciones de ni+el su"erior a las de !ajo ni+el la reali*an
determinados "rogramas. Por una "arte tenemos los interpretes como 45ase 5026.
0P3 $ 3is". ,n estos cada +e* que se encuentra una instrucci#n se llama una
determinada rutina de lenguaje de mquina que se encarga de reali*ar las o"eraciones
asociadas "ero en ning)n momento se genera un c#digo o!jeto $ muc(o menos un
c#digo ejecuta!le.
Por otra "arte tenemos los compiladores como los desarrollados "ara 7ortran
.li""er .8583 Pascal o . que en +e* de llamar $ ejecutar una rutina en lenguaje de
mquina /stos juntan esas rutinas "ara %ormar el c#digo o!jeto que des"u/s de enla*ar
las rutinas de run9time $ llamadas a otros "rogramas $ ser+icios del sistema o"erati+o
se trans%ormar en el "rograma ejecuta!le.
$
7inalmente tenemos los ensambladores: como los descritos en este tra!ajo :que son
como una +ersi#n reducida $ elemental de un com"ilador ;"ero que de ninguna manera
de!en considerarse como tales< $a que lo )nico que tienen que (acer es cam!iar toda
re%erencia sim!#lica "or la direcci#n corres"ondiente calcular los saltos resol+er
re%erencias $ llamadas a otros "rogramas $ reali*ar el "roceso de enlace. 3os
ensam!ladores son "rogramas destinados a reali*ar el ensam!lado de un determinado
c#digo.
Sinta1is del ,ssembler
.uando un mnem#nico o "ala!ra reser+ada de ensam!lador se +a a traducir a lenguaje
mquina ;c#digo de o"eraci#n del "rocesador< "ara su "osterior ejecuci#n "or "arte del
.P= se le llama instrucci#n.
,l set de instrucciones de un micro"rocesador es el set de entradas !inarias que
"roducen acciones de%inidas durante un ciclo de instrucci#n. =n set de instrucciones es
"ara el micro"rocesador lo mismo que una ta!la de +erdad es "ara una com"uerta
l#gica un registro de des"la*amiento o un circuito sumador.
Por su"uesto las acciones que reali*a un micro"rocesador con cada instrucci#n son
ms com"lejas que las que reali*an los dis"ositi+os $ com"uertas antes mencionados.
%ormato !eneral de una orden&
mnem#nico >Param1 >Param2??
4onde@
Mnemnico es la orden en s& misma es llamada mnem#nico "orque se utili*an estas
letras "ara no tener que recordar el n)mero de la orden. 2on letras que "arecen no tener
signi%icado "ero s& lo tienen $ una +e* que se lo conoce no solo se recuerdan tam!i/n
se aciertan algunos que no se conoc&an antes.
Param1 no siem"re se utili*a (a$ Mnem#nicos que no requieren "armetros. ,ste
"armetro cuando una orden lle+a dos >"armetros? es llamado Destination, es donde
se guardan los resultados de las o"eraciones.
Param2 muc(as +eces este "armetro no e-iste "ero normalmente cuando es
necesario es llamado Source $ es el origen de las o"eraciones en las que inter+iene.
'nemnicos y Directi(as
5asicamente el %ormato de una l&nea de c#digo en lenguaje ensam!lador consta de
cuatro "artes@
)
Eti*ueta+ (ariable o constante@ 'o siem"re es de%inida si se de%ine es necesario
utili*ar se"aradores "ara di%erenciarla de las otras "artes usualmente es"acios o alg)n
s&m!olo es"ecial.
Directi(a o instruccin@ es el nom!re con el que se conoce a la instrucci#n que
queremos que se ejecute.
,perando-s.@ la ma$or&a de las instrucciones en ensam!lador tra!ajan con dos
o"erandos aunque (a$ instrucciones que %uncionan solo con uno. ,l "rimero
normalmente es el o"erando destino que es el de"#sito del resultado de alguna
o"eraci#nA $ el segundo es el o"erando %uente que lle+a el dato que ser "rocesado. 3os
o"erandos se se"aran uno del otro "or medio de una coma /+0.
Comentario@ como su nom!re lo indica es tan solo un escrito in%ormati+o usado
"rinci"almente "ara e-"licar que est (aciendo el "rograma en determinada l&neaA se
se"ara de las otras "artes "or medio de un "unto $ coma /10. ,sta "arte no es necesaria
en el "rograma "ero nos a$uda a de"urar el "rograma en caso de errores o
modi%icaciones.
3a tarea "rinci"al del 0ssem!ler es la traducci#n de los c#digos de o"eraci#n en
mnem#nico en sus equi+alentes !inarios.
,l 0ssem!ler reali*a /sta tarea usando una ta!la como si lo (ar&amos Ba manoC. ,l
0ssem!ler de!e (acer algo ms que traducir los c#digos de o"eraci#n. Dam!i/n de!e
determinar cuantos o"erandos requiere la instrucci#n $ de que ti"o. ,sto es un "oco
com"lejoA algunas instrucciones ;como clrE< no tienen o"erandos otras ;como sumas o
saltos< tienen una mientras que otras ;mani"ulaci#n de !its o sFi"s< requieren dos.
Pero tam!i/n e-isten mnem#nicos o "ala!ras reser+adas del 3enguaje ,nsam!lador que
no se con+ierten a lenguaje de mquina es decir no son instrucciones "ro"ias del
lenguaje de mquina del "rocesador. 2in em!argo son necesarias "ara controlar el
"roceso de ,nsam!ladoA le dicen al 0ssem!ler cules son las secciones del "rograma
c#mo de%inir las +aria!les $ c#mo estructurar el "rograma entre otras a"licaciones. 0
estas "ala!ras que el ,nsam!lador reconocer "ero no son instrucciones les llamamos
GDirectivasG.
,ste conjunto de instrucciones no "ertenecen al lenguaje ensam!lador "ro"iamente
dic(o sino que son instrucciones que )nicamente son reconocidas "or el ensam!lador $
(an sido agregadas "ara %acilitar la tarea de ensam!lado tanto "ara el "rogramador
como "ara el "rograma que lo lle+a a ca!o. ,n general las directi+as son usadas "ara
es"eci%icar la organi*aci#n de memoria reali*ar ensam!lado condicional de%inir
macros entrada salida control de arc(i+os listados cross9re%erence direcciones e
in%ormaci#n acerca de la estructura de un "rograma $ las declaraciones de datos.
Las directivas ms comunes son:
EQU (Equate)
ORG (Origin)
DEFB (Define Byte)
DEFW (Define Word)
END (fin del cdigo fuente)
Delimitadores
2
3os cam"os +an se"arados s#lo con es"acios $Ho ta!ulaciones. 'o se de!e
agregar nunca otros caracteres ;comas "untos etc <.
'o utili*ar es"acios e-tra "articularmente des"u/s de comas que se"aran
o"erandos. ; ,j@ mo(l3 4+3 <
'o usar caracteres delimitadores ;es"acios $ ta!ulaciones< en nom!res o
etiquetas.

Eti*uetas
3a etiqueta es el "rimer cam"o en una l&nea en lenguaje 0ssem!ler $ "uede no e-istir.
2i una etiqueta est "resente el 0ssem!ler la de%ine como el equi+alente a la direcci#n
del 1I !$te corres"ondiente a esa instrucci#n.
,sta etiqueta "uede +ol+er a usarse en otro lugar "ero como operando de una
instrucci#n. ,l 0ssem!ler reem"la*ar /sta etiqueta "or el +alor de cuando %ue creada.
2e usan %recuentemente en las instrucciones de salto.
No puede existir ms de una etiqueta en el 1 campo de instruccin!
No pueden usarse como nombres de etiquetas a palabras "a reservadas por el
assembler # OR$, E2%, etc! & o nombres de instrucciones # movl', call, nop,
etc!&
No se permite el uso de n(meros o caracteres no al)ab*ticos como 1 letra de la
etiqueta!
+omo regla prctica, usar siempre letras, " en may3scula!
3os ensam!ladores "ermiten com!inaciones de datos con o"erandos es"eciales
aritm/ticos o l#gicos. Jstos o"erandos se llaman e1presiones.
4Desventaas del ,ssembler
,l lenguaje 0ssem!ler no resuel+e todos los "ro!lemas de "rogramaci#n. =no de ellos
es la tremenda di%erencia entre el set de instrucciones del micro"rocesador $ las tareas
que el micro"rocesador de!e reali*ar. 3as instrucciones del micro"rocesador tienden a
(acer cosas como@ sumar contenidos de dos registros des"la*ar el contenido de un
acumulador un !it o colocar un nue+o +alor en el contador de "rograma ;P.<.
Por otro lado el usuario generalmente quiere que el com"utador (aga cosas como
c(equear si un +alor anal#gico le&do se e-cedi# de un cierto um!ral !uscar $ reaccionar
ante un comando "articular de un teclado o acti+ar un dis"ositi+o en el momento
a"ro"iado. ,l "rogramador de lenguaje 0ssem!ler de!e traducir estas tareas a
secuencias de sim"les instrucciones de micro"rocesador. ,sta traducci#n suele ser
di%icultosa $ consume tiem"o de tra!ajo.
8tro incon+eniente es la no "orta!ilidad. .ada micro"rocesador "osee su "ro"io set de
instrucciones en el cual est re%lejado su arquitectura interna. =n "rograma en
0ssem!ler escrito "ara 6809 no correr en un 6502 K80 8080 o cualquier
micro"rocesador de 16 o 32 !its. 'i siquiera dentro de la misma %amilia de
microcontroladores de Microc(i" Dec(nolog$ ;P6.s< e-isten las mismas instrucciones.
.ada modelo tiene un set de instrucciones "ro"io que di%iere en algunas instrucciones
con los dems.
4
Para solucionar este incon+eniente se utili*a un lenguaje de "rogramaci#n de alto o
medio ni+el como . o Pascal.
Movimiento de Datos
Estas instrucciones copian bytes, words, doublewords, o quadwords
entre la memoria y los registros del procesador y entre los registros.
Estas instrucciones, se dividen en cuatro subgrupos:
Movimiento de datos general
Intercambio
Manipulacin de pila
Conversin de Tipos
Movimiento de datos general
Las instrucciones M! "move# y CM!cc "conditional move#
trans$eren datos entre la memoria y los registros o entre los registros.
La instruccin M! no puede copiar datos desde una direccin de
memoria a otra o desde un registro de segmento a otro registro de
segmento. Las operaciones memoria a memoria se pueden %acer con
la instruccin M!& "string move#.
Tabla de operaciones validas
Tipo de movimiento Origen Destino
de memoria a registro Direccin de memoria Reg. de propsito gral.
Direccin de memoria Reg. de segmento
de registro a memoria Reg. de propsito gral. Direccin de memoria
Reg. de segmento Direccin de memoria
entre registros Reg. de propsito gral. Reg. de propsito gral.
Reg. de propsito gral. Reg. de segmento
Reg. de segmento Reg. de propsito gral.
Reg. de propsito gral. Reg. de control
Reg. de control Reg. de propsito gral.
5
Reg. de propsito gral. Debug register
Debug register Reg. de propsito gral.
dato inmediato a registro Inmediato Reg. de propsito gral.
dato inmediato a memoria Inmediato Direccin de memoria
En todas las 'ormas de la instruccin M!, los dos operandos son del
mismo tama(o, e)cepto en el caso de mover entre un registro de
segmento y un operando r*m+,. Estas instrucciones son tratadas
como su equivalente correspondiente de -./bits "entonces, por
e0emplo, M! 1&, E23 'unciona id4ntico a M! 1&, 23 pero guarda
un pre$0o cuando esta en modo +,/bits#.
5na e)cepcin es que C& "code segment# no deber6a usarse como
operando destino, guardando un nuevo valor en C& podr6a tener el
e'ecto dr7stico de cambiar el segmento que donde se esta e0ecutando
el cdigo.
8acemos un simple comentario sobre las instruccin CM!cc, debido
a que estas solo pertenecen a los procesadores de la 'amilia 9.,
9entium : e Intel 3eon.
Las instrucciones CM!cc son una 'amilia de instrucciones que
veri$ca el estado de las banderas del registro E;L2<& y e0ecuta
la operacin si las banderas est7n en un estado espec6$co "o
condicin#. Estas instrucciones pueden mover valores de -. o
+, bit desde la memoria a los registros de propsito general o
desde los registros de propsito general a otros. La estado de la
bandera a veri$car para cada instruccin se especi$ca con el
=codigo de condicin> "cc# asociado a esa instruccin. &i no se
satis'ace la condicin, no se reali?a la accin y se contin@a con
la instruccin siguiente a CM!cc.
En s6ntesis:
MOV Param1,Param2
Esta orden, M!, copia el contenido de 9aram, a 9aram-. 9or
e0emplo, M! 23,A3 es el equivalente a decir 23BA3, el valor de A3
no cambia, y el de 23 se trans'orma en el de A3.
8ay que tener en cuenta sin embargo algunas cosas que no pueden
%acerse con la instruccin M!.
En primer lugar, no pueden moverse datos directamente entre dos
posiciones de memoria. 2s6 M! 1atos-,1atos, es una e)presin
ilegal. En su lugar se escriben las dos l6neas:
M! 23,1atos,
6
M! 1atos-,23
En segundo lugar, no se pueden mover datos directamente de un
registro de segmento a otro. M! 1&,E& es ilegal. En su lugar
podemos escribir:
M! 23,E&
M! 1&,23
En tercer lugar, no se puede mover una constante directamente a un
registro de segmento. M! 1&,1atos es ilegal. En su lugar escribamos
M! 23,1atos
M! 1&,23
;inalmente, no se puede usar C& como operando. 9ara lograr esto se
debe utili?ar las instrucciones CM9, C2LL, o DET.
NASM: MOV: Move Data
MOV r/m8,reg8
MOV r/m16,reg16
MOV r/m32,reg32
MOV reg8,r/m8
MOV reg16,r/m16
MOV reg32,r/m32
MOV reg8,imm8
MOV reg16,imm16
MOV reg32,imm32
MOV r/m8,imm8
MOV r/m16,imm16
MOV r/m32,imm32
MOV AL,memoffs8
MOV AX,memoffs16
MOV EAX,memoffs32
MOV memoffs8,AL
MOV memoffs16,AX
MOV memoffs32,EAX
MOV r/m16,segreg
MOV r/m32,segreg
MOV segreg,r/m16
MOV segreg,r/m32
MOV reg32,CR0/2/3/4
MOV reg32,DR0/1/2/3/6/7
MOV reg32,TR3/4/5/6/7
MOV CR0/2/3/4,reg32
MOV DR0/1/2/3/6/7,reg32
MOV TR3/4/5/6/7,reg32
Intercambio
La instruccin 3C8< "e)c%ange# intercambia el contenido de dos
operandos. Esta instruccin impl6citamente e0ecuta tres instrucciones
M! y no requiere una direccin temporaria para salvar el contenido
de un operando mientras se carga el otro.
La documentacin de Intel dice que cuando se usa una direccin de
memoria como operando, el procesador autom7ticamente activa la
se(al LCE. 9or lo tanto esta instruccin es @til para la
implementacin de sem7'oros o estructuras de datos similares para
sincroni?acin de procesos.
7
El manual de F2&M dice que esta instruccin puede utili?arse 0unto
con el pre$0o LCE para propsitos de sincroni?acin de multi/
procesadores.
NASM: XCHG: Exchange
XC! reg8,r/m8
XC! reg16,r/m8
XC! reg32,r/m32
XC! r/m8,reg8
XC! r/m16,reg16
XC! r/m32,reg32
XC! AX,reg16
XC! EAX,reg32
XC! reg16,AX
XC! reg32,EAX
Manipulacin de pila
95&8
La instruccin 95&8 decrementa el puntero de pila "contenido en el
registro E&9#, luego copia el operando origen al tope de la pila.
Traba0a con los siguientes operandos: memoria, inmediatos y registros
"incluyendo los de segmento#. Esta instruccin se usa com@nmente
para colocar par7metros en la pila antes de llamar a un
procedimiento.
95&82
La instruccin 95&82 "pus% all registers# guarda el contenido de los
oc%o registros de propsito general en la pila. Esta instruccin
simpli$ca la llamada a procedimientos, reduciendo el n@mero de
instrucciones requeridas para guardar el contenido de los registros de
propsito general. Los registros se ingresan el la pila en el siguiente
orden: E23, EC3, E13, EA3, el valor inicial de E&9 antes de que E23
sea ingresado en la pila, EA9, E&I, y E1I.
8
99
La instruccin 99 copia el word o doubleword del tope de la pila
"indicado por el registro E&9# a la direccin especi$cada con el
operando destino, y luego incrementa el registro E&9 para apuntar al
nuevo tope de la pila. El destino puede ser un registro de propsito
general, un registro de segmento o una direccin de memoria. 2
di'erencia de 95&8, 99 no acepta operandos inmediatos.
992
La instruccin 992 "pop all registers# invierte el e'ecto de la
instruccin 95&82. &aca los @ltimos oc%o words o doublewords del
tope de la pila y los coloca en los registros de propsito general, con
e)cepcin del registro E&9. &i el tama(o del operando es +,, los
doublewords en la pila se trans$eren a los registros en el siguiente
orden: E1I, E&I, EA9, ignore doubleword, EA3, E13, EC3, y E23. El
registro E&9 se restaura por la accin de retirar los elementos de la
pila. &i el tama(o del operando es -., los words en la pila se
trans$eren a los registros en el siguiente orden: 1I, &I, A9, ignore
word, A3, 13, C3, y 23.
10
En s6ntesis:
95&8 se usa para guardar en la pila un dato, y 99 para recuperarlo.
Como la pila tiene estructura LI;, las instrucciones 99 se reali?ar7n
en orden inverso a las instrucciones 95&8. 9or e0emplo, si se quieren
guardar los registro E23 y EA3 y recuperarlos despu4s, la secuencia
correcta es
95&8 E23
95&8 EA3
G
G
99 EA3
99 E23
2 veces se necesita guardar todos los registro generales para
recuperarlos despu4s. En lugar de escribir una serie de 95&8 y otra
serie de 99, se usan las instrucciones 95&82 y 992. 2dem7s de
aportar comodidad al programador y legibilidad al programa, estas
instrucciones se e0ecutan m7s r7pido. Cuando se quiere guardar el
registro de indicadores, se usan las 'ormas 95&8; y 99;.
NASM: PUSH: Push Data on Stack
"#$ reg16
"#$ reg32
"#$ r/m16
"#$ r/m32
"#$ C$
"#$ D$
"#$ E$
"#$ $$
"#$ %$
"#$ !$
"#$ imm8
"#$ imm16
"#$ imm32
11
NASM: PUSHAx: Push All GeneralPur!ose "eg#sters
"#$A
"#$AD
"#$A&
NASM: POP: Po! Data $ro% Stack
"O" reg16
"O" reg32
"O" r/m16
"O" r/m32
"O" C$
"O" D$
"O" E$
"O" $$
"O" %$
"O" !$
NASM: POPAx: Po! All GeneralPur!ose "eg#sters
"O"A
"O"A&
"O"AD
Conversin de Tipos
Las instrucciones CAH "convert byte to word#, CH1E "convert word to
doubleword e)tended#, CH1 "convert word to doubleword#, y C1I
"convert doubleword to quadword# reali?an una e)tensin de signo al
doble del tama(o del operando origen.
La instruccin CAH copia el signo "bit J# del byte en el registro 2L a
cada posicin del byte superior del registro 23.
La instruccin CH1E copia el signo "bit -K# del word en el registro 23
a cada posicin del word superior del registro E23.
La instruccin CH1 copia el signo "bit -K# del word en el registro 23 a
cada posicin en el registro 13.
La instruccin C1I copia el signo "bit +-# del doubleword en el
registro E23 en cada posicin en el registro E13.
La instruccin CH1 puede usarse para producir un dividendo
doubleword de un word antes de una divisin word.
La instruccin CHI puede usarse para producir un dividendo
quadword de un doubleword antes de una divisin doubleword.
Entonces CAH e)tiende 2L en 23 repitiendo el bit de signo de 2L en
cada bit de 28. CH1E e)tiende 23 en E23. CH1 e)tiende 23 en
13:23 repitiendo el bit de signo de 23 en cada bit de 13, y C1I
e)tiende E23 en E13:E23.
1$
NASM: C&'+ C'D+ CD(+ C'DE& 9i!n E:tensions
C'&
C&DE
C&D
CD(
1)
M!&3
Las instrucciones M!&3 "move wit% sign e)tension# y M!L3 "move
wit% ?ero e)tension# trans$eren el operando origen a un registro y
luego reali?an la e)tensin de signo.
La instruccin M!&3 e)tiende un valor de M bit a un valor de -. bit o
un valor de M o -. bit a un valor de +, bit e)tendiendo el signo del
operando origen. La instruccin M!L3 reali?a la misma accin pero
en lugar de utili?ar el signo e)tiende con ceros.
NASM: MOVSX+ MOV)X& 'o(e Data 3it; 9i!n or <ero E:tend
MOV$X reg16,r/m8
MOV$X reg32,r/m8
MOV$X reg32,r/m16
MOV)X reg16,r/m8
MOV)X reg32,r/m8
MOV)X reg32,r/m16
Operaciones con Strings
Las instrucciones M!& "Move &tring#, CM9& "Compare string#, &C2&
"&can string#, L1& "Load string#, y &T& "&tore string# permiten
mover y e)aminar en la memoria grandes estructuras de datos, como
string al'anum4ricos. Estas instrucciones operan con elementos
individuales en un string, que puede ser un byte, word, o doubleword.
Los elementos a ser operados se identi$can con los registro E&I
"source string element# y E1I "destination string element#. 2mbos
registros contienen la direccin absoluta "oNsets en un segmento#
que apunta a un elemento del string.
9or de'ecto, el registro E&I direcciona el segmento identi$cado con el
registro de segmento 1&. 5n pre$0o permite asociar el registro E&I con
los segmentos de registro C&, &&, E&, ;&, o <&. El registro E&I
direcciona mediante el registro de segmento E&O no se permite
cambiar este registro por otro. El uso de dos registros de segmento en
las instrucciones de string permite operar con strings que est4n en
di'erentes segmentos. asociando el registro E&I con el registro de
segmento E&, ambos, el string origen y destino pueden ubicarse en el
mismo segmento.
12
La instruccin M!& mueve los elementos del string especi$cados por
la direccin del registro E&I a la direccin especi$cada por el registro
E1I. El ensamblador reconoce tres 'ormas PabreviadasQ de esta
instruccin, las cuales especi$can el tama(o del string a mover:
M!&A "move byte string#, M!&H "move word string#, y M!&1
"move doubleword string#.
La instruccin CM9& resta los elementos del string destino de los
elementos del string origen y actuali?a las banderas de estado "C;,
L;, ;, &;, 9;, y 2;# en el registro E;L2<& de acuerdo a los
resultados. Fing@n elemento del string se escribe en la memoria. El
ensamblador reconoce tres 'ormas PabreviadasQ de esta instruccin:
CM9&A "compare byte strings#, CM9&H "compare word strings#, y
CM9&1 "compare doubleword strings#.
La instruccin &C2& resta los elementos del string destino del
contenido en los registro E23, 23 o 2L "dependiendo de la longitud
del operando# y actuali?a las banderas de estado de acuerdo a los
resultados. Fi los elementos del string ni el contenido de los registros
es modi$cado. El ensamblador reconoce tres 'ormas PabreviadasQ de
esta instruccin: &C2&A "&can byte string#, &C2&H "&can word string#,
y &C2&1 "&can doubleword string#.
La instruccin L1& carga los elementos del string origen
identi$cados por el registro E&I en el registro E23, 23 o 2L. Las
'ormas PabreviadasQ de esta instruccin son L1&A "load byte string#,
L1&H "load word string#, y L1&1 "load doubleword string#. Esta
instruccin se suele utili?ar en los bucles "loops#, donde otras
instrucciones procesan cada elemento %asta que son cargado en el
registro destino.
La instruccin &T& almacena los elementos del string origen del
registro E23, 23 o 2L en la direccin de memoria identi$cada por el
registro E1I. Las 'ormas PabreviadasQ de esta instruccin son &T&A
"store byte string#, &T&H "store word string#, y &T&1 "store
doubleword string#. Esta instruccin tambi4n se suele usar en los
bucles "loops#. 2qu6 un string es com@nmente cargado en el registro
con la instruccin L1&, operado por otras instruccin, y luego
almacenado nuevamente en memoria con la instruccin &T&.
NASM:MOVS&+ MOVS'+ MOVSD& 'o(e
9trin!
MOV$'
MOV$&
MOV$D
NASM: CMPS&+ CMPS'+ CMPSD&
Compare 9trin!s
CM"$'
CM"$&
CM"$D
NASM: SCAS&+ SCAS'+ SCASD& 9can
9trin!
$CA$'
$CA$&
14
$CA$D NASM: *ODS&+ *ODS'+ *ODSD:
*oa, $ro% Str#ng
LOD$'
LOD$&
LOD$D
NASM: S-OS&+ S-OS'+ S-OSD&
9tore Byte to 9trin!
$TO$'
$TO$&
$TO$D
15
Repitiendo las operaciones con Strings
9ara operar con string mayores a un doubleword, las instrucciones
pueden combinarse con el pre$0o DE9 "repeat# para crear una
instruccin repetitiva o colocarse dentro de un bucle "loop#.
Cuando se utili?a con instrucciones string, los registros E&I y E1I se
incrementan o decrementan autom7ticamente luego de cada
iteracin para apuntar al siguiente elemento "byte, word, o
doubleword# del string. La bandera 1; en el registro E;L2< controla si
los registros se incrementan "1;BR# o decrementan "1;B-#. Las
instrucciones &T1 y CL1 $0an o limpian esta bandera,
respectivamente.
Los siguientes pre$0o pueden usarse en con0unto con un contador en
el registro EC3 para lograr la repeticin de la instruccin string.
S DE9TDepeat w%ile t%e EC3 register not ?ero.
S DE9E*DE9LTDepeat w%ile t%e EC3 register not ?ero and t%e L;
Uag is set.
S DE9FE*DE9FLTDepeat w%ile t%e EC3 register not ?ero and t%e
L; Uag is clear.
Cuando una instruccin string tiene un pre$0o de repeticin, la
operacin se e0ecuta %asta que satis'aga alguna condicin de $n. Los
pre$0os DE9E*DE9L y DE9FE*DE9FL se utili?an solo con las
instrucciones CM9& y &C2&. Tambi4n, tome en cuenta que la 'orma
mas r7pida de iniciali?ar un gran bloque de memoria es mediante la
instruccin 2 DE9 &T&.
Entrada/Salida
Las instrucciones IF "input 'rom port to register#, IF& "input 'rom port
to string#, 5T "output 'rom register to port#, y 5T& "output string to
port# trans$eren datos entre los puerto de entrada*salida del
procesador y un registro o la memoria.
Las instrucciones de E*& de registros "IF y 5T# trans$eren datos
entre un puerto de E*& y el registro E23 "E*& de +, bits#, el registro 23
"E*& de -. bits# o el registro 2L "E*& de M bits#. El puerto de E*& se
especi$ca con un operando inmediato "si esta entre R y ,KK# o con
una direccin en el registro 13.
Las instrucciones de E*& por bloques "IF& and 5T&# trans$eren
bloques de datos "strings# entre un puerto de E*& y la memoria. Estas
instrucciones operan de manera similar a las instrucciones de string.
Los registros E&I y E1I se usan para especi$car los elementos strings
en la memoria y los pre$0os de repeticin "DE9# se usan para repetir la
instruccin para implementar una trans'erencia de bloque.
16
El ensamblador reconoce los siguiente mnemnicos alternativos para
estas instrucciones: IF&A "input byte#, IF&H "input word#, and IF&1
"input doubleword#, and 5TA "output byte#, 5TH "output word#, y
5T1 "output doubleword#.
Las instrucciones IF& y 5T& usan una direccin en el registro 13
para especi$car el puerto de E*&.
En s6ntesis:
Las instrucciones de entrada*salida IF*5T se usan para comunicarse
con los peri'4ricos del sistema, y tienen el 'ormato
IF acumulador, puerto
5T puerto, acumulador
donde el acumulador es 23 o 2L.
2lgunos e0emplos pueden ser los siguientes:
IF 2L,,RR O pasa a 2L el contenido del puerto ,RR
5T ,R8,23 O env6a al puerto ,R8 el contenido de 23
2lgunos e0emplos de puerto son:
.R8 2cepta entradas de teclado.
.-% Controla el altavo?.
+;R8/+;J8 pera sobre la controladora de discos
NASM: .N& Input from I=, >ort
*+ AL,imm8
*+ AX,imm8
*+ EAX,imm8
*+ AL,DX
*+ AX,DX
*+ EAX,DX
NASM: .NS&+ .NS'+ .NSD& Input 9trin! from I=, >ort
*+$'
*+$&
*+$D
NASM: OU-& ,utput Data to I=, >ort
O#T imm8,AL
O#T imm8,AX
O#T imm8,EAX
O#T DX,AL
O#T DX,AX
O#T DX,EAX
17
NASM: OU-S&+ OU-S'+ OU-SD& ,utput 9trin! to I=, >ort
O#T$'
O#T$&
O#T$D
Instrucciones aritmticas binarias#
3as instrucciones aritm/ticas !inarias o"eran con datos num/ricos de 8 16 $ 32 !its
codi%icados como enteros !inarios con signo $ sin signo.
,stas o"eraciones inclu$en suma resta multi"licaci#n $ di+isi#nA as& como tam!i/n
incremento decremento com"araci#n $ negaci#n. ,stas instrucciones tam!i/n se
"ueden usar en algoritmos que o"eran con +alores decimales ;54.<.

Instrucciones de 9uma y Resta
3as instrucciones 044 ;suma enteros< 04. ;suma enteros con acarreo< 2=5 ;resta
enteros< $ 255 ;resta enteros con !orroE< reali*an o"eraciones de sumas $ restas en
o"erandos enteros con signo $ sin signo.
Instruccin ADD
Leali*a la suma entre dos o"erandos enteros dados. ,stos o"erandos de!en ser del
mismo tama1o.
2inta-is@
ADD destino+fuente#
2e reali*a la suma de los dos o"erandos $ se de"osita en o"erando destino. Dener en
cuenta que "uede "roducirse des!ordamiento.
,l o"erando destino "uede ser un registro o una direcci#n de memoria. ,l o"erando
%uente "uede ser un +alor inmediato un registro o una direcci#n de memoria. ;sin
em!argo no se "ueden usar dos direcciones de memoria en una instrucci#n<.
,l resultado de la o"eraci#n se e+al)a "ara o"erandos enteros con signo $ sin signo $ si
"roduce o+er%loE se indica en los registros de estados 87 $ .7. ,l registro de estado 27
indica el signo del resultado se1alado.
8"eraci#n
4,2D 4,2D M 2L.A
7lags a%ectados ;registros de estados a%ectados<
3os %lags que resultan a%ectados seg)n el resultado son@ 87 27 K7 07 .7 $ P7.
18
Instruccin ADC
0dici#n con acarreo.
2inta-is@
ADC destino+ fuente
3le+a a ca!o la suma de dos o"erandos enteros $ suma uno al resultado en caso de que
la !andera .7 est/ acti+ada esto es en caso de que e-ista acarreo.
,l resultado se guarda en el o"erando destino.
,l o"erando destino "uede ser un registro o una direcci#n de memoria. ,l o"erando
%uente "uede ser un +alor inmediato un registro o una direcci#n de memoria. ;2in
em!argo no se "ueden usar dos direcciones de memoria en una misma
instrucci#n<. ,l estado del %lag .7 re"resenta un acarreo de una o"eraci#n de suma
"re+ia. .uando un +alor inmediato se usa como un o"erando /ste toma el mismo
tama1o del %ormato del o"erando destino.
3a instrucci#n 04. no distingue entre o"erandos con signo o sin signo. ,n cam!io el
"rocesador e+al)a el resultado de am!os ti"os de datos $ de los %lags 87 $ .7 "ara
indicar un acarreo en el resultado con signo o sin signo. ,l %lag 27 indica el signo del
resultado se1alado.
3a instrucci#n 04. usualmente es ejecutada como "arte de una suma con multi!$te o
multiEord en donde una instrucci#n 044 es seguida "or una instrucci#n 04..
,sta instrucci#n se "uede usar con el "re%ijo 38.N "ara "ermitir que la instrucci#n se
ejecute at#micamente.
8"eraci#n
4,2D 4,2D M 2L. M .7A
7lags a%ectados...
3os %lags a%ectados seg)n el resultado son@ 87 27 K7 07 .7 $ P7.
Instruccin 9?B
Leali*a la resta entre dos o"erandos enteros.
2inta-is@
9?B destino+ fuente
$0
,sta instrucci#n resta el o"erando %uente del destino $ almacena el resultado en el
o"erando destino. ,l o"erando destino "uede ser un registro o una direcci#n de
memoria. ,l o"erando %uente "uede ser un +alor inmediato un registro o una
direcci#n de memoria. ;2in em!argo dos direcciones de memoria no se "ueden
usar en una misma instrucci#n<. .uando un +alor inmediato se usa como un
o"erando /ste toma el mismo tama1o del %ormato del o"erando destino.
,l resultado de la o"eraci#n se e+al)a "ara o"erandos enteros con signo $ sin signo $ si
"roduce o+er%loE se indica en los registros de estados 87 $ .7. ,l registro de
estado 27 indica el signo del resultado se1alado.
,sta instrucci#n se "uede usar con el "re%ijo 38.N "ara "ermitir que la instrucci#n se
ejecute at#micamente.
8"eraci#n
4,2D 4,2D O 2L.A
7lags a%ectados...
3os %lags a%ectados seg)n el resultado son@ 87 27 K7 07 .7 $ P7.
Instruccin 9BB
Lesta con acarreo.
2inta-is@
9BB destino+ fuente
,sta instrucci#n suma el o"erando %uente $ el acarreo ;%lag .7< $ resta el resultado del
o"erando destino. ,l resultado de la resta se almacena en el o"erando destino. ,l
o"erando destino "uede ser un registro o una direcci#n de memoria. ,l o"erando %uente
"uede ser un +alor inmediato un registro o una direcci#n de memoria. # ;2in em!argo
dos direcciones de memoria no se "ueden usar en una misma instrucci#n<. ,l estado del
%lag .7 re"resenta un !orroE de una resta "re+ia.
.uando un +alor inmediato se usa como un o"erando /ste toma el mismo tama1o del
%ormato del o"erando destino.
3a instrucci#n 255 usualmente se ejecuta como "arte de una resta con multi!$te o
multiEord en donde una instrucci#n 2=5 es seguida "or una instrucci#n 255.
,sta instrucci#n se "uede usar con el "re%ijo 38.N "ara "ermitir que la instrucci#n se
ejecute at#micamente.
8"eraci#n
4,2D 4,2D O ;2L. M .7<A
7lags a%ectados...
3os %lags a%ectados seg)n el resultado son@ 87 27 K7 07 .7 $ P7.
$1
Instrucciones de Incremento y Decremento
3as instrucciones 6'. ;incremento< $ 4,. ;decremento< adicionan 1 o restan 1 de un
o"erando entero. =n uso "rimario de estas instrucciones es la im"lementaci#n de
contadores.
Instruccin I@C
2e utili*a cuando lo que se quiere (acer en una suma de una unidad.
2inta-is@
I@C destino
,sta instrucci#n adiciona uno al o"erando destino mientras "reser+a el estado del %lag
.7. ,l o"erando destino "uede ser un registro o una direcci#n de memoria. ,sta
instrucci#n "ermite actuali*ar el contador sin distorsionar el %lag .7. ;Para a%ectar
al %lag .7 usa una instrucci#n 044 con un o"erando inmediato en 1 de esta %orma
reali*a un incremento $ actuali*a el %lag .7<.
,sta instrucci#n se "uede usar con el "re%ijo 38.N "ara "ermitir que la instrucci#n se
ejecute at#micamente.
8"eraci#n
4,2D 4,2D M 1A
7lags a%ectados...
,l %lag .7 no es a%ectado. ,l 87 27 K7 07 $ P7 son a%ectados de acuerdo al resultado.
Instruccin DEC
2e utili*a cuando se quiere restar una unidad a un +alor dado.
2inta-is@
DEC destino
,sta instrucci#n resta uno del o"erando destino mientras que es "reser+ado el estado
del %lag .7. ,l o"erando destino "uede ser un registro o una direcci#n de memoria.
,sta instrucci#n "ermite actuali*ar el contador sin distorsionar el %lag .7. ; Para
reali*ar una o"eraci#n de decremento que actuali*a el %lag .7 se usa una
instrucci#n 2=5 con un +alor inmediato de 1<.
,sta instrucci#n se "uede usar con el "re%ijo 38.N "ara "ermitir que la instrucci#n se
ejecute at#micamente.
$$
8"eraci#n
4,2D 4,2D O 1
7lags a%ectados...
,l %lag .7 no es a%ectado. ,l 87 27 K7 07 $ P7 son a%ectados de acuerdo al
resultado.
Instrucciones de 'ultiplicacin y Di(isin
,l "rocesador "ro"orciona dos o"eraciones "ara multi"licar M=3 ;multi"licaci#n sin
signo< e 6M=3 ;multi"licaci#n con signo< $ dos o"eraciones "ara di+idir 46P
;di+isi#n sin signo< e 646P ;di+isi#n con signo<.
Instruccin '?
Multi"licaci#n sin signo
2inta-is@
'? fuente
,sta instrucci#n multi"lica dos o"erandos enteros sin signo. ,l resultado es com"utado
dos +eces el tama1o del o"erando %uente. Por ejem"lo si se multi"lican o"erandos de
ti"o Eord el resultado es un dou!leEord.
,sta instrucci#n reali*a la multi"licaci#n del o"erando dado con el acumulador.
4e"endiendo del tama1o del o"erando introducido en la o"eraci#n el "rocesador +a a
tomar 03 0Q o ,0Q como segundo o"erando.
3a acci#n de esta instrucci#n $ la locali*aci#n del resultado de"enden de la codi%icaci#n
$ del tama1o del o"erando tal como se "resenta en la siguiente ta!la...
TamaAo del
operando
%uente 1 %uente $ Destino
5$te 03 rHm8 0Q
Rord 0Q rHm16 4Q@0Q
4ou!leRord ,0Q rHm32 ,4Q@,0Q
.uando se reali*a una multi"licaci#n con +alores de 8 !its el resultado se almacena en
el registro 0Q cuando la multi"licaci#n es con +alores de 16 !its el resultado se
almacena en el registro "ar 4Q@0Q $ cuando la multi"licaci#n es con +alores de 32 !its
se almacena en el registro "ar ,4Q@,0Q. 2i los !its ms signi%icati+os del "roducto
son 0 los %lags .7 $ 87 son eliminados de otra manera son acti+ados.
$)
8"eraci#n
67 !$teSo"eracion
DT,'
0Q 03 U 2L.
,32,
67 Dama1o8"erando V 16
DT,'
4Q@0Q 0Q U 2L.
,32,
,4Q@,0Q ,0Q U 2L.
76A
76A
$2
7lags 0%ectados
3os %lags 87 $ .7 son acti+ados en 0 si la "arte ms signi%icati+a del resultado es 0 de
otra %orma son "uestos en 1.
3os %lags 27 K7 07 $ P7 estn inde%inidos.
Instruccin I'?
Multi"lica dos o"erandos enteros con signo.
2inta-is@
I'? operando
,sta instrucci#n tiene tres %ormas seg)n el n)mero de o"erandos@
1< =n o"erando@ ,sta %orma es id/ntica a la utili*ada en la instrucci#n M=3. 0qu&
el o"erando %uente ;locali*ado en un registro de "ro"#sito general< se multi"lica
con el +alor en el registro 03 0Q o ,0Q ;de"endiendo del tama1o del
o"erando< $ el "roducto se almacena en los registros 0Q 4Q@0Q o ,4Q@,0Q
res"ecti+amente.
2< 4os o"erandos@ ,n esta %orma el o"erando destino se multi"lica "or el o"erando
%uente. ,l o"erando destino es en un registro de "ro"#sito general $ el o"erando
%uente es un +alor inmediato un registro de "ro"#sito general o una direcci#n de
memoria. ,l "roducto es entonces almacenado en la direcci#n del o"erando
destino.
3< Dres o"erandos@ ,sta %orma requiere un o"erando destino $ dos o"erandos
%uentes. 0qu& el "rimer o"erando %uente ;el cual "uede ser un registro de
"ro"#sito general o una direcci#n de memoria< se multi"lica con el segundo
o"erando %uente ;un +alor inmediato<. ,l "roducto entonces se almacena en el
o"erando destino ;un registro de "ro"#sito general<.
.uando un +alor inmediato se usa como un o"erando /ste toma el mismo tama1o del
%ormato del o"erando destino.
3os %lags .7 $ 87 son acti+ados cuando el !it signi%icati+o ;incluido el !it de signo< es
lle+ado dentro de la "arte alta del resultado. 3os %lags .7 $ 87 son eliminados
cuando el resultado ;inclu$endo el !it de signo< entra "er%ectamente en la "arte !aja
del resultado.
3as tres %ormas de la instrucci#n 6M=3 son similares en que el largo del "roducto se
calcula "ara dos +eces el largo de los o"erandos. .on la %orma de un o"erando el
"roducto se almacena e-actamente en el destino. .on la %orma de dos $ tres
o"erandos sin em!argo el resultado se trunca "ara el largo del destino antes esto
se almacena en el registro destino. Porque de esta truncaci#n los %lags .7 $ 87
de!er&an ser testeados "ara asegurar que no se "ierdan los !its signi%icati+os.
3a %orma de dos $ tres o"erandos tam!i/n se "uede usar con o"erandos sin signos $a
que la "arte alta del "roducto es a "esar de todo el mismo si el o"erando es con
signo o sin signo. 3os %lags .7 $ 87 sin em!argo no se "ueden usar "ara
determinar si la "arte alta del resultado no es cero.
$4
8"eraci#n
67 ;'umero4e8"erando V 1<
DT,' 67 ;Dama1o8"erando V 8<
DT,'
0Q 03 U 2L. ;UMulti"licaci#n sin signoU<
67 03 V 0Q
DT,' .7 0A 87 0A
,32, .7 1A 87 1A
76A
,32, 67 Dama1o8"erando V 16
DT,'
4Q@0Q 0Q U 2L. ;UMulti"licaci#n con signoU<
67 signSe-tendStoS32 ;0Q< V 4Q@0Q
DT,' .7 0A 87 0A
,32, .7 1A 87 1A
76A
,32, ;UDama1o de 8"erando V 32 U<
,4Q@,0Q ,0Q U 2L. ;UMulti"licaci#n sin signo U<
67 ,0Q V ,4Q@,0Q
DT,' .7 0A 87 0A
,32, .7 1A 87 1A
76A
76A

,32, 67 ;'umero4e8"erando V 2<
DT,'
Dem" 4,2D U 2L. ;U Multi"licaci#n sin signoA tem" es el do!le
4el tama1o de 4,2D U<
4,2D 4,2D U 2L. ;UMulti"licaci#n sin signo U<
67 Dem". WX 4,2D
DT,' .7 1A 87 1A
,32, .7 0A 87 0A
76A
,32, ;U'umero4e8"erando V 3U<
4,2D 2L.1 U 2L.2 ;UMulti"licaci#n sin signo U<
Dem" 2L.1 U 2L.2 ;U Multi"licaci#n sin signoA tem" es
el do!le del tama1o de 2L.1 U<
67 Dem". WX 4,2D
DT,' .7 1A 87 1A
,32, .7 0A 87 0A
76A
76A
76A
$5
7lags a%ectados
Para la instrucci#n de la %orma de un o"erando los %algs .7 $ 87 se acti+an cuando los
!its signi%icati+os se acarrean dentro de la "arte alta del resultado $ se eliminan
cuando el resultado entra e-actamente la "arte !aja del resultado.
Para la instrucci#n de las %ormas de dos $ tres o"erandos los %lags .7 $ 87 son
acti+ados cuando el resultado de!e ser truncado "ara ca!er en el tama1o del
o"erando destino $ eliminados cuando el resultado ca!e e-actamente en el tama1o
del o"erando destino.
3os %lags 27 K7 07 Y P7 estn inde%inidos.

Instruccin DIB
4i+isi#n sin signo
2inta-is@
DIB fuente
,sta instrucci#n di+ide un o"erando sin signo "or otro o"erando sin signo $ retorna un
cociente $ un resto.
4i+ide el +alor en los registros 0Q 4Q@0Q o ,4Q@,0Q "or el o"erando %uente
;di+isor< $ almacena el resultado en los registros 0Q ;0T@03< 4Q@0Q o ,4Q@,0Q.
,l o"erando %uente "uede ser un registro de "ro"#sito general o una direcci#n de
memoria. 3a acci#n de esta instrucci#n de"ende del tama1o del o"erando
;di+idendoHdi+isor< tal como se "resenta en la siguiente ta!la@
TamaAo del
operando
Di(idendo Di(isor Cociente Resto 'C:imo
Cociente
RordH!$te 0Q rHm8 03 0T 255
4ou!leEordHEord 4Q@0Q rHm16 0Q 4Q 65535
ZuadEordHdou!leEord ,4Q@,0Q rHm32 ,0Q ,4Q 2
32
9 1
3os resultados no &ntegros se truncan a cero. ,l resto siem"re es menor en magnitud que
el di+isor. ,l 8+er%loE se indica con la e-ce"ci#n [4, ms que con el %lag .7.
7lags 0%ectados
3os %lags .7 87 27 K7 07 $ P7 estn inde%inidos.
Instruccin IDIB
4i+isi#n con signo
2inta-is@
IDIB fuente
.onsiste !sicamente en lo mismo que la instrucci#n 46P solo que esta )ltima reali*a
la o"eraci#n con signo.
Para sus resultados utili*a los mismos registros que la instrucci#n 46P.
3a acci#n de esta instrucci#n tam!i/n de"ende del tama1o del o"erando
;di+idendoHdi+isor< tal como se "resenta en la siguiente ta!la...
$6
TamaAo del
operando
Di(idendo Di(isor Cociente Resto Ran!o del Cociente
RordH!$te 0Q rHm8 03 0T de 9128 a M127
4ou!leEordHEord 4Q@0Q rHm16 0Q 4Q de 932768 a 32767
ZuadEordHdou!leEor
d
,4Q@,0Q rHm32 ,0Q ,4Q de 92
31
a 2
32
9 1
3os resultados no &ntegros se truncan a cero. ,l signo del resto siem"re es el mismo que
el signo del di+idendo. ,l +alor a!soluto del resto siem"re es menor que el +alor
a!soluto del di+isor. ,l 8+er%loE se indica con la e-ce"ci#n [4, ms que con el
%lag 87.
8"eraci#n
7lags 0%ectados
3os %lags .7 87 27 K7 07 $ P7 estn inde%inidos.
Instrucciones Aritmticas Decimales
3as instrucciones aritm/ticas decimales se "ueden reali*ar com!inando las instrucciones
aritm/ticas !inarias ;044 2=5 M=3 $ 46P< con las instrucciones aritm/ticas
decimales. 3as instrucciones aritm/ticas decimales se "re+/n "ara cum"lir con las
siguientes o"eraciones@
1< 0justar el resultado de una o"eraci#n aritm/tica !inaria "re+ia "ara "roducir un
resultado 5.4 +lido.
2< 0justar los o"erandos de una o"eraci#n aritm/tica !inaria "osterior "ara que
luego la o"eraci#n "rodu*ca un resultado 5.4 +lido.
,stas instrucciones s#lo o"eran en los +alores 5.4 "acFed $ un"acFed.
Instrucciones para a"ustar BCD pacDed
$7
3as instrucciones 400 ;ajuste decimal des"u/s de una suma< $ 402 ;ajuste decimal
des"u/s de una resta< ajustan el resultado de o"eraciones reali*adas en enteros 5.4
"acFed. Para adicionar dos +alores 5.4 "acFed se requiere de dos instrucciones@
=na instrucci#n 044 seguida de una instrucci#n 400. 3a instrucci#n 044
adiciona ;adici#n !inaria< los dos +alores $ almacena el resultado en el registro 03.
3a instrucci#n 400 ajusta el +alor en el registro 03 "ara o!tener un +alor 5.4
"acFed +lido $ acti+a el %lag .7 si ocurre un acarreo decimal como resultado de la
adici#n.
4e igual %orma "ara restar un +alor 5.4 "acFed de otro se requiere una instrucci#n
2=5 seguida de una instrucci#n 402. 3a instrucci#n 2=5 resta ;resta !inaria< un
+alor 5.4 de otro $ almacena el resultado en el registro 03. 3a instrucci#n 402
ajusta el +alor de este registro "ara o!tener un +alor 5.4 +lido $ acti+a el %lag .7
si ocurre un !orroE como resultado de la resta.
Instruccin DAA
0justa la suma de dos +alores 5.4 "ara crear un resultado 5.4 "acFed. ,l registro 03
es el su"uesto o"erando %uente $ destino. 3a instrucci#n 400 s#lo es )til cuando
/sta sigue a una instrucci#n 044 la cual suma ;suma !inaria< dos d&gitos +alores
5.4 "acFed $ almacena en el registro 03. 3a instrucci#n 400 luego ajusta el
contenido del registro 03 "ara contener los dos d&gitos correctos resultado 5.4
"acFed. 4e acuerdo con esto si se detecta un acarreo decimal los %lags .7 $ 07
son acti+ados.
7lags a%ectados@
3os %lags .7 $ 07 se acti+an si el ajuste del +alor resulta en un acarreo decimal en
cualquiera de los dos d&gitos del resultado.
3os %lags 27 K7 $ P7 se acti+as de acuerdo al resultado.
,l %lag 87 est inde%inido.
Instruccin DA9
0justa el resultado de la resta de dos +alores 5.4 "ara crear un resultado 5.4 "acFed.
,l registro 03 es el su"uesto o"erando %uente $ destino. 3a instrucci#n 402 s#lo es
)til cuando /sta sigue a una instrucci#n 2=5 la cual resta ;resta !inaria< dos
d&gitos +alores 5.4 "acFed $ almacena en el registro 03. 3a instrucci#n 402
luego ajusta el contenido del registro 03 "ara contener los dos d&gitos correctos
resultado 5.4 "acFed. 4e acuerdo con esto si se detecta un !orroE decimal los
%lags .7 $ 07 son acti+ados.
3os %lags .7 $ 07 se acti+an si el ajuste del +alor resulta en un !orroE decimal en
cualquiera de los dos d&gitos del resultado.
3os %lags 27 K7 $ P7 se acti+as de acuerdo al resultado.
,l %lag 87 est inde%inido.
Instrucciones para a"ustar BCD unpacDed
$8
3as instrucciones 000 ;ajuste 02.66 des"u/s de una suma< 002 ;ajuste 02.66
des"u/s de una resta< 00M ;ajuste 02.66 des"u/s de una multi"licaci#n< $ 004
;ajuste 02.66 des"u/s de una di+isi#n< ajustan el resultado de o"eraciones
aritm/ticas reali*adas en +alores 5.4 un"acFed. Dodas estas instrucciones asumen
que el +alor a ajustar se almacena en el registro 03 o en una instancia los registros
03 $ 0T.
Instruccin AAA
,sta instrucci#n ajusta el contenido del registro 03 des"u/s de la suma de dos +alores
5.4 un"acFed. Jsta con+ierte el +alor !inario que se encuentra en el registro 03
en un +alor decimal $ almacena el resultado en el registro 03 en %ormato 5.4
un"acFed ;el n)mero decimal se almacena en los 4 !its ms !ajos del registro $ los
4 !its ms altos se eliminan<.
2i ocurre un acarreo decimal como resultado de la adici#n los %lags .7 $ 07 se acti+a $
el contenido del registro 0T se incrementa en 1. 2i no (a$ acarreo decimal los
%lags .7 $ 07 se eliminan $ el registro 0T no se modi%ica. ,n am!os casos los !its
4 t(roug( 7 del registro 03 se acti+an a cero.
7lags a%ectados
3os %lags 0% $ .7 se acti+an a 1 si se "roduce un acarreo decimalA en otro caso ellos se
acti+an a 0.
3os %lags 87 27 K7 $ P7 estn inde%inidos.
Instruccin AA9
,sta instrucci#n ajusta el contenido del registro 03 des"u/s de una la resta de dos
+alores 5.4 un"acFed. 0qu& igual que en la instrucci#n anterior un +alor !inario
es con+ertido en un +alor 5.4 un"acFed.
2i la resta "roduce un acarreo decimal el registro 0T se decrementa en uno $ los %lags
.7 $ 07 se acti+an. 2i no se "roduce un acarreo los %lags .7 $ 07 son eliminados
$ el registro 0T no se modi%ica.
7lags a%ectados
3os %lags 0% $ .7 se acti+an a 1 si se "roduce un acarreo decimalA en otro caso ellos se
acti+an a 0.
3os %lags 87 27 K7 $ P7 estn inde%inidos.
Instruccin AA'
,sta instrucci#n ajusta el contenido del registro 03 des"u/s de una multi"licaci#n de
dos +alores 5.4 un"acFed. .on+ierte el +alor !inario del registro 03 en un +alor
decimal $ almacena el d&gito menos signi%icati+o del resultado en el registro 03 ;en
%ormato 5.4< $ el d&gito ms signi%icati+o si (a$ alguno en el registro 0T
;tam!i/n en %ormato 5.4<.
,l registro 0Q es el su"uesto o"erando destino $ %uente "ara esta instrucci#n.
)0
3a instrucci#n 00M s#lo es )til cuando sigue a una instrucci#n M=3 la cual multi"lica
;multi"licaci#n !inaria< dos +alores 5.4 un"acFed $ almacena el resultado en el
registro 0Q.
7lags a%ectados
3os %lags 27 K7 $ P7 son acti+ados de acuerdo al +alor !inario resultante en el registro
03. 3os %lags 07 07 $ .7 estn inde%inidos.
Instruccin AAD
,sta instrucci#n ajusta un +alor 5.4 de dos d&gitos tal que cuando el +alor se di+ide
con la instrucci#n 46P se o!tiene un resultado 5.4 un"acFed +lido. 3a
instrucci#n con+ierte el +alor 5.4 de los registros 0T ;d&gito ms signi%icati+o< $
03 ;d&gito menos signi%icati+o< en un +alor !inario $ almacena el resultado en un
registro 03. .uando el +alor en 03 se di+ide "or un +alor 5.4 un"acFed el
cociente $ el resto automticamente sern codi%icados en un %ormato 5.4
un"acFed.
7lags a%ectados
3os %lags 27 K7 $ P7 son acti+ados de acuerdo al +alor !inario resultante en el registro
03. 3os %lags 07 07 $ .7 estn inde%inidos.


Instrucciones #gicas
3as instrucciones de las o"eraciones l#gicas son@ and not or $ :or /stas tra!ajan
so!re los !its de sus o"erandos. 3as instrucciones 0'4 8L $ Q8L requieren dos
o"erandos la instrucci#n '8D o"era so!re un o"erando sim"le.
Instruccin A@D
Leali*a la conjunci#n de los o"erandos !it "or !it.
2inta-is@
A@D destino+ fuente
.on esta instrucci#n se lle+a a ca!o la o"eraci#n G$G l#gica de los dos o"erandos $ se
almacena el resultado en la direcci#n del o"erando destino. ,l o"erando %uente "uede
ser un +alor inmediato un registro o una direcci#n de memoriaA el o"erando destino
"uede ser un registro o una direcci#n de memoria. ;2in em!argo dos o"erandos de
memoria no se "ueden usar en una misma instrucci#n<. .ada !it del resultado se acti+a a
1 si am!os !its del "rimer $ segundo o"erando son 1A ,n otro caso se "one en 0.
)1
,sta instrucci#n se "uede usar con un "re%ijo 38.N que "ermite a la instrucci#n
ejecutarse at#micamente.
7uente 4estino 4estino
1 1 1
1 0 0
0 1 0
0 0 0
8"eraci#n
4,2D 4,2D 0'4 2L.A
7lags a%ectados
3os %lags 87 $ .7 son eliminadosA
3os %lags 27 K7 $ P7 son acti+ados de acuerdo al resultado.
,l estado del %lag 07 est inde%inido.

Instruccin ,R
8L inclusi+o l#gico
2inta-is@
,R destino+ fuente
3a instrucci#n 8L lle+a a ca!o !it "or !it la dis$unci#n inclusi+a l#gica de los dos
o"erandos $ el resultado lo almacena en la direcci#n del o"erando destino. ,l o"erando
%uente "uede ser un +alor inmediato un registro o una direcci#n de memoriaA el
o"erando destino "uede ser un registro o una direcci#n de memoria. ;2in em!argo dos
direcciones de memoria no se "ueden usar en una misma instrucci#n<. .ada !it del
resultado de la instrucci#n 8L se "one en 0 si am!os !it de los o"erandos %uente $
destino son 0A de otra %orma cada !it se "one en 1.
,sta instrucci#n se "uede usar con un "re%ijo 38.N que "ermite a la instrucci#n
ejecutarse at#micamente.
7uente 4estino 4estino
1 1 1
1 0 1
0 1 1
0 0 0
,sta instrucci#n se "uede usar con un "re%ijo 38.N que "ermite a la instrucci#n
ejecutarse at#micamente.
)$
8"eraci#n
4,2D 4,2D 8L 2L.A
7lags a%ectados
3os %lags 87 $ .7 son eliminadosA
3os %lags 27 K7 $ P7 son acti+ados de acuerdo al resultado.
,l estado del %lag 07 est inde%inido.
Instruccin E,R
8L e-clusi+o
2inta-is@
E,R destino+ fuente
2u %unci#n es e%ectuar !it "or !it la dis$unci#n e-clusi+a l#gica de los dos o"erandos $
almacena el resultado en la direcci#n del o"erando destino. ,l o"erando %uente "uede
ser un +alor inmediato un registro o una direcci#n de memoria. ,l o"erando destino
"uede ser un registro o una direcci#n de memoria. ;2in em!argo dos direcciones de
memoria no se "ueden usar en una misma instrucci#n<. .ada !it del resultado es 1 si los
!its de los o"erandos son di%erentes de ser iguales el !it es 0.
,sta instrucci#n se "uede usar con un "re%ijo 38.N que "ermite a la instrucci#n
ejecutarse at#micamente.
7uente 4estino 4estino
1 1 0
1 0 1
0 1 1
0 0 0
7lags a%ectados
3os %lags 87 $ .7 son eliminadosA
3os %lags 27 K7 $ P7 son acti+ados de acuerdo al resultado.
,l estado del %lag 07 est inde%inido.
Instruccin @,T
3le+a a ca!o la negaci#n !it "or !it del o"erando destino.
2inta-is@
@,T destino
,l resultado se guarda en el mismo o"erando destino. .ada !it 1 se "one 0 $ cada !it 0
se "one a 1. ,l o"erando destino "uede ser un registro o una direcci#n de memoria.
,sta instrucci#n se "uede usar con un "re%ijo 38.N que "ermite a la instrucci#n
ejecutarse at#micamente.
8"eraci#n
4,2D '8D 4,2D
))
7lags a%ectados
'inguno.
)2
Instrucciones de Desplazamiento y Rotacin
3as instrucciones de 4es"la*amiento $ Lotaci#n ordenan los !its dentro de un
o"erando. 0 estas instrucciones se las "uede clasi%icar de la siguiente manera@
1< 4es"la*amiento.
2< 4o!le 4es"la*amiento.
3< Lotaci#n.
Instrucciones de Desplazamiento
3as instrucciones 203 ;des"la*amiento aritm/tico i*quierdo< 2T3 ;des"la*amiento
l#gico i*quierdo< 20L ;des"la*amiento aritm/tico derec(o< $ 2TL
;des"la*amiento l#gico derec(o< reali*an des"la*amientos aritm/ticos o l#gicos de
los !its en un !$te Eord o dou!leEord.
Instrucciones 9A y 9F
3as instrucciones 203 $ 2T3 reali*an la misma o"eraci#n. ,stas instrucciones
des"la*an el o"erando %uente a la i*quierda las "osiciones de 1 a 31 !it. ,l !it li!re
se elimina. ,l %lag .7 se carga con el )ltimo !it des"la*ado %uera del o"erando.
,jem"lo
Estado inicial

C% ,perando
)4
Q 10001000100010001000100010001111
Despus de desplazar 1 bit con la instruccin 9F=9A
1 00010001000100010001000100011110 0

Despus de desplazar 10 bits con la instruccin 9F=9A
0 00100010001000100011110000000000
0
7lags 0%ectados
,l %lag .7 contiene el +alor del )ltimo !it des"la*ado %uera del o"erando destinoA /ste
est inde%inido "or las instrucciones 2T3 $ 2TL donde el contenido es ms grande
o igual ;en !its< al tama1o del o"erando destino.
,l %lag 87 s#lo se a%ecta "ara des"la*amientos de 1 !itA de otra %orma es inde%inido.
3os %lags 27 K7 $ P7 se acti+an de acuerdo al resultado. Para un contador no cero el
%lag 07 est inde%inido.
Instruccin 9FR
,sta instrucci#n des"la*a el o"erando %uente a la derec(a las "osiciones de 1 a 31 !its.
6gual que con las instrucciones 2T3H203 las "osiciones de !it li!res se eliminan $ el
%lag .7 se carga con el )ltimo !it des"la*ado %uera del o"erando.
,jem"lo@
Estado Inicial
,perando C%
10001000100010001000100010001111 Q

Despus de desplazar 1 bit con la instruccin 9FR
0 01000100010001000100010001000111 1
Despus de desplazar 10 bits con la instruccin 9FR
)5
0 00000000001000100010001000100010 0
7lags 0%ectados
,l %lag .7 contiene el +alor del )ltimo !it des"la*ado %uera del o"erando destinoA /ste
est inde%inido "or las instrucciones 2T3 $ 2TL donde el contenido es ms grande
o igual ;en !its< al tama1o del o"erando destino.
,l %lag 87 s#lo se a%ecta "ara des"la*amientos de 1 !itA de otra %orma es inde%inido.
3os %lags 27 K7 $ P7 se acti+an de acuerdo al resultado. Para un contador no cero el
%lag 07 est inde%inido.
Instruccin 9AR
3a instrucci#n 20L des"la*a el o"erando %uente a la derec(a las "osiciones de 1 a 31
!its. ,sta instrucci#n di%iere de la instrucci#n 2TL en que /sta "reser+a el signo del
o"erando %uente eliminando las "osiciones de !its li!res si el o"erando es "ositi+o
o "oniendo en 1 los !its li!res si el o"erando es negati+o. 0qu& otra +e* el %lag .7
se carga con el )ltimo !it des"la*ado %uera del o"erando.
,jem"lo@
Estado Inicial -,perando >ositi(o.
)6
,perando C%

Despus de desplazar 1 bit con la instruccin 9AR


Estado Inicial -,perando @e!ati(o.
,perando C%
Despus de desplazar 10 bits con la instruccin 9AR

3as instrucciones 20L $ 2TL tam!i/n se "ueden usar "ara reali*ar di+isiones en
"otencia de dos.
7lags 0%ectados
,l %lag .7 contiene el +alor del )ltimo !it des"la*ado %uera del o"erando destinoA /ste
est inde%inido "or las instrucciones 2T3 $ 2TL donde el contenido es ms grande
o igual ;en !its< al tama1o del o"erando destino.
,l %lag 87 s#lo se a%ecta "ara des"la*amientos de 1 !itA de otra %orma es inde%inido.
3os %lags 27 K7 $ P7 se acti+an de acuerdo al resultado. Para un contador no cero el
%lag 07 est inde%inido.
Instrucciones de Doble Desplazamiento
3as instrucciones 2T34 ;do!le des"la*amiento a i*quierda< $ 2TL4 ;do!le
des"la*amiento a derec(a< des"la*an un n)mero es"ec&%ico de !its de un o"erando
a otro. ,stas instrucciones estn "ro+istas "ara %acilitar o"eraciones on unaligned
!it strings. ,llas tam!i/n se "ueden usar "ar im"lementar una +ariedad de
o"eraciones de mo+imientos de !its strings.
Instruccin 9FD
31 0
)7
11100010001000100010001000100011 1
01000100010001000100010001000111 Q
00100010001000100010001000100011 1
11000100010001000100010001000111 Q
7uente ;registro<
4estino ;memoria o registro< .7
31 0
3a instrucci#n 0T34 des"la*a los !its en el o"erando destino "ara la i*quierda $ llena
las "osiciones li!res ;en l o"erando destino< con los !its des"la*ados %uera del
o"erando %uente. 3os o"erandos destino $ %uente de!en ser del mismo tama1o. ,l
des"la*amiento "uede incluir rangos de 1 a 31 !its. ,l resultado de esta o"eraci#n
se almacena en el o"erando destino $ el o"erando %uente no se modi%ica. ,l %lag
.7 se carga con el )ltimo !it des"la*ado %uera del o"erando destino.
Instruccin 9FRD
31 0
31 0

3a instrucci#n 2TL4 o"era igual que 2T34 con la e-ce"ci#n de que los !its que se
des"la*an a la i*quierda en el o"erando destino con las "osiciones de !it li!res se
llenan con los !its des"la*ados %uera del o"erando %uente.
Instrucciones de Rotacin
3as instrucciones L83 ;rotaci#n a i*quierda< L8L ;rotaci#n a derec(a< L43 ;rotaci#n
a tra+/s del acarreo a i*quierda< $ L.L ;rotaci#n con acarreo a derec(a< rotan los
!its del o"erando destino de una "unta a otra. 0 di%erencia de un des"la*amiento
los !its no se "ierden durante la rotaci#n. 3a rotaci#n "uede incluir un rango de 0 a
31.
31 Instruccin R, 0
)8
C%
4estino ;memoria o registro<
7uente ;registro<
.7
3a instrucci#n L83 rota los !its del o"erando (acia la i*quierda ;............<
20
4estino ;memoria o registro<
31 Instruccin R,R 0
3a instrucci#n L8L rota los !its del o"erando a la derec(a.
31 Instruccin RC 0
3a instrucci#n L.3 rota los !its en el o"erando (acia la i*quierda a tra+/s del %lag .7.
,sta instrucci#n trata al %lag .7 como una e-tensi#n de un !it en el %inal su"erior
del o"erando. .ada !it que sale de la locali*aci#n del !it ms signi%icati+o del
operando entra al %lag .7. 0l mismo tiem"o el !it en el %lag .7 entra en la
locali*aci#n del !it menos signi%icati+o del o"erando.
3os !its del o"erando destino se des"la*an ;rotan< el n)mero de "osiciones
es"eci%icadas en el o"erando contador $ se almacena el resultado en el o"erando
destino.
,l o"erando destino "uede ser un +alor inmediato o un +alor en el registro .3. ,l
"rocesador restringe el contador "ara n)meros entre 0 $ 31 !its enmascarando todos
los !its en el o"erando e-ce"to los 5 )ltimos !its signi%icati+os.
3as instrucciones de rotaci#n a la i*quierda ;L83< $ rotaci#n a tra+/s del acarreo a la
i*quierda des"la*an todos los !its (acia las "osiciones de !it ms signi%icati+o
e-ce"to el !it ms signi%icati+o el cual se des"la*a (acia el lugar del !it menos
signi%icati+o.
3as instrucciones de rotaci#n a la derec(a ;L8L< $ rotaci#n a tra+/s del acarreo a la
derec(a ;L.L< des"la*an todos los !its (acia las "osiciones de !its menos
signi%icati+os e-ce"to el !it menos signi%icati+o el cual rota (acia la "osici#n de
!it ms signi%icati+o.
21
4estino ;memoria o registro< C%
4estino ;memoria o registro< C%
3as instrucciones L.3 $ L.L inclu$en el %lag .7 en la rotaci#n. 3a instrucci#n L.3
des"la*a el %lag .7 (acia el lugar del !it menos signi%icati+o $ el !it ms
signi%icati+o lo des"la*a dentro el %lag .7. 3a instrucci#n L.L des"la*a el %lag
(acia el lugar del !it ms signi%icati+o $ el !it menos signi%icati+o lo des"la*a
dentro del %lag .7. Para las instrucciones L83 $ L8L el +alor original del %lag .7
no es "arte del resultado "ero el %lag reci!e una co"ia del !it que %ue des"la*ado
desde una "unta a la otra.
,l %lag 87 se de%ine s#lo "ara rotaciones de 1 !it. Jste es inde%inido "ara cualquier otro
caso.
31 Instruccin RCR 0
la instrucci#n L.L rota los !its en el o"erando (acia la derec(a a tra+/s del %lag .7.
Para todas estas instrucciones de rotaci#n el %lag .7 siem"re contiene el +alor del
)ltimo !it que se rot# %uera del o"erando incluso si la instrucci#n no us# el %lag .7
como una e-tensi#n del o"erando. ,l +alor de este %lag "uede entonces ser testeado
"or una instrucci#n de salto condicional ;\. o \'.<.
Instrucciones de @e!acin y Comparacin
Instruccin @EG
]enera el com"lemento a 2
2inta-is@
@EG destino
,sta instrucci#n genera el com"lemento a 2 del o"erando destino $ lo almacena en este
mismo o"erando. Por ejem"lo si 0Q guarda el +alor de 1234T entonces@
@EG AE
'os dejar&a almacenado en el registro 0Q el +alor ,4..T.
7lags 0%ectados
,l %lag .7 se acti+a a 0 si el o"erando es 0A ,n cualquier otro caso se acti+a a 1. 3os
%lags 87 27 K7 07 $ P7 se acti+an de acuerdo al resultado.
2$
4estino ;memoria o registro<
C%
Instruccin C'>
3as com"araciones estn &ntimamente relacionadas con los saltos condicionales. ,s
ms es raro el "rograma ensam!lador en el que se encuentre una com"araci#n $ acto
seguido no (a$a un salto condicional.
2inta-is@
C'> re!istro+re!istro
C'> re!istro+memoria
C'> memoria+re!istro
C'> re!istro+(alor
C'> (alor+re!istro
,l orden de los o"erandos a com"arar es mu$ im"ortante@ 'o es lo mismo la instrucci#n
.MP 0Q7 que .MP 70Q.
'o es lo mismo de!ido a que en la com"araci#n o!tenemos ms in%ormaci#n que un
sim"le ^son iguales^ o ^son di%erentes^. 7ruto de una com"araci#n sa!emos qu/ o"erando
es el ma$or.
=saremos una de las 5 sinta-is de arri!a de"endiendo de lo que +amos a com"arar.
2i queremos com"arar 2 registros "or ejem"lo 0Q con .Q la instrucci#n
a"ro"iada es@
.MP 0Q.Q
3os datos a com"arar de!en ser del mismo tama1o. ,s decir se com"ara un dato de ti"o
!$te con otro de ti"o !$teA =n dato de ti"o "ala!ra con otro dato de ti"o "ala!ra. Pero
nunca se com"ara un dato de ti"o !$te con otro de ti"o "ala!ra.
,jem"lo de mala utili*aci#n de .MP@
.MP 0Q.3 'o "odemos com"arar un dato de ti"o "ala!ra ;0Q< con un dato de
Di"o !$te ;.3<.

_ntimamente ligado a los saltos condicionales estn las instrucciones de com"araci#n.
Pues !ien el ^medio de comunicaci#n^ ;"or decirlo de alguna manera< entre una
com"araci#n $ el salto condicional asociado son las !anderas de estado ;730]2<.
Para aclarar esto +eamos c#mo act)a una instrucci#n de com"araci#n@ 3o que (ace la
instrucci#n de com"araci#n es restar al "rimer o"erando el segundo "ero eso lo (ace
mediante unos registros internos del "rocesador a los que no tiene acceso el
"rogramador. 4e esta %orma los o"erandos usados "or el "rogramador quedan
inalterados. 0l reali*ar esta resta se actuali*a el registro de estado ;730]2<. ,s decir si
%ruto de la com"araci#n los dos datos eran iguales la !andera o %lag K% tendr +alor
2)
acti+o indicando que %ruto de esa resta interna que (a (ec(o el "rocesador el resultado
es un cero. ,s decir los datos son iguales. .uando un dato es menor que otro son otros
%lags los que se acti+an como el %lag .% ;%lag de acarreo o .arr$<.
Trans/erencia de control.
3as instrucciones de trans%erencia de control son un conjunto de instrucciones que
"ermiten al "rogramador rom"er el %lujo secuencial en un "rograma.
2u %unci#n consiste en a1adir un +alor de des"la*amiento al "untero de instrucci#n ;6P<
$ en algunos casos +ariar tam!i/n el +alor de .2 ;registro de 2egmento de c#digo<.
3a %inalidad est en "ermitir ejecutar tro*os de c#digo si se cum"le una condici#n
ejecutar tro*os de c#digo re"etidas +eces ;!ucle< ejecutar tro*os de c#digos desde
di%erentes "untos del "rograma ;"rocedimientos< etc.
Podemos clasi%icar las instrucciones de trans%erencia de control en los siguientes
su!gru"os@
2altos incondicionales ;\MP<
5ucles ;388P<.
2altos condicionales ;\nnn< ;donde nnn indica la condici#n<.
3lamadas a "rocedimientos ;.033<.
3lamadas a interru"ciones o %unciones ;6'D<.
Pamos a desarrollar cada uno de estos gru"os@
'M( &salto incondicional).
,sta instrucci#n se utili*a "ara des+iar el %lujo de un "rograma sin tomar en cuenta las
condiciones actuales de las !anderas ni de los datos "ro+ocando la trans%erencia de
control a la direcci#n que se es"eci%ica a continuaci#n del c#digo de o"eraci#n.
2inta-is@
H'> destino
4onde "uede ser una etiqueta ;la etiqueta es un nom!re que asociamos a una l&nea de
instrucci#n en 0ssem!ler es como una es"ecie de a"untador a esa l&nea< o una
direcci#n contenida en un registro o +aria!le.
3os saltos "ueden ser directos o indirectos. 0s& como tam!i/n "ueden reali*arse saltos
dentro del mismo segmento ;',0L< $ saltos intersegmento ;70L<.
22
Directo " N-./@ \MP etiqueta 9 2alto a la direcci#n de la etiqueta.
3a etiqueta "uede encontrarse antes o des"u/s de la instrucci#n de salto. ,s decir los
saltos se "ueden reali*ar (acia adelante o (acia atrs de la instrucci#n en curso. 6ncluso
es "osi!le tener una instrucci#n de salto a esa misma instrucci#n. ,s decir@
nnnnnnnnnnnnnnnnnn A "orci#n de c#digo.
,tiqueta@
\MP etiqueta
A %in de la "orci#n de c#digo.
3o cual nos dar&a como resultado un !loqueo del ordenador $a que el control no saldr&a
de esa l&nea. 2er&a algo as& como un !ucle sin %in. ,l salto directo $ ',0L es el salto
ms com)n raramente se utili*an los que a"arecen a continuaci#n.

0ndirecto " N-./@ \MP >5Q? 9 2alto a la direcci#n indicada "or la +aria!le
direccionada mediante 5Q. ,s un salto dentro del
mismo segmento.
0ndirecto " 1./@ \MP 70L PDL >5Q? 9 2alto ti"o 70L ;a otro segmento< donde 5Q
contiene la direcci#n de comien*o de una
do!le "ala!ra con los nue+os +alores de 6P
$ .2.
,jem"lo de salto directo $ ',0L@
AUUU
6nicio@
\MP ,jem"lo
M8P c-7
,jem"lo@
M8P c-6
AUUU
0l ejecutar este tro*o de c#digo desde la etiqueta 6nicio la instrucci#n ;M8P c-7<
nunca se ejecuta. Por tanto al %inal de este tro*o de c#digo la +aria!le .Q tendr +alor
24
6. 8!s/r+ese que las etiquetas "ueden tomar cualquier nom!re siem"re que /ste no
"ertene*ca al lenguaje 0ssem!ler.
0l %inal de la etiqueta de!e a"arecer el caracter ^@^ ;los dos "untos< el cual le indica al
0ssem!ler que es una etiqueta de ti"o ',0L es decir que +a a ser utili*ada "ara saltos
dentro del mismo segmento. 2i no a"areciesen los dos "untos ^@^ se considerar&a de ti"o
70L utili*ada "ara saltos entre segmentos.
3o ms com)n es utili*ar etiquetas ti"o ',0L. Para saltos intersegmentos se suelen
utili*ar otro m/todo di%erente al salto a una etiqueta ti"o 70L.
Comportamiento del Stac" en llamadas a (rocedimientos %E,R y +,R
mp s*ort
2e utili*a cuando se quiere (acer un salto incondicional a una "osici#n de memoria que
est dentro del rango ;9127 M128<. ,s decir que so!ra con un !$te "ara indicar el
des"la*amiento de esta %orma nos a(orramos uno de los dos !$tes que ser&an
necesarios en caso del salto incondicional normal.
,l salto incondicional normal ;\MP< necesita dos !$tes "ara "oder es"eci%icar cualquier
direcci#n dentro del segmento actual. 01adi/ndole la "ala!ra ^s(ort^ como (emos +isto
25
(acemos que s#lo necesite un !$te "ara es"eci%icar la nue+a direcci`n donde "asar el
control.
Saltos condicionales &'nnn).
3os saltos condicionales se usan en 0ssem!ler "ara ejecutar tro*os de c#digo
de"endiendo del +alor de determinado registro o +aria!le.
3legamos a este "unto que "ara reali*ar un salto condicional antes (emos de (acer una
com"araci#n. 0unque se "ueden reali*ar saltos condicionales sin antes (a!er (ec(o la
com"araci#n corres"ondiente lo usual es (acer la com"araci#n. Por tanto antes de
seguir con la los saltos condicionales sugerimos re"asar en el ca"atulo de o"eraciones
aritm/ticas c#mo se reali*an las com"araciones en 0ssem!ler.
Dodos los saltos condicionales de!en estar dentro del rango ;M127 9128< !$tes. ,s decir
que s#lo se "ueden saltar 127 !$tes (acia adelante $ 128 !$tes (acia atrs dentro del
c#digo del "rograma.
2i sumamos esos 127 !$tes $ los otros 128 tenemos un +alor de 255. Para los que no
les suene ese +alor /ste es el ma$or n)mero que "uede contener un dato de ti"o !$te.
,s decir que se reser+a un !$te "ara indicar lo grande que +a a ser el salto. .omo el
salto "uede ser (acia adelante o (acia atrs (a$ que di+idir ese 255 en la mitad ;ms o
menos< "ara los +alores "ositi+os ;saltos (acia adelante< $ otra mitad "ara los negati+os
;saltos (acia atrs<.
bZu/ (acer cuando se quiere reali*ar un salto condicional ma$or que esos 127H128
!$tesc Mu$ sencillo@ en lugar de un salto condicional reali*ar un salto incondicional.
Dam!i/n e-isten saltos condicionales em"leados cuando se com"aran datos con signo $
los saltos condicionales em"leados en com"araciones de datos sin signo.
Instruccin Efecto +lags comprobados
\,H\K ;U< ;UU< 2alta si igualH salta si cero K%V1
\',H\'K ;U< ;UU< 2alta si no igualH salta si no cero K%V0
\0H\'5, ;U< 2alta si su"erior .%V0 $ K%V0
\0,H\'5 ;U< 2alta si su"erior o igual .%V0
\5,H\'0 ;U< 2alta si in%erior o igual .%V1 $ K%V1
\]H\'3, ;UU< 2alta si ma$or K%V0 $ 2%V8%
\],H\'3 ;UU< 2alta si ma$or o igual 2%V8%
\3H\'], ;UU< 2alta si menor 2%WX8%
\3,H\'] ;UU< 2alta si menor o igual K%V1 o K%WX8%
\. ;UUU< 2alta si se (a "roducido acarreo .%V1
\'. ;UUU< 2alta si no se (a "roducido acarreo .%V0
\8 ;UUU< 2alta si se (a "roducido o+er%loE;d< 8%V1
\'8 ;UUU< 2alta si no se (a "roducido o+er%loE;d< 8%V0
\2 ;UUU< 2alta si negati+o 2%V1
\'2 ;UUU< 2alta si no negati+o 2%V0
26
\P8H\'P ;UUU< 2alta si B"aridad im"arC ;dd< P%V0
\PH\P, ;UUU< 2alta si B"aridad "arC ;dd< P%V1
\.QKH\,.QK ;UUU< 2alta si registro .Q o ,.Q es cero .QV0 o ,.QV0
;U< 2altos !asados en datos sin signo.
;UU< 2altos !asados en datos con signo.
;UUU< 2altos !asados en com"ro!aciones aritm/ticas es"eciales.
;d< 8+er%loE es lo mismo que des!ordamiento $ se "roduce cuando tras una o"eraci#n
aritm/tica el resultado es demasiado grande "ara que que"a en su destino. 0l "roducirse
o+er%loE se acti+a el %lag 8%.
;dd< 3a "aridad indica el n)mero de unos ;1< en un registro o +aria!le. Paridad "ar
indica que ese registro tiene un n)mero "ar de unos. Paridad im"ar indica que el
registro tiene un n)mero im"ar de unos. 0l reali*ar cada o"eraci#n aritm/tica el
"rocesador com"rue!a el n)mero de unos del resultado. 2i ese n)mero de unos es "ar
;"aridad "ar< acti+a el %lag P%. 2i es im"ar lo "one a 0.
Detalles de las instrucciones de salto condicional
Instruccin ', &'%!E)
2inta-is@
HA Eti*ueta
4es"u/s de una com"araci#n este comando salta si est arri!a o salta si no est a!ajo o
si no es igual. ,sto signi%ica que el salto se reali*a solo si la !andera .7 esta
desacti+ada o si la !andera K7 esta desacti+ada ;que alguna de las dos sea igual a cero<.
Instruccin ',E &'%!)
2inta-is@
HAE eti*ueta
2alta si est arri!a o si es igual o salta si no est a!ajo. ,l salto se e%ect)a si .7 esta
desacti+ada.
Instruccin '! &'%,E)
2inta-is@
HB eti*ueta
2alta si est a!ajo o salta si no est arri!a o si no es igual. 2e e%ect)a el salto si .7 esta
acti+ada.
Instruccin '!E &'%,)
2inta-is@
HBE eti*ueta
2alta si est a!ajo o si es igual o salta si no est arri!a. ,l salto se e%ect)a si .7 est
acti+ado o si K7 est acti+ado ;que cualquiera sea igual a 1<.
27
Instruccin 'E &'5)
2inta-is@
HE eti*ueta
2alta si es igual o salta si es cero. ,l salto se reali*a si K7 est acti+ada.
Instruccin '%E &'%5)
2inta-is@
H@E eti*ueta
2alta si no es igual o salta si no es cero. ,l salto se e%ect)a si K7 est desacti+ada.
Instruccin '6 &'%#E)
2inta-is@
HG eti*ueta
2alta si es ms grande o salta si no es menor o igual. ,l salto ocurre si K7 V 0 u 87 V
27.
Instruccin '6E &'%#)
2inta-is@
HGE eti*ueta
2alta si es ms grande o igual o salta si no es menor que. ,l salto se reali*a si 27 V 87

Instruccin '# &'%6E)
2inta-is@
H eti*ueta
2alta si es menor que o salta si no es ma$or o igual. ,l salto se e%ect)a si 27 es
di%erente a 87.
Instruccin '#E &'%6)
2inta-is@
HE eti*ueta
2alta si es menor o igual o salta si no es ms grande. ,l salto se reali*a si K7 V 1 o si 27
es di%erente a 87.
Instruccin 'C
2inta-is@
HC eti*ueta
2alta si (a$ acarreo. ,l salto se reali*a si .7 V 1.

Instruccin '%C
2inta-is@
H@C eti*ueta
2alta si no (a$ acarreo. ,l salto se e%ect)a si .7 V 0.
Instruccin '%O
2inta-is@
H@, eti*ueta
2alta si no (a$ des!ordamiento. ,l salto se e%ectua si 87 V 0.
Instruccin '%( &'(O)
2inta-is@
28
H@> eti*ueta
2alta si no (a$ "aridad o salta si la "aridad es non. ,l salto ocurre si P7 V 0.
Instruccin '%S
2inta-is@
H@> eti*ueta
2alta si el signo esta desacti+ado. ,l salto se e%ect)a si 27 V 0.
Instruccin 'O
2inta-is@
H, eti*ueta
2alta si (a$ des!ordamiento ;o+er%loE<. ,l salto se reali*a si 87 V 1.
Instruccin '( &'(E)
2inta-is@
H> eti*ueta
2alta si (a$ "aridad o salta si la "aridad es "ar. ,l salto se e%ect)a si P7 V 1.
Instruccin 'S
2inta-is@
H9 eti*ueta
2alta si el signo est "rendido. ,l salto se e%ect)a si 27 V 1.
!ucle &#OO()
,sta instrucci#n sir+e "ara ejecutar un tro*o de c#digo un n)mero de +eces dado
;indicado mediante el registro .Q<. ,n cada iteraci#n del !ucle se decrementa el +alor
del registro .Q. ,l !ucle %inali*ar cuando .Q tenga +alor 0 es decir cuando se (a$an
"roducido tantas iteraciones como indica!a .Q antes de entrar al !ucle.
Por ejem"lo@
AUUU
M8P .Q7
6'6.68S5=.3,@
044 R8L4 PDL >5Q?.Q
6'. 5Q
388P 6'6.68S5=.3,
M8P 265Q
AUUU
40
,n este ejem"lo tenemos un !ucle que se +a a re"etir 7 +eces. ,n cada una de estas
iteraciones se +an a reali*ar dos o"eraciones aritm/ticas ;ec(ar un +ista*o al ca"itulo de
o"eraciones aritm/ticas "ara sa!er qu/ (ace el cuer"o del !ucle<.
Dras reali*ar las dos o"eraciones llegamos a la instrucci#n 388P inicioS!ucle. ,sta
instrucci#n "rimero com"rue!a si .Q +ale 0 en caso a%irmati+o no (ace nada $ sigue
el %lujo de control "or la siguiente instrucci#n ;en este caso@ M8P 265Q<. ,n caso de
que .Q tenga un +alor distinto de 0 se decrementa su +alor $ se !i%urca a la direcci#n
inicioS!ucle. 8 sea que se reali*a la siguiente iteraci#n.
4el mismo modo que el utili*ar +aria!les nos e+ita tener que indicar "osiciones de
memoria concretas del modo@ >2346(? >7283(? etc siendo in%initamente ms c#modo
usar nom!res como@ coordenadaSsu"erior +alorStotal "osicionScursor modo etc... 4el
mismo modo usar etiquetas es la soluci#n que nos o%rece el 0ssem!ler "ara "oder
dirigirnos a "osiciones de memoria en nuestros saltos !ucles etc. Dam!i/n se "ueden
usar las etiquetas "ara indicar d#nde em"ie*an determinadas estructuras de datos.
Detalle de las instrucciones de loop
Instruccin #OO(
Pro"#sito@ ]enerar un ciclo en el "rograma.
2inta-is@
,,> eti*ueta
3a instrucci#n loo" decrementa .Q en 1 $ trans%iere el %lujo del "rograma a la etiqueta
dada como o"erando si .Q es di%erente a 1.
Instruccin #OO(E
Pro"#sito@ ]enerar un ciclo en el "rograma considerando el estado de K7
2inta-is@
,,>E eti*ueta
,sta instrucci#n decrementa .Q en 1. 2i .Q es di%erente a cero $ K7 es igual a 1
entonces el %lujo del "rograma se trans%iere a la etiqueta indicada como o"erando.
Instruccin #OO(%E
Pro"#sito@ ]enerar un ciclo en el "rograma considerando el estado de K7

2inta-is@
,,>@E eti*ueta
,sta instrucci#n decrementa en uno a .Q $ trans%iere el %lujo del "rograma solo si K7 es
di%erente a 0.
#lamadas a Interrupciones o /unciones &I%T).
3as interru"ciones "ueden ser de ti"o (ardEare $ de ti"o so%tEare. Pues !ien aqu& las
que nos interesan son las de ti"o so%tEare que son ni ms ni menos que llamadas a
"rocedimientos o su!rutinas que se encuentran en la L8M del ordenador $ "or otra
41
"arte tam!i/n estn las %unciones del sistema o"erati+o entre otras. ,l uso de las
interru"ciones nos a$uda en la creaci#n de "rogramas utili*ndolas nuestros "rogramas
son ms cortos es ms %cil entenderlos $ usualmente tienen un mejor desem"e1o
de!ido en gran "arte a su menor tama1o.
,s decir (a$ ciertas %unciones de mu$ !ajo ni+el como acceso a discos teclado etc
que +ienen $a "rogramadas en la L8M del ordenador "ara as& mantener com"ati!ilidad
con el resto de P.^s $ "or otra "arte a$udar al usuario en la "rogramaci#n. Dam!i/n el
sistema o"erati+o o%rece al "rogramador una serie de %unciones "ara manejo de %ic(eros
memoria etc.
,ste ti"o de interru"ciones "odemos se"ararlas en dos categorias@ las interru"ciones del
sistema o"erati+o ;482 "or ejem"lo< $ las interru"ciones del 5682.
3a di%erencia entre am!as es que las interru"ciones del sistema o"erati+o son ms
%ciles de usar "ero tam!i/n son ms lentas $a que estas interru"ciones (acen uso del
5682 "ara lograr su cometido en cam!io las interru"ciones del 5682 son muc(o ms
r"idas "ero tienen la des+entaja que como son "arte del (ardEare son mu$ es"ec&%icas
$ "ueden +ariar de"endiendo incluso de la marca del %a!ricante del circuito.
3a elecci#n del ti"o de interru"ci#n a utili*ar de"ender unicamente de las
caracteristicas que le quiera dar a su "rograma@ +elocidad ;utili*ando las del 5682< o
"orta!ilidad ;utili*ando las del 482<.
=na interrupcin es una o"eraci#n que in+oca la ejecuci#n de una rutina es"ec&%ica que
sus"ende la ejecuci#n del "rograma que la llam# de tal manera que el sistema toma
control del com"utador colocando en el stacF el contenido de los registros .2 e 6P. ,l
"rograma sus"endido +uel+e a acti+arse cuando termina la ejecuci#n de la interru"ci#n
$ son resta!lecidos los registros sal+ados. ,-isten dos ra*ones "ara ejecutar una
interru"ci#n@ ;1< intencionalmente como "etici#n "ara la entrada o salida de datos de un
dis"ositi+o $ ;2< un error serio $ no intencional como so!re%lujo o di+isi#n "or cero.
,l o"erando de una interru"ci#n indica cul es la rutina a acti+ar. 3a direcci#n de la
rutina es locali*ada "or medio de una ta!la que el sistema mantiene a "artir de la
direcci#n 0000@0000(. ,-isten 256 entradas de 4 !$tes de longitud $ cada interru"ci#n
"ro"orciona +arias %unciones. 3as interru"ciones de 00( a 17( corres"onden al 5682 $
de 20( a 77( son del 482 $ 5026.. ,l a"/ndice 7 "ro"orciona una lista de las
interru"ciones "ara equi"o QD.
Pues !ien la manera de utili*ar estas %unciones ;"asarles el control< es a tra+/s de la
instrucci#n I@T. 2u sinta-is es la siguiente@
6'D numeroSinterru"ci#n.
4onde numeroSinterru"ci#n es un n)mero del 0 al 255.
Por ejem"lo "ara acceder al dri+er de +ideo se usa la interru"ci#n 10(.
6'D 10T Pro+ocar&a una llamada a la interru"ci#n 10( ;16 en decimal<.
,stas interru"ciones so%tEare se di+iden en %unciones $ /stas a su +e* en su!%unciones.
Para acceder a cada %unci#nH su!%unci#n de una interru"ci#n so%tEare e-iste una
con+enci#n de llamada. ,s decir "ara acceder a una determinada %unci#nH su!%unci#n
(a$ que introducir en unos registros determinados un +alor adecuado.
Por ejem"lo "ara crear un %ic(ero accedemos a la %unci#n 3.( de la interru"ci#n 21(.
4$
3a llamada se reali*a as& en 0ssem!ler@
AUUUUUU
M8P 0T3.( A seleccionamos %unci#n
6'D 21T A "asamos el control a la %unci#n.
AUUUUU
8tro ejem"lo@ "ara leer un caracter desde el teclado llamamos a la %unci#n 00( de la
interru"ci#n 16(. 3a llamada se reali*a as& en 0ssem!ler@
AUUUUUU
M8P 0T00( A 2eleccionamos %unci#n
6'D 16T A Pasamos el control a la %unci#n.
AUUUUU
#lamadas a procedimientos &C,##).
0l igual que en los lenguajes de alto ni+el en 0ssem!ler tenemos los llamados
"rocedimientos tro*os de c#digo que +an a ser usados en distintas "artes del "rograma
los cuales nos "ermiten tener un c#digo ms legi!le ms estructurado.
,l %ormato de un "rocedimiento en 0ssem!ler es tal como sigue@ ;tomemos como
ejem"lo un "rocedimiento llamado iniciali*aci#n<.
iniciali*aci#n PL8.
.
. +uerpo del procedimiento!
.
L,D
iniciali*aci#n ,'4P
.uando el "rocedimiento +a a ser llamado desde otro segmento se dice que es un
"rocedimiento ti"o 70L. Y se declara as&@
iniciali*aci#n PL8. 70L
A.
4)
A. +uerpo del procedimiento.
A.
L,D
iniciali*aci#n ,'4P
.uando el "rocedimiento se usa s#lo en el segmento donde se (a declarado se
denomina "rocedimiento ',0L. ,n este caso no es necesario indicar que se trata de
',0L. ,s decir que si no se es"eci%ica que es 70L se su"one que es ',0L.
8 sea que los dos %ormatos siguientes son equi+alentes@
iniciali*aci#n PL8.
A +uerpo del procedimiento.
L,D
iniciali*aci#n ,'4P
AUUUU
iniciali*aci#n PL8. ',0L
A +uerpo del procedimiento!
L,D
iniciali*aci#n ,'4P
Para llamar a un "rocedimiento $ trans%erirle de este modo el control usamos la
instrucci#n@
.033 nom!reS"rocedimiento.
,n caso del ejem"lo anterior ser&a@ .033 iniciali*aci#n. 2e retorna del "rocedimiento
mediante la instrucci#n L,D ;Letorno de "rocedimiento<.
,-isten dos ti"os de llamadas a "rocedimientos@
I lamadas directas& Mediante la instrucci#n .033 nom!reS"rocedimiento. 4onde
nom!reS"rocedimiento es el nom!re que se le (a dado al "rocedimiento en cuesti#n.
I lamadas indirectas& 0qu& no se es"eci%ica el nom!re del "rocedimiento en cuesti#n
sino la direcci#n que contiene la direcci#n de comien*o del "rocedimiento que se quiere
llamar. ,ste m/todo se suele usar muc(o en "rogramaci#n de utilidades residentes
cuando se llama a una interru"ci#n "arc(eada. ,n este ti"o de llamada en %unci#n de
que la llamada sea de ti"o ',0L o 70L las "osiciones de memoria donde tengamos
42
almacenada la direcci#n a la que queremos llamar sern de ti"o R8L4 ;"ala!ra< o
4R8L4 ;do!le "ala!ra<.
,-isten las instrucciones ,'D,L $ 3,0P, anlogas a .033 $ L,D que dan entrada $
salida res"ecti+amente a "rocedimientos de lenguaje de mediano $ alto ni+el como . o
Pascal. Dam!i/n est la instrucci#n 6L,D que retorna desde una interru"ci#nA la
instrucci#n 6'D8 que es una interru"ci#n "or o+er%loEA $ la interru"ci#n 58='4 que
detecta +alores %uera de rango.
Declaracin de -ariables
0lgo %undamental en la utili*aci#n de un 0ssem!ler es la "osi!ilidad que nos da de
"onerle nom!res a las "osiciones de memoria es decir "odemos "oner una cadena en
memoria $ asignarle un nom!re tal como si %uera una +aria!le $ de (ec(o lo es. 3a
%orma de reser+ar lugar "ara una +aria!le dentro de un "rograma no es com"licada@
@ombre EE Balor
'om!re es el nom!re con el que nos +amos a re%erir mas tarde a esa "osici#n de
memoria es el nom!re de la +aria!le. QQ es la de%inici#n del ti"o de la +aria!le@
45
Para de%inir un !$te dice que la +aria!le es un !$te o un arra$ de 5$tes es
decir un !$te atras de otro.
4R Para de%inir un Rord o un arra$ de Rord.
44 Para de%inir un 4Rord o un arra$ de 4Rord.
4Z Para de%inir un ZRord ;ZuadRord u oc(o !$tes<.
4D Para de%inir Den 5$tes ;die*<.
Palor es el +alor inicial no "uede %altar nunca claro que si no se le quiere dar ning)n
+alor inicial es %acti!le "oner en el lugar del +alor un ^c^ que signi%ica que reser+e
es"acio sin im"ortar el +alor que se le d/. 4e%iniciones +alidas "odr&an ser@
3,DL0S0 45 e0f A +aria!le con un carcter
'=M5,LS1 4R 1 A un n)mero 1 "ero Eord
2DL6'] 45 eTola c#mo estsggggf A cadena de%inida como arra$ de !$tes
Declaracin de macros
0 +eces ocurren secuencias de instrucciones "articulares en los "rogramas que son
re"etiti+as. ,stas secuencias de instrucciones se "ueden eliminar utili*ando M0.L82.
3as macros "ermiten asignarle un nom!re a una secuencia de instrucciones. 3uego se
utili*a el nom!re de la macro en el "rograma como si se usase la secuencia de
instrucciones anterior.
3as macros no son lo mismo que las su!rutinas. ,l c#digo de las su!rutinas a"arece una
sola +e* en un "rograma $ la ejecuci#n del "rograma salta a la su!rutina. ,n cam!io el
ensam!lador reem"la*a cada ocurrencia del nom!re de la macro con la secuencia
44
es"eci%icada de instrucciones. Por consiguiente la ejecuci#n del "rograma no salta a la
macro como una su!rutina.
3a declaraci#n de macros se (ace a tra+/s de las directi+as 'ACR, $ E@D'. 2u
sinta-is es@
nombre 'ACR, Jparmetros+++K
declaraciones
E@D'
parmetros son los +alores que se su!stituirn en la macro cada +e* que se (aga
re%erencia a /sta.
!it . byte
8"eran a ni+el de !it o de !$te ;testeo $ modi%icaci#n<
!T 7 !it Test
'T r/m16,reg16
'T r/m32,reg32
'T r/m16,imm8
'T r/m32,imm8
2elecciona de una cadena de !its es"eci%icada "or el "rimer o"erando el !it indicado "or
el segundo o"erando $ lo guarda en la %lag .7 ;.arr$ 7lag<.
,l "rimer o"erando se denomina !it !ase $ "uede ser un registro o una "osici#n de
memoria. ,l segundo o"erando se llama !it o%%set $ "uede ser un registro o un +alor
inmediato. ,l o%%set +a desde 0 ;menos signi%icati+o< (asta 15 o 31 ;ms signi%icati+o
"ara 16 o 32 !its res"ecti+amente< como muestra la %igura@
BT9 L Bit Test and 9et
'T$ r/m16,reg16
'T$ r/m32,reg32
'T$ r/m16,imm
AT& r*m+,,imm
2elecciona el !it indicado "or el segundo o"erando ;!it o%%set< de la cadena de !its
indicada "or el "rimer o"erando ;!it !ase<. ]uarda el !it en la carr$ %lag $ setea el !it
de la cadena en 1. ,l contenido de .7 es el !it seleccionado antes de ser seteado.
BTR L Bit Test and Reset
'TR r/m16,reg16
'TR r/m32,reg32
'TR r/m16,imm8
ATD r*m+,,immM
45
2elecciona el !it indicado "or el segundo o"erando ;!it o%%set< de la cadena de !its
indicada "or el "rimer o"erando ;!it !ase<. ]uarda el !it en la carr$ %lag $ setea el !it
de la cadena en 0. ,l contenido de .7 es el !it seleccionado antes de ser seteado.
BTC L Bit Test and Complement
'TC r/m16,reg16
'TC r/m32,reg32
'TC r/m16,imm8
'TC r/m32,imm8
2elecciona el !it indicado "or el segundo o"erando ;!it o%%set< de la cadena de !its
indicada "or el "rimer o"erando ;!it !ase<. ]uarda el !it en la carr$ %lag $
com"lementa el !it de la cadena es decir en .7 guarda '8D !it;!ase o%%set<. ,l
contenido de .7 es el !it seleccionado antes de ser com"lementado.
B9% L Bit 9can %or3ard
'$% reg16,r/m16
'$% reg32,r/m32
5usca en el segundo o"erando el !it seteado ;es decir en 1< menos signi%icati+o $
guarda en el "rimer o"erando su "osici#n dentro de la cadena de !its ;un &ndice de 0 a
15 o 31<. ,l segundo o"erando "uede ser un registro o una "osici#n de memoria. ,l
"rimer o"erando es un registro que reci!e la "osici#n como un o%%set sin signo desde el
!it 0. 2i no (u!iese !its en 1 se setea K7 $ el contenido del "rimer o"erando queda
inde%inido.
B9R L Bit 9can Re(erse
'$R reg16,r/m16
'$R reg32,r/m32
5usca en el segundo o"erando el !it seteado ;es decir en 1< ms signi%icati+o $ guarda
en el "rimer o"erando su "osici#n dentro de la cadena de !its. ,l segundo o"erando
"uede ser un registro o una "osici#n de memoria. ,l "rimer o"erando es un registro
que reci!e la "osici#n como un o%%set sin signo desde el !it 0. 2i no (u!iese !its en 1 se
setea K7 $ el contenido del "rimer o"erando queda inde%inido.
9ETcc L 9et Byte on Condition
2,Dcc rHm8
2etean o resetean el o"erando de destino de acuerdo al estado de las %lags .7 27 87
K7 $ P7 del registro ,730]2. ,l o"erando es un registro de 8 !its o un !$te en
memoria que si se cum"le la condici#n todos sus !its son seteados $ si no se cum"le
son reseteados.
3as instrucciones incluidas en 2,Dcc son las siguientes@
2,D,H2,DK 2et !$te i% equalH2et !$te i% *ero O 2etean el !$te si K7V1.
2,D',H2,D'K 2et !$te i% not equalH2et !$te i% not *ero O 2etean el !$te si K7V0.
46
2,D0H2,D'5, 2et !$te i% a!o+eH2et !$te i% not !eloE or equal O 2etean el !$te si
.7V0 $ K7V0.
2,D0,H2,D'5H2,D'. 2et !$te i% a!o+e or equalH2et !$te i% not !eloEH2et !$te i% not
carr$ O 2etean el !$te si .7V0.
2,D5H2,D'0,H2,D. 2et !$te i% !eloEH2et !$te i% not a!o+e or equalH2et !$te i% carr$
O 2etean el !$te si .7V1.
2,D5,H2,D'0 2et !$te i% !eloE or equalH2et !$te i% not a!o+e O 2etean el !$te si
.7V1 $ K7V1.
2,D]H2,D'3, 2et !$te i% greaterH2et !$te i% not less or equal O 2etean el !$te si K7V0
$ 27V87.
2,D],H2,D'3 2et !$te i% greater o equalH2et !$te i% not less O 2etean el !$te si
27V87.
2,D3H2,D'], 2et !$te i% lessH2et !$te i% not greater or equal O 2etean el !$te si
27WX87.
2,D3,H2,D'] 2et !$te i% less o% equalH2et !$te i% not greater O 2etean el !$te si K7V1
$ 27WX87.
2,D2 2et !$te i% sign O 2etea el !$te si 27V1.
2,D'2 2et !$te i% not sign O 2etea el !$te si 27V0.
2,D8 2et !$te i% o+er%loE O 2etea el !$te si 87V1.
2,D'8 2et !$te i% not o+er%loE O 2etea el !$te si 87V0.
2,DP,H2,DP 2et !$te i% "arit$ e+enH2et !$te i% "arit$ O 2etean el !$te si P7V1.
2,DP8H2,D'P 2et !$te i% "arit$ oddH2et !$te i% not "arit$ O 2etean el !$te si P7V0.
TE9T L o!ical Compare
TE$T r/m8,reg8
TE$T r/m16,reg16
TE$T r/m32,reg32
TE$T r/m8,imm8
TE$T r/m16,imm16
TE$T r/m32,imm32
TE$T AL,imm8
TE$T AX,imm16
TE$T EAX,imm32
Leali*a el 0'4 l#gico !it "or !it entre el "rimer $ el segundo o"erando $ setea los %lags
27 K7 $ P7 seg)n el resultado. ,l !it ms signi%icati+o se guarda en 27 K7 se setea o
resetea seg)n corres"onda $ P7 se setea o resetea de acuerdo a la cantidad de !its
seteados en el !$te ms !ajo del resultado. ,ste resultado no se guarda en ninguna
"arte.
+lag control
8"eran en el registro ,730]2.
9TC L 9et Carry %la!
$TC
2etea la %lag .7 ;carr$ %lag< en 1. 3as otras %lags no son a%ectadas. 'o lle+a o"erandos.
47
CC L Clear Carry %la!
CLC
Lesetea ;"one en 0< la carr$ %lag. 3as dems %lags no se +en a%ectadas. 'o lle+a
o"erandos.
C'C L Complement Carry %la!
CMC
.om"lementa la carr$ %lag es decir .7 se +uel+e '8D .7. 3as dems %lags no se +en
a%ectadas. 'o lle+a o"erandos.
CD L Clear Direction %la!
CLD
Lesetea la %lag 47 ;direction %lag<. 2i 47 est en 0 las o"eraciones de string
decrementan los registros &ndices. 'o lle+a o"erandos $ las dems %lags no se +en
a%ectadas.
9TD L 9et Direction %la!
$TD
2etea la direction %lag. 2i 47 est en 1 las o"eraciones de string decrrementan los
registros &ndices. 'o lle+a o"erandos $ las dems %lags no se +en a%ectadas.
AF% L oad 9tatus %la!s into AF Re!ister
LA%
.o"ia el !$te ms !ajo del registro ,730]2 al registro 0T. Jsta inclu$e las %lags 27
K7 07 P7 $ .7 $ tiene adems 3 !its reser+ados@ el 1 que se setea en 1 el 3 $ el 5 que
se setean en 0. ,s decir en 0T se co"ia la cadena de !its@ ;27@ K7@ 0@ 07@ 0@ P7@ 1@ .7<.
'o lle+a o"erandos $ el contenido del registro ,730]2 no se +e a%ectado.
9AF% L 9tore AF into %la!s
$A%
.arga los %lags 27 K7 07 P7 $ .7 del registro ,730]2 con el contenido del registro
0T. 3os !its reser+ados ;el 1 el 3 $ el 5< conser+an sus +alores ;1 0 $ 0
res"ecti+amente<. 'o lle+a o"erandos.
>?9F%=>?9F%D L >us; E%AG9 Re!ister onto t;e 9tacD
48
"#$%
"#$%D
.o"ian el contenido de ,730]2 en el stacF. P=2T7 co"ia los 16 !its ms !ajos de
,730]2 en la "ila "re+iamente decrementando el stacF "ointer en 2. P=2T74 co"ia
el registro entero en la "ila "re+iamente decrementando el stacF "ointer en 4. ,n este
caso los !its 16 $ 17 de ,730]2 no se co"ian a la "ila sino que se dejan en 0 ;en la
"ila en ,730]2 conser+an su +alor<. 3os +alores de ,730]2 se conser+an.
>,>%=>,>%D L >op 9tacD into E%AG9 Re!ister
"O"%
"O"%D
.o"ian el contenido del stacF en el registro ,730]2. P8P7 saca una "ala!ra del to"e
de la "ila $ la guarda en la "arte ms !aja del registro ,730]2. P8P74 saca una do!le
"ala!ra ;32 !its< de la "ila $ la guarda en el registro ,730]2.
9TI L 9et Interrupt %la!
$T*
2etea el !it 9 ;67 O 6nterru"t ,na!le 7lag< del registro ,730]2 "ara que el "rocesador
"ueda res"onder a interru"ciones enmascara!les.
2i se est tra!ajando en modo real sim"lemente se setea 67. 2i se est tra!ajando en
modo "rotegido $ se "ermiten las interru"ciones +irtuales 68P3 es menor que 3 $ se
o"era a ni+el 3 de "ri+ilegio 67 no se modi%ica. ,n su lugar se setea P67 ;Pirtual
6nterru"t 7lag el !it 19 de ,730]2<. 2i se est tra!ajando en modo +irtual98086 s#lo
se "odr setear 67 si se est o"erando a ni+el 3 de "ri+ilegio de ,H2 de lo contrario se
setear P67 $ s#lo si P6P es 0 $ PM, es 1. 4e no "oder setearse se generar una
e-ce"ci#n.
CI L Clear Interrupt %la!
CL*
Lesetea el !it 9 de ,730]2 des(a!ilitando las interru"ciones. Diene el e%ecto in+erso
que 2D6.
Segment Register
D9=E9=%9=G9=99 L oad %ar >ointer
LD$ reg16,mem
LD$ reg32,mem
LE$ reg16,mem
LE$ reg32,mem
L%$ reg16,mem
L%$ reg32,mem
L!$ reg16,mem
L!$ reg32,mem
L$$ reg16,mem
50
L$$ reg32,mem
.argan "unteros a registros de segmento. ,l "rimer o"erando es un registro de
"ro"#sito general. ,l segundo o"erando es un "untero ;selector de segmento $ o%%set<
almacenado en memoria. ,l selector de segmento del segundo o"erando ;16 !its<se
carga en registro de segmento es"eci%icado "or la instrucci#n. ,stos "ueden ser@ 42
,2 72 ]2 o 22. ,l o%%set ;16 o 32 !its< se carga en el registro es"eci%icado "or el
"rimer o"erando.
Miscellaneous
EA L oad Effecti(e Address
LEA reg16,mem
LEA reg32,mem
.alcula la direcci#n e%ecti+a del segundo o"erando $ la guarda en el "rimer o"erando.
,l "rimer o"erando es un registro de "ro"#sito general $ el segundo o"erando es una
direci#n de memoria.
2e "uede tra!ajar con registros $ direcciones de memoria de 16 o 32 !its@
92i am!os el registro $ la direcci#n de memoria tienen el mismo tama1o se calcula la
direcci#n e%ecti+a "ara ese tama1o ;16 o 32 !its< $ se guarda en el registro.
92i el registro tiene 16 !its $ la direcci#n 32 !its se calcula la direcci#n "ara 32 !its $ se
guardan los 16 !its ms !ajos en el registro.
92i el registro tiene 32 !its $ la direcci#n 16 se calcula la direcci#n e%ecti+a "ara 16 !its
$ se carga en la "arte !aja del registro. 3a "arte alta se "one en 0.
@,> L @o ,peration
+O"
'o reali*a o"eraci#n alguna. ,s anlogo a reali*ar Q.T] ,0Q ,0Q. 'o a%ecta al
conte-to e-ce"to "or el ,6P.
EAT=EATB L Table ooDMup Translation
XLAT
XLAT'
5uscan una entrada de 8 !its de una ta!la en memoria usando como &ndice el contenido
de 03 $ la guardan en 03. 3a direcci#n !ase de la ta!la la o!tienen del registro 42@5Q
o 42@,5Q.
Q30D se "uede usar con un o"erando que re"resenta la direcci#n !ase de la ta!la. ,sto
se (ace "ara "ermitir la documentaci#n. Q30D5 se usa sin o"erandos. ,n am!os casos
se de!e antes de ejecutar la instrucci#n cargar en 42@ ;,<5Q la direcci#n !ase de la
ta!la.
GDT=IDT L oad Global Descriptor=Interrupt Table Re!ister
L!DT mem
L*DT mem
51
3]4D carga el contenido del o"erando en el glo!al descri"tor ta!le register ;]4DL<
mientras que 364D carga el contenido del o"erando en el interru"t descri"tor ta!le
register ;64DL<.
,l o"erando es una "osici#n de memoria de 6 !$tes que indica la direcci#n !ase de la
]4D ;]lo!al 4escri"tor Da!le< o 64D ;6nterru"t 4escri"tor Da!le< $ el l&mite es decir el
tama1o de la ta!la en !$tes. 3os "rimeros 32 !its ;los ms altos< indican la !ase $ los
16 ms !ajos el l&mite. 3a "osici#n de memoria es una "osici#n lineal es decir no una
com!inaci#n segmento9o%%set.
]eneralmente estas instrucciones se usan en modo real.
DT L oad ocal Descriptor Table Re!ister
LLDT r/m16
.arga el o"erando en el cam"o de selector de segmento del 3ocal 4escri"tor Da!le
Legister ;34DL<. ,l o"erando "uede ser un registro o una direcci#n de memoria que
contiene un selector de segmento que a"unta a una 3ocal 4escri"tor Da!le. 3uego el
"rocesador usando el selector de segmento cargado en el 34DL carga de la ]4D el
l&mite de segmento $ direcci#n !ase de la 34D. 2e ejecuta solamente en modo
"rotegido.
9GDT=9IDT L 9tore Global=Interrupt Descriptor Table Re!ister
$!DT mem
$*DT mem
]uardan en el o"erando que es una direcci#n de memoria de 6 !$tes ;lineal no
segment9o%%set< el contenido del ]lo!al 4escri"tor Da!le Legister ;]4DL< o el
6nterru"t 4escri"tor Da!le Legister ;64DL<.
9DT L 9tore ocal Descriptor Table Re!ister
$LDT r/m16
]uarda en el o"erando que "uede ser un registro o una "osici#n de memoria el selector
de segmento de la 3ocal 4escri"tor Da!le Legister ;34DL<. Leali*a la o"eraci#n
in+ersa que 334D $ al igual que /sta s#lo "uede utili*arse en modo "rotegido.
Times
,imes 100 mo-s.
,imes 100 res.
Dimes es una directi+a "ro"ia de '02M cu$a %inalidad es re"etir instruciones $ datos.
5$

También podría gustarte