jueves, 23 de mayo de 2024

4.3 Lenguaje Máquina

 

4.3 Lenguaje Máquina




Es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. El lenguaje máquina solo es entendible por las computadoras. Se basa en una lógica binaria de 0 y 1, generalmente implementada por mecanismos eléctricos. En general el lenguaje maquina es difícil de entender para los humanos por este motivo hacemos uso de lenguajes más parecidos a los lenguajes naturales.
Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar. El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras. Una instrucción en lenguaje máquina puede representarse   de   la   siguiente   forma:  011011001010010011110110.   Esta   secuencia   es fácilmente ejecutada por la computadora, pero es de difícil interpretación, siendo aún más difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma.
Esta   dificultad   hace   que   los   errores   sean   frecuentes   y   la   corrección   de   los   mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas.

Características:

El lenguaje máquina realiza un conjunto de operaciones predeterminadas llamadas micro operaciones. Las micro operaciones sólo realizan operaciones del tipo aritmética (+,- ,*,/), lógicas (AND, OR, NOT) y de control (secuencial, de control y repetitiva). El lenguaje maquina es dependiente del tipo de arquitectura. Así un programa máquina para una arquitectura Intel x86 no sé ejecutara en una arquitectura Power PC de IBM (al menos de manera nativa).

Algunos microprocesadores implementan mas funcionalidades llamado CISC, pero son más lentos que los RISC ya que estos tienen registros más grandes.

Ventajas

·                     Mayor adaptación al equipo.
·                     Máxima velocidad con mínimo uso de memoria.


Desventajas

·                     Imposibilidad de escribir código independiente de la máquina.
·                     Mayor dificultad en la programación y en la comprensión de los programas.
·                     El programador debe conocer más de un centenar de instrucciones.
·                     Es necesario conocer en detalle la arquitectura de la máquina.

lunes, 20 de mayo de 2024

CODIGO DE EMU8086

 .model small

.stack 100h


.data

    msg1 db 10,13,"1.- suma",0DH,0AH,"$"

    msg2 db "2.- resta",0DH,0AH,"$"

    msg3 db "3.- multiplicacion",0DH,0AH,"$"

    msg4 db "4.- division",0DH,0AH,"$"

    msg5 db "5.- salir del menu",0DH,0AH,"$"

    msg7 db "seleccione una opcion del 1 al 6 en el menu ",0DH,0AH,"$" 

    msj1 db "Ingrese el primer numero", 0DH, 0AH, "$"        

   msj2 db "Ingrese el segundo numero", 0DH, 0AH, "$"

   msj3 db "Resultado", 0DH, 0AH, "$"

   num1 db ?

   num2 db ?

   resultado db ?

    msjjj1 db "Digite el primer numero : ", 0DH, 0AH,"$"

    msjjj2 db "Dgite el segundo numero : ", 0DH, 0AH,"$"

    fina db "Resultado es:", 0DH, 0AH,"$"

    num11 db ?

    num22 db ?

    resa db ? 

    saltos db "", 0DH, 0AH,"$" 

   msgg1 db "Ingresa el primer numero: ", 0DH, 0AH, "$" 

msgg2 db "Ingresa el segundo numero: ", 0DH, 0AH, "$" 

msgg3 db "La suma de los numeros es: $" 

  msjj1 db 10, 13, "Ingresa el primer numero: $"

    msjj2 db 10, 13, "Ingresa el segundo numero: $" 

    msjj3 db 10, 13, "El resultado es: $"

    msjj4 db 10, 13, "", "$"

newline db 0DH, 0AH, "$"

   spa db "", 0DH, 0AH, "$"

    bienvenida db 10,13,"ingrese la suma",0DH,0AH,"$"

    nombre db 10,13,"ingrese la resta",0DH,0AH,"$"

    comida db 10,13,"ingrese la multiplicacion",0DH,0AH,"$"

    pelicula db 10,13,"ingrese la division",0DH,0AH,"$"

    final db 10,13,"---PROGRAMA FINALIZADO---"

    angel db 10,13,"Angel Yovani Cancino Ruiz, 21700162",0DH,0AH,"$" 

    delmar db 10,13,"Delmar Eli Martinez Martinez, 21700207",0DH,0AH,"$" 

    luis db 10,13,"Luis Miguel Marroquin Simon, 21700206",0DH,0AH,"$"

.code


programa:

    mov ax, @data 

    mov ds, ax

    jmp mostrarmenu

      

  mostrarmenu:

  mov dx, offset msg1

  call imprimir

  mov dx, offset msg2

  call imprimir

  mov dx, offset msg3 

  call imprimir

  mov dx, offset msg4

  call imprimir

  mov dx, offset msg5

  call imprimir

  mov dx, offset msg7

  call imprimir 

  mov ah,01h

  int 21h

  mov dl,al

  

  cmp dl,31h

  je opcion1 

  

  cmp dl,32h 

  je opcion2 

  

  cmp dl,33h

  je opcion3

  

  cmp dl,34h

  je opcion4

  

  cmp dl,35h

  je opcion5

  

 

  jnp mostrarmenu

    

    

    opcion1:

    mov dx, offset bienvenida

    call imprimir  

    

     ; Solicitar primer número 

    mov dx, offset msgg1 

    call imprimir 

    

    mov ah, 01h 

    int 21h 

    sub al, 30h ; Convertir de ASCII a valor numérico 

    mov bl, al ; Guardar el primer numero   

    

    ; Solicitar segundo número 

    mov dx, offset msgg2 

    call imprimir 

    mov ah, 01h 

    int 21h 

    sub al, 30h ; Convertir de ASCII a valor numérico 

    add bl, al ; Sumar el segundo número al primero (bl) 

    

    ; Mostrar la suma 

    mov dx, offset msgg3 

    call imprimir 

    mov dl, bl ; El resultado esta en bl 

    add dl, 30h ; Convertir de valor numérico a ASCII 

    mov ah, 02h 

    int 21h 

    

    mov dx, offset newline 

    call imprimir

                  

  jmp mostrarmenu                 

    ; Finalizar el programa 

    mov ax, 4c00h 

    int 21h    

   

    

    opcion2:

    mov dx, offset nombre

    call imprimir 

    ; Solicitar primer numero

    mov dx, offset msjj1

    call imprimir

    mov ah, 01h

    int 21h

    sub al, 30h  ; Convertir de ASCII a valor numerico

    mov bl, al   ; Guardar el primer numero 

    

    ;Salto de linea

    mov dx, offset msjj4

     call imprimir

    

    

    ; Solicitar segundo numero

    mov dx, offset msjj2

    call imprimir

    mov ah, 01h

    int 21h

    sub al, 30h  ; Convertir de ASCII a valor numerico

    sub bl, al   ; Sumar el segundo numero al primero (bl)

    

    ; Mostrar la resta

    mov dx, offset msjj4

    call imprimir

    mov dx, offset msjj3

    call imprimir

    mov dl, bl   ; El resultado esta en bl

    add dl, 30h  ; Convertir de valor numerico a ASCII

    mov ah, 02h

    int 21h

    

    mov dx, offset newline

    call imprimir

    jmp mostrarmenu

    

    opcion3:

           mov dx, offset saltos

    call imprimir

    mov dx, offset msjjj1

    call imprimir

    

    mov ah, 1h

    int 21h

    sub al, 30h

    mov num11, al

    

    mov dx, offset saltos

    call imprimir

    

    mov dx, offset msjjj2

    call imprimir

    

    mov ah, 01h

    int 21h

    sub al, 30h

    mov num22, al

    

    mov al, num11

    mov bl, num22

    mul bl

    mov resa, al

    add resa, 30h

    

     

    mov dx, offset saltos

    call imprimir

     

    mov dx, offset fina

    call imprimir 

    mov dl,resa

    mov ah, 2h

    mov dl, resa

    int 21h

        jmp mostrarmenu

     

    opcion4:

    mov dx, offset pelicula

    call imprimir 

     mov dx, offset msj1

    call imprimir

    

    mov ah, 01h

    int 21h

    sub al, 30h

    mov num1, al

    

    mov dx, offset spa

    call imprimir

    

    mov dx, offset msj2

    call imprimir

    

    mov ah, 01h

    int 21h

    sub al, 30h

    mov num2, al

    

    mov al, num1

    mov bl, num2

    xor ah, ah

    div bl

    mov resultado, al

    add resultado, 30h

    

    mov dx, offset spa

    call imprimir

    

    mov dx, offset msj3

    call imprimir

    

    mov dl, resultado

    mov ah, 2h

    int 21h 

    jmp mostrarmenu

     

     

    opcion5:

    mov dx, offset angel

    call imprimir       

    mov dx, offset delmar

    call imprimir        

     mov dx, offset luis

    call imprimir        

    

    call finalizar

    

    


    imprimir: 

    mov ah, 09h

    int 21h

    ret

    

    finalizar:

    mov ax, 4ch

    int 21h  

