El procesador es little-endian.
En las siguientes direcciones tenemos los siguientes valores (formato hexadecimal):
1000: FA
1001: 46
1002: 26
1003: C3
Ahora, el procesador realizará las siguientes 16-bits
operaciones:
1. Cargar para registrar R1
el valor de la dirección 1000
(recuerde que las operaciones son 16-bits
).
2. Valor XOR de dirección 1002
con valor de registro R1
.
3. Guardar el resultado de XOR en la dirección1010
Les muestro, cómo entiendo lo que hace el procesador:
1. Debido al hecho de que el procesador es little-endian, se carga al R1
valor: 46 FA
.
2. xor con valor de dirección 1002
con R1
es:
XOR(C3 26, 46 FA)=85 DC
3. Ahora, en direcciones 1010
y 1011
tenemos:
1010:DC
1011:85
Dime por favor, ¿estoy bien? Si entiendo correctamente este problema?
Lo tienes completamente correcto, y la respuesta de Transistor es buena. Sin embargo, aquí hay información adicional:
Tenga en cuenta que las operaciones lógicas como XOR
, AND
y OR
solo buscan los mismos bits en los dos valores. Entonces, en este caso, no importa si el procesador es little-endian, big-endian o de qué manera están los operandos. El resultado serán los mismos valores en las direcciones 1010
e 1011
independientemente:
Little Endian:
C326 xor 46FA = 85DC (stored as DC 85)
46FA xor C326 = 85DC (stored as DC 85)
Big Endian:
26C3 xor FA46 = DC85 (stored as DC 85)
FA46 xor 26C3 = DC85 (stored at DC 85)
Solo cuando utiliza operaciones matemáticas en lugar de operaciones lógicas, como ADD
, SUB
y MUL
, importan little-endian y big-endian, y en el caso de SUB
, el orden de los operandos. An ADD
suma los bits más bajos de las dos palabras, lo que puede producir un acarreo. Luego agrega los siguientes bits más bajos de las dos palabras más cualquier acarreo , lo que puede producir otro acarreo. Esto mueve los bits hacia arriba, por lo que el límite del byte se vuelve importante: ¡el acarreo tiene que moverse a través de él!
Little Endian:
C326 + 46FA = 0A20 (stored as 20 0A)
46FA + C326 = 0A20 (stored as 20 0A)
Big Endian:
26C3 + FA46 = 2109 (stored as 21 09)
FA46 + 26C3 = 2109 (stored as 21 09)
Little Endian:
C326 - 46FA = 7C2C (stored as 2C 7C)
46FA - C326 = 83D4 (stored as D4 83)
Big Endian:
26C3 - FA46 = 2C5F (stored as 2C 5F)
FA46 - 26C3 = D383 (stored as D3 83)
16
las operaciones de bits, el valor bajo la dirección de la memoria 1000:5D, 1001:AF
) Luego, el procesador carga el valor de la dirección 1000
en el registro R1
. Entonces el valor de R1
es AF 5D
. De acuerdo ?Tiene razón en su comprensión del diseño "endian" ...
Figura 1. Diseño de memoria little-endian y big-endian. Fuente: Wikipedia .
... y tus cálculos son correctos.
Si alguien quiere verificar, cambie la calculadora de su computadora al modo de programador y haga el cálculo XOR hexadecimal.
vicatcu