Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [ASSEMBLER] Istruzioni per i flag

    Devo scrivere le istruzioni in assembler che permettano di determinare i valori di CF e OF (nella posizione n. 0 e n. 11 del registro dei flag) dopo una somma... ç_ç ...

    Da dove comincio???

  2. #2
    ...il fatto che non risponda nessuno... è perchè è una str****** e a nessuno va di spiegarmelo, o perchè nessuno lo sa fare? O_o'

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    è molto semplice.........

    dopo l'operazione metti questo
    jc etichettaoverflow 'salti alla etichetta di overflow
    jmp okay 'qui salti con un jmp se non c'è overflow
    etichettaoverflow:
    stampa il messaggio di overflow
    -------------



    ciao

  4. #4
    E jo per l`OF.

  5. #5
    infatti, jc non e' per il carry?

    comunque puoi anche fare un controllo su ogni bit del registro, usando il comando BIT (muahauah che fantasia)... a dirla tutta non ci ho mai provato, pero' credo si possa fare

    In ogni modo e' + immediato farlo con i jump

    Ciauz
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    scusa non avevo letto bene quello che ti serviva, come da messaggio...........
    ovvero quello che ti ho scritto è giusto e cioè:

    mul ebx
    jc overf
    ..... se il risultato non entra nel registro va all'etichetta overf
    se no ti stampa un risultato errato (proprio perchè azzeri il contachilometri)

    ---------------
    quello che chiedi tu è questo:
    dopo un operazione puoi testare i bit così:
    facendo una maschera, il comando da usare è test
    per esempio dopo una imul il risultato è in eax
    TEST ebx,000010000000000b ;controlla l'11 bit l'OF
    je salta
    .......
    TEST ebx,000010000000001b ;controlla l'11 bit l'OF e il primo CF
    je salta ;se l'11=1 e l'1=1



    ciao jo

  7. #7
    infatti, fare un test (cioe' l'AND) con una maskera di bit per ogni flag che ti serve, e' come usare l'istruzione BIT, che dovrebbe fare da sola.

    Ciauz
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  8. #8
    codice:
    TEST ebx,000010000000001b ;controlla l'11 bit l'OF e il primo CF
    je salta ;se l'11=1 e l'1=1
    Normalmente si usa un jne (o jnz) dopo un test, di modo che se ( x & y != 0 ) significa che almeno un bit della "maschera" e` settato a 1. E basta osservare il codice in alto per trovare un errore. La condizione scritta sopra sara` vera sse ( ebx & 00001... == 0 ), e fa esattamente il contrario di cio` che si vuole: il salto verra` fatto se nessun bit della maschera e` settato in ebx. Ma poi cosa rappresenta quell`ebx? Che ci sta dentro?

    Se si vuole fare realmente un controllo a mano sui flags (tutti), vi si puo` accedere cosi`:

    codice:
    pushfd         ; salva eflags sullo stack
    pop      eax   ; preleva eflags dallo stack e lo memorizza in eax
    E poi si fanno i test sui bits di eax.

    Ciao.

  9. #9
    r0x, una domanda, sull'x86 non c'e' modo per accedere direttamente al registro di flag?
    bisogna per forza farlo passare per lo stack?

    ciaux
    #exclude <windows.h>
    Powered by Gentoo GNU/Linux
    Cos'e' l'impossibile se non una questione di tempo?
    Riesumare i post vecchi non e' sbagliato, e' una risposta o la continuazione di un thread. Meglio riesumare che creare di nuovi :]

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    x rox...........
    TEST ebx,000010000000001b
    je over

    in ebx che c'è???
    MUL ebx ;moltiplica il contenuto di eax per ebx e salva il risultato in edx:eax
    Spero di averti chiarito le idee..............

    questo sopra è un taglia e incolla da un mio prg, per far solo capire all'amico del post che deve usare l'istruzione test per verificare lo stato dei flag (per quello che serve a me va benissimo, non c'è nessun errore......hehheh!!)
    Per questo motivo in asm normalmente non si posta codice, ognuno deve studiarsi da solo il problema e fare da solo la propria routine che gli serve

    L'importante è che il nostro amico sa che deve usare l'istruzione test

    L'istruzione TEST risulta molto utile quando noi vogliamo controllare lo stato di uno o più bit all'interno di un registro o una locazione di memoria

    Esempi:

    TEST eax,1 ;controlla il primo bit (ovvero quello meno significativo) di eax
    JZ nonsettato ;salta all'etichetta "nonsettato" se quel bit è azzerato (ma ognuno può fare quello che + gli aggrada)

    TEST al,0000100b ;controlla il terzultimo bit di al
    JNZ settato ;salta se è uguale ad 1 ma ognuno può fare quello che + gli aggrada)

    in effetti sarebbe meglio mettere ........jcc (poi fai come ti pare)
    .....mai l discorso sui jcc(salti condizionali esula dalla domanda del nostro amico.......), per i salti condizionali useremo un'altro post attinente
    -----------------

    ----------------------

    code:--------------------------------------------------------------------------------
    pushfd ; salva eflags sullo stack
    pop eax ; preleva eflags dallo stack e lo memorizza in eax
    -------------------------------------
    ......non ti confondere le idee akiross.............



    Assolutamente no , non serve passare per lo stack
    il registro di flag viene controllato sempre dopo un'operazione....
    questo è l'importante........

    comunque......
    Quando la CPU incontra il codice macchina di PUSHFD, sottrae 4 byte a ESP e copia il contenuto a 32 bit del registro EFLAGS nella locazione di memoria SS:ESP

    ....... ma rox è conosciuto per confondere le idee

    ciao

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 © 2024 vBulletin Solutions, Inc. All rights reserved.