Está en la página 1de 44

Tema 2.

Arquitectura de Computadores

Sección 2.1: Lenguaje Ensamblador - ARM

Electrónica Digital 2 – 2024-1


Docente: Luis Germán García M.
Motivación para esta sección
Entender la estructura y funcionamiento del sistema de cómputo
¿Cómo indicarle a todo este sistema que haga algo?
CPU or Processor
Peripheral 1

Control Unit +
Datapath Peripheral 4

Peripheral 2 Peripheral 3
Cache Memory

System Bus (Sistema de Interconexión)

Main Memory or RAM (Memoria Principal)


Motivación para esta sección (2)
Primero, recordemos la abstracción por capas definida:
1. Programas: problemas, algoritmos y programación
2. Sistemas Operativos: gestión de recursos
3. Arquitectura: instrucciones, registros y modos de
direccionamiento (ISA).
4. Microarquitectura: unidades de control y manejo de datos
5. Lógica: bloques funcionales tales como ALUs, memorias, …
6. Circuitos Digitales: compuertas NAND, NOR, NOT, AND, …
7. Otros: circuitos analógicos → dispositivos → física.
Motivación para esta sección (3)
Programación: problemas, algoritmos, lenguajes y S.O.
A = 15;
B = 10;
if (A > B)
cout << “A mayor que B”;
Lo anterior es posible porque
else if (A == B) existe un hardware que lo soporta
cout << “A igual que B”;
RST

Este código es independiente de la CLK RST PCSrc


MemtoReg

Control Unit
31:28
Cond MemWrite
27:26

plataforma 25:20
15:12
Op
Funct
Rd
ALUControl[1:0]
ALUSrc
ImmSrc[1:0]
RegWrite
Flags

move.b $1000,D0 0100010… 19:16


0
RegSrc[0:1]

3:0 WE3 31:0


ALUFlags[3:0]

A1 RD1
1010100…
RST A
WE
move.b $1001,D1
15 1 RA1 SrcA 31:0 31:0
1 31:0 RST 31:0 31:0 3:0 R A RD
A RD 0 3:0 31:0 ALUResult Data
0 PC’ PC Instr A2 RD2 0
B ALU

ReadData
0100100… Instruction 1 RA2 Memory
cmp.b D1,D0
1 SrcB
CLK Memory 15:12 3:0 Register 31:0
R15 A3 WD
File WriteData CLK

1101110…
31:0

bgt Print_Msg_A
WD3
4 31:0
+ R15 1

ExtImm
PC+8
PC+4 0


+ CLK

beq Print_Msg_B 4
RST
RST

… 23:0
Extend 31:0
Result

Arquitectura Implementación de la Arquitectura


Agenda para la sección

1. Concepto de Arquitectura

2. Introducción al Lenguaje Ensamblador

3. Instrucciones y Operandos en Registros y Memoria


Concepto de Arquitectura
Arquitectura
▪ Concepto relacionado con el funcionamiento, estructura y diseño
de computadoras
▪ Todo computador consta de cuatro partes esenciales
▪ CPU: procesa la información
▪ Memoria: permite almacenar o guardar los datos y los programas
▪ Periféricos: intercambio de datos con el mundo exterior
▪ Interconexión: sistema que interconecta los diferentes componentes
▪ Se tienen varios tipos de arquitectura
▪ Arquitectura Von Neumann.
▪ Arquitectura Harvard.
Concepto de Arquitectura (2)

Arquitectura Von Neumann


El dispositivo de almacenamiento es el mismo para los datos que
para las instrucciones.
Memoria Periféricos
Instrucciones
P1 P2 P3 Pn
1000100100110001001001
10100010010 01110100100
0111010010001110100100
10100010100 10100010100

Datos CPU
1000100100110001001001
10100010010 01110100100
0111010010001110100100 Control Datapath
10100010100 10100010100 Sistema de conexión
compartido
Concepto de Arquitectura (3)

Arquitectura Harvard
▪ Arquitectura ligeramente diferente a la Von Neumann.
▪ En esta se utilizan medios de almacenamiento diferentes tanto
para las instrucciones como para los datos

