PDA

Visualizza la versione completa : [assembly] Aiuto Vi Prego


Pancarone
26-11-2003, 20:47
Gente fra pco devo sostenere un esame con qualch eesecizio di Assmbly ma non mi chiara una cosa,guardate queste 2 righe di codice:(AX=8005h e BX=8)

mov dx,0345fh
xor dx,dx
Giro:
shl ax,1
add dx,ax
dec bx
jnz Giro

..ebbene al termine di questo codice quanto vale dx????( uan delle quattro qui sotto)

1-09F6h
2-1fE6h
3-FF0FE6h
4-FF09F6h

..quello che NON CAPISCO PROPIO in questo esercizio il funzionamento del comando di salto JNZ......qualcuno potrebbe spiegarmi bene come funziona in questo caso tale comando ed anche come si svolge questo esercizio per favore????

$$$
26-11-2003, 20:59
mov ax, 8005h ; inizializziamo...
mov bx, 0008h ; ... le variabili :)

mov dx, 0345fh ; qua assegni il valore... ok?
xor dx, dx ; ma qua lo azzeri :-/

Giro:
shl ax, 1 ; moltiplica AX * 2
add dx, ax ; aggiungi a DX il valore di AX
dec bx ; decrementi BX...
jnz Giro ; se BX non arrivato a 0 rifai...


il risultato finale 09F6h


JNZ sarebbe l'op-code che salta all'indirizzo
specificato se il flag "ZERO" non settato.


Ciao :ciauz:

Pancarone
26-11-2003, 21:35
Grazie mille ma spiegami una cosa:Come mai il flag assegnato dal registro BX e non dagli altri????...il Flag non un registro particolare che non si pu scrivere ma che cambia di volt ain volta valore da 0 a 1???

$$$
26-11-2003, 21:41
mmh l'istruzione DEC che setta il flag quando la
decrementazione del suo operando arriva a zero.

quind non c'entra nulla BX, ma l'operando che ha.

il flag register si un registro particolare
ma cambia quando gli dici di cambiare :)

e in questo caso uno dei bit di controllo li cambia DEC.


CIAO :ciauz:

Pancarone
26-11-2003, 22:38
Ehm..scusa di nuovo l'ignoranza ma come faccio a moltiplicare per 2 8005h??????...scusa se te lo chiedo ma quei mentecatti dei prof. non ci spiegano una mazza......magari se ci sono delle formule per fare sti calcoli pi rapidamente te ne sarei grato thnks:)

LeleFT
26-11-2003, 22:43
shl ax, 1

Shift a sinistra di uno, che in base 2 significa moltiplicare per 2:

00000100 = 4
00001000 = 8
00010000 = 16

ecc...


Ciao. :ciauz:

$$$
26-11-2003, 22:50
per le moltiplicazioni puoi anche usare

MUL e IMUL
(che nei processori 486 e successivi come performances sono simili a SHL)

oppure (SCONSiGLIATo) puoi fare una addizione ciclica!

Loading