0% encontró este documento útil (0 votos)
30 vistas58 páginas

Introducción a la Arquitectura de Computadores

La arquitectura de computadores se refiere al diseño conceptual y la estructura operativa de un sistema informático, destacando la arquitectura de von Neumann como la base de los ordenadores modernos. Se exploran los tipos de instrucciones y registros, así como las diferencias entre arquitecturas CISC y RISC, con ejemplos de procesadores Intel y AMD. Además, se discute la evolución de los procesadores y la importancia del lenguaje ensamblador en la programación de máquinas.

Cargado por

eleazargucci8
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • procesadores AMD,
  • comandos de debug,
  • caché,
  • segmentos de memoria,
  • arquitectura ARM,
  • componentes de computadoras,
  • arquitectura de sistemas,
  • lenguaje ensamblador,
  • programas de 16 bits,
  • debug
0% encontró este documento útil (0 votos)
30 vistas58 páginas

Introducción a la Arquitectura de Computadores

La arquitectura de computadores se refiere al diseño conceptual y la estructura operativa de un sistema informático, destacando la arquitectura de von Neumann como la base de los ordenadores modernos. Se exploran los tipos de instrucciones y registros, así como las diferencias entre arquitecturas CISC y RISC, con ejemplos de procesadores Intel y AMD. Además, se discute la evolución de los procesadores y la importancia del lenguaje ensamblador en la programación de máquinas.

Cargado por

eleazargucci8
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • procesadores AMD,
  • comandos de debug,
  • caché,
  • segmentos de memoria,
  • arquitectura ARM,
  • componentes de computadoras,
  • arquitectura de sistemas,
  • lenguaje ensamblador,
  • programas de 16 bits,
  • debug

Introducción a la arquitectura

de computadores

Msc. Rina Arauz

1
Niveles de un computador:

2
Que es arquitectura de
computadores?
Descripción de la
La arquitectura de computadoras es : distribución física de los
- el diseño conceptual componentes de la
- y la estructura operacional computadora.
fundamental de un sistema de computadoras.

La arquitectura de von Neumann (ordenadores


actuales): utilizan una unidad central de
procesamiento o CPU, que contiene una unidad
aritmético lógica,
un conjunto de registros que permiten el
Repertorio de instrucciones, registros (8,16,32,64bits), almacenamiento temporal, una unidad de control
que se encarga de recoger las instrucciones desde
tipo y tamaño de operandos, modos de direccionamiento. la memoria principal, de decodificarlas y
ejecutarlas, una memoria principal en la que
residen los datos y las instrucciones, un bus de
entrada y salida que permite cargar los programas
y los datos desde un medio de almacenamiento
externo y entregar un resultado.

Estructura del
Diseño lógico,
bus, diseño CPU,
integración,
sistema de
encapsulado,
memoria, ciclo
potencia. 3
de instrucción.
Instrucciones de un computador:
 Las instrucciones son las acciones elementales que puede ejecutar un
computador.
 Las instrucciones se representan con un formato binario (8,16,32,64 bits).
 Cada instrucción es directamente ejecutada por el Hardware.
 El lenguaje ensamblador expresa las instrucciones con símbolos llamados
mnemónicos,.
 Cada línea en lenguaje ensamblador se corresponde a una instrucción de
lenguaje de máquina, los nemónicos deben traducirse a código máquina.

Ejemplo:

mnemónico registro dato

MOV CX, 0010h  Su código máquina es (B9 10 00 h).


(lenguaje ensamblador)
Instrucción Instrucción
(Mnemónico) Código máquina

MOV 1011 1001 (B9)


Sin lenguaje ensamblador, se tendrían que manipular
directamente las instrucciones en código binario. 4
Instrucciones de un computador: (Continuación)
El repertorio de instrucciones está definido por:

CISC
RISC
5
Repertorio de “Instrucciones” 8086 en lenguaje
ensamblador

6
Registros

7
Arquitectura Von Neumann

8
• Von Neumann describió el
fundamento de todo
ordenador electrónico con
programas almacenados.

• Aunque la tecnología ha
avanzado mucho y aumentado
la complejidad de la
arquitectura inicial, la base de
su funcionamiento es la misma
y probablemente lo seguirá
siendo durante mucho tiempo.
9
Fases de ejecución de las
instrucciones de
máquina

