[Programación] Acerca de la representación y operación de números negativos en lenguaje ensamblador
Los números se representan en forma binaria en los ordenadores.
Los números se dividen en números con signo y números sin signo.
El código original, el código complementario y el código complementario son métodos de representación de números de punto fijo con signo.
El bit más alto de un número de coma fija con signo es el bit de signo, 0 es positivo y 1 es negativo.
A continuación se utiliza un entero de 8 bits como ejemplo.
El código original es la forma binaria del número mismo.
Por ejemplo
0000001 es +1
1000001 es -1
El complemento y el complemento de números positivos son ambos iguales que El código original es el mismo.
El código inverso de un número negativo consiste en invertir todos los bits del código original excepto el bit de signo
[-3]Inverse=[10000011]Inverse=11111100
El complemento de un número negativo consiste en negar todos los bits del código original excepto el bit de signo y luego sumar 1 al último bit.
[-3] complement=[10000011] complement=11111101
Un número y su complemento son reversibles.
¿Por qué deberíamos configurar el código complementario?
La primera razón es para permitir que la computadora realice la resta:
[a-b] complemento = a complemento + (-b) complemento
La segunda razón es para Unificar 0 positivo y 0 negativo
Cero positivo: 00000000
Cero negativo: 10000000
Estos dos números en realidad son 0, pero sus códigos originales son Hay diferentes representaciones.
Pero sus complementos son iguales, ambos son 00000000
Especial atención, si hay un carry después de +1, siempre hay que reenviarlo, ¡incluido el bit de signo! (¡Esto es diferente del código inverso!)
[10000000] complemento
=[10000000] invertir +1
=11111111+1
=(1)00000000
=00000000 (el bit más alto se desborda y el bit de signo se vuelve 0)
Algunas personas pueden preguntar
10000000 ¿Qué número es? ¿El complemento está representado por el código?
De hecho, esta es una regla. Este número representa -128
Entonces, el rango que el complemento de n bits puede representar es
-2^(n). - 1) a 2^(n-1)-1
Un número más de los que puede representar el código original de n dígitos
Otro ejemplo:
1011
p>
Código original: 01011
Código inverso: 01011 //Cuando el número es positivo, el código inverso = código original
Código completo: 01011 //Cuando el número es positivo, el código complemento =Código original
-1011
Código original: 11011
Código inverso: 10100 / /Cuando el número es negativo, el código inverso es la inversión del código original
Código complemento: 10101 //Cuando es un número negativo, el código complemento es la inversión del código original + 1
0.1101
Código original: 0.1101
Código inverso: 0.1101 //Cuando el número es positivo, el código complemento = código original
Código de complemento: 0.1101 //Cuando el número es positivo, el código de complemento = código original
-0.1101
Código original: 1.1101
Código de complemento: 1.0010 / /Cuando el número es negativo, el código del complemento es la inversión del código original
Código del complemento: 1.0011 //Cuando el número es negativo, el código del complemento es el código original Inversión del código + 1
Resumen:
En las computadoras, hay tres formas de representar números de punto fijo: código original, código complemento y código complemento
El llamado código original es La representación binaria de punto fijo presentada anteriormente, es decir, el bit más alto es el bit de signo, "0" representa positivo, "1" representa negativo y los bits restantes representan el tamaño del valor.
La representación en complemento a uno estipula que el complemento a uno de un número positivo es igual a su código original; el complemento a uno de un número negativo es la inversión de su código original bit a bit, excepto el signo. poco.
La representación en complemento estipula que el complemento de un número positivo es igual a su código original; el complemento de un número negativo es sumar 1 al último dígito de su complemento.
1. Métodos de representación de código original, código complementario y código complementario
(1) Código original: método de representación de agregar un bit de signo directamente antes del valor.
Por ejemplo: Bit de valor de signo bit
[+7]Original = 0 0000111 B
[-7]Original = 1 0000111 B
Nota: a. El código original del número 0 tiene dos formas:
[+0] código original = 00000000B [-0] código original = 10000000B
b. Código original binario de bits El rango de representación del código: -127~+127
2) Código inverso:
Número positivo: el código inverso de un número positivo es el mismo que el código original.
Número negativo: complemento a uno de un número negativo, el bit de signo es "1" y la parte numérica está invertida bit a bit.
Por ejemplo: Signo valor bit bit
[+7]Inverso = 0 0000111 B
[-7]Inverso = 1 1111000 B
Nota: a. También hay dos formas del código inverso del número 0, a saber
[+0] inverso = 00000000B
[- 0] inverso = 11111111B.
b. El rango de representación del código complementario binario de 8 bits: -127~+127
3) El método de representación del código complementario
1) El concepto de módulo: pesa una unidad de medida Es el módulo o módulo. Por ejemplo, el reloj cuenta en base 12, es decir, módulo 12. En el reloj, cuando la manecilla de la hora suma (adelante) el dígito entero de 12 o resta (invierte) el dígito entero de 12, la posición de la manecilla de la hora permanece sin cambios. Después de descartar el módulo 12, las 14 en punto se convierten en las 2 en punto (tarde) (14=14-12=2). Marque 10 espacios en el sentido contrario a las agujas del reloj desde las 0 en punto, lo que significa restar 10 horas. También se puede considerar como marcar 2 espacios en el sentido de las agujas del reloj desde las 0 en punto (más 2 horas), es decir, las 2 en punto (0-10 = -). 10=-112 =2). Entonces, módulo 12, -10 se asigna a +2. Se puede observar que para un sistema cíclico módulo 12, el efecto de sumar 2 y restar 10 es el mismo por lo tanto, en un sistema módulo 12, cualquier operación de restar 10 se puede reemplazar sumando 2, lo que transforma el problema de resta en; un problema de suma (nota: la estructura de hardware de la computadora solo tiene sumadores, por lo que la mayoría de las operaciones eventualmente deben convertirse en sumas). 10 y 2 son complementos entre sí módulo 12.
De manera similar, los componentes informáticos y los registros de la computadora tienen un cierto límite de longitud de palabras (suponiendo que la longitud de la palabra sea 8), por lo que su operación también es una operación modular. Cuando el contador llegue a 8 dígitos, que son 256 números, se desbordará y comenzará a contar desde el principio. La cantidad que causa el desbordamiento es el módulo del contador. Obviamente, para un número binario de 8 bits, su módulo es 28=256. En informática, dos números complementarios se denominan "números complementarios".
2) Representación del código de complemento: Número positivo: El código de complemento de número positivo es el mismo que el código original.
Número negativo: El complemento de un número negativo es que el bit de signo es "1", la parte numérica se invierte bit a bit y luego se suma 1 al último bit (bit más bajo). Eso es "código inverso +1".
Por ejemplo: Bit de signo valor bit
[+7] complemento = 0 0000111 B
[-7] complemento = 1 1111001 B
El código de complemento es una forma de codificación importante en las microcomputadoras. Tenga en cuenta:
a. Después de usar el código de complemento, las operaciones de resta se pueden convertir fácilmente en operaciones de suma y el proceso de operación se simplifica. El complemento de un número positivo es el valor verdadero del número que representa, pero la parte numérica del complemento de un número negativo no es el valor verdadero del número que representa. Si la operación se realiza utilizando el código de complemento a dos, el resultado seguirá siendo el código de complemento a uno.
b. A diferencia del código original y del código complementario, solo existe un complemento del valor 0, es decir, complemento [0] = 00000000B.
c. Si la longitud de la palabra es de 8 bits, el rango representado por el complemento es -128 ~ +127, al realizar operaciones de complemento, se debe prestar atención a que el resultado no exceda el número que se puede obtener; representado por el alcance del complemento.