división de complemento de dos bits de 24 bits en el ensamblaje de AVR

1

¿Cómo realizo una división por 2 del valor de complemento de dos de 24 bits en los registros r6: r5: r4? (r6 es el byte más significativo).

De lo que tengo esto es lo que probé:
ASR r6;ASR r5;ASR r4;
Pero no estoy seguro de si lo hice correctamente.

Mi proceso de pensamiento es que al cambiar cada bit a la derecha digamos un 1110 binario de 4 bits, al cambiar a la derecha desde MSB será 0111. y, por lo tanto, 0111 es la mitad de 1110. Pero no estoy muy seguro de tener hecho correctamente.

    
pregunta Jay Sun

2 respuestas

4

En el modo que probaste, solo estás dividiendo el valor del byte en cada uno de los tres registros por dos. Para que esto funcione para varios bytes como r6: r5: r4, debe codificar esto de manera que propague el bit bajo desde el primer turno al siguiente byte y similar para el siguiente byte. La secuencia de instrucciones adecuada para realizar esto sería:

ASR R6
ROR R5
ROR R4

Lea la descripción de la instrucción ROR para comprender cómo se usa el bit CY para propagar bits de un registro a otro durante la secuencia anterior.

    
respondido por el Michael Karas
0

Cuando desplace el valor del complemento de dos a la derecha para dividirlo por 2, mantenga el MSB igual a "1". En tu ejemplo -2 = 1110. Dividirlo por 2 resultará en 1111 (tenga en cuenta que MSB es "1" no "0", como escribió). 1111 = -1

    
respondido por el Konstantin

Lea otras preguntas en las etiquetas