10
• Toda la información que maneja el computador debe estar en binario.
• Un programa en lenguaje maquina es un conjunto de instrucciones de
maquina codificadas en binario.

11
El ensamblador es un lenguaje muy próximo al lenguaje
maquina. No se utilizan los códigos binarios sino unos nombres
simbólicos o nemónicos. El programa que traduce el listado de
nemónicos a lenguaje máquina se llama programa ensamblador.

12
13
14
15
16
17
18
19
“Reduced Instruction Set Computer” Los
procesadores RISC sólo usan instrucciones
sencillas que se puedan ejecutar rápidamente.
Por este motivo suelen ser arquitecturas
basadas en registros de propósito general que
operan siempre sobre operandos que se
encuentran almacenados en el procesador,
cerca de la unidad de ejecución.

“Complex Instruction Set Co


mputer” Denominamos Cisc
a los procesadores que
utilizan instrucciones
complejas.
20
CISC RISC
(Computador con Conjunto de (Computador con Conjunto
Instrucciones Complejas) de Instrucciones Reducidas)
Ejemplos de ellos son: Motorola
68000, Zilog Z80 y toda la familia
Intel x86, AMD x86-64 usada en
la mayoría de las computadoras
personales actuales.

21
Procesadores : Intel (Cisc), AMD (Cisc), ARM (Risc)

• Los procesadores de Intel y AMD son


también conocidos como procesadores
x86.

• El término x86 se refiere a una familia de


la arquitectura del conjunto de El tipo de procesador
instrucciones, basado en el Intel 8086. más comúnmente
utilizado en equipos de
escritorio, el x86, está
Básicamente los sistemas para smartphones utilizan basado en CISC, aunque
la tecnología ARM, mientras que los ordenadores las versiones más nuevas
utilizan tecnología x86. traducen instrucciones
basadas en CISC x86 a
La diferencia entre ARM y x86, comienza en la instrucciones más
tecnología utilizada en la fabricación de los simples basadas en RISC
para uso interno antes
procesadores.
de su ejecución. 22
Los de tipo x86, son los
procesadores más usados en
equipos de escritorio, ya sean
portátiles o equipos de
sobremesa, se basan en un tipo
de arquitectura CISC.

Los procesadores de Intel serán más rápidos y


eficientes, pero los de AMD tienen un mejor
rendimiento gráfico y un costo-beneficio más
atractivo.

Los procesadores ARM, estos se basan en la


arquitectura RISC y se caracteriza porque
ofrecen la posibilidad de ejecutar procesos
paralelos de forma más corta y por lo tanto con
un ahorro de energía, son ideales para equipos
portátiles, ya sean tabletas o móviles.
23
ARQUITECTURA X86
Intel 8086 y el Intel 8088
• En junio de 1978 Intel lanzó
al mercado el primer
microprocesador de 16
bits: el 8086. En junio de
1979 apareció el 8088.

• El Intel 8086 y el Intel 8088


son los primeros
microprocesadores de 16
bits diseñados por Intel.
Fueron el inicio y los
primeros miembros de la
arquitectura x86.
24
¿Qué significa x32 x64 y x86?
x64 = Sistema Operativo basado en 64 bits -> Solo para mas de
4GB RAM.
x86 = Sistema Operativo basado en 32 bits -> Menos o igual a 4
GB RAM. Alguna gente para referirse a un S.O. 32 bits usa la
denominación x32, pero lo correcto es x86

• (2)Tarea: (averigua la arquitectura de tu computador!!)


• ¿Cómo saber si tenés una PC con arquitectura de 32 o
64-bits?
• Abrir la consola (podés entrar al menú de Ejecutar,
escribir “cmd” sin las comillas y darle enter)
• Escribir “echo %PROCESSOR_ARCHITECTURE%” (o
copiarlo sin las comillas) y darle enter.
• La consola te indicará el tipo de arquitectura de tu PC.

