4 votos

La aritmética y la operación booleana para hacer el 0 a 1, y todo lo demás a 0

Yo tengo una de 16 bits del número binario $x$, y quiero realizar una serie de operaciones que tendrá como resultado: si $x = 0000000000000000$$f(x) = 1111111111111111$, y si $x \neq 0000000000000000$,$f(x) = 0000000000000000$.

Aquí están las operaciones que tengo ($y$ es cualquier número de 16 bits) :

  1. Binario de 16-bits, además de a $(x+y)$, que ignora desbordamiento más allá de los 16-bits.
  2. Binario de 16 bits de la resta
  3. Bit a bit 16-bit Y $(x\;\&\;y)$: por ejemplo, $1111111111111111\;\&\; 1111111111111000 = 1111111111111000$
  4. Bit a bit 16-bit O
  5. Bit a bit 16-bit NO $(!x)$, por ejemplo, $!(1111111111111000) = 0000000000000111$

Estas restricciones son, porque esas son las operaciones de mi ALU apoya. Incluso Si usted tiene una función que requiere más de las operaciones anteriores, por favor, comparte, y voy a averiguar cómo hacerlo.

Gracias

3voto

gammatester Puntos 7985

Como un primer paso, aquí es una función is0(x) que devuelve 1000000000000000 si x es cero y 0 si x es distinto de cero.

y = x - 1                    //is 1??????????????? if x=0 or x > 1000000000000000
z = (!x) & 1000000000000000  //inverts the highest bit of x, remove all other
w = y & z                   
return w

Esto es independiente de cualquier llevan en la ALU, y ya da un resultado no nulo si x=0 y cero en caso contrario.

Ahora el final de la difícil función de iszero(x)que utiliza llevar aritmética

y = is0(x)
add y,y ->(z, carry)   //z is always zero, carry set if x is 0
sbc z,z -> w           //1111111111111111 if x is zero, 0 otherwise
return w

La función se ha implementado y probado completamente en un sistema x86, aquí la código con la sintaxis de Intel

mov ax,[x]
mov bx,ax
not bx
sub ax,1
and ax,bx
mov bx,0x8000
and ax,bx
add ax,ax
sbb ax,ax
mov [w],ax

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X