CPU
Instrucciones Datos
Control
1000100100110001001001 1000100100110001001001
10100010010 01110100100 10100010010 01110100100
0111010010001110100100 0111010010001110100100
10100010100 10100010100 10100010100 10100010100
Datapath
Instrucciones Datos
Concepto de Arquitectura (4)

Hoy en día: Arquitectura Von Neumann + Harvard


▪ Procesadores implementan una caché L1: instrucciones y datos
• Implementación de una arquitectura Harvard dentro de un esquema más
general de arquitectura Von Neumann.
▪ Sin embargo, a nivel de arquitectura general, sigue siendo
predominante la arquitectura Von Neumann:
• Memoria principal (RAM) sigue siendo compartido: instrucciones y datos
Processor Chip

Cache L1i Main


Cache
CORE Memory
L2, L3
Cache L1d (RAM)
Concepto de Arquitectura (5)
Actualmente, la mayoría de sistemas de cómputo se basan en
tres conceptos principales
▪ Las instrucciones y los datos son
almacenados en memoria de Dirección 1 INSTRUCCIÓN NO. i
lectura/escritura. Dirección 2 INSTRUCCIÓN NO. i+1
Dirección 3 …
▪ El contenido de esta memoria se puede Dirección 4 INSTRUCCIÓN n

ubicar a partir de direcciones, sin Dirección 5 DATO NO. i


DATO NO. i+1
Dirección 6
importar el tipo de dato contenido allí. Dirección 7 …
INSTRUCCIÓN n
▪ La ejecución de las instrucciones se
Dirección 8

hace de manera secuencial, es decir,


una instrucción tras otra.
Concepto de Arquitectura (6)
A B Control Operación
000 A and B
8 8
U.C.: leer la instrucción 001 A or B
010 A xor B
de la dirección $00 de 3
011 not A
memoria. Control ALU
100 R=A+B

R0 00000000 8 Cout 101 R=A–B


R1 00001000 110 R=A+1
R2 00000111 R 111 R=B+1
R3 00000000
Banco Registros Tabla de operación ALU
Unidad de
$00 11110001 Control
$01 00000001
$02 00000010
00000011 Instrucción Operación
$03
Memoria 8-Bits 11110001 Sumar A con B
11110010 Restar B de A
11110011 Cargar M en R Tabla de operación
11110100 And entre A y B Unidad de Control
Concepto de Arquitectura (7)
A B Control Operación
000 A and B
U.C.: decodificar la 8 8 001 A or B

instrucción 3
010 A xor B
011 not A
SUMAR A y B Control ALU
100 R=A+B

R0 00000000 8 Cout 101 R=A–B


R1 00001000 110 R=A+1
R2 00000111 R 111 R=B+1
R3 00000000
Banco Registros Tabla de operación ALU
Unidad de
$00 11110001 Control
$01 00000001
$02 00000010
00000011 Instrucción Operación
$03
Memoria 8-Bits 11110001 Sumar A con B
11110010 Restar B de A
11110011 Cargar M en R Tabla de operación
11110100 And entre A y B Unidad de Control
Concepto de Arquitectura (8)
00001000 A B 00000111 Control Operación
U.C.: leer operandos A 000 A and B
y B desde los registros 8 8 001 A or B

(la instrucción le indica a 3


010 A xor B
011 not A
la CPU desde donde) Control ALU
100 R=A+B

R0 00000000 8 Cout 101 R=A–B


R1 00001000 110 R=A+1
R2 00000111 R 111 R=B+1
R3 00000000
Banco Registros Tabla de operación ALU
Unidad de
$00 11110001 Control
$01 00000001
$02 00000010
00000011 Instrucción Operación
$03
Memoria 8-Bits 11110001 Sumar A con B
11110010 Restar B de A
11110011 Cargar M en R Tabla de operación
11110100 And entre A y B Unidad de Control
Concepto de Arquitectura (9)
00001000 A B 00000111 Control Operación
000 A and B
8 8
U.C.: realizar la suma 001 A or B
010 A xor B
en la ALU 3
011 not A
Control ALU
100 R=A+B

