Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen— En esta primera entrega del proyecto estos programas fue llamada ensamblador, este
realizaremos una aproximación practica mediante un programa traduce la versión simbólica de una
código de cómo podemos saber si un número es primo instrucción a su versión binaria [1].
o no, donde explicaremos paso por paso el Años después por facilidad para programar y por
funcionamiento del algoritmo e indagaremos por qué
productividad se inventa el programa de alto nivel
a medida que el número va creciendo es más
complicado saber si es primo.
[1].
for(I = 1; I <= numero; I++) Los registros son parte fundamental en lo que
{ concierne a la memoria, puesto que sin ellos el
if((numero % I) == 0) sistema no podría almacenar datos de una manera
{ rápida, la función de los registros se basa en ser
contador++; lugares de memoria electrónica temporal con fácil
} y constante acceso desde una computadora, esto se
} debe a la ubicación que tienen dentro de los
if(contador <= 2) microprocesadores.
{
System.out.println("El número es primo"); Un registro en operación tiene una capacidad de
} memoria de 8,16,32 o 64 bits, depende
else directamente de la arquitectura del
{ microprocesador
System.out.println("El número no es
primo");
}
}
}
.file "primo.c"
.intel_syntax noprefix
.text
.def ___main; .scl 2;
.type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "\12Numero.....: \0"
LC1:
.ascii " %d\0"
Figura .1 (fuente elaboración propia) LC2:
.ascii "\12El numero %d es primo\0"
• Inmediato LC3:
.ascii "\12El numero %d no es primo\0"
El operando se proporciona en el byte o bytes que .text
siguen al código de operación de la instrucción .globl _main
.def _main; .scl 2; .type
32; .endef
_main:
LFB17:
.cfi_startproc
push ebp
Figura .2 (fuente elaboración propia) .cfi_def_cfa_offset 8
• Directo .cfi_offset 5, -8
mov ebp, esp
.cfi_def_cfa_register 5 L2:
and esp, -16 mov eax, DWORD PTR [esp+20]
sub esp, 32 cmp eax, -1
call ___main jne L8
mov DWORD PTR [esp+20], 0 mov eax, 0
mov DWORD PTR [esp+28], 0 leave
mov DWORD PTR [esp+24], 0 .cfi_restore 5
L8: .cfi_def_cfa 4, 4
mov DWORD PTR [esp], OFFSET ret
FLAT:LC0 .cfi_endproc
call _printf LFE17:
lea eax, [esp+20] .ident "GCC: (MinGW.org GCC-8.2.0-
mov DWORD PTR [esp+4], eax 3) 8.2.0"
mov DWORD PTR [esp], OFFSET .def _printf; .scl 2; .type
FLAT:LC1 32; .endef
call _scanf .def _scanf; .scl 2; .type
mov eax, DWORD PTR [esp+20] 32; .endef
cmp eax, -1
je L2
mov eax, DWORD PTR [esp+20]
test eax, eax
jle L2
mov DWORD PTR [esp+24], 0
mov DWORD PTR [esp+28], 2
jmp L3 Figura .4 (fuente elaboración propia)
L6:
mov eax, DWORD PTR [esp+20]
cdq
idiv DWORD PTR [esp+28]
mov eax, edx
test eax, eax
jne L4
mov DWORD PTR [esp+24], 1
L4:
add DWORD PTR [esp+28], 1
L3:
mov eax, DWORD PTR [esp+20]
cmp DWORD PTR [esp+28], eax
jge L5
cmp DWORD PTR [esp+24], 1
jne L6
L5:
cmp DWORD PTR [esp+24], 0
jne L7
mov eax, DWORD PTR [esp+20] Figura .5 (fuente elaboración propia)
mov DWORD PTR [esp+4], eax
mov DWORD PTR [esp], OFFSET
FLAT:LC2 5.5. Algoritmo de bajo nivel
call _printf 0 Cargar r1,0
jmp L2 1 Cargar r2
L7:
mov eax, DWORD PTR [esp+20] 2 Cargar r3,1
mov DWORD PTR [esp+4], eax 3 Ciclo brmay r3,r2,fin
mov DWORD PTR [esp], OFFSET 4 Ciclo brmay r3,r2,fin
FLAT:LC3
call _printf 5 Sumar r1,r1,r3
6 Saltar Ciclo 111001 39
7 Ciclo brmay r3,2,fin 1111111 7F
8 Saltar Ciclo 11000010 C2
9 Fin 10000000 80
11111011 FB
5.6. Listado binario a hexadecimal del
10011100 9C
programa
1110100 74
BINARIO HEXADECIMAL 1000 8
10110100 B4 10011101 9D
1 1 10001000 88
11001101 CD 101110 2E
100001 21 1010101 55
10001010 8A 1110 0E
11111000 F8 1010110 56
11011000 D8 110000 30
10 2 10110000 B0
11011111 DF 1010 0A
1110101 75 10001001 89
11 3 10110101 B5
11101001 E9 1110100 74
11100011 E3 11110 1E
0 0 111011 3B
10111011 BB 11101011 EB
10111011 B8 11101010 EA
110 6 11110111 F7
10110111 B7 11110011 F3
111 7 1110100 74
10111010 BA Tabla .2 (fuente elaboración propia)
10111001 B9 5.7. Unidad Aritmética Lógica (ALU)
1001111 4F
11000 18 Teniendo en cuenta el algoritmo de alto nivel se
manejarán solo con 3 operaciones básicas (Suma,
1010111 57 Resta y División) y parametrizadas en modo de
10000 10 entrada de 3 bits llamado código de operación para
10110110 B6 realizar la operación entre los 2 valores de entrada.
10111010 BA
101 5 Código
Operación operación Decimal
11101000 E8 en binario
11111101 FD
Suma 0 0
1111100 7C
Resta 1 1
11000111 C7
División 10 2
11111101 F9
Tabla .3 (fuente elaboración propia)
Para la fase de registros, se decidió hacer varios
Los datos de entrada son 2 de 4 bits que sectores donde se pueda elegir qué resultado
representarán los números a operar, estas serán guardar, cuando el contador de cada registro este en
identificadas con valor 1 y valor 2 Por otro lado una 0, estará desactivado, y cuando este en 1 estara
salida de 5 bits para el resultado activado. Cuando se quiera guardar un registro del
resultado el contador deberá estar en 1 y se deberá
presionar el botón para cargar el resultado como se
ve en la siguiente imagen:
VII. REFERENCIAS
VIII. FIGURAS