Professional Documents
Culture Documents
ESTRUCTURA DE COMPUTADORS
Repertori d’Instruccions
CURS 2023-24
Escola d’Enginyeria ESTRUCTURA DE COMPUTADORS
Enginyeria Informàtica PROBLEMES
REPERTORI D’INSTRUCCIONS
MOV R1, 1
CMP R2, 0
JE continue1
MOV R1,0
Continue1: MOV R7, 1
CMP R4, R5
JLE continue2
MOV R7, 0
Continue2: XOR R1, R7
Escola d’Enginyeria ESTRUCTURA DE COMPUTADORS
Enginyeria Informàtica PROBLEMES
REPERTORI D’INSTRUCCIONS
Problema 12.
L’objectiu d’aquest problema consisteix en traduir fragments de codi en C a
llenguatge assemblador.
En els codis escrits en C no declarem les variables que es fan servir. Suposem
que aquestes variables ja les tenim. Tampoc heu de reservar espai en memòria
ni inicialitzar les variables. L’adreça simbòlica de memòria que cal fer servir per
accedir a una ha de coincidir amb el nom de la variable en C.
Traduïu a llenguatge assemblador cadascun dels següents fragments de codi.
OPCIÓ 1
MOV [N],6 ; N
MOV [sum],0 ; valor de la variable sum
MOV [partial_sum],0 ; valor de la varible
partial_sum
MOV [i],0 ; valor d ela variable i
MOV R1,[N]
SAL R1,2
MOV R2,[i]
MOV R3,[partial_sum]
while:
CMP R2,R1 ; quan R2 arribi al valor de R1
haurem acabat
JGE end
ADD R3,[V+R2]
MOV [partial_sum],R3
ADD R2,4
JMP while ; repetim el procés.
end:
MOV [sum],R3
Escola d’Enginyeria ESTRUCTURA DE COMPUTADORS
Enginyeria Informàtica PROBLEMES
REPERTORI D’INSTRUCCIONS
OPCIÓ 2
MOV R1,6
SAL R1,2
MOV R2,0
MOV R3,0
while:
CMP R2,R1 ; quan R2 arribi al valor de R1
haurem acabat
JGE end
ADD R3,[V+R2]
ADD R2,4
JMP while ; repetim el procés.
end:
MOV [sum], R3
VERSIÓ RISC-V
ADDI x7,x0,6
SLLI x7,x7,2
ADDI x8,x0,0
ADDI x9,x0,0
while:
BEQ x7,x8,end ; quan R2 arribi al valor de R1
haurem acabat
LW x10,V(x8)
ADD x9,x9,x10
ADDI x8,x8,4
JAL x0,while ; repetim el procés.
end:
SW x9,sum(x0)
Escola d’Enginyeria ESTRUCTURA DE COMPUTADORS
Enginyeria Informàtica PROBLEMES
REPERTORI D’INSTRUCCIONS
MOV R1, 10
SAL R1, 2
MOV R2, 0
MOV [FIB+R2], 1
MOV R3, 4
MOV [FIB+R3], 1
MOV R4, 8
for: CMP R4, R1
JGE fi
MOV R5, [FIB+R2]
ADD R5, [FIB+R3]
MOV [FIB+R4], R5
ADD R2, 4
ADD R3, 4
ADD R4, 4
JMP for
fi:
Escola d’Enginyeria ESTRUCTURA DE COMPUTADORS
Enginyeria Informàtica PROBLEMES
REPERTORI D’INSTRUCCIONS
Problema 13.
POP EDI
MOV EAX, _A[EBX]_
PUSH ESI
MOV ESI, ECX
CALL Calc_Index
POP ESI
MOV _EDX_, B[EBX]
MUL EDX
MOV EBX, [Posi]
ADD C[EBX], _EAX_
INC ECX
JMP BUCLE_k
FI_k: INC EDI
JMP BUCLE_j
FI_j: INC ESI
JMP BUCLE_i
FI_i: END
PROBLEMA 14.
Instruccions:
LDAA n Carregar a l’Acumulador (A) el contingut de la posició de memòria n
LDX n Carregar al registre índex X el contingut de la posició de memòria n
STAA n Emmagatzemar el contingut de Acumulador (A) a la posició de memòria n
STX n Emmagatzemar el contingut del registre índex X a la posició de memòria n
ADDA n Sumar el contingut de l’Acumulador (A) amb el contingut de la posició de
memòria i emmagatzemar el resultat al registre acumulador.
JSR n Salt a subrutina
RET Retorn de subrutina
Modes d’adreçament:
#n : immediat n : directe
n,X : indexat sobre X [n]: indirecte
[n,X]: indexat sobre X, indirecte [n],X : indirecte,indexat sobre X
PROBLEMA 15.
ARQUITECTURES
6502 x86 RISC-V
LDA M MOV Ri, M MOV M, Rj LW rd,m(rs1)
STA M ADD Ri, Rj ADD Ri, M SW rs2,m(rs1)
ADD M SUB Ri, Rj SUB Ri, M ADD rd, rs1, rs2
Repertori SUB M (Ri=Ri-Rj) (Ri=Ri-M) SUB rd, rs1, rs2
d’Instruccions (Ac=Ac-M) MUL Ri, Rj MUL Ri, M (rd=rs1-rs2)
MUL M DIV Ri, Rj DIV Ri, M MUL rd, rs1, rs2
DIV M (Ri=Ri/Rj) (Ri=Ri/M) DIV rd, rs1, rs2
(Ac=Ac/M) (rd=rs1/rs2)
• En tots els casos, l’operand de més a l’esquerra (el primer operand) és
l’operand destí on s’emmagatzema el resultat).
• Les instruccions Load i Store transfereixen una dada entre memòria i un
registre. Per a la màquina de 1 adreça el registre destí és el registre
acumulador i per a les màquines de 2 i 3 adreces és qualsevol registre
del processador.
• La màquina de 1 adreça té un sol registre disponible, anomenat
acumulador, que es utilitzat per les instruccions operatives de forma
implícita. El codi d’operació es representa amb 8 bits i les adreces de
memòria amb 24 bits.
• La màquina de 2 adreces disposa de 32 registres. El codi d’operació es
representa amb 7 bits i les adreces de memòria amb 20 bits.
• La màquina de 3 adreces té 64 registres, i pot especificar fins a 3
operands de tipus registre per a les instruccions operatives, i un registre
i una adreça de memòria per a les de LOAD/STORE. El codi de operació
es representa amb 6 bits i les adreces de memòria amb 20 bits.
Per a les tres arquitectures:
Arquitectura 6502
Arquitectura x86
Op Ri, Rj 7+5+5= 17
COP (7) + Reg (5) + Reg (5)
24
Arquitectura RISC-V
Op Ri,Rj, Rk COP (6) + Reg (6) + Reg (6) + Reg (6) 6+6+6+6= 24
Màquina 6502
Instrucció N. bytes Accessos Accessos Temps total
instrucció (inst.) (dades)
1 LOAD E 4 2 2 20+80 = 100ns
2 SUB D 4 2 2 20+80 = 100ns
3 STORE A 4 2 2 20+80 = 100ns
4 LOAD B 4 2 2 20+80 = 100ns
5 SUB C 4 2 2 20+80 = 100ns
6 MUL E 4 2 2 40+80 = 120ns
7 DIV A 4 2 2 60+80 = 140ns
8 STORE A 4 2 2 20+80 = 100ns
… Total: 860ns
Màquina x86
Instrucció N. bytes Accessos Accessos Temps total
instrucció (inst.) (dades)
1 MOVE R1,E 4 2 2 20+80 = 100ns
2 SUBm R1,D 4 2 2 20+80 = 100ns
3 MOVE R2,B 4 2 2 20+80 = 100ns
4 SUBm R2,C 4 2 2 20+80 = 100ns
5 MULm R2,E 4 2 2 40+80 = 120ns
6 DIV R2,R1 3 2 0 60+40 = 100ns
7 MOVE A, R2 4 2 2 20+80 = 100ns
… Total: 720ns
Màquina RISC-V
Instrucció N. bytes Accessos Accessos Temps total
instrucció (inst.) (dades)
1 LOAD R1, E 4 2 2 20+80 = 100ns
2 LOAD R2, D 4 2 2 20+80 = 100ns
3 SUB R3,R1,R2 3 2 0 20+40 = 60ns
4 LOAD R4, B 4 2 2 20+80 = 100ns
5 LOAD R5, C 4 2 2 20+80 = 100ns
6 SUB R6,R4,R5 3 2 0 20+ 40 = 60ns
7 MUL R6,R1,R6 3 2 0 40+40 = 80ns
8 DIV R6,R6,R3 3 2 0 60+40 = 100ns
9 STORE A, R6 4 2 2 20+80 = 100ns
… Total: 800ns