Non trovo l'errore!

di il
26 risposte

26 Risposte - Pagina 2

  • Re: Non trovo l'errore!

    ... ai tuoi studenti ...
    Scusa ma non darei mai questo codice come esempio di corretta soluzione del problema. Anche se un programma funziona non vuol dire che il codice debba essere preso ad esempio.

    Ho visto che hai completamente ignorato i miei suggerimenti, su

    1) non è necessario usare copie locali degli argomenti
    2) non ha senso effettuare una moltiplicazione quando si può accedere ai dati tramite tabella di puntatori

    E comunque non si capisce ancora cosa faccia effettivamente il programma ...
  • Re: Non trovo l'errore!

    Io mica mi riferivo al codice quando ti ho proposto di darlo hai tuoi studenti.
    mi riferivo semplicemente alla problematica.
    comunque il programma non faceva niente altro che aggiungere dei dati ad una matrice e stamparne le righe.
    non ho seguito il tuo consiglio di usare un vettore di puntatori semplicemente perchè cosi avrei usato più memoria di quanto ne avrei usata facendo la moltiplicazione.
    e come ben sai in assembler si cerca di ottimizzare il più possibile le risorse.
    per quanto riguarda il fatto che faccio una copia degli argomenti è dovuto ad una mia insicurezza nel perdere i dati quando avrò superato questa mia insicurezza il codice sarà ancora più ottimizzato. e per far ciò ci vuole solo un pò di tempo e tanta pratica.
  • Re: Non trovo l'errore!

    smalldragon ha scritto:


    io mica mi riferivo al codice quando ti ho proposto di darlo hai tuoi studenti.
    E dai ... "ai" ... "hai" è un verbo ...
    mi riferivo semplicemente alla problematica.
    Il fatto è che più volte ti ho detto che la problematica non era chiara.

    Ovvero, per le righe da 0 a 3 sì, ma non per le altre.
    comunque il programma non faceva niente altro che aggiungere dei dati ad una matrice e stamparne le righe.
    Dalle righe 4 a 7 non si capisce ...
    non ho seguito il tuo consiglio di usare un vettore di puntatori semplicemente perchè cosi avrei usato più memoria di quanto ne avrei usata facendo la moltiplicazione.
    Sono pochi byte in un mondo che lavora con i Tera !
    E poi non ha senso, dato che hai usato spazio inutile per le copie dei parametri ....
    e come ben sai in assembler si cerca di ottimizzare il più possibile le risorse.
    Guarda che la CPU è una risorsa e lo spazio per il codice è un'altra risorsa. Il tuo codice sfrutta CPU e spazio in memoria per il codice in misura maggiore del mio, contro qualche byte utilizzato nei dati. Alla fine il mio sfrutta meno risorse. Inoltre, non sempre la CPU dispone di istruzioni come la "moltiplicazione" e da sempre si usano le tabelle di lookup per questo motivo.
    per quanto riguarda il fatto che faccio una copia degli argomenti è dovuto ad una mia insicurezza nel perdere i dati quando avrò superato questa mia insicurezza il codice sarà ancora più ottimizzato. e per far ciò ci vuole solo un pò di tempo e tanta pratica.
    Lo stesso vale per il discorso delle risorse ... non hai ancora l'esperienza per valutare cosa è migliore ... ma con il tempo.
  • Re: Non trovo l'errore!

    smalldragon ha scritto:


    non sempre la CPU dispone di istruzioni come la "moltiplicazione" e da sempre si usano le tabelle di lookup per questo motivo.
    .
    scusami allora nella ALU che cosa c'è ?
    non mi risulta che add-sub-mul-div-imul-idiv stiano nel bios.
    comunque mi sembra strano che ci siano delle CPU che non hanno le 4 operazioni elementari.
    un fatto del genere poteva accadare tra il 1975 e il 1980,sinceramente dal 1977 a oggi non mi è mai capitato!, quando c'erà magior bisogno di abbassare i costi per creare un prodotto per la massa e non c'erano ne i macchinari di produzione che ci sono oggi ne le tecniche di oggi.
    comunque che risulti a me add-sub-mul-div ci sono sempre state quindi perchè non usarle ?
    io le tabelle di lookup le ho sempre usate per comodità,facilità d'uso, e per vedere meglio i dati.
    per tabelle fino a [20,100] e a 2 dimensioni non sono molto convenienti. con tabelle a più dimensioni o con tabelle bidimensionale maggiori [20,100] diventano una necessità perchè il rischio di errore diventa esponenziale almeno per me!
    il fatto che io abbia considerato 77 invece di 154 è stata una mia distrazione dovuta al molto tempo che non mi capitava un problema simile. la prossima volta ci starò più attento.
    comunque grazie per la short int della extern a quella proprio non c'ero arrivato.
  • Re: Non trovo l'errore!

    smalldragon ha scritto:


    non sempre la CPU dispone di istruzioni come la "moltiplicazione" e da sempre si usano le tabelle di lookup per questo motivo.
    .
    scusami allora nella ALU che cosa c'è ?
    La ALU è l'unità aritmetico-logica ... alla domanda su "cosa c'è dentro la ALU" si risponde con "tutta la logica necessaria per effettuare operazioni aritmetico-logiche".
    non mi risulta che add-sub-mul-div-imul-idiv stiano nel bios.
    Se è per questo non stanno né dentro il bios né dentro la ALU. Le operazioni aritmetiche sono svolte dalla parte del coprocessore matematico che sta all'interno della CPU.
    comunque mi sembra strano che ci siano delle CPU che non hanno le 4 operazioni elementari.
    Si vede che sei giovane e con limitata esperienza in questo campo.
    un fatto del genere poteva accadare tra il 1975 e il 1980,sinceramente dal 1977 a oggi non mi è mai capitato!
    Veramente lo Z80 e la 6502, per fare solo il nome di due "grandi" CPU a 8 bit della storia (dell'epoca), non avevano tra i microcodici la moltiplicazione e la divisione .... con cosa hai lavorato nel 1980?
    comunque che risulti a me add-sub-mul-div ci sono sempre state
    Ti risulta male, non diciamo eresie. Informati meglio.

    Anche attualmente, molti microcontrollori di fascia medio-bassa, ma molto usati come i PIC, non dispongono di tali operazioni. E quelli di fascia superiore (PIC32MX) dispongono solamente della moltiplicazione.

    Ad esempio la serie 16F ha il seguente set di operazioni aritmetico-logiche

    ADDWF
    ANDWF
    CLRF
    CLRW
    COMF
    DECF
    DECFSZ
    INCF
    INCFSZ
    IORWF
    MOVF
    MOVWF
    NOP
    RLF
    RRF
    SUBWF
    SWAPF
    XORWF
    quindi perchè non usarle ?
    Perché, ti ripeto, a patto di averle disponibili, sono istruzioni molto costose in termini di "risorsa CPU".
    io le tabelle di lookup ...
    Nel caso specifico stiamo parlando di una semplicissima tabella di 4 o 8 elementi ... una banalità ...
  • Re: Non trovo l'errore!

    Si hai ragione ci sono i microprocessori senza div e mul sono quelli a 8 bit.
    nel 1980 avevo 10 anni e lavoravo in assembler con l'8086 motorola 68000 (prima generazione)
    erano tutti a 16 bit.
    quando usci il 6502 avevo 7 anni bei ricordi.
    imparai a programmare in basic poi quando uscirono i microprocessori a 16 bit e l'età aumento seppur di poco iniziai a programmare in assembler.
    e da allora non ho mai smesso e penso non lo farò mai.
    l'assembler molto più comprensibile di molti linguaggi ad alto livello e poi al preggio che ciò che produci e per i 3/4 farina del tuo sacco e non come molti linguaggi di alto livello che utilizzi per i 3/4 cose fatte da altri.
    infatti le maggiori difficolta le incontro con le comunicazioni tra i vari linguaggi.
  • Re: Non trovo l'errore!

    smalldragon ha scritto:


    si hai ragione ci sono i microprocessori senza div e mul sono quelli a 8 bit.
    Beh, meno male ...
    nel 1980 avevo 10 anni e lavoravo in assembler con l'8086 motorola 68000 (prima generazione)
    Il PC IBM, primo utilizzatore di 8088/8086 venne distribuito a fine 1981-inizio 1982 e uno dei primi progetti con il 68000 fu l'Amiga 1000, bella macchina, ma fu commercializzata dal 1985 ... hai qualche ricordo un po' sbagliato ... E nel 1981-82 non si conosceva quasi nulla dell'assembly 8088/8086 per me che stavo per cominciare ad iniziare in un corso, figuriamoci per un bambino di 10 anni ...
    quando usci il 6502 avevo 7 anni bei ricordi.
    Che evidentemente non hai mai utilizzato, nemmeno nella variante del 6510 del famosissimo Commodore 64.
    infatti le maggiori difficolta le incontro con le comunicazioni tra i vari linguaggi.
    Beh, anche nello scrivere codice puro assembly hai difficoltà ...
  • Re: Non trovo l'errore!

    Che bei ricordi!
    Quando il computer aveva 32kb (ed erano gia' molti) invece degli attuali 32gb, e la velocita' si misurava in mhz e non in ghz...
  • Re: Non trovo l'errore!

    ... in mhz ...
    in realtà la 6510 del mio C64 andava a 985 KHz (kilohertz !) ... e il precedente VIC20 aveva 3,5 k (kilobyte) di RAM utilizzabile ...
  • Re: Non trovo l'errore!

    Avevo l'apple II E che lavorava col il 6502 con schermo monocromatico lo tengo ancora conservato e funziona benissimo.
    il comodore 64 invece non l'ho mai avuto lo sempre ritenuto un bel giocattolo.
    a 10 anni invece avevo l'ibm, oramai e andato, che se ben ricordo lavorava con l' 8086 e li che iniziai a "lavorare" in assembler.

    oregon ha scritto:


    nel 1981-82 non si conosceva quasi nulla dell'assembly 8088/8086

    c'erano molte riviste di programmazione che trattavano l'argomento,alcune le ho anche conservate, anche se non erano il massimo sull'argomento comunque ti davano elementi per poter sperimentare.
    e cosi ho imparato.

    oregon ha scritto:


    Il PC IBM, primo utilizzatore di 8088/8086 venne distribuito a fine 1981-inizio 1982
    per onor di storia non fu il primo personal computer a 16 bit .
    il primo computer a 16 bit fu il Mycron 2000 che utilizzava un l'8086 lo realizzò una ditta norveggese la mycron e costava tra i 6.000.000 e 7.000.000 di lire
    comunque i bei tempi sono andati e inutile tornarci su.
  • Re: Non trovo l'errore!

    smalldragon ha scritto:


    il comodore 64 invece non l'ho mai avuto lo sempre ritenuto un bel giocattolo.
    No, questo non lo dovevi dire ... Il Commodore 64 (con 2 m) (ma anche il VIC20) era un primissimo esempio di sistema multi CPU in quanto il chip che controllava il video (VIC II) prendeva il controllo dei bus facendo a turno con la CPU. Lo stesso VIC II gestiva autonomamente sprite e penna ottica, assolute novità per l'epoca. La sua architettura permetteva il DMA e la possibilità di utilizzare al posto della 6502 uno Z80. Il chip sonoro (SID) aveva caratteristiche da fantascienza per l'audio dell'epoca e molte "colonne sonore" dei giochi sono rimaste ancora oggi famose. E nonostante il bassissimo clock (< 1 MHz) era molto più veloce di alcuni sistemi paragonabili dell'epoca, come il TI9900 che vantava una CPU a 16 bit.

    E ci scrivevi tutto quello che volevi, dai giochi con grafica/musica notevole ai programmi gestionali/applicazioni complesse.

    Non toccare il C64 ...
  • Re: Non trovo l'errore!

    Non preoccuparti non te lo tocco il comodore 64.
    anche perchè a fatto la storia dei computer, ed io rispetto la storia, è ha permesso con il suo basso costo la diffusione dei pc ed indirettamente mi ha fatto fare un sacco di affari.
Devi accedere o registrarti per scrivere nel forum
26 risposte