25
Evolución de procesadores Intel:
• Año 1978: Intel 8086 y 8088 (16 bits)
• Año 1982: El Intel 80286
• Año 1985: El Intel 80386 (añadió una arquitectura de 32 bits).
• Año 1989: El Intel 80486
• Año 1993: El Intel Pentium (con registros de 32 bits)
• Año 1995: EL Intel Pentium Pro
• Año 1997: El Intel Pentium II
• Año 1999: El Intel Celeron
• Año 1999: El Intel Pentium III Xeon
• Año 2000: EL Intel Pentium 4
• Año 2003 AMD Opteron. Primer microprocesador x86 de 64 bits, con el conjunto
de instrucciones AMD64)
• Año 2006: EL Intel Core Duo, conjunto de instrucciones x86-64.
• Año 2008: El Intel Core Nehalem (Intel Core i7 es una familia de procesadores de
cuatro núcleos de la arquitectura Intel x86-64)
• Año 2011: El Intel Core Sandy Bridge (Intel Core i3, Intel Core i5 e Intel Core i7 serie
2000 y Pentium G)
26
Intel anuncia en enero 2022 su 12ª generación
de procesadores para portátiles con más
potencia y eficiencia

Intel ha dimensionado esta arquitectura para que pueda


aglutinar un máximo de 16 núcleos (8 de alto rendimiento y otros
8 de alta eficiencia); procesar simultáneamente hasta 24 hilos de
ejecución o threads e integrar un subsistema de memoria caché
con una capacidad de hasta 30 MB.

27
(3)Tarea: (contesta)
Cuál es la generación y velocidad del procesador en
la anterior figura?
Cuál es la generación y velocidad del procesador de
tu maquina?
Cuál es la generación y velocidad del procesador de
la maquina que utilizas en el laboratorio?

28
Procesadores x86 (Intel y AMD)

El 8086 es considerado
el primer x86 de la
historia, si bien el
modelo que catapultó la
fama de Intel fue el
8088.
29
Cómo saber qué tipo de procesador tiene tu
Android (ARM, ARM64, X86, etc)

• Instala “Droid Hardware Info” de play store.

Android Otros tipos de


utiliza 3 procesadores para
arquitecturas dispositivos
de CPU móviles son:
básicas: ARM,
ARM64 y X86

(4)Tarea: Averigua el tipo de procesador


en android de tu teléfono celular.
30
Intel fue quien inventó la arquitectura
x86, mientras que AMD inventó la x86_64
Procesadores x86

Intel y AMD
Dada la cada vez mayor presencia de
dispositivos móviles y por tanto con
procesadores ARM en su interior, la
cuota de x86 se está viendo reducida y
amenazada incluso por la invasión de
sus dominios por la arquitectura ARM.

31
ARQUITECTURA X86 (CISC)
Registros de la UCP: un registro es una memoria de alta velocidad y poca capacidad, integrada en el
microprocesador, que permite guardar transitoriamente y acceder a valores muy usados, generalmente en
operaciones matemáticas.
La UCP tiene 14 registros internos, cada uno de 16 bits. Los primeros cuatro, AX, BX, CX, y DX son registros
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.
• Los registros son conocidos por:
• AX Acumulador
• BX Registro base
• CX Registro contador
• DX Registro de datos

• SP Registro del apuntador de la pila


• BP Registro de apuntadores base
• IP Registro de apuntador de siguiente instrucción

• DI Registro índice destino


• SI Registro índice fuente

• CS Registro del segmento de código


• DS Registro del segmento de datos
• ES Registro del segmento extra
• SS Registro del segmento de pila

• F Registro de banderas 32
•AX (registro Acumulador): se usa en operaciones aritméticas como primer operando y acumulador.

•BX (registro Base): Se usa principalmente para indicar posiciones de memoria (offset).

•CX (registro Contador): Se usa siempre que se necesite un contador en operaciones repetitivas y bucles.

•DX (registro Dato): Se usa como registro auxiliar en operaciones aritméticas y como contenedor de datos a la hora
de usar instrucciones de comunicación de puertos. 33
Registros de segmento: Usados para indicar direcciones de memoria.
• CS (Code Segment): Este registro es usado por el procesador, junto con el registro IP, para
conocer dónde está la instrucción actual que está siendo ejecutada.
• DS (Data Segment): Se usa para indicar dónde están todos los datos del programa en
ejecución.
• SS (Stack Segment): En este registro se indica al procesador dónde está la zona de memoria
que se usa como segmento de pila.
• ES (Extra Segment): Es el registro que referencia al segmento extra, y se usa como apuntador
de memoria auxiliar en operaciones complejas donde se necesitan dos punteros de datos
simultáneos.

Registros de la pila: La pila es un área de memoria importante. Tiene, en vez de uno, dos registros
que se usan como desplazamiento (offset) para apuntar su contenido. Se usan como
complemento al registro SS y son:
• SP (Stack Pointer): Es el registro que se reserva el procesador para uso propio en instrucciones
de manipulación de la pila.
• BP (Base Pointer): Se usa como registro auxiliar.

Registros índices: Se utilizan como desplazamientos complementarios para DS y ES a la hora de


indicar la posición donde se encuentran los datos a los que se desea acceder. Son lo siguiente:
• SI (Source index): Se usa como puntero origen en operaciones de desplazamiento de datos
entre dos zonas de memoria.
• DI (Destination index): Se usa como destino en operaciones de desplazamiento de datos.

34
• (5) Tarea:
Actividad en clase:
• Contesta en grupo de 4, con tus palabras las siguientes preguntas y entrega al maestro dichas
respuestas.

Según tu criterio contesta:


1) Cual es el objetivo principal de la asignatura?
2) Cual es la importancia de aprender lenguaje ensamblador?
3) Que defines por arquitectura Von Neumann?
4) Que defines por arquitectura RISC?
5) Que defines por arquitectura X86?
6) Que relación existe entre estos conceptos?
7) Completa:
1) Un registro es _____________________________________________________________.
2) En la arquitectura X86 (cisc), la UCP tiene _______ registros internos, cada uno de _______ bits.
3) Entre estos registros tenemos:
• ______ Registro Acumulador
• BX ______________
• _______ Registro contador
• DX ____________________
35
Laboratorio: DEBUG
• El Debug es un programa que formaba parte del sistema operativo MS DOS y servía
para realizar y revisar programas muy sencillos, bajo arquitecturas de 16 bits.

• Cumple con varias funciones: ensamblar, desensamblar y depurar (debug) programas


con código directo (sin encabezados), cuya extensión era “.com” (de command).

• Al tener una arquitectura basada en 16 bits, sólo podían direccionar segmentos de


memoria de 64Kb (2^16).

• Es importante señalar que algunas de las versiones más recientes de Windows a 32 bits
podría no incluir el programa Debug, aunque se puede descargar.

• Los sistemas Windows a 64 bits no son compatibles


con los programas de 16 bits, si bien, a esto se le puede
dar la vuelta utilizando el sistema DOSBox.

• El debug se invoca con el comando, siempre que esté instalado y accesible en DOS.
Todos los valores y direcciones expresadas en debug estarán en hexadecimal, y no
deberá agregarse 'h' al final.

36
Debug
• Es posible visualizar los valores de los registros internos de la UCP utilizando el
programa Debug. Para empezar a trabajar con Debug digite en el prompt de la
computadora:
• C:\> Debug [Enter]
• En la siguiente línea aparecerá un guión, éste es el indicador del Debug, en este
momento se pueden introducir las instrucciones del Debug. Utilizando el
comando:
• - r [Enter]
• Se desplegaran todos los contenidos de los registros internos de la UCP; una forma
alternativa de mostrarlos es usar el comando "r" utilizando como parametro el
nombre del registro cuyo valor se quiera visualizar. Por ejemplo:
• - rbx
• Esta instrucción desplegará únicamente el contenido del registro BX y cambia el
indicador del Debug de " - " a " : "
• Estando así el prompt es posible cambiar el valor del registro que se visualizó
tecleando el nuevo valor y a continuación [Enter], o se puede dejar el valor
anterior presionando [Enter] sin teclear ningún valor.

37
Suma

38
La estructura del ensamblador
• En el lenguaje ensamblador las líneas de código constan de dos partes, la primera
es el nombre de la instrucción que se va a ejecutar y la segunda son los
parámetros del comando u operandos. Por ejemplo:
• add ah bh
• Aquí "add" es el comando a ejecutar (en este caso una adición) y tanto "ah" como
"bh" son los parámetros.

• El nombre de las instrucciones en este lenguaje esta formado por dos, tres o
cuatro letras, a estas instrucciones también se les llama nombres mnemónicos o
códigos de operación, ya que representan alguna función que habrá de realizar el
procesador.
• Existen algunos comandos que no requieren parámetros para su operación, así
como otros que requieren solo un parámetro.
• Algunas veces se utilizarán las instrucciones como sigue:
• add al,[170]
• Los corchetes en el segundo parámetro nos indican que vamos a trabajar con el
contenido de la casilla de memoria número 170 y no con el valor 170, a ésto se le
conoce como direccionamiento directo.

