¿Cómo cargar un valor negativo inmediato en un registro?

0

Por ejemplo, en un AVR de 8 bits dado un registro r16 hago algo como ldi r16, 44 y de esta manera puedo darle valores positivos de 0 a 255. Pero si quiero un claro negativo en el complemento de dos, puedo obtener un rango de -128 ... + 127 pero no puedo hacer eso así.

ldi r16, -13

Y además, ¿cómo sabe el microprocesador si quiero todos los 8 bits para un valor positivo de 0 ... 255 o negativo de -128 a 127? Muchas gracias por tu ayuda.

    

2 respuestas

1
  

¿cómo sabe el microprocesador si quiero todos los 8 bits para 0 ... 255 positivos o -128 a 127 negativos?

El procesador no sabe y no le importa.

La ventaja de usar la representación de complemento de dos para los números con signo es que las operaciones de suma y resta producen los mismos resultados de las mismas entradas, ya sea que usted diga que las entradas no están firmadas o los valores de complemento de dos.

Por supuesto, tendrá que vigilar las diferentes condiciones de desbordamiento en los dos casos, pero normalmente el procesador proporciona indicadores que pueden detectar el desbordamiento para cualquier tipo de operación.

  

Pero si quiero un claro negativo en el complemento de dos, puedo obtener un rango de -128 ... + 127 pero no puedo hacer eso así.

     

ldi r16, -13

Si no puede, es una limitación de su ensamblador, no del procesador.

Si utiliza el ensamblador AVR de Microchip, debería poder hacer exactamente eso, según la documentación .

    
respondido por el The Photon
0

El microprocesador no difiere. Tú eres quien debe saber. En un lenguaje de alto nivel como C, hay tipos de datos firmados y no firmados. Puede hacer, por ejemplo, int a = -5*b , dejando en claro que desea una multiplicación firmada. Pero en Ensamblaje, cargar un registro de 8 bits con 0xFF puede significar 255 como -1. El patrón binario del resultado es el mismo cuando se agregan valores con o sin signo. Además, esto es cierto para la multiplicación si el resultado tiene la misma longitud que los operandos. Si el resultado tiene una longitud mayor, hay una instrucción para multiplicación sin firma y otra para multiplicación firmada . Los indicadores de microporcesor, como desbordamiento, acarreo ( desbordamiento sin signo ) y cero son sensibles al resultado de las operaciones, y son útiles para ejecutar saltos de acuerdo. El programador es responsable de la correcta interpretación.

    
respondido por el Dirceu Rodrigues Jr

Lea otras preguntas en las etiquetas