R0 00000000 100 8 Cout 101 R=A–B


R1 00001000 110 R=A+1
R2 00000111
R3 00000000 00001111 R 111 R=B+1

Banco Registros Tabla de operación ALU


Unidad de
$00 11110001 Control
$01 00000001
$02 00000010
00000011 Instrucción Operación
$03
Memoria 8-Bits 11110001 Sumar A con B
11110010 Restar B de A
11110011 Cargar M en R Tabla de operación
11110100 And entre A y B Unidad de Control
Concepto de Arquitectura (10)
U.C.: almacenamiento 00001000 A B 00000111 Control Operación
000 A and B
de resultado en 8 8 001 A or B
memoria y quedar listo 010 A xor B
3
para siguiente 011 not A
Control ALU
instrucción 100 R=A+B

R0 00000000 100 8 Cout 101 R=A–B


R1 00001000 110 R=A+1
R2 00000111
R3 00001111
00000000 00001111 R 111 R=B+1

Banco Registros Tabla de operación ALU


Unidad de
$00 11110001 Control
$01 00000001
$02 00000010
00000011 Instrucción Operación
$03
Memoria 8-Bits 11110001 Sumar A con B
11110010 Restar B de A
11110011 Cargar M en R Tabla de operación
11110100 And entre A y B Unidad de Control
Concepto de Arquitectura (11)

Funcionamiento básico
Ejecución de un programa, colección de instrucciones
almacenadas en memoria.

Búsqueda de
Ejecución de
INICIO la siguiente DETENIDO
la instrucción
instrucción

Ciclo de Búsqueda Ciclo de Ejecución


Fetch Cycle Execution Cycle
Concepto de Arquitectura (12)

La Arquitectura no define cómo está implementado el Hardware


add R1,R2,R3 01000100010100…
sub R0,R1,R2 10101001001010… RST

mov R1,R0 01001001000101… CLK RST PCSrc


MemtoReg

Control Unit
31:28
Cond
11011101010101…
MemWrite

beq Print_Msg_A
27:26
Op ALUControl[1:0]
25:20
Funct ALUSrc


15:12 ImmSrc[1:0]

bne Print_Msg_B
Rd
RegWrite
Flags
RegSrc[0:1]


ALUFlags[3:0]
19:16

Assembly Machine RST


15
0
1 RA1
3:0
A1
WE3
RD1
31:0
SrcA
A
R
31:0
A
WE
RD
31:0
1 31:0 RST 31:0
A RD
31:0 3:0

Code Code 0 PC’ PC Instr


0 3:0
A2 RD2
31:0
0
B ALU
ALUResult Data

ReadData
Instruction 1 RA2 Memory
1 SrcB
CLK Memory 15:12 3:0 Register 31:0
R15 A3 WD
File WriteData CLK
31:0
WD3
Arquitectura 4
+
31:0
R15 1

ExtImm
PC+8
PC+4 0
+ CLK

• Define las instrucciones y formas de 4


RST
RST

23:0

acceder a los operandos. Extend 31:0


Result

• Es lo que el programador tiene a Implementación de la Arquitectura


disposición para hacer uso del Microarquitectura
sistema de cómputo.
Concepto de Arquitectura (13)
¿Cuál es la correcta definición de Arquitectura?

Arquitectura Abstracta o "Arquitectura"


Especificación funcional de un computador
El programador se ocupa de las instrucciones y formas de
acceder a los datos: modelo de programación
Arquitectura Concreta o "Microarquitectura"
Implementación de una arquitectura abstracta

Se refiere a la descripción estructural en términos de unidades


funcionales e interconexiones.
Agenda para la sección

1. Concepto de Arquitectura

2. Introducción al Lenguaje Ensamblador

3. Instrucciones y Operandos en Registros y Memoria


Lenguaje Ensamblador
¿Y cómo le digo a esta CPU que haga algo?

