Está en la página 1de 4

Arquitectura de Computadoras II 12/09/2010

LSCA Sara Emma Jiménez Zamudio

Temario
 1. Recordatorio
 2. Instrucciones básicas
 3. Uso del STACK
 4. Debug
 Uso de Debug en DOS
 Captura de Programas
 Despliegue de Información
3. Introducción al Ensamblador  Desensamble de Programas
 Ensamble de Programas
 Contenido de los Registros
 Trazado de los Programas
LSCA Sara Emma Jiménez Zamudio Práctica
 Ejecución Rápida
Ejercicio

1. Recordatorio 2. Instrucciones básicas


 Antes de iniciar debemos recordar que un BIT es el  Hay una serie de instrucciones importantes y necesarias
elemento que representa el elemento básico unidad. A para cualquier programa en ensamblador. La más
partir de ahí tenemos: importante es la instrucción MOV.
1 NIBBLE: 0000 (4 BITS ). Es base del hexadecimal, e.j. 1111 = Fh.
MOV: mueve un valor de un lugar a otro.
1 BYTE: 00000000 (8 BITS) ó 2 NIBBLES
MOV destino, origen
1 WORD: 0000000000000000 (16 BITS) ó 2 BYTES ó 4 NIBBLES. Es el
tamaño usado para un registro de 16-bit. Ejemplos:
mov ax,10 ; mueve un valor inmediato al registro ax
mov bx,cx ; mueve en valor registro desde cx a bx
mov dx,Number ; mueve el valor memoria definido como Number a dx

3 4

2. Instrucciones básicas 3. Uso del STACK


 Hay tres tipos de operandos en ensamblador:  Para el caso de mantener y recuperar los valores de estos
- TIPO INMEDIATO registros, existe un área de memoria llamada PILA (stack).
- TIPO REGISTRO El nombre de PILA no es por otra cosa sino por su forma
- TIPO MEMORIA de uso. Es decir, el último que entra es el primero que
 El operando inmediato es un número conocido en sale.
compilación, es decir una constante.  Hay dos instrucciones para estas operaciones, que son:
 El operando tipo registro es cualquier registro de PUSH: Pone el dato de un registro en la pila.
propósito general o registro de índice. POP: Recupera el dato de la pila y lo escribe en un registro.
 Un operando tipo memoria es una variable almacenada
en memoria.

5 6

1
Arquitectura de Computadoras II 12/09/2010
LSCA Sara Emma Jiménez Zamudio

3. Uso del STACK 4. Debug


 Ejemplo:  El DEBUG es una herramienta de DOS que es útil para:
push cx ; escribe el contenido del registro cx en la pila  Revisión, corrección y creación de programas y rutinas.
push ax ; escribe el contenido del registro ax en la pila  Corrección de pequeños errores en un programa sin la
pop cx ; recupera el valor de la pila en el registro cx necesidad de volver a ensamblarlo.
pop ax ; recupera el valor de la pila en el registro ax  Observar la ejecución de un programa de manera controlada
Nótese que los valores de CX y AX se intercambian en el (paso a paso, por ejemplo).
código anterior.

 Existe una instrucción especial para intercambiar valores


de dos registros: XCHG, la cual produce el mismo
resultado con una única instrucción:
xchg ax,cx ; intercambia el valor de ax por el de cx

7 8

4.1. Uso de Debug en DOS 4.1. Uso de Debug en DOS


 Para utilizar DEBUG, en una ventana de DOS teclear:  Comandos:
debug<Enter>
 Al cargarse, el DEBUG despliega un “-”.
 Este “prompt” indica que DEBUG está esperando algún
comando.
 Los comandos de esta herramienta son casi todos letras
simples

9 10

4.2. Captura de programas 4.3. Despliegue de Información


 Con el debug podemos cargar en memoria programas en  Para observar el contenido de la memoria podemos usar
lenguaje máquina. el comando “d”
 Por ejemplo:  Por ejemplo, para “ver” el programa anterior tecleamos:
e 100 b8 00 01 bb 00 02 01 d8 cd 20 <Enter> d 100<Enter>
 Con esto indicamos que queremos introducir, a partir del  Este comando desplegará algo parecido a lo siguiente:
desplazamiento 100, los bytes b8, 00, 01, etc.
 Todos los números están en hexadecimal.

11 12

2
Arquitectura de Computadoras II 12/09/2010
LSCA Sara Emma Jiménez Zamudio

4.4. Desensamble de programas 4.5. Ensamble de programas


 Para “desensamblar” nuestro programa tecleamos:  DEBUG también permite el “ensamble” de programas.
u 100<Enter>  Ensamblar:Traducir de lenguaje ensamblador (assembly) a
 Desensamblar: traducir de lenguaje máquina a lenguaje lenguaje máquina.
ensamblador.  El comando “a” nos permite capturar programas en lenguaje
 Este comando desplegará algo parecido a lo siguiente: ensamblador.
 A manera de práctica capture el siguiente programa:

13 14

4.6. Contenido de los registros 4.7. Trazado de programas


 El comando “r” despliega el contenido de los registros.  El comando “t” nos permite trazar un programa.
 Si después de ensamblar el programa anterior, tecleamos  Trazar: Ejecutar paso a paso (instrucción por instrucción)
el comando “r”, se desplegará algo parecido a lo siguiente: un programa.
 La instrucción a ejecutar es aquella a la que “apunta” el
registro IP.
 Al trazar el último programa que capturamos, se
observa que cuando desplegamos los registros justo
después de capturar el programa, la última línea
muestra la primera instrucción de nuestro programa
(mov ax,0010).

15 16

4.7. Trazado de programas Práctica


 Ahora captura el ejercicio acerca de la suma de los 30
primeros números con el uso de debug
mov ax,0 ; Suma=0
mov bx,1 ; i = 1
mientras:
cmp bx,30 ; Mientras (bx ≤ 30) haz
jg fin
add ax,bx ; suma=suma+i
inc bx ;i=i+1 Compara
jmp mientras bx con
fin: 30(1Eh)
int 20h ; fin.

Al momento de la captura no
conozco la dirección de “fin” por
tanto supongo que será 120h

17 18

3
Arquitectura de Computadoras II 12/09/2010
LSCA Sara Emma Jiménez Zamudio

Práctica Práctica

 Al terminar la
captura encuentro  Al desensamblar el
que el salto programa se puede
condicional debe ser
a la dirección 110h y observar algo
no a la 120h como parecido a lo
supuse, por tanto, siguiente:
corrijo la instrucción
en 109h:

19 20

4.8. Ejecución rápida Ejercicio


 Además del trazado, es posible ejecutar un programa  Usando el siguiente pseudocódigo, introduce ahora el
hasta que el IP apunte a cierta dirección. programa para calcular la raíz cuadrada aproximada.
 Para nuestro programa la instrucción final es “Int 20h”,
que está en la dirección 110h. AX = 81 ; N
BX = 1 ; Impar
 Para detener nuestro programa antes de ejecutar esta
CX = 0 ; Contador
instrucción tecleamos: while (AX > 0)
- g 110<Enter> AX = AX – BX
 Lo anterior desplegará algo como lo siguiente: CX = CX + 1
BX = BX + 2
finwhile
CX = Raiz aproximada de N.

21 Observe que: AX=01D1h=465=1+2+3+...+29+30 22

¡Gracias por su atención!

23

También podría gustarte