39
• Nuestro primer programa
• Haremos una suma de dos valores que introduciremos directamente en el programa:
El primer paso es iniciar el Debug, este paso consiste únicamente en teclear debug [Enter] en el prompt
del sistema operativo.

Para ensamblar un programa en el Debug se utiliza el comando "a" (assemble); cuando se utiliza este
comando se le puede dar como parámetro la dirección donde se desea que se inicie el ensamblado, si se
omite el parámetro el ensamblado se iniciará en la localidad especificada por CS:IP, usualmente 0100H,
que es la localidad donde deben iniciar los programas con extensión .COM, y será la localidad que
utilizaremos debido a que debug solo puede crear este tipo específico de programas.

Aunque en este momento no es necesario darle un parámetro al comando "a" es recomendable hacerlo
para evitar problemas una vez que se haga uso de los registros CS:IP, por lo tanto tecleamos:
• - a0100 [Enter]

Al hacer ésto aparecerá en la pantalla algo como: 0C1B:0100 y el cursor se posiciona a la derecha de estos
números, nótese que los primeros cuatro dígitos (en sistema hexadecimal) pueden ser diferentes, pero los
últimos cuatro deben ser: 0100, ya que es la dirección que indicamos como inicio.

Ahora podemos introducir las instrucciones:


• 0C1B:0100 mov ax,0002 ;coloca el valor 0002 en el registro ax
• 0C1B:0103 mov bx,0004 ;coloca el valor 0004 en el registro bx
• 0C1B:0106 add ax,bx ;le adiciona al contenido de ax el contenido de bx
• 0C1B:0108 int 20 ; provoca la terminación del programa.
• 0C1B:010A (ENTER)
40
• Para ejecutar el programa que escribimos se utiliza el comando "g", al utilizarlo
veremos que aparece un mensaje que dice: "Program terminated normally".

• Naturalmente con un mensaje como éste no podemos estar seguros que el programa
haya hecho la suma, pero existe una forma sencilla de verificarlo, utilizando el
comando "r" del Debug podemos ver los contenidos de todos los registros del
procesador, simplemente teclee:
• - r [Enter]

• Aparecerá en pantalla cada registro con su respectivo valor actual:


• AX=0006BX=0004CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
• DS=0C1BES=0C1BSS=0C1BCS=0C1BIP=010A NV UP EI PL NZ NA PO NC
• 0C1B:010A 0F DB 0F

• Existe la posibilidad de que los registros contengan valores diferentes, pero AX y BX


deben ser los mismos, ya que son los que acabamos de modificar.

Otra forma de ver los valores, mientras se ejecuta el programa es utilizando como
parámetro para "g" la dirección donde queremos que termine la ejecución y muestre
los valores de los registros, en este caso sería: g108, esta instrucción ejecuta el
programa, se detiene en la dirección 108 y muestra los contenidos de los registros. 41
Para salir del Debug se utiliza el comando "q" (quit). 42
• Guardar y cargar los programas
• Es posible guardar un programa en el disco, con
la enorme ventaja de que ya ensamblado no será
necesario correr de nuevo debug para ejecutarlo.
• Los pasos a seguir para guardar un programa ya
almacenado en la memoria son:
• Obtener la longitud del programa restando la
dirección final de la dirección inicial, inicio
naturalmente en sistema hexadecimal.
• Darle un nombre al programa y extensión
• Poner la longitud del programa en el registro CX
• Ordenar a Debug que escriba el programa en el
disco.
fin
• Utilizando como ejemplo el programa anterior al
terminar de ensamblar el programa se vería así:
• 0C1B:0100 mov ax,0002
resultado
• 0C1B:0103 mov bx,0004
• 0C1B:0106 add ax,bx
• 0C1B:0108 int 20
• 0C1B:010A
• - h 10a 100
• 020a 000a
• - n prueba.com
• - rcx
• CX 0000
• :000a
• -w
• Writing 000A bytes
010A - 0100 = 000A
010A + 0100 = 020A 43
• Para obtener la longitud de un programa se utiliza el comando “h”, el cual nos
muestra la suma y resta de dos números en hexadecimal. Para obtener la longitud
del nuestro le proporcionamos como parámetros el valor de la dirección final de
nuestro programa (10A) y el valor de la dirección inicial (100). El primer resultado que
nos muestra el comando es la suma de los parámetros y el segundo es la resta.

