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

Lenguajes de Interfaz

Nmeros con signo, banderas y condicionales


Por:
Ing. Jos Jess Snc!ez "ar#as
jesus.sanc!ez$itcelaya.edu.m%

&genda:

Nmeros con signo

Complemento a dos

Nmeros negativos en Hexadecimal

Banderas afectadas por la suma y resta

Condicionales

Nmeros con signo:
Para representar nmeros negativos en la base
decimal, la que usamos a diario, basta con
anteponer el smbolo - al nmero en cuestin!
"sta notacin, sin embargo, no es #abitual al
operar con nmeros binarios! "n ensamblador no
puede ponerse un signo - delante de un nmero
binario y esperar que se interprete como
negativo, puesto que el nmero completo slo
puede contener ceros y unos, ningn otro
smbolo!

Nmeros con signo:
$n byte puede representar '() valores distintos,
concretamente los nmeros del * al '((! "n
realidad, esto no tiene necesariamente que ser
as, pudiendo utili%ar ese rango de valores para
representar cualquier otro con&unto de nmeros
que nos convenga! Podemos, por e&emplo, usar
la mitad del rango para representar nmeros
positivos y la otra mitad para los negativos! "sto
es lo que se consigue con el com+lemento a
dos!

,om+lemento a dos:
"n el complemento a dos se asume que el s'ptimo bit
del byte, el que aparece ms a la iz-uierda, acta como
bit de signo! Si est a cero, el nmero es +ositi.o,
mientras -ue si est a /, se inter+retar como
negati.o. (os restantes siete bits se emplean para
representar el nmero, que estar) comprendido entre * +
******* , y -./ + ------- , ! "l nmero ******** se
interpreta como *, mientras que -******* sera --.0!
Por tanto con el complemento a dos podemos
representar los nmeros desde el --.0 al -./, un total de
.12 valores al incluir el *!

,om+lemento a dos:
Para convertir cualquier nmero positivo en negativo,
siempre #ablando de la base ., #ay que dar dos pasos3
lo primero es in.ertir todos los bits del nmero
+ositi.o, +oniendo a * los -ue estn a / y .ice.ersa!
4 continuacin se sumar / al nmero in.ert#do!
5uponga, por e&emplo, que quiere representar el nmero
--2 en binario! (os pasos seran los siguientes3

,om+lemento a dos:

Convertir -2 a su representacin binaria, que es


***-****!

6nvertir todos los bits del nmero, obteniendo


---*----!

5umar - al resultado, obteniendo ----****!


Por tanto, --2 en binario sera ----****! Podemos
efectuar una comprobacin bastante simple para estar
seguros de que el resultado es el correcto! 5ume a
----**** el nmero ***-****, que es la representacin
binaria de -2! 4l sumar --2 y -2 deberamos obtener el
resultado *!

Nmeros negati.os en !e%adecimal:
4l igual que ocurre con los nmeros binarios, al usar la base
diecis'is no es #abitual el empleo del smbolo - para indicar que
un nmero es negativo, utili%)ndose en su lugar un mecanismo
id'ntico al descrito anteriormente para la base dos! 5i con un
byte pueden representarse los valores #exadecimales ** a 77,
un total de .12, 'stos pueden interpretarse como todos
positivos +* a .11, o bien como +ositi.os desde el ** al 0" y
negati.os del 1* al ""! Puede efectuar algunas
comprobaciones convirtiendo cualquier nmero entre 0* y 77 a
binario! 8bserve que el s'ptimo bit siempre se obtiene a -,
indicando que es un nmero negativo! (a forma m)s f)cil de
convertir cualquier nmero !e%adecimal en negati.o consiste
en con.ertirlo en binario y a+licarle el com+lemento a dos!

2anderas afectadas +or la suma y resta:
4l e&ecutar instrucciones aritm'ticas, a menudo es conveniente
saber algo acerca del resultado! 9"s negativo, positivo o cero:
9"s demasiado grande o demasiado peque;o para caber en el
operando de destino: (as respuestas a tales preguntas nos
pueden ayudar a detectar errores de c)lculo que de otra
manera podran ocasionar un comportamiento err)tico!
$tili%amos los valores de las banderas de estado del CP$ para
comprobar el resultado de las operaciones aritm'ticas! <ambi'n
utili%amos los valores de las banderas de estado para activar
instrucciones de bifurcacin condicional, las #erramientas
b)sicas de la lgica de programacin!

2anderas afectadas +or la suma y resta:

La bandera &carreo 3,"4 indica un desbordamiento de enteros sin signo! Por


e&emplo, si una instruccin tiene un operando de destino de 0 bits, pero la
instruccin genera un resultado mayor que el -------- binario, se activa la
bandera 4carreo!

La bandera 5esbordamiento 36"4 indica un desbordamiento de enteros con


signo! Por e&emplo, si una instruccin tiene un operando de destino de -2 bits,
pero genera un resultado negativo menor que el nmero -=./20 decimal, se
activa la bandera >esbordamiento!

La bandera ,ero 37"4 indica que una operacin produ&o cero como resultado!
Por e&emplo, si se resta un operando de otro de igual valor, se activa la bandera
Cero!

La bandera Signo 3S"4 indica que una operacin produ&o un resultado


negativo! 5i se activa el bit m)s significativo del operando de destino, se activa
la bandera 5igno!

La bandera Paridad 3P"4 cuenta el nmero de bits que son - en el byte


menos significativo del operando de destino!

La bandera &carreo au%iliar 3&"4 se activa cuando un bit - se acarrea #acia


fuera de la posicin = en el byte menos significativo del operando destino!

2anderas afectadas +or la suma y resta:
6.erflo8: N? @ no #ay desbordamientoA 8?@ si lo #ay!
>irection3 $P @ #acia adelanteA >N @ #acia atr)s!
6nterrupts3 >6 @ desactivadas las interrupcionesA "6 @ activadas!
Sign: P( @ positivoA NB @ negativo!
7ero: NC @ no es ceroA CD @ si es cero!
&u%iliary ,arry: N4 @ no #ay acarreo auxiliarA 4C @ #ay acarreo
auxiliar!
Parity: P8 @ paridad non A P" @ paridad par
,arry: NC @ no #ay acarreo CE @ si lo #ay!

6+eraciones sin signo: ,ero, &carreo, &carreo
au%iliar:
La bandera ,ero se activa cuando el resultado de una
operacin aritm'tica es cero! (os siguientes e&emplos muestran
el estado del registro de destino y de la bandera Cero, despu's
de e&ecutar las instrucciones 5$B, 6NC y >"C3
Fov cx, -
5ub cx, - A cx @ *, C7 @ -
Fov ax, *ffff#
6nc ax A ax @ *, C7 @ -
6nc ax A ax @ -, C7 @ *
>ec ax A ax @ *, C7 @ -

6+eraciones sin signo: ,ero, &carreo, &carreo
au%iliar:
La suma y la bandera Acarreo (a operacin de la bandera
4carreo es m)s f)cil de explicar si consideramos la suma y la
resta por separado! Cuando se suman dos enteros sin signo, la
bandera 4carreo es una copia del acarreo que sale del F5B +bit
m)s significativo, del operando de destino! Por intuicin,
podemos decir que C7 @ - cuando la suma excede al tama;o
de almacenamiento de su operando de destino! "n el siguiente
e&emplo, 4>> activa la bandera 4carreo, debido a que la suma
+-**#, es demasiado grande para 4(3
Fov al, *ff#
4dd al, - A al @ **, C7 @ -

6+eraciones sin signo: ,ero, &carreo, &carreo
au%iliar:
(a siguiente figura muestra lo que ocurre a nivel de bits cuando
se suma un - a *77#! "l acarreo que sale de la posicin del bit
m)s alto de 4( se copia en la bandera 4carreo3

6+eraciones sin signo: ,ero, &carreo, &carreo
au%iliar:
Por otro lado, si se suma - a **77# en 4G, la suma cabe
f)cilmente en -2 bits y la bandera 4carreo se borra3
Fov ax,**77#
4dd ax,- A 4G @ *-**#, C7 @ *
Pero si se suma - a 7777# en el registro 4G, se genera un
4carreo #acia fuera de la posicin del bit superior de 4G3
Fov ax, ax,*7777#
4dd ax,- A 4G @ ****, C7 @ -

6+eraciones sin signo: ,ero, &carreo, &carreo
au%iliar:
La resta y la bandera Acarreo $na operacin de resta activa
la bandera 4carreo cuando se resta un entero sin signo m)s
grande de uno m)s peque;o!
Fov al, -
5ub al, . A4( @ ff#, C7 @-

6+eraciones sin signo: ,ero, &carreo, &carreo
au%iliar:
Acarreo auxiliar (a bandera 4carreo auxiliar +4C, indica un
acarreo o pr'stamo en el bit = del operando de destino! 5e
utili%a principalmente en la aritm'tica con nmeros decimales
codificados en binario +BC>,, pero puede usarse en otros
contextos! 5uponga que sumamos - a *7#! (a suma +-*#,
contiene un - en la posicin del bit H que se acarre de la
posicin del bit =3
Fov al, *f#
4dd al, - A 4C @ -

6+eraciones sin signo: ,ero, &carreo, &carreo
au%iliar:
Paridad (a bandera Paridad +P7, se activa cuando el byte
menos significativo del destino tiene un nmero par de bits que
son -! (as siguientes instrucciones 4>> y 5$B alteran la
paridad de 4(3
Fov al,-***--**b
4dd al,******-*b A 4( @ -***---*, P7 @ -
5ub al,-*******b A 4( @ ****---*, P7 @ *
>espu's de la instruccin 4>>, 4( contiene el nmero binario
-***---* +cuatro bits * y cuatro bits -,, y P7 @ -! >espu's de
5$B, 4( contiene un nmero impar de bits -, por lo que P7 @ *!

6+eraciones con signo: banderas Signo y
5esbordamiento
Bandera Signo (a bandera 5igno se activa cuando el resultado de una
operacin aritm'tica con signo es negativo! "l siguiente e&emplo resta un
entero m)s grande +1, de un entero m)s peque;o +H,3
Fov ax, H
5ub ax, 1 A ax @ --, 57 @ -
>esde un punto de vista mec)nico, la bandera 5igno es una copia del bit
superior del operando de destino! "l siguiente e&emplo muestra los
valores #exadecimales de B( cuando se genera un resultado negativo3
Fov bl, - A bl @ *-#
5ub bl, . A bl @ ff# +--,

6+eraciones con signo: banderas Signo y
5esbordamiento
Bandera Desbordamiento (a bandera >esbordamiento se activa cuando el
resultado de una operacin aritm'tica con signo provoca que el operando de
destino tenga un desbordamiento por exceso +overfloI, o por defecto +underfloI,!
Por e&emplo, sabemos que el valor de byte entero con signo m)s grande posible es
J-./A si se le suma - se produce un desbordamiento por exceso +overfloI,3
Fov al, J-./
4dd al, - A 87 @ -
>e manera similar, el valor de byte entero con signo m)s peque;o posible es --.0!
5i le restamos -, se produce un desbordamiento por defecto +underfloI,! "l valor
del operando de destino no almacena un resultado aritm'tico v)lido, por lo que se
activa la bandera >esbordamiento3
Fov al, --.0
5ub al, - A 87 @ -

6+eraciones con signo: banderas Signo y
5esbordamiento
Instruccin NEG (a instruccin N"B produce un resultado inv)lido si el operando
de destino no puede almacenarse en forma correcta! Por e&emplo, si movemos --.0
a 4( y tratamos de negarlo, el valor correcto +J-.0, no cabr) en 4(! (a bandera
>esbordamiento se activa, indicando que 4( contiene un valor inv)lido3
Fov al, --.0 A 4( @ -*******b
Neg al A 4( @ -*******b, 87 @ -
Por otro lado, si J-./ se niega, el resultado es v)lido y la bandera >esbordamiento
se borra3
Fov al,J-./ A 4( @ *-------b
Neg al A 4( @ -******-b, 87 @ *

,ondicionales 3com+araci9n de .alores4
(os procesadores x02 disponen de una instruccin para comparar
dos valores, instruccin que, realmente, lo que #ace es una
operacin aritm'tica que, sin producir un resultado, afecta a los bits
del registro de indicadores como si se #ubiese e&ecutado realmente!
"l nico fin de dic#a instruccin, por tanto, es activar o desactivar
ciertos indicadores, simplemente!
(a instruccin en cuestin es cm+! Precisa, como las instrucciones
add o sub, dos o+erandos3 un destino y un origen! (o que #ace es
restar el origen del destino, como la instruccin sub, pero sin
llegar a almacenar el resultado de la o+eraci9n! "s decir, la nica
diferencia entre sub ax, bx y cmp ax, bx es que la primera almacena
el resultado en 4G, mientras que la segunda no! (os indicadores
afectados, sin embargo, ser)n exactamente los mismos!

,ondicionales 3Igualdad y desigualdad4
(a mayor parte de los condicionales que se codifican en los
programas persiguen comprobar si dos valores concretos son o no
iguales! Cuando se comparan dos valores mediante cm+, restando
el segundo del primero, si el resultado es la activacin del indicador
7" esto querr) decir que el resultado #a sido cero! 9Cu)ndo se
obtiene el valor cero al restar un valor de otro: "fectivamente,
cuando ambos son el mismo valor! La acti.aci9n del bit 7", por
tanto, indicar#a esa igualdad, mientras que su no acti.aci9n
indicar#a desigualdad!

,ondicionales 3Igualdad y desigualdad4
Para saltar a un cierto punto cuando el indicador de cero est' activado
tenemos dos instrucciones3 jz y je ! 5on equivalentes y, como las
dem)s instrucciones de salto, necesitan como par)metro la direccin a
la se quiere desviar la e&ecucin! Ksta puede ser una eti-ueta
+re.iamente definida, una direccin almacenada en un cierto campo o
en uno de los registros, segn interese!
"n caso de que se desee desviar la e&ecucin cuando el indicador est'
a cero, en lugar de a uno, utili%aramos las instrucciones jnz y jne!
Para desviar la e&ecucin a un cierto punto de manera incondicional, sin
examinar ningn indicador, puede usar la instruccin jm+ que, al igual
que las ya citadas, necesita un par)metro que indique la direccin a
partir de la cual seproceder) a e&ecutar!

,ondicionales 3Igualdad y desigualdad4
"&emplo condicionales3
Fov a#, .
Cmp a#, .
Le igualMaMdos
Cmp a#, =
Le igualMaMtres
!
!
!
igualMaMdos3
A enviar mensa&e es igual a dos
igualMaMtres3
A enviar mensa&e es igual a tres

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