Você está na página 1de 25

Repaso ARM

Agenda

Registros

ISA Formato de
instruccin
Directivas
ARM Modos de
direccionamiento
Registros ARM

Registros de Registros de
Tamao? Cantidad? propsito propsito
general? especial?
Registros ARM

Propsito general
32 bits
R0 a R12
Registros ARM
Propsito especial
32 bits
R15: PC
Propsito general
R14: LR
32 bits R13: SP
R0 a R12 CPSR
Current Processor Status
Register
Instrucciones terminadas en S
modifican CPSR
ISA - Registros

CC3025 - UVG - DEPARTAMENTO DE COMPUTACIN


Formato de instruccin ARM
Formato de instruccin ARM

CANTIDAD DE
INSTRUCCIN EFECTO
OPERANDOS
3 add r1, r2, r3 r1 r2 + r3
2 add r1, r2 r1 r1 + r2
Instrucciones ARM
Tipos de operando
Registro
Inmediato o literal
#86 (decimal)
#0x1A (hexadecimal)
#0b1000 (binario)
#J (carcter ASCII)
Instrucciones ARM
Tipos de operando El valor: mximo 8 bits.
Registro mov r1, #0xFF
Inmediato o literal mov r1, #0xFF1
#86 (decimal) mov r1, #0xFF000000 ?
#0x1A (hexadecimal)
#0b1000 (binario)
#J (carcter ASCII)
Instrucciones ARM
Tipos de instrucciones
Aritmticas: ADD, ADDS, ADC, SUB, MUL
Lgicas: AND, ORR, EOR, LSL, LSR
Comparacin: CMP, TST, TEQ
Movimiento: MOV, MOVN
Load / Store: LDR, STR
Instrucciones ARM

Condicionales
Depende de CPSR
BLT
Instrucciones
de control BGT
BEQ
BNE
Entre otras
Instrucciones ARM

Condicionales Incondicionales
Depende de CPSR B: branch
BLT BX: branch and
Instrucciones Instrucciones exchange
de control BGT de control Subrutinas
BEQ
BL: branch with
BNE link
Entre otras MOV PC, LR
Directivas
.ascii
.asciz
.byte
.word
Directivas
.align .ascii
.data .asciz
.global symbol .byte
.text .word
Modos de direccionamiento
Registro base +
desplazamiento
ldr r1,[r0]

Pre-index
ldr r1, [r0,#4]
Pre-index con
auto-indexing
(!) ldr r1, [r0,#4]!

Post-indexado
ldr r1,[r0],#4
Tarea
Realizar un programa
Que sume, reste, multiplique y divida nmeros
enteros.
Cmo ensamblamos ?
gcc o nombreprograma nombreprogram.o
./nombreprograma
Ejemplo sencillo

.global main
main:
mov r0, #3 /* r0 3 */
mov r1, #4 /* r1 4 */
add r0, r0, r1 /* r0 r0 + r1 */
bx lr /* Return from main */
Ejemplo sencillo
.text
.align 2
.global main
.type main, %function
main:
stmfd sp!, {lr} /* SP = R13 link register */

ldr r0, =string1


bl puts

/* salida correcta */
mov r0, #0
mov r3, #0
ldmfd sp!, {lr} /* R13 = SP */
bx lr

.data
.align 2
string1:
.asciz "Hello World\n"
Escriba en lenguaje ensamblador ARM las
siguientes instrucciones de lenguaje de alto
nivel:
Ejercicio 1 Ejercicio 2
bandera = 1; veces = 0;
if ((edad > 12)&&(edad < 19)) for (cont=10; cont>0; cont--)
bandera = bandera*10; veces = veces + 2;
else
bandera = 1;
Ejercicio 3
Una secuencia de bits est almacenada en el registro
r0. Se necesitan trasladar los bits de las posiciones
[31:28] a las posiciones [3:0], dejando el resto de bits
en cero.
cul sera el cdigo en ARM que realiza la operacin
anterior?
Ejercicio 4
Una secuencia de bits est guardada en el registro 0. Desea
examinarse el bit de la posicin 5.
Si es 1 debe colocar el registro 1 en 1, en caso contrario colocarlo
en 0
Cul sera el cdigo en ARM que realiza la operacin
anterior?
Ejercicio 5: Escriba en ARM las subrutinas:
Nombre de la Parmetros de Funcionalidad Parmetro de salida
subrutina entrada
mayorInt Dos valores de 32 Encuentra el mayor de dos El nmero mayor
bits nmeros enteros

esMayuscula Un valor de 8 bits Verifica si el valor ingresado 1 si es mayscula


corresponde al cdigo ASCII de 0 en caso contrario
una letra mayscula
Bibliografa
Clements, Alan. Organization and Architecture. Themes and Variations. ARM Processor
WORKBOOK. 2013.

Você também pode gostar