end programa

lunes, 6 de mayo de 2024

Resumen del video

 En el video no dise "Cómo funciona la memoria de la computadora" de Kanawat Senanan explica los diferentes tipos de memoria de la computadora, cómo se almacenan y acceden a los datos y cómo la memoria puede degradarse con el tiempo. Cubre mucha información en poco tiempo, lo que lo convierte en un gran recurso para cualquiera que quiera aprender más sobre cómo funciona la memoria de una computadora.


Denise R Quivu Revisor: Sebastian Betti En muchos sentidos, nuestros recuerdos nos representan, nos ayuda a recordar nuestro pasado, aprender y mantener habilidades,y planificar el futuro.Y para la computadora que actúa como una extensión de nosotros mismos, la memoria juega el mismo papel, sea que se trata de una película de dos horas, un archivo de texto de dos palabras,o las instrucciones para ponerla en marcha; y toda su memoria tiene como unidades básicas las denominadas bits o dígitos binarios. Cada uno de estos se almacena en una celda de memoria cuyo estado puede variar entre dos valores posibles, 0 y 1.Los archivos y los programas contienen millones de estos bits, que están procesados dentro de la unidad de procesamiento central, o CPU, que actúa como el cerebro de la computadora.Y conforme crece exponencialmente la cantidad de bits que procesan, los diseñadores de computadoras intentan constantemente solucionar el problema del tamaño, costo y velocidad.Al igual que nosotros, las computadoras tienen memoria a corto plazo para las tareas inmediatas, y memoria a largo plazo para el almacenamiento permanente.Cuando se ejecuta un programa, su sistema operativo asigna un espacio dentro de la memoria a corto plazo para las dichas instruccionesPor ejemplo, al pulsar una tecla en un procesador de texto, la CPU accederá a uno de estos lugares para recuperar los bits de datos.También podría modificarlos o crear otros nuevos.El tiempo necesario para hacerlo se conoce como la latencia de la memoria.Y debido a que las instrucciones de cada programa deben ser procesadas rápidamente y de forma continua, se puede acceder a cualquier espacio dentro de la memoria a corto plazo en cualquier orden,y de ahí el nombre de memoria de acceso aleatorio, o RAM.El tipo más común de memoria RAM es memoria RAM dinámica, o DRAM.Allí, cada celda consta de un pequeño transistor y un condensador que almacenan cargas eléctricas, representada con un 0 cuando no está cargada o un 1 cuando lo está.Allí, cada celda consta de un pequeño transistor y un condensador que almacenan cargas eléctricas, representada con un 0 cuando no está cargada o un 1 cuando lo está.Dicha memoria se llama dinámica porque mantiene una carga brevemente antes de perderla, y necesita recargarse periódicamente para retener datos.

4.1 registros de la computadora






 ¿Qué son?


