-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.c
282 lines (221 loc) · 9.22 KB
/
test.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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <curses.h>
#include "mostrar.h"
#include "ALU.h"
#include "desplazamiento.h"
#include "branch.h"
#define N 0
#define Z 1
#define C 2
#define V 3
#define LR 14
#define PC 15
int main()
{
int op;
uint32_t registro[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
char banderas[4];
do{
system("cls");
printf("seleccione la opcion 1 para mostrar los valores de los registros\n");
printf("seleccione la opcion 2 para sumar registros \n");
printf("seleccione la opcion 3 para multiplicacion logica (AND) de registros \n");
printf("seleccione la opcion 4 para Eor a nivel de bits \n");
printf("seleccione la opcion 5 para desplazar de un registro a otro \n");
printf("seleccione la opcion 6 para suma logica (OR) de registro\n");
printf("seleccione la opcion 7 para ADN sin almacenar, solo modifica banderas \n");
printf("seleccione la opcion 8 para comparar (SUB sin almacenar), solo modifica banderas\n");
printf("seleccione la opcion 9 Multiplicacion de registros, solo se alacenan 32 bits menos significativos\n");
printf("seleccione la opcion 10 AND sin almacenacmiento, solo modifica banderas\n");
printf("seleccione la opcion 11 para LSL desplazamiento logico a la izquierda \n");
printf("seleccione la opcion 12 para LSR desplazamiento logico a la derecha \n");
printf("seleccione la opcion 13 para ROR rotacion a la derecha \n");
printf("seleccione la opcion 14 para ASR desplazamiento aritmetico a la derecha \n");
printf("seleccione la opcion 15 para BIC Realiza una AND de un registro con otro negado \n");
printf("seleccione la opcion 16 para MUN guarda en un registro la negacion de otro\n");
printf("seleccione la opcion 17 para RSB niega un valor de registro\n");
printf("seleccione la opcion 18 para NOP da un retardo de un ciclo de reloj (no hace nada) \n");
printf("seleccione la opcion 19 para REV toma grupos de 8 bits y los desplaza \n");
printf("seleccione la opcion 20 para REVIG toma grupos de 16 bits y los agrupa en grupos de dos bytes\n");
printf("seleccione la opcion 21 para REVSH extencion con signo\n\n");
scanf("%d",&op);
system("cls");
switch(op){
case 1:
//mostrar_valores(registro);
break;
case 2:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[2]);
ADD(registro,®istro[0],registro[1],registro[2],&banderas[0]);
printf("%d valor del resultado \n",registro[0]);
printf("%d valor del resultado bandera n \n",banderas[N]);
printf("%d valor del resultado bandera z \n",banderas[Z]);
printf("%d valor del resultado bandera c \n",banderas[C]);
printf("%d valor del resultado bandera v \n",banderas[V]);
break;
case 3:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[2]);
AND(registro,®istro[0],registro[1],registro[2],&banderas[0]);
printf("%d valor del resultado \n",registro[0]);
printf("%d valor del resultado bandera n \n",banderas[N]);
printf("%d valor del resultado bandera z \n",banderas[Z]);
printf("%d valor del resultado bandera c \n",banderas[C]);
printf("%d valor del resultado bandera v \n",banderas[V]);
break;
case 4:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[2]);
EOR(registro,®istro[0],registro[1],registro[2],&banderas[0]);
printf("%d valor del resultado \n",registro[0]);
printf("%d valor del resultado bandera n \n",banderas[N]);
printf("%d valor del resultado bandera z \n",banderas[Z]);
printf("%d valor del resultado bandera c \n",banderas[C]);
printf("%d valor del resultado bandera v \n",banderas[V]);
break;
case 5:
printf("ingrese el valor del registro origen:\n");
scanf("%d",®istro[1]);
MOV(registro,®istro[0],registro[1],banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 7:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[2]);
CMN(registro,registro[1],registro[2],&banderas[0]);
printf("%d valor del resultado \n",registro[0]);
printf("%d valor del resultado bandera n \n",banderas[N]);
printf("%d valor del resultado bandera z \n",banderas[Z]);
printf("%d valor del resultado bandera c \n",banderas[C]);
printf("%d valor del resultado bandera v \n",banderas[V]);
break;
case 8:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[2]);
CMP(registro,registro[1],registro[2],&banderas[0]);
printf("%d valor del resultado \n",registro[0]);
printf("%d valor del resultado bandera n \n",banderas[N]);
printf("%d valor del resultado bandera z \n",banderas[Z]);
printf("%d valor del resultado bandera c \n",banderas[C]);
printf("%d valor del resultado bandera v \n",banderas[V]);
break;
case 9:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[2]);
MUL(registro,®istro[0],registro[1],registro[2],&banderas[0]);
printf("%d valor del resultado \n",registro[0]);
printf("%d valor del resultado bandera n \n",banderas[N]);
printf("%d valor del resultado bandera z \n",banderas[Z]);
printf("%d valor del resultado bandera c \n",banderas[C]);
printf("%d valor del resultado bandera v \n",banderas[V]);
break;
case 10:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[2]);
TST(registro,registro[1],registro[2],&banderas[0]);
printf("%d valor del resultado \n",registro[0]);
printf("%d valor del resultado bandera n \n",banderas[N]);
printf("%d valor del resultado bandera z \n",banderas[Z]);
printf("%d valor del resultado bandera c \n",banderas[C]);
printf("%d valor del resultado bandera v \n",banderas[V]);
break;
case 11:
printf("ingrese el valor del registro:\n");
scanf("%d",®istro[1]);
printf("ingrese el numero de desplazamientos:\n");
scanf("%d",®istro[2]);
LSL(registro,®istro[0],registro[1],registro[2],banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 12:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese elnumero de desplazamientos:\n");
scanf("%d",®istro[2]);
LSR(registro,®istro[0],registro[1],registro[2],banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 13:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese elnumero de desplazamientos:\n");
scanf("%d",®istro[2]);
ROR(registro,®istro[0],registro[1],registro[2],banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 14:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[1]);
printf("ingrese elnumero de desplazamientos:\n");
scanf("%d",®istro[2]);
ASR(registro,®istro[0],registro[1],registro[2],banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 15:
printf("ingrese el valor del primer registro:\n");
scanf("%d",®istro[0]);
printf("ingrese el valor del segundo registro:\n");
scanf("%d",®istro[1]);
BIC(registro,®istro[0],registro[1],banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 16:
printf("ingrese un valor del registro origen\n");
scanf("%d",®istro[1]);
MVN(registro,®istro[0],registro[1],banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 17:
printf("ingrese un valor de registro\n");
scanf("%d",®istro[1]);
RSB(registro,®istro[0],registro[1],0,banderas);
printf("%d valor del resultado \n",registro[0]);
break;
case 18:
NOP(registro);
break;
case 19:
printf("ingrese un valor de registro \n");
scanf("%d",®istro[0]);
REV(registro,®istro[0]);
printf("%d valor del resultado \n",registro[0]);
break;
case 20:
printf("ingrese un valor de registro \n");
scanf("%d",®istro[0]);
REVIG(registro,®istro[0]);
printf("%d valor del resultado \n",registro[0]);
break;
case 21:
printf("ingrese un valor de registro \n");
scanf("%d",®istro[0]);
REVSH(registro,®istro[0]);
printf("%d valor del resultado \n",registro[0]);
break;
default:
printf("Opcion invalida\n\n");
break;
}
printf("\nDesea realizar otra operacion?\n<1>-si\n<0>-no\n");
scanf("%d",&op);
system("cls");
}while(op);
return 0;
}