PROGRAMMAZIONE C: rompicapo

di il
2 risposte

PROGRAMMAZIONE C: rompicapo

Ciao a tutti. devo realizzare in C un firmware per un processore molto scarso e mi occorre implementare una divisione per dieci senza fare la divisione... mi spiego: dato un numero, es. 128, mi occorre la "parte superiore", ossia 12 (posso rassegnarmi aanche a rinunciare all'approssimazione all'intero più vicino), il tutto senza necessariamente far eseguire al micro l'operazione (128/10) che per lui è molto onerosa. Avete qualche soluzione anche bit-oriented o in assembler???
grazie a chi avrà voglia di cimentarsi ...
ciao

2 Risposte

  • Re: PROGRAMMAZIONE C: rompicapo

    In assembler c'era una maniera di aggirare il problema... però ovviamente funzionava solo con codice per i processori Intel 80x86 (ogni processore ha il suo asm e non è detto che gli stessi opcode siano presenti in processori differenti)...

    Comunque, per la divisione per dieci, c'erano tra le istruzioni per gestire i BCD (binary coded decimals) la AAM...
    Serviva ad altre cose (AAM sta per ASCII Adjust AX After Multiply) e funziona solo su bytes ma ha un interessante effetto collaterale infatti:

    Input:
    AL - Valore esadecimale tra 0 e 255

    Output:
    AH - AL / 10 (divisione intera)
    AL - AL % 10 (dove % è il modulo, ovvero il resto della divisione)

    L'operazione ha la seguente velocità:
    8086: 83 cicli di clock
    80186: 19 cicli di clock
    80286: 16 cicli di clock
    80386: 17 cicli di clock
    i486: 15 cicli di clock
    Pentium: 18 cicli di clock (qui si ferma la documentazione che ho io)

    Ciaociao :)

    Venite a visitarci qui: http://spazioinwind.libero.it/bottomapsoftware
  • Re: PROGRAMMAZIONE C: rompicapo

    Ti ringrazio molto, il problema per me è che non dispongo di un micro cosi avanzato... (:!!! trattasi di un micro della serie ST62 che non ha la possibilità di usare tale istruzione.dispongo di call, com, interrupt, jp,jrc,jnrc,jrz,jnrz,jrr,jrs,ret,reti,rlc, stop, wait, add, and, cp, dec, inc,ld, sub, clr, set, lsa, addi,andi,cpi,ldi,subi,ldi

    comunque grazie !! (ps se ti viene in mente qualcos'altro è sempre ben accetto!) Marco
Devi accedere o registrarti per scrivere nel forum
2 risposte