Reset Reset
Control Unit Instruction
CLK
InstrAddr Memory
Signals from and to Datapath Unit
ReadInstr

… …

Datapath Unit DataAddr Data Memory


Arithmetic, Logic and Memory Operations ReadData

WriteData
Lenguaje Ensamblador (2)
Cada sistema de cómputo ofrece un lenguaje propio
B100
B900
C500

Instruction
Memory
Reset Reset CD01
CLK Control Unit B000
InstrAddr 1E40
Signals from and to Datapath Unit
ReadInstr 3501
B102
… …
FD00

Datapath Unit DataAddr Data Memory


Arithmetic, Logic and Memory Operations ReadData

WriteData
Lenguaje Ensamblador (3)
Cada sistema de cómputo ofrece un lenguaje propio

▪ Primero, entender el lenguaje R2 ← 0x00 MOV R2, #0x00 B100


R3 ← 0x00 MOV R3, #0x00 B900
▪ Instrucciones: operación y ubicación R0 ← DATA_MEM[0] LDR R0, [R2, #0] C500
de los operandos R1 ← DATA_MEM[1] LDR R1, [R2, #1] CD01
▪ La CPU solo entiende 0’s y 1’s: R2 ← R0 MOV R2, R0 B000

▪ Instrucciones son codificadas R3 ← R3 + R1 ADD R3, R3, R1 1E40


R2 ← R2 – 0x01 SUB R2, R2, #0x01 3501
empleando ceros y unos (Machine
R2 ← 0x02 MOV R2, #0x02 B102
Language)
DATA_MEM[2]← R3 STR R3, [R2, #0x00] FD00
▪ Inst1: 0xCD01 (1100_1101_0000_0001)
▪ Inst2: 0xB102 (1011_0001_0000_0010)
Meaning Assembly Instruction
Language Memory
Lenguaje Ensamblador (4)
Cada sistema de cómputo ofrece un lenguaje propio

▪ Primero, entender el lenguaje R2 ← 0x00 MOV R2, #0x00 B100


R3 ← 0x00 MOV R3, #0x00 B900
▪ Instrucciones: operación y ubicación R0 ← DATA_MEM[0] LDR R0, [R2, #0] C500
de los operandos R1 ← DATA_MEM[1] LDR R1, [R2, #1] CD01
▪ La CPU solo entiende 0’s y 1’s: R2 ← R0 MOV R2, R0 B000

▪ Para los humanos, el lenguaje de R3 ← R3 + R1 ADD R3, R3, R1 1E40


R2 ← R2 – 0x01 SUB R2, R2, #0x01 3501
máquina resulta muy tedioso de leer,
R2 ← 0x02 MOV R2, #0x02 B102
codificar, depurar, etc.
DATA_MEM[2]← R3 STR R3, [R2, #0x00] FD00
▪ Instrucciones son representadas
Meaning Assembly Instruction
mediante símbolos: lenguaje
Language Memory
ensamblador
ADD R0, R1, R2 ; R0  R1 + R2
OR R3, R3, R2 ; R3  R3 | R2
Agenda para la sección

1. Concepto de Arquitectura

2. Introducción al Lenguaje Ensamblador

3. Instrucciones y Operandos en Registros y Memoria


Instrucciones en ARM
Principios de Diseño Básicos
En el diseño de la Arquitectura ARM, se han tenido en cuenta los
siguientes principios de diseño:

1. La regularidad conlleva a la simplicidad en el diseño


2. Hacer el caso común rápido Tomado del texto guía
Digital Design and
3. Más pequeño más rápido Computer Architecture
ARM Edition
4. Un buen diseño requiere buenos compromisos S. Harris. D. Money.
Instrucciones en ARM (2)
Instrucciones en ensamblador
Para la mayoría de instrucciones se tiene el siguiente formato:
MNEMONIC DestOperand, SrcOperand1, SrcOperand2 ; Comments

▪ MNEMONIC: etiqueta que indica la operación a realizar


▪ SrcOperand1, SrcOperand2: ubicación de los dos operandos
sobre los que se lleva a cabo la operación
▪ DestOperand: ubicación donde se debe escribir el resultado
▪ Comments: comentarios, normalmente comienzan con punto y
coma (;). Algunos ensambladores aceptan comentarios como en
el lenguaje C (//, /* */).
Instrucciones en ARM (3)
Instrucciones comunes
Principio de diseño no. 1: la regularidad conlleva a la simplicidad
en el diseño
Operación de suma:
ADD varR, var1, var2 // En C: varR = var1 + var2
Operación de resta:
SUB varR, var1, var2 // En C: varR = var1 - var2
Otras operaciones con el mismo patrón:
AND varR, var1, var2 // En C: varR = var1 & var2
ORR varR, var1, var2 // En C: varR = var1 | var2
La regularidad en las instrucciones facilita la implementación del
hardware encargado de decodificar y ejecutar instrucciones.
Instrucciones en ARM (4)
La arquitectura brinda instrucciones simples para resolver
problemas complejos
Principio de diseño no. 2: hacer el caso común rápido

¿Qué tan común es el siguiente código?


varR = var1 + var2 + var3 – var4
Puede ser resuelta con varias instrucciones simples:
ADD vart1,var1, var2 // En C: vart1 = var1 + var2
ADD vart2,vart1,var3 // En C: vart2 = vart1 + var3
SUB varR, vart2,var4 // En C: varR = vart2 – var4
A menor número de instrucciones, más fácil la decodificación y
ejecución de ellas: filosofía CISC vs RISC.
Filosofía CISC vs RISC
Complex Instruction Set Computer
▪ CPUs con un conjunto de instrucciones bastante amplio.
▪ Operaciones complejas entre operandos ubicados en registros y
memoria.
▪ Ventaja: facilidad de programación.
▪ Desventaja: excesivo uso de la memoria externa al procesador.
Una sola instrucción
Operando A ▪ Llevar A desde RAM a Reg. CPU (Rx)
Resultado ▪ Llevar B desde RAM a Reg. CPU (Ry)
Operando B ▪ Realizar suma y llevar a Reg. (Rz)
▪ Llevar valor de Reg. (Rz) a RAM
Instrucción del tipo leer, operar y escribir. Tiene sentido si la
comunicación entre CPU y Memoria tiene baja latencia.
Filosofía CISC vs RISC (2)
Reduced Instruction Set Computer
▪ CPUs con un conjunto de instrucciones más simple y pequeño.
▪ Estas CPUs tienen muchos registros internos.
▪ Operaciones lógicas y aritméticas: solo entre registros.
▪ Carga y almacenamiento (RAM): instrucciones dedicadas.
Múltiples instrucciones
Operando A 1. Cargar A desde RAM a Reg. CPU (Rx)
Resultado 2. Cargar B desde RAM a Reg. CPU (R1)
Operando B 3. Realizar suma Rx + Ry y llevarlo a Rz
4. Guardar valor de Reg. (Rz) en RAM

La idea es aprovechar al máximo las operaciones entre


registros evitando acceder frecuentemente a la RAM
Operandos en Registros y Memoria
Instrucciones necesitan operandos para procesar
En los siguientes códigos, los operandos se encuentran en variables
ADD varR, var1, var2 // En C: varR = var1 + var2
SUB varR, var1, var2 // En C: varR = var1 - var2

▪ En C, las variables son ubicaciones abstractas manejadas por el


compilador.
▪ En lenguaje ensamblador, sin embargo, es necesario especificar
la ubicación física del operando:
▪ Registros (rápido acceso y muy baja capacidad – velocidad)
▪ Memoria (acceso lento y alta capacidad – capacidad)
Operandos en Registros y Memoria (2)
Registros: memoria de rápido acceso para datos de uso frecuente
Principio de diseño no. 3: más pequeño más rápido

▪ Existen 16 registros en la arquitectura ARM: R0 – R15


Nombre del
Uso por parte del programador/sistema
Registro
R0 Argumentos de funciones, valor de retorno, variables temporales
R1-R3 Argumentos de funciones, variables temporales
R4-R11 Variables almacenadas para futuro uso
R12 Variable temporal
R13 (SP) Puntero de pila o Stack Pointer (Empleado en funciones)
R14 (LR) Registro de enlace o Link Register (Empleado en funciones)
R15 (PC) Contador de programa o Program Counter
Operandos en Registros y Memoria (3)
Registros: memoria de rápido acceso para datos de uso frecuente
Principio de diseño no. 3: más pequeño más rápido

Revisemos el siguiente código empleando registros en ASM:


varR = var1 + var2 + var3 – var4

R0: varR, R1: var1, R2: var2, R3: var3, R4: var4, R5: vart1, R6: vart2
ADD R5, R1, R2 // En C: vart1 = var1 + var2
ADD R6, R5, R3 // En C: vart2 = vart1 + var3
SUB R0, R6, R4 // En C: varR = vart2 – var4
Operandos en Registros y Memoria (4)
Valores Inmediatos: son valores constantes en memoria
codificados dentro de la instrucción, por lo que su acceso es rápido
Hacen parte del operando fuente 2 (Src2): OPER Ry, Rs1, #Imm

Revisemos el siguiente código empleando registros en ASM:


varR = var1 + 10 + var2 – 0xFE

R0: varR, R1: var1, R2: var2, R5: vart


ADD R5, R1, #10 // En C: vart = var1 + 10
ADD R5, R5, R2 // En C: vart = vart + var2
SUB R0, R5, #0xFE // En C: varR = vart – 0xFE
Operandos en Registros y Memoria (5)
Memoria: registros son un espacio de almacenamiento muy limitado
▪ Se emplea los registros para mantener datos de uso frecuente
▪ Se emplea la memoria para almacenar muchos datos a costa de
tener un acceso más lento
Principio de diseño no. 4: un buen diseño requiere de buenos
compromisos
Memoria en ARM: las instrucciones solo operan en registros
▪ Se debe emplear la instrucción LDR para llevar un dato de la
memoria a un registro
▪ Se debe emplear la instrucción STR para llevar un dato de un
registro a la memoria
Operandos en Registros y Memoria (6)
Acceso a la Memoria en ARM
▪ El procesador accede a Words de 32-bits cada uno
▪ Sin embargo, la memoria se accede por bytes
Dir. Bytes Dir. Words Datos No. Word
▪ Cada Word: 4 bytes . . . .
▪ Dirección de los Words: .
.
.
.
.
.
.
.
múltiplo de 4 1B 1A 19 18 0000_0018 3E 15 1C CD Word 6
▪ Organización de los bytes: 17 16 15 14 0000_0014 42 24 EB 1A Word 5
Little-endian 13 12 11 10 0000_0010 2A FA 1E 2C Word 4

▪ LDR y STR manejan F E D C 0000_000C 67 FA DE 1B Word 3


B A 9 8 0000_0008 75 D9 1A 2E Word 2
words (32-bits)
7 6 5 4 0000_0004 1E 3A 47 BB Word 1
▪ LDRB y STRB manejan 3 2 1 0 0000_0000 EC 24 1F 58 Word 0
bytes (8-bits) MSB LSB 32-bits
Operandos en Registros y Memoria (7)
Organización de Bytes: Big y Little Endian
▪ Relacionado con la manera como se organizan los bytes dentro de
un Word.
▪ Almacene el valor 0x4E20_1BF1
Little-Endian Big-Endian en la dirección 0x0000_0000
Dir. Bytes Dir. Words Dir. Bytes Little-Endian Dir. Words Big-Endian
. . . . . .
. . . . . .
. . . . . .
F E D C 0000_000C F E D C XX XX XX XX 0000_0004 XX XX XX XX
B A 9 8 0000_0008 B A 9 8 ?? ?? ?? ?? 0000_0000 ?? ?? ?? ??
7 6 5 4 0000_0004 7 6 5 4 MSB LSB LSB MSB
3 2 1 0 0000_0000 3 2 1 0
MSB LSB LSB MSB
Operandos en Registros y Memoria (8)
Organización de Bytes: Big y Little Endian
▪ Relacionado con la manera como se organizan los bytes dentro de
un Word.
▪ Almacene el valor 0x4E20_1BF1
Little-Endian Big-Endian en la dirección 0x0000_0000
Dir. Bytes Dir. Words Dir. Bytes Little-Endian Dir. Words Big-Endian
. . . . . .
. . . . . .
. . . . . .
F E D C 0000_000C F E D C XX XX XX XX 0000_0004 XX XX XX XX
B A 9 8 0000_0008 B A 9 8 4E 20 1B F1 0000_0000 F1 1B 20 4E
7 6 5 4 0000_0004 7 6 5 4 MSB LSB LSB MSB
3 2 1 0 0000_0000 3 2 1 0
MSB LSB LSB MSB
Operandos en Registros y Memoria (9)
Acceso a la Memoria en ARM
Revisemos el siguiente código:
uint32_t memory[n] = {0xEC241F58, 0x1E3A47BB, ...};
a = memory[1] // R1 = a
En ASM: Registro Datos Dir. Words Datos
. . . .
MOV R0,#0 . . . .
. . . .
R2 XX XX XX XX 0000_0008 75 D9 1A 2E
R1 XX XX XX XX 0000_0004 1E 3A 47 BB
R0 XX XX XX XX 0000_0000 EC 24 1F 58
32-bits 32-bits
Operandos en Registros y Memoria (10)
Acceso a la Memoria en ARM
Revisemos el siguiente código:
uint32_t memory[n] = {0xEC241F58, 0x1E3A47BB, ...};
a = memory[1] // R1 = a
En ASM: Registro Datos Dir. Words Datos
. . . .
MOV R0,#0 . . . .
LDR R1,[R0,#4] . . . .
R2 XX XX XX XX 0000_0008 75 D9 1A 2E
R1 XX XX XX XX 0000_0004 1E 3A 47 BB
R0 00 00 00 00 0000_0000 EC 24 1F 58
32-bits 32-bits
Operandos en Registros y Memoria (11)
Acceso a la Memoria en ARM
Revisemos el siguiente código:
uint32_t memory[n] = {0xEC241F58, 0x1E3A47BB, ...};
a = memory[1] // R1 = a
En ASM: Registro Datos Dir. Words Datos
. . . .
MOV R0,#0 . . . .
LDR R1,[R0,#4] . . . .
R2 XX XX XX XX 0000_0008 75 D9 1A 2E
R1 1E 3A 47 BB 0000_0004 1E 3A 47 BB
R0 00 00 00 00 0000_0000 EC 24 1F 58
32-bits 32-bits
Operandos en Registros y Memoria (12)
Acceso a la Memoria en ARM
Revisemos el siguiente código:
uint32_t memory[n] = {0xEC241F58, 0x1E3A47BB, ...};
memory[2] = b // R1 = b
En ASM: Registro Datos Dir. Words Datos
. . . .
STR R1,[R0,#8] . . . .
. . . .
R2 XX XX XX XX 0000_0008 75 D9 1A 2E
R1 8E 21 A3 5E 0000_0004 1E 3A 47 BB
R0 00 00 00 00 0000_0000 EC 24 1F 58
32-bits 32-bits
Operandos en Registros y Memoria (13)
Acceso a la Memoria en ARM
Revisemos el siguiente código:
uint32_t memory[n] = {0xEC241F58, 0x1E3A47BB, ...};
memory[2] = b // R1 = b
En ASM: Registro Datos Dir. Words Datos
. . . .
STR R1,[R0,#8] . . . .
. . . .
R2 XX XX XX XX 0000_0008 8E 21 A3 5E
R1 8E 21 A3 5E 0000_0004 1E 3A 47 BB
R0 00 00 00 00 0000_0000 EC 24 1F 58
32-bits 32-bits
Sección 2.1: Lenguaje Ensamblador - ARM

Muchas gracias por la atención prestada

Electrónica Digital 2 – 2024-1


Docente: Luis Germán García M.

También podría gustarte