• El comando “n” nos permite poner un nombre al programa.

• El comando "rcx" nos permite cambiar el contenido del registro CX al valor que
obtuvimos del tamaño del archivo con "h", en este caso 000a, ya que nos interesa el
resultado de la resta de la dirección inicial a la dirección final.

• Por último el comando w escribe nuestro programa en el disco, indicandonos cuantos


bytes escribió.

• Para cargar un archivo ya guardado son necesarios dos pasos:


– Proporcionar el nombre del archivo que se cargará.
– Cargarlo utilizando el comando "l" (load).
– Para obtener el resultado correcto de los siguientes pasos es necesario que
previamente se haya creado el programa anterior.
44
• Dentro del Debug escribimos lo siguiente:
• - n prueba.com
• -l
• - u 100 109
• 0C3D:0100 B80200 MOV AX,0002
• 0C3D:0103 BB0400 MOV BX,0004
• 0C3D:0106 01D8 ADD AX,BX
• 0C3D:0108 CD20 INT 20
• El último comando, "u", se utiliza para verificar que el programa se cargó en
memoria, lo que hace es desensamblar el código y mostrarlo ya desensamblado.
Los parámetros le indican a Debug desde donde y hasta donde desensamblar.
• Debug siempre carga los programas en memoria en la dirección 100H, a menos
que se le indique alguna otra.

45
La entrega de reportes de Ejemplo de
Laboratorios deberá entrega de prog:
hacerse en tiempo y forma,
de manera individual,
detallando cada línea de su
programa y contestando a
las preguntas de forma
ordenada, clara y precisa.

46
Ejercicio 1:
- Se pide sumar dos valores:
200h que se guardará en el registro “ax”
y FFFh que se almacenará en “bx”.
- Apunta los comandos que usas para:
- Escribir el programa.
- Ejecutar el programa y verificar el resultado.
- Asigna y guarda tu programa con el nombre “prog2.com”.
- Carga y ejecuta prog2.com

Suma en hexadecimal:

47
Para guardar el valor 10 en la
posición 100 de memoria tienes
Ejercicio 2: Se pide sumar el contenido de dos que pasar por un registro. Es decir,
no puedes asignar un valor
direcciones, [0200] y [0fff], en estas direcciones determinado a una posición de
deberás almacenar como dato 3ffh y 111h memoria determinada, solo puedes
respectivamente. asignarle a una posición de
memoria el valor de un registro. A
• Puedes usar –t para ejecutar paso a paso el si es que si quieres poner en la
programa. Especifica en detalle los datos que posición 100h el valor 10, primero
salen al ejecutar –t cada vez. debes poner el 10 en un registro, y
luego copiar el contenido de ese
• Recuerda que: No se pueden pasar valores en la registro a la posicion de memoria:
memoria sin la intervención de un registro y que mov ax, 10
debe usarse “[]” para referirse a posiciones de mov [100h], ax
memoria.

• Debes:
- Escribir el programa.
- Ejecutar el programa y verificar el resultado.
- Asigna y guarda tu programa
con el nombre “prog2.com”.
- Carga y ejecuta prog2.com

48
Ejercicio 3: Sumar el contenido de una dirección y de una constante.

add [0250],0011

Constante
Contenido de “numero 0011”
una dirección

Ejercicio 4: Reste dos números utilizando registros. El primero mayor que el segundo. La
instrucción para restar es SUB.

49
Ejercicio 5: Suma y resta. Sume dos números y reste otro. Utilice constantes, no
direcciones.

Ejercicio 6: Sume dos números y reste el contenido de una dirección.

50
• Multiplicación y división:
• En lo referente a la multiplicación podemos determinar dos tipos de instrucciones:
• MUL multiplica valores sin signo.
• IMUL multiplica valores con signo.

• Podemos multiplicar entidades de 8 bits (AH,AL) y de 16 bits(AX).
Independientemente si queremos multiplicar por media palabra el valor debe
estar en la parte baja del registro que vamos a utilizar, por ejemplo en AL y si
queremos multiplicar por la palabra deberá ocupar todo el registro, es decir que
deberá estar en AX, ejemplo:

• Ejercicio 7: Multiplicar valores sin signo.

Por defecto Multiplica con AX, y


en AX deja el resultado.

• Ejercicio 8: Realiza un ejemplo de multiplicación (3*3)= 9 51


• Ejercicio 9: Multiplicación de valores que provoquen un
desbordamiento.
• En este caso vamos a utilizar dos valores que multiplicados
superen la capacidad de almacenamiento de la parte baja del
registro.
– mov al,bb
– mov cl,aa
– mul cl
– int 20

- Explica el resultado anterior.

52
División:
También está compuesta por dos instrucciones:
• DIV que divide dos valores sin signo.
• IDIV que divide dos valores con signo.

En una división de valores enteros vamos a suponer que el


dividendo siempre será mayor que el divisor, por lo menos para
esta primera parte de nuestro estudio. De acuerdo a lo expresado
pasemos a realizar nuestro primer ejemplo.

Ejercicio 10 y 11: Dividir dos número enteros.


Aclaraciones: Para un divisor de 8 bits el dividendo
será de 16 bits, por lo tanto el dividendo lo
ubicaremos en AX (16 bits) y el divisor en CL (8bits)
El programa es:
– mov ax,8
– mov cl,4
– div cl
– int 20

53
Ejercicio 12: Realice un programa cuyo divisor sea cero e informe que sucede y porqué.

54
Ejercicio 13: Realice un programa que permita dividir los
siguientes valores FFFF y 2, pero en este caso el divisor será BX.
Observe todos los registros e informe.

FFFF 2
1 7FFF

Multiplicación y división, MUL y DIV


Estas operaciones multiplican al acumulador por el operando indicado.
Si el operando es de 8 bits (1 byte), el acumulador es AL.
Si el operando es de 16 bits, el acumulador es AX.
El resultado se almacena en AX o en el par DX-AX respectivamente, si el operando es de 8 bits o 16 bits.
55
Ejercicio 14: Realice un programa que permita dividir ABCF entre 4.

AX
BX
ABCF 4
3 2AF3
DX AX

56
• Resumen, Tareas:
• (1) Conversión de Números
• (2) Averigua la arquitectura de tu computador
• (3) Averigua la generación y velocidad de tu procesador.
• (4) Averigua el tipo de procesador de tu celular.
• (5) Contesta el cuestionario transparencia 35.
• (6) Realiza y comenta los 14 ejercicios del uso de DEBUG.

57
58

Common questions

Con tecnología de IA

The evolution of Intel processors from the 8086 to the Intel Core i7 series marks significant advancements in computing technology. The Intel 8086, introduced in 1978, was the first 16-bit microprocessor, marking the beginning of the x86 architecture . Progressing through models like the 80286 and 80386, these processors introduced enhanced processing capabilities and the 32-bit architecture . By the time of the Intel Core i7 series, first released in the late 2000s, Intel had incorporated multiple cores and integrated advanced features like hyper-threading and Turbo Boost technologies . These developments reflect a shift towards increasing parallelism and efficiency, allowing for powerful processing capable of handling today's demanding applications, including multimedia, gaming, and high-performance computing .

Instruction sets in computer architecture define the actions that a computer's CPU can execute, described by binary formats such as 8, 16, 32, or 64 bits . RISC (Reduced Instruction Set Computer) techniques focus on a small set of instructions that are executed very quickly, typically using general-purpose registers to operate operands close to the execution unit. In contrast, CISC (Complex Instruction Set Computer) includes complex instructions that can perform multiple operations and access memory directly . The fundamental difference is that RISC aims for efficiency and speed by simplifying instructions, leveraging fast execution cycles, while CISC tries to achieve more by using complex instructions, potentially reducing the total number of instructions per program .

The Von Neumann architecture forms the basis of virtually all modern computers by describing an electronic computing structure where both data and instructions for processing are stored in the same memory . This model has significantly influenced computer design through its central processing unit (CPU) that consists of an arithmetic logic unit, various registers, and a control unit which decodes and executes instructions fetched from memory . Despite technological advancements that have increased computational complexity and architecture evolution, the fundamental concept of the Von Neumann architecture—the stored-program concept—remains relevant. It continues to underpin the design principles of current computing systems, enabling the handling of complex algorithms and multitasking processes that are crucial in today’s digital applications .

