Documentos de Académico
Documentos de Profesional
Documentos de Cultura
mov i, 0 ; i = 0
mov e, 0 ; e = 0
buscar:
cmp e, 0
mov e, 1 ; e = 1
continuar:
jmp buscar
finBuscar:
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: