arm_addsubcmp
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
arm_addsubcmp [2020/05/11 00:51] – mariano | arm_addsubcmp [2020/05/21 20:18] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
====== Instrucciones Aritméticas ====== | ====== 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. | + | **Instrucciones aritméticas**. Realizan operaciones aritméticas sobre números binarios |
- | ==== ADD ==== | + | ==== add ==== |
Suma sin afectar al carry | Suma sin afectar al carry | ||
- | ADD{S}{cond} {Rd}, Rn, Oper2 | + | add{s}{cond} {rd}, rn, Oper2 |
- | ADD{cond} {Rd}, Rn, #imm12 | + | |
- | La instrucción | + | add{cond} {rd}, rn, #imm8 |
+ | |||
+ | La instrucción | ||
En ciertas circunstancias, | En ciertas circunstancias, | ||
donde: | donde: | ||
- | * **S** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. | + | * **s** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. |
* **cond** | * **cond** | ||
- | * **Rd** Registro destino. | + | * **rd** Registro destino. |
- | * **Rn** es el registro que contiene el primer operando. | + | * **rn** es el registro que contiene el primer operando. |
* **Oper2** segundo operando. | * **Oper2** segundo operando. | ||
- | * **imm12** Es cualquier valor que va de 0-4095. | + | * **imm8** Es cualquier valor que va de 0-4095. |
**Códigos de Condicion** | **Códigos de Condicion** | ||
^ Código | ^ Código | ||
- | | 0000| EQ | + | | 0000| eq |
- | | 0001| NE | + | | 0001| ne |
- | | 0011| CS | + | | 0011| cs |
- | | 0011| CC | + | | 0011| cc |
- | | 0100| MI | + | | 0100| mi |
- | | 0101| PL | + | | 0101| pl |
- | | 0110| VS | + | | 0110| vs |
- | | 0111| VC | + | | 0111| vc |
- | | 1000| HI | + | | 1000| hi |
- | | 1001| LS | + | | 1001| ls |
- | | 1010| GE | + | | 1010| ge |
- | | 1011| LT | + | | 1011| lt |
- | | 1100| GT | + | | 1100| gt |
- | | 1101| LE | + | | 1101| le |
- | | 1110| AL | + | | 1110| al |
Ejemplo: | Ejemplo: | ||
Línea 53: | Línea 54: | ||
**Flags que modifica:** | **Flags que modifica:** | ||
- | Si se especifica **S**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. | + | Si se especifica **s**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. |
- | ==== ADC ==== | + | ==== adc ==== |
Suma con carry | Suma con carry | ||
- | ADC{S}{cond} {Rd}, Rn, Oper2 | + | adc{s}{cond} {rd}, rn, Oper2 |
- | La instrucción | + | La instrucción |
donde: | donde: | ||
- | * **S** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. | + | * **s** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. |
* **cond** | * **cond** | ||
- | * **Rd** Registro destino. | + | * **rd** Registro destino. |
- | * **Rn** es el registro que contiene el primer operando. | + | * **rn** es el registro que contiene el primer operando. |
* **Oper2** segundo operando. | * **Oper2** segundo operando. | ||
Línea 84: | Línea 85: | ||
**Flags que modifica:** | **Flags que modifica:** | ||
- | Si se especifica **S**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. | + | Si se especifica **s**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. |
- | ==== SUB ==== | + | ==== sub ==== |
Resta sin afectar al carry | Resta sin afectar al carry | ||
- | SUB{S}{cond} {Rd}, Rn, Oper2 | + | sub{s}{cond} {rd}, rn, Oper2 |
- | SUB{cond} {Rd}, Rn, #imm12 | + | |
- | La instrucción | + | sub{cond} {rd}, rn, #imm8 |
+ | |||
+ | La instrucción | ||
En ciertas circunstancias, | En ciertas circunstancias, | ||
donde: | donde: | ||
- | * **S** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. | + | * **s** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. |
* **cond** | * **cond** | ||
- | * **Rd** Registro destino. | + | * **rd** Registro destino. |
- | * **Rn** es el registro que contiene el primer operando. | + | * **rn** es el registro que contiene el primer operando. |
* **Oper2** segundo operando. | * **Oper2** segundo operando. | ||
- | * **imm12** Es cualquier valor que va de 0-4095. | + | * **imm8** Es cualquier valor que va de 0-4095. |
Ejemplo: | Ejemplo: | ||
Línea 119: | Línea 121: | ||
**Flags que modifica:** | **Flags que modifica:** | ||
- | Si se especifica **S**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. | + | Si se especifica **s**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. |
- | ==== SBC ==== | + | ==== sbc ==== |
Restar con carry | Restar con carry | ||
- | SBC{S}{cond} {Rd}, Rn, Oper2 | + | sbc{s}{cond} {rd}, rn, Oper2 |
- | La instrucción | + | La instrucción |
donde: | donde: | ||
- | * **S** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. | + | * **s** es opcional, si se especifica, se actualiza el registro de flags CPSR, de acuerdo al resultado. |
* **cond** | * **cond** | ||
- | * **Rd** Registro destino. | + | * **rd** Registro destino. |
- | * **Rn** es el registro que contiene el primer operando. | + | * **rn** es el registro que contiene el primer operando. |
* **Oper2** segundo operando. | * **Oper2** segundo operando. | ||
Línea 142: | Línea 144: | ||
mov r1, #15 @ R1 <-- 5 | mov r1, #15 @ R1 <-- 5 | ||
mov r2, #10 @ R2 <-- 10 | mov r2, #10 @ R2 <-- 10 | ||
- | sub r0, r1, r2 @ R0 <-- 15 - 10 sin afectar el registro CPSR | + | sbc r3, r1, r2 @ R3 <-- 15 - 10 -1, si carry=0 |
- | | + | |
La forma de ver como se modifica el registro CPSR, es cuando debugueamos con gdb | La forma de ver como se modifica el registro CPSR, es cuando debugueamos con gdb | ||
Línea 152: | Línea 153: | ||
**Flags que modifica:** | **Flags que modifica:** | ||
- | Si se especifica **S**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. | + | Si se especifica **s**, estas instrucciones actualizan los indicadores **N, Z, C y V** de acuerdo con el resultado. |
- | ==== CMP y CMN ==== | + | ==== 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. | 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} | + | cmp{cond} |
- | CMN{cond} | + | cmn{cond} |
donde: | donde: | ||
* **cond** es un código de condición opcional | * **cond** es un código de condición opcional | ||
- | * **Rn** registro conteniendo el primer operando | + | * **rn** registro conteniendo el primer operando |
* **Oper2** segundo 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 | + | La instrucción **cmp resta** el valor de Operando2 del valor en rn. Esto es lo mismo que una instrucción |
- | La instrucción **CMN Compare Negative** agrega el valor de Operando2 al valor en Rn. Esto es lo mismo que una instrucción | + | La instrucción **cmn Compare Negative** agrega el valor de Operando2 al valor en rn. Esto es lo mismo que una instrucción |
**Flags que modifica:** | **Flags que modifica:** | ||
Línea 184: | Línea 185: | ||
+ | ---- | ||
+ | ~~NOCACHE~~ | ||
+ | ({{counter|total}}) | ||
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested
arm_addsubcmp.1589158275.txt.gz · Última modificación: 2020/05/11 00:51 (editor externo)