¡Esta es una revisión vieja del documento!
Tabla de Contenidos
Instrucciones Aritméticas
Instrucciones aritméticas. Realizan operaciones aritméticas sobre números binarios o BCD. Son instrucciones de este grupo add, cmp, adc, sbc, mul.
ADD
Suma sin afectar al carry
ADD{S}{cond} {Rd}, Rn, Oper2 ADD{cond} {Rd}, Rn, #imm12
La instrucción ADD suma en RD los valores de Rn y Operand2 o imm12. En ciertas circunstancias, el ensamblador puede sustituir una instrucción por otra. Tenelo en cuenta si tenes que leer un listado desensamblado.
donde:
- S es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado.
- cond opcional, es un código de condición.
- Rd Registro destino.
- Rn es el registro que contiene el primer operando.
- Oper2 segundo operando.
- imm12 Es cualquier valor que va de 0-4095.
Código | Sufijo | Flags | ||
---|---|---|---|---|
0000 | EQ | Z set | 0 | Igual |
Ejemplo:
mov r1, #5 @ R1 <-- 5 mov r2, #10 @ R2 <-- 10 add r0, r1, r2 @ R0 <-- 5 + 10 sin afectar el registro CPSR adds r3, r1, r2 @ R3 <-- 5 + 10 afectando el registro CPSR
La forma de ver como se modifica el registro CPSR, es cuando debugueamos con gdb
i r cpsr
Flags que modifica:
Si se especifica S, estas instrucciones actualizan los indicadores N, Z, C y V de acuerdo con el resultado.
ADC
Suma con carry
ADC{S}{cond} {Rd}, Rn, Oper2
La instrucción ADC (suma con acarreo) suma los valores en Rn y Oper2, junto con el flag de acarreo.
donde:
- S es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado.
- cond opcional, es un código de condición.
- Rd Registro destino.
- Rn es el registro que contiene el primer operando.
- Oper2 segundo operando.
Ejemplo:
mov r1, #5 @ R1 <-- 5 mov r2, #10 @ R2 <-- 10 adc r0, r1, r2 @ R0 <-- 5 + 10 + carry
La forma de ver como se modifica el registro CPSR, es cuando debugueamos con gdb
i r cpsr
Flags que modifica:
Si se especifica S, estas instrucciones actualizan los indicadores N, Z, C y V de acuerdo con el resultado.
SUB
Resta sin afectar al carry
SUB{S}{cond} {Rd}, Rn, Oper2 SUB{cond} {Rd}, Rn, #imm12
La instrucción SUB resta en Rd= Rn - Oper2. En ciertas circunstancias, el ensamblador puede sustituir una instrucción por otra. Tenelo en cuenta si tenes que leer un listado desensamblado.
donde:
- S es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado.
- cond opcional, es un código de condición.
- Rd Registro destino.
- Rn es el registro que contiene el primer operando.
- Oper2 segundo operando.
- imm12 Es cualquier valor que va de 0-4095.
Ejemplo:
mov r1, #15 @ R1 <-- 5 mov r2, #10 @ R2 <-- 10 sub r0, r1, r2 @ R0 <-- 15 - 10 sin afectar el registro CPSR subs r3, r1, r2 @ R3 <-- 15 - 10 sin afectar el registro CPSR
La forma de ver como se modifica el registro CPSR, es cuando debugueamos con gdb
i r cpsr
Flags que modifica:
Si se especifica S, estas instrucciones actualizan los indicadores N, Z, C y V de acuerdo con el resultado.
CMP y CMN
Estas instrucciones comparan el valor en un registro con Operando2. Actualizan los indicadores (bits) del registro de flags: CPSR en base al resultado, el resultado no afecta a ningún registro.
CMP{cond} Rn, Operando2
CMN{cond} Rn, Operando2
donde:
- cond es un código de condición opcional
- Rn registro conteniendo el primer operando
- Oper2 segundo operando
La instrucción CMP resta el valor de Operando2 del valor en Rn. Esto es lo mismo que una instrucción SUBS, excepto que el resultado se descarta.
La instrucción CMN Compare Negative agrega el valor de Operando2 al valor en Rn. Esto es lo mismo que una instrucción ADDS, excepto que el resultado se descarta.
Flags que modifica:
Estas instrucciones actualizan los flags N, Z, C y V de acuerdo con el resultado.
Ejemplo:
mov r1, #5 @ R1 <-- 5 mov r2, #10 @ R2 <-- 10 cmp r1, r2 @ Compara los valores de los registros seteando flags.
you see this when javscript or css is not working correct