PDF de programación - Registros de la CPU - Ensamblador

Imágen de pdf Registros de la CPU - Ensamblador

Registros de la CPU - Ensambladorgráfica de visualizaciones

Publicado el 2 de Enero del 2021
1.148 visualizaciones desde el 2 de Enero del 2021
179,4 KB
52 paginas
Creado hace 9a (13/03/2015)
Registros de la CPU

La CPU 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.


Los14 registros son conocidos por sus nombres específicos:

BX Registro base
DX Registro de datos
ES Registro del segmento extra
CS Registro del segmento de código
SP Registro del apuntador de la pila
DI Registro índice destino
F Registro de banderas

AX Acumulador
CX Registro contador
DS Registro del segmento de datos
SS Registro del segmento de pila
BP Registro de apuntadores base
SI Registro índice fuente
IP Registro de apuntador de siguiente instrucción


Es posible visualizar los valores de los registros internos de la CPU 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 CPU; una forma alternativa
de mostrarlos es usar el comando "r" utilizando como parámetro 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.

Es posible cambiar el valor del registro de banderas, así como utilizarlo como estructura de
control en nuestros programas como se verá más adelante. Cada bit del registro tiene un

nombre y significado especial, la lista dada a continuación describe el valor de cada bit, tanto
apagado como prendido y su relación con las operaciones del procesador:


Overflow
NV = no hay desbordamiento;

OV = sí lo hay
Direction
UP = hacia adelante;

DN = hacia atras;
Interrupts
DI = desactivadas;

EI = activadas
Sign
PL = positivo;

NG = negativo
Zero
NZ = no es cero;

ZR = sí lo es
Auxiliary Carry
NA = no hay acarreo auxiliar;

AC = hay acarreo auxiliar
Parity
PO = paridad non;

PE = paridad par;
Carry
NC = no hay acarreo;

CY = Sí lo hay



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 está 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 esto se le conoce como
direccionamiento directo.



Nuestro primer programa

Vamos a crear un programa que sirva para ilustrar lo que hemos estado viendo, lo que
haremos será 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 esto 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 NORMAL del programa.
0C1B:010A
No es necesario escribir los comentarios que van después del ";". Una vez digitado el último
comando, int 20, se le da [Enter] sin escribir nada mas, para volver al prompt del debuger.
La última línea escrita no es propiamente una instrucción de ensamblador, es una llamada a
una interrupción del sistema operativo, estas interrupciones serán tratadas más a fondo en un
capítulo posterior, por el momento solo es necesario saber que nos ahorran un gran número
de líneas y son muy útiles para accesar a funciones del sistema operativo. 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]
Aparecera en pantalla cada registro con su respectivo valor actual:

AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000

DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC

0C1B:010A 0F DB oF

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. También se puede llevar un seguimiento de lo que pasa en los
registros utilizando el comando "t" (trace), la función de este comando es ejecutar linea por
linea lo que se ensambló mostrando cada vez los contenidos de los regitros.

Para salir del Debug se utiliza el comando "q" (quit).

Guardar y cargar los programas

No sería práctico tener que digitar todo un programa cada vez que se necesite, para evitar eso
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,
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.

Utilizando como ejemplo el programa del capítulo anterior tendremos una idea mas clara de
como llevar estos pasos:

Al terminar de ensamblar el programa se vería así:
0C1B:0100 mov ax,0002
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
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, indicándonos 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.

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
D
  • Links de descarga
http://lwp-l.com/pdf18623

Comentarios de: Registros de la CPU - Ensamblador (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad