Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [assembly] Aiuto Vi Prego

    Gente fra pco devo sostenere un esame con qualch eesecizio di Assmbly ma non mi è chiara una cosa,guardate queste 2 righe di codiceAX=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????

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    codice:
      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

  3. #3
    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???

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    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

  5. #5
    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

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    shl ax, 1

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

    00000100 = 4
    00001000 = 8
    00010000 = 16

    ecc...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    4
    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!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.