forked from erickwb/trabralho_arquitetura_2021_2
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunçoes_basicas.c
67 lines (53 loc) · 1.61 KB
/
funçoes_basicas.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <stdio.h>
#include <stdlib.h>
#include "header.h"
/*
void execult(char buffer1 [], char buffer2[], int registradores[], char CPSR[]){
ConvertChar(buffer1);
Decodifica(buffer1, registradores, CPSR); // 4 primeiros bytes
//
ConvertChar(buffer2);
Decodifica(buffer2, registradores, CPSR); // 4 primeiros bytes
}
*/
void ConvertChar(char vet[]){
for (int i = 0; i < 4; i++){
//caso seja de 0 a 9
if((vet[i] >= '0') && (vet[i] <= '9')){
vet[i] = vet[i] - '0'; //operacao para trasforma de char p/ int
}
//caso seja de a - f
if((vet[i] >= 'a') && (vet[i] <= 'f')){
vet[i] = vet[i] - 'W'; //operacao para trasforma de char p/ int
}
else if (vet[i] > 'f'){ //corrigir tal caso
printf("O digito invalido, digite um digito em hexadecimal\n");
}
}
}
//parametros: vetor de char, arquivo de destino
void Decodifica(char vet[], int registradores[], char CPSR[]){
//primeiro digito = 4bits primeiros da instruçao thumb
switch (vet[0]){
case 0:
if((vet[1] >> 3) == 0){
//caso LSL
LSL(vet, registradores, CPSR);
}
if((vet[1] >> 3) == 1){
//caso LSR
LSR(vet, registradores, CPSR);
}
case 1:
//instruçao ASR
if((vet[1] >> 3) == 0){
ASR(vet, registradores, CPSR);
}
//instruçoes ADD / SUB com LM
if ((vet[1] >> 1) == 4 ){
//instruçao ADD com LM
ADD_com_LM(vet, registradores, CPSR);
}
break;
}
}