Los registros son la memoria principal de la computadora. Existen diversos registros de propósito general y otros de uso exclusivo. Algunos registros de propósito general son utilizados para cierto tipo de funciones. Existen registros acumuladores, puntero de instrucción, de pila, etc.

Los registros son espacios físicos dentro del microprocesador con capacidad de 4 bits hasta 64 bits dependiendo del microprocesador que se emplee.

¿Quiénes lo utilizan?


Antes de nada, para el desarrollo de esta parte hablaremos indistintamente de registros de activación o de marcos de pila. Esto se debe a que en la documentación encontrada sobre el manejo de los registros ebp y esp se hace mención a dicho concepto de marco de   pila.   Puesto   que   el   lenguaje   permite   recursividad,   los   registros   de   activación   se asignan dinámica mente. 

Distribución

La UCP o CPU tiene 14 registros internos, cada uno de ellos de 16 bits (una palabra). Los bits están enumerados de derecha a izquierda, de tal modo que el bit menos significativo es el bit 0.
Los registros se pueden clasificar de la siguiente forma: 

Registros de datos:

AX: Registro acumulador. Es el principal empleado en las operaciones aritméticas.
BX: Registro base. Se usa para indicar un desplazamiento.
CX: Registro contador. Se usa como contador en los bucles.
DX: Registro de datos.

Estos registros son de uso general y también pueden ser utilizados como registros de 8 bits, para utilizarlos como tales es necesario referirse a ellos como por ejemplo: AH y AL, que son los bytes alto (high) y bajo (low) del registro AX. Esta nomenclatura es aplicable también a los registros BX, CX y DX. 

Registros de segmentos: 

CS: Registro de segmento de código. Contiene la dirección de las instrucciones del programa. 
DS: Registro segmento de datos. Contiene la dirección del área de memoria donde se encuentran los datos del programa.
SS: Registro segmento de pila. Contiene la dirección del segmento de pila. La pila es un espacio de memoria temporal que se usa para almacenar valores de 16 bits (palabras).
ES: Registro segmento extra. Contiene la dirección del segmento extra. Se trata de un segmento de datos adicional que se utiliza para superar la limitación de los 64Kb del segmento de datos y para hacer transferencias de datos entre segmentos.

Registros punteros de pila:

SP: Puntero de la pila. Contiene la dirección relativa al segmento de la pila.
BP: Puntero base. Se utiliza para fijar el puntero de pila y así poder acceder a los elementos de la pila.

Registros índices:

 SI: Índice fuente.
 DI: Índice destino.


¿Cuales su aplicación en la generación de códigos?

1. usar el registro de y si está en un registro que no tiene otra variable, y además y no
está viva ni tiene uso posterior. Si no:
2. usar un registro vacío si hay. Si no:
3. usar un registro ocupado si op requiere que x esté en un registro o si x tiene uso
Posterior. Actualizar el descriptor de registro. Si no:
4. usar la posición de memoria de x


lunes, 8 de abril de 2024

3.1 tipos de optimizacion

 

 Tipos de optimización:

Optimizaciones Globales

Optimizaciones de Ciclo

Optimización de Mirilla

Optimizaciones Locales

 La optimización es un proceso que tiene a minimizar o maximizar alguna variable de rendimiento, generalmente tiempo, espacio, procesador, etc.

La optimización se realiza reestructurando el código de tal forma que el nuevo código generado tenga mayores beneficios.

Optimización Local

• Las optimizaciones locales se realizan sobre el bloque básico

• Optimizaciones locales

– Folding

– Propagación de constantes

– Reducción de potencia

– Reducción de subexpresiones comunes

Bloque Básico

• Un bloque básico es un fragmento de código que tiene una única entrada y salida, y cuyas instrucciones se ejecutan secuencialmente. Implicaciones:

– Si se ejecuta una instrucción del bloque se ejecutan todas en un orden conocido en tiempo de compilación.

• La idea del bloque básico es encontrar partes del programa cuyo análisis necesario para la optimización sea lo más simple posible.







 

Ensamblamiento (Folding)

• El ensamblamiento es remplazar las expresiones por su resultado cuando se pueden evaluar en tiempo de compilación (resultado constante).

– Ejemplo: A=2+3+A+C -> A=5+A+C

• Estas optimizaciones permiten que el programador utilice cálculos entre constantes representados explícitamente sin introducir ineficiencias.

 

 

Implementación del Folding

• Implementación del floding durante la generación de código realizada conjuntamente con el análisis sintáctico.

– Se añade el atributo de constante temporal a los símbolos no terminales y a las variables de la tabla de símbolos.

– Se añade el procesamiento de las constantes a las reglas de análisis de expresiones.

– Optimiza: 2+3+b -> 5+b

• Hay una suma de constantes (2+3)+b

– No optimiza: 2+b+3 -> 2+b+3

• No hay una suma de constantes (2+b)+3

Implementación del Folding

• Implementación posterior a la generación de código

– Buscar partes del árbol donde se puede aplicar la propiedad conmutativa:

• Sumas/restas: como la resta no es conmutativa se transforma en sumas: a+b-c+d -> a+b+(-c)+d

• Productos/divisiones: como la división no es conmutativa se transforma en productos: a*b/c*e -> a*b*(1/c)*e

– Buscar las constantes y operarlas

– Reconstruir el árbol.




 

Propagación de constantes

• Desde que se asigna a una variable un valor constante hasta la siguiente asignación, se considera a la variable equivalente a la constante.

• Ejemplo: Propagación Ensamblamiento

PI=3.14 -> PI=3.14 -> PI=3.14

G2R=PI/180 -> G2R=3.14/180 -> G2R=0.017

PI y G2R se consideran constantes hasta la próxima asignación.

• Estas optimizaciones permiten que el programador utilice variables como constantes sin introducir ineficiencias. Por ejemplo en C no hay constantes y será lo mismo utilizar

– Int a=10;

– #define a 10

Con la ventaja que la variable puede ser local.

• Actualmente en C se puede definir const int a=10;

implementación de la Propagación de Constantes

• Separar el árbol en bloques básicos

– Cada bloque básico será una lista de expresiones y asignaciones

• Para cada bloque básico

– Inicializar el conjunto de definiciones a conjunto vacío.

• Definición: (variable,constante)

– Procesar secuencialmente la lista de expresiones y asignaciones

– Para expresión y asignación

• Sustituir las apariciones de las variables que se encuentran en el conjunto de definiciones por sus constantes asociadas.

– Para asignaciones

• Eliminar del conjunto de definiciones la definición de la variable asignada

• Añadir la definición de la variable asignada si se le asigna una constante.




miércoles, 20 de marzo de 2024

ejercicio en pizzaron

 


 NOTACION POLACA

+-+/*85263+/36*52
+-+/(8*5)263+(3/6)(5*2)
+-+((8*5)/2)63((3/6)+(5*2))
+-(((8*5)/2)+6)3((3/6)+(5*2))
+((((8*5)/2)+6)-3)((3/6)+(5*2))
((((8*5)/2)+6)-3)+((3/6)+(5*2)) 

polaca y polaca inversa

 


Pre orden

-+*/6721+-7/*2368

-+*(6*7)21+-7/(2*3)68

-+((6/7)*2)1+-7((2*3)/6)8

-(((6/7)*2)+1)+(7-((2*3)/6)8

(((6/7)*2)+1)-(7-((2*3)/6)+8)



Pos Orden

67/2*1+723*6/-8+1

(6/7)2*1+7(2*3)6/-8+1

((6/7)*2)1+7((2*3)/6)-8+-

(((6/7)*2)+1)(7-((2*3)/6)+8)

((((6/7*2)+1)))-((7-((2*3)/6)+8))




4.3 Lenguaje Máquina

  4.3 Lenguaje Máquina Es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. El lenguaje máquina solo es ent...