The introduction of microprocessors like the Intel 8086 significantly impacted personal computer development by providing a powerful and flexible computing engine that became the foundation for the x86 architecture, widely adopted in personal computing . Its 16-bit design enhanced processing abilities compared to previous 8-bit processors, allowing for more complex computing tasks and software capabilities . This advancement led to the development of the IBM PC, establishing a standard for personal computers and facilitating widespread software compatibility and development on x86 platforms . Its success laid the groundwork for subsequent processor enhancements, fostering a competitive environment that spurred technological innovations and shaped modern computing architectures .

Debugging tools like DOS Debug have evolved alongside changes in computer architectures to accommodate increased complexity and abstraction in modern systems. Originally, tools like DOS Debug allowed programmers to interact directly with hardware components via assembly, providing capabilities to examine memory, registers, and machine-level instructions manually . As architectures advanced from simple 16-bit setups to today's multi-core and multi-threaded processors, debugging tools have integrated graphical interfaces and automation features to manage complex computational tasks, providing more user-friendly experiences while supporting diverse systems and architectures . Modern debuggers often support advanced features such as real-time debugging, visualization of execution flows, and the capability to handle concurrent processes, reflecting the sophistication of present-day software development and architectural challenges .

Registers play a critical role in CPU operations within a Von Neumann architecture by providing fast storage for data that the CPU is actively processing. They serve as temporary locations for storing instructions, operation results, and memory addresses during execution phases, allowing the arithmetic logic unit (ALU) to quickly access and manipulate data . Registers, such as the accumulator (AX), base register (BX), and counter register (CX), streamline processing by reducing the time it takes to retrieve and write data, effectively enhancing computational speed and efficiency . They also facilitate complex operations by holding intermediary results, managing control flow, and supporting program execution through instruction pointers and stack management .

ARM processors have had a profound impact on the mobile device market mainly due to their RISC architecture, which allows for efficient power consumption and performance in portable devices. ARM's architecture supports executing processes in parallel with lower energy requirements, making them ideal for smartphones and tablets . In contrast, x86 processors, traditionally used in desktops and laptops, are based on the CISC architecture, which provides robust processing power but at the cost of increased power consumption . As mobile devices have grown in popularity, ARM processors have increasingly dominated the market, forcing x86 architectures to adapt by incorporating RISC-like features internally to improve efficiency . Consequently, ARM’s influence pushes for innovations in energy-efficient computing, crucial for mobile and IoT devices .

Assembly language and machine language serve different roles in interacting with computer hardware. Machine language consists of binary code that the computer's processor can directly execute, while assembly language uses mnemonics or symbolic instructions that represent machine language instructions . Assembly language makes programming more accessible as it abstracts the binary instructions into a more readable form while still being closely linked to the hardware . Programs written in assembly language must be translated into machine language using an assembler, whereas machine language is directly executable by the CPU. This translation requires an understanding of hardware constraints, making assembly language less user-friendly but providing more control over hardware than higher-level languages .

Assembly language offers the advantage of close interaction with hardware, providing finely tuned control over computation and memory usage, which is beneficial for debugging hardware issues or performance-critical operations . Using assembly language allows developers to view and modify registers directly, providing transparent insights into CPU operations and allowing detailed examination of program execution . However, it has several limitations compared to higher-level languages, including being more complex and less readable due to its low-level nature, making it time-consuming and error-prone for large-scale application debugging . Additionally, the lack of abstraction means that coding and understanding the flow of large programs are significantly more challenging, often requiring expertise in the architecture's instruction set and processor operations .

The x86-32 architecture, commonly referred to as x86, supports 32-bit processing, allowing for a direct address space limit of 4 GB of RAM or less, which constrains large-scale applications and multitasking capabilities . In contrast, the x86-64 architecture, or x64, extends the processor's address space capabilities to potentially support over 16 exabytes of RAM, effectively removing memory constraints associated with 32-bit systems . This expansion allows for more complex and memory-intensive applications to run efficiently, supporting advanced computing tasks such as virtualization, large database management, and high-performance computing . These improvements in memory handling help accommodate the demands of modern software and multitasking environments .

También podría gustarte