Está en la página 1de 5

Universidad de los Andes

Ingeniería de Sistemas y Computación


ISIS1304 - 03 – Fundamentos de Infraestructura Tecnológica
Taller Preevaluación ensamblador – control

Traduzca el siguiente programa a ensamblador. Debe tratarse de una traducción


fiel, no de su propia versión del programa. En particular, los cambios sobre las
variables deben reflejarse en memoria.
Suponga que el vector v está inicializado y no se preocupe de cómo se hizo (eso
está en los puntos suspensivos).
Por supuesto, puede usar las variables declaradas en C (pero no puede declarar
otras más).
int b, i;
int v[100];
char e;
...
i = 0;
e = 0;
while ( i < 100 && !e ) {
if ( b == v[i] ) {
e = 1;
}
i++;
}

mov i, 0 ; i = 0

mov e, 0 ; e = 0

mov esi, i ; esi juega el papel de i

mov ebx, b ; ebx juega el papel de b

buscar:

cmp esi, 100


jge finBuscar ; i >= 100?

cmp e, 0

jne finBuscar ; e != 0? (e es cierto)

cmp ebx, v[4*esi]

jne continuar ; b != v[i]?

mov e, 1 ; e = 1

continuar:

inc esi ; i++

jmp buscar

finBuscar:

mov i, esi ; actualizar i en memoria

Traduzca el siguiente programa a ensamblador. 


puede usar las variables declaradas en C pero no puede declarar otras más

int j=0;
void main(){
char *p, *q;
char s[]="Hola amigos mios \0";
char *t;
int i=0;
p=&s[0];
q=&t[0];

while (*p != 0) {
*q=*p;
if(*p==' ')
j++;
i++;
p++;
q++;
}
printf("\n cantidad de espacios= %d ",j);
}

__asm{
mov eax, 0
mov edx, 0
mov cl,0
inicio:
mov bl, s[eax]
cmp cl, bl
jns fin
cmp bl,32
jnz next
inc edx
next:
inc eax
jmp inicio
fin:
mov i,edx

}
Traduzca el siguiente programa a ensamblador (Atención: solo lo encerrado en el
recuadro). Suponga que los apuntadores y los vectores están inicializados, y no se
preocupe de cómo se hizo (eso está en los puntos suspensivos).
Por supuesto, debe usar las variables declaradas en C (pero no puede declarar
otras más). Todas las modificaciones de las variables se deben reflejar en
memoria.
int i;
unsigned int n, m;
int a[32];
int * p;
...
i = 0;
while ( i < 32 ){
if ( (n & 1) && (m & 1) ) {
a[i] = *p;
p++;
} else a[i] = 0;
n = n >> 1;
m = m >> 1;
i++;
}
mov i, 0 ; i = 0;
mov ecx, i
mov esi, p
while: ; while ( ecx < 32 ){
cmp ecx, 32
jge finWhile
mov eax, n
and eax, 1 ; if ( (n & 1)
jz else
mov eax, m
and eax, 1 ; && (m & 1) )
jz else
mov eax, [esi] ; a[i] = *p;
mov a[4*ecx], eax
add esi, 4 ; p++;
jmp finSi
else:
mov a[4*ecx], 0 ; a[i] = 0;
finSi:

shr n, 1 ; n = n >> 1
shr m, 1 ; m = m >> 1
inc ecx ; i++;
jmp while
finWhile:

mov i, ecx ;actualizar i en memoria

También podría gustarte