Arquitectura de Computadoras 2

Foro para conocer el avance del curso y compartir comentarios, dudas y aportaciones para todos los participantes del mismo.

Mi foto
Nombre: Dr. Sergio Castillo
Ubicación: Xalapa, Veracruz, Mexico

Profesor universitario en el área de las ciencias de la computación. Doctor en Ciencias de la Computación, Maestro en Ciencias Computacionales e Ingeniero en Electrónica y Comunicaciones.

viernes, agosto 26, 2005

Sesión del Viernes 26 de agosto

Formato de instrucción en lenguaje ensamblador
Primero vimos rapidamente el formato de instrucción en ensamblador:

{etiqueta:} mnemónico operandos {; Comentario}

donde {etiqueta:} y {; Comentario} son opcionales.

Por ejemplo:
      mov ax,100
do1: cmp bx,0 ; Instrucción con etiqueta (do1:) y este comentario
jne do2
add cx,ax
do2: dec ax
jmp do1

Programación estructurada en bajo nivel
Posteriormente presenté la manera de implementar en ensamblador las estructuras de control de flujo que se manejan en la programación estructurada:
  • IF (cond) THEN Inst1 ... InstN ENDIF

  • IF (cond) THEN InstV1 ... InstVN ELSE InstF1 ... InstFM ENDIF

  • WHILE (cond) DO Inst1 ... InstN ENDWHILE

  • DO Inst1 ... InstN UNTIL(cond)
    DO Inst1...InstN WHILE(cond)

  • FOR (Contador=1 a N) Do Inst1 ... InstN ENDFOR


IF (cond) THEN Inst1 ... InstN ENDIF
Ilustramos la implementación de esta estructura de control de flujo con un ejemplo. Supongamos el siguiente pseudocódigo:
     mov ax,100
if (cx > 0) then
div cx
dec cx
finif
mov ax,dx
En ensamblador:
     mov ax,100
cmp cx,0 ; if (cx > 0)
jle finif
div cx ; then
dec cx
finif:
mov ax,dx


IF (cond) THEN InstV1 ... InstVN ELSE InstF1 ... InstFM ENDIF
Ilustramos la implementación de esta estructura de control de flujo con un ejemplo. Supongamos el siguiente pseudocódigo:
    mov bx,50
if (ax < 10)
then
add cx,ax
inc ax
else
dec ax
finif
inc cx
En ensamblador:
    mov bx,50
cmp ax,10 ; if (ax < 10)
jge else
add cx,ax ; then
inc ax
jmp finif
else: ; else
dec ax
finif:
inc cx
WHILE (cond) DO Inst1 ... InstN ENDWHILE
Ilustramos la implementación de esta estructura de control de flujo con un ejemplo. Supongamos el siguiente pseudocódigo:

mov dx,100
while (dx <> 0) do
add ax,dx
dec dx
endwhile
mov dx,ax
En ensamblador:
     mov dx,100
m1: cmp dx,0 ; while (dx <> 0)
je endm1
add ax,dx ; do
dec dx
jmp m1
endm1: ; endwhile
mov dx,ax
DO Inst1 ... InstN UNTIL(cond) y DO Inst1 ... InstN WHILE(cond)
Ilustramos la implementación de estas estructuras de control de flujo con un ejemplo. Supongamos el siguiente pseudocódigo:
   mov cx,0
DO
inc cx
div cx
mov bx,ax
UNTIL (AX = 0)
mov ax,dx
En ensamblador:
   mov cx,0
do1: inc cx ; DO
div cx
mov bx,ax
cmp ax,0 ; UNTIL (AX = 0)
jne do1
mov ax,dx
FOR (Contador=1 a N) Do Inst1 ... InstN ENDFOR
Para implementar esta estructura de control les presenté la instrucción
LOOP
Su sintaxis es:
  LOOP Dirección
Su semántica es:
    CX = CX -1
SI (CX <> 0)
Salto a Dirección
SINO
Ejecuta la instrucción que sigue a LOOP
Noten que esta instrucción está ligada al registro CX.

Ilustramos la implementación de esta estructura de control de flujo con un ejemplo. Supongamos el siguiente pseudocódigo:
    mov dx,50
PARA (Contador=1 a 30)
sub ax,dx
dec dx
FINPARA
mov ax,cx
En ensamblador:
    mov dx,50
mov cx,30
p1: sub ax,dx ; PARA (Contador=1 a 30)
dec dx
loop p1 ; FINPARA
mov ax,cx

Finalmente les presenté un algoritmo para calcular la raíz cuadrada aproximada de un entero positivo. Consiste en restar sucecivamente los numeros impares (1,3,5,...) al entero positivo hasta que el resultado de la resta sea menor o igual a 1. Ilusté el algoritmo con un ejemplo y les pedí que lo tradujeran a ensamblador.