arm_intro_instrucc
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_intro_instrucc [2020/05/13 02:23] – u andrew | arm_intro_instrucc [2020/05/13 03:25] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
- | ===== Introducción a las instrucciones ARM ===== | + | ===== Formato de las instrucciones |
- | Vamos a introducir brevemente el conjunto | + | Vamos a introducir brevemente el formato |
Como hemos mencionado, el lenguaje ensamblador se compone de instrucciones, | Como hemos mencionado, el lenguaje ensamblador se compone de instrucciones, | ||
Línea 12: | Línea 12: | ||
- | MNEMONICO | + | **MNEMONICO** - Nombre corto de la instrucción (mnemonic) |
- | {S} - Un sufijo opcional. Si se agrega S al final del Mnemonico, el registro CPSR de flags es actualizado en base a los resultados de una operación | + | **{S}** - Un sufijo opcional. Si se agrega S al final del Mnemonico, el registro CPSR de flags es actualizado en base a los resultados de una operación |
- | {condition} | + | **{condition}** - Condición que debe suceder para que se ejecute una instrucción |
- | {Rd} - Registro destino para almacenar los resultados de una instrucción | + | **{Rd}** - Registro destino para almacenar los resultados de una instrucción |
- | Operand1 | + | **Operand1** - Primer operando. Puede ser un valor inmediato ó un registro |
- | Operand2 | + | **Operand2** - Segundo operando (flexible). Puede ser un valor inmediato ó un registro ó un registro con shift, ver ejemplo a continuación |
- | Mientras que los campos MNEMONICO, S, Rd y Operand1 son sencillos, la **condición** y los campos **Operand2** requieren un poco más de aclaración. | + | Mientras que los campos MNEMONICO, S, Rd y Operand1 son sencillos, la **condición** y los campos **Operand2** requieren un poco más de aclaración. |
- | #123 - Immediate value (with limited set of values). | + | El campo de condición está estrechamente relacionado con el valor del registro CPSR, o para ser precisos, valores de bits específicos dentro del registro. El siguiente ejemplo muestra como se incluye el campo condición en una instrucción: |
- | | + | |
- | Rx, ASR n | + | MOVLE R0, #5 - Mueve el número 5 al registro R0 |
- | Rx, LSL n | + | únicamente si la condición LE (Less than or Equal - menor o igual que) es satisfecha |
- | Rx, LSR n - Register x with logical shift right by n bits (1 = n = 32) | + | |
- | Rx, ROR n - Register x with rotate right by n bits (1 = n = 31) | + | |
- | Rx, RRX - Register x with rotate right by one bit, with extend | + | El operando2 se llama operando flexible, porque podemos usarlo de varias formas: como valor inmediato (con un conjunto limitado de valores), registro o registro con shift. Por ejemplo, podemos usar estas expresiones como Operand2: |
+ | |||
+ | #123 - Valor inmediato | ||
+ | | ||
+ | Rx, ASR n | ||
+ | Rx, LSL n | ||
+ | Rx, ROR n - Register x con rotación a derecha de n bits (1 = n = 31) | ||
- | Como un ejemplo | + | Como un ejemplo |
+ | |||
+ | | ||
+ | almacena el resultado en R0 (Rd) | ||
+ | | ||
+ | valor inmediato) y almacena el resultado en R0 (Rd) | ||
- | ADD R0, R1, R2 - Adds contents of R1 (Operand1) and R2 (Operand2 in a form of register) and | + | MOV R0, R1, LSL #1 - Mueve a R0 (Rd) el contenido de R1 (Operando |
- | stores the result into R0 (Rd) | + | |
- | | + | |
- | | + | |
- | MOVLE R0, #5 - Moves number 5 (Operand2, because the compiler treats it as MOVLE R0, R0, #5) | + | |
- | to R0 (Rd) ONLY if the condition LE (Less Than or Equal) is satisfied | + | |
- | | + | |
- | left) shifted left by one bit to R0 (Rd). So if R1 had value 2, it gets shifted | + | |
- | | + | |
[[oc_raspi0|Volver]] | [[oc_raspi0|Volver]] | ||
×
iphelper toolbox
you see this when javscript or css is not working correct
Untested
arm_intro_instrucc.1589336633.txt.gz · Última modificación: 2020/05/13 02:23 (editor externo)