Post by Elena Ferrariciao!
mi potete dire come si passa un ciclo for da C ad assembly?
dunque, puoi usare una delle istruzioni della famiglia loop (loop, loopnz,
loopz) ponendo in ecx il numero di ripetizioni. Esempio (sintassi nasm)
mov ecx,10
.lo:
; istruzioni
; istruzioni
loop .lo
esegue il blocco di istruzioni per 10 volte. Ovviamente devi assolutamente
evitare di modificare il registro ecx.
In alternativa puoi costruire un ciclo for con le istruzioni di salto e
decremento. Supponendo che in ebp-4 ci sia il nostro contatore...
mov dword [ebp-4],6
; istruzioni
.pippo:
; istruzioni
dec dword [ebp-4]
jnz .pippo
Infine ci sono le istruzioni della famiglia rep (rep, repe, repne) che non
servono propriamente per costruire un ciclo for, ma per fare eseguire un
dato numero di volte 1istruzione particolare, tipo movsX, stosX, scasX,
cmpsX.
Post by Elena Ferrarit4 = (2 elevato alla 17)
for (i=0; i<n; i++)
{ t0 = t1 + t4;
t3 = t0 * i;
non ho capito questo pezzo di codice, t1 cos'è?
Post by Elena FerrariL'elevazione a potenza è supportata? " alla 17 come si rappresenta?
Devi costruire una funzione che la calcoli, tipo:
mov ecx,17 ; 17 ripetizioni del ciclo
mov ebx,2 ; in ebx metto la base
mov eax,1 ; l'istruzione mul moltiplica edx:eax per l'operando
xor edx,edx ; devo quindi azzerare i 32 bit superiori di edx:eax
.ripeti:
mul ebx
loop .ripeti
; il risultato è in edx:eax, se il numero è rappresentabile con 32 bit
; sarà solo in eax
Ciao
--
none