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

    numeri binari e problemi

    ciao.
    ho un prolbema di capacita:
    un numero binario 1111 è uguale al numero decimale 15.
    ma ogni uno corrisponde ad un bit?
    e 1111111 corrisponderebbe a 15 e 15 (separati) ed ad un byte?
    poi: quando scrivo in un file una lettera, questa lettera varra nel file esattamente un byte come mai?
    cerco disperatamente risposta

  2. #2
    nn riesco a capire:
    un numero binario è composta da 32 zeri?
    0000000000000000000000000000000
    e x fare uno =
    0000000000000000000000000000001 ?
    ma allora
    0000000000000000000000000010000 e
    0000000000000000000000000000100
    formano un byte?
    (sto cercando intanto su google una spiegazione completa su tutto ciò che rigurda i dati )

  3. #3
    hai le idee un pò confuse,

    leggi attentamente questi documenti
    http://www.google.it/search?hl=it&ie...ria&lr=lang_it
    ...Terrible warlords, good warlords, and an english song

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    - si... ogni 1 o 0 corrisponde ad un bit.
    - 1111111 corrisponde a 127
    ...il pc non riconosce lettere ma solo numeri, Il sitema adottato è quello ANSI e UNICODE, ovvero con un byte = 11111111 = 255 puoi rappresentare 255 caratteri sottoforma numerica, per esempio il compilatore tasm o masm leggendo il byte
    1000001 ottiene:
    ^-----^
    64....1 = 65, ovvero un numero che corrisponde alla lettera A
    1000010 ottiene:
    ^-----^
    64...2. = 66, ovvero un numero che corrisponde alla lettera B

    Prendo spunto per chiarirti le idee:
    Qundo dici che il tuo pc a 128mb di ram, per noi programmatori significa che la memoria del pc è così strutturata:
    byte 0 0000 0000 ovvero il primo indirizzo o cella di memoria
    byte 1 0000 0000 // secondo //
    byte 2 0000 0000 // terzo //
    byte 3 0000 0000 // quarto //
    byte 134217728 0000 0000 // ultimo (128tteesimo mb) //

    .....anche nei pc a 32bit e 64bit la memoria è strutturata in questo modo, ovvero una cella alla volta o indirizzo che corrisponde proprio ad 1 byte, tutto questo è dovuto ai magici ingegneri della microsoft e alla loro genialità, cosicchè possono girare programmi scritti a 16bit anche su un pc a 54bit (e tanti che lo chiamano winzoz)

    0000 0000 \ AL.............\
    ..............> AX = a 16bit...\
    0000 0000 / AH.................\
    ..........................................> EAX 32bit
    0000 0000 \ AL................./
    ..............> AX = a 16bit.../
    0000 0000 / AH............./

    per chiarirti le idee ulteriormente:

    con 8bit puoi rappresentare 255 come numero massimo
    esempio:
    1111 1111 \ AL.............\ = 255
    0001 0001 // = 65
    .......il numero 256 non può essere contenuto in 1 byte e allora come lo rappresenti?........ma certo con 2 byte:
    esempio:
    1111 1111 \ AL.............\ byte basso
    ................................che è contenuto nel registro AX
    0000 0001 / AH............./ byte alto

    Il numero 7701802 come lo rappresenti?...... ma certo con 3 byte
    esempio:
    11101011
    00001010
    0101010

    Ricorda che i registri AL o AH leggono 8 bit alla volta, AX cattura 16 bit alla volta e EAX cattura 32 bit alla volta, quindi se devi leggere 3 byte come per l'ultimo esempio, devi catturare con il registro EAX tutti i 32bit.

    Per concludere se catturi con EAX 32bit
    00000000
    00000000
    00000000
    01000001
    .......corrisponde al numero 65
    se lo catturi con AX ovvero 16bit
    00000000
    01000001
    ......è la stessa cosa vale 65
    oppure lo catturi con AL 8 bit
    01000001
    .......che corrisponde a 65.......facile nò?

    se catturi il numero 267
    0000 1011
    0000 0001
    con 8 bit avrai come risultato
    0000 1011 = 11 con AL
    1000 0000 = 128 con AH
    per questo motivo si dice che trabocca e va in overflow,
    per leggere correttamente devi catturare i 16 bit (2 byte) con AX o catturare 32bit con EAX

    0000 1011
    0000 0001
    0000 0000
    0000 0000

    anche se per noi umani è meglio che il compilatore ci faccia leggere in esadecimale, tipo:

    0100 0001
    0100 = 4
    0001 = 1
    41 = 65

    little endian naturalmente...............
    e così via........fai delle prove tu!!!!!!!!

    per quanto riguarda l'interpretazione se numeri o lettere spetta al programmatore decidere cosa fare.

    esempio:
    mov BYTE PTR [di],'A' ;il registro [di] contiene
    65 = 00000000 1000001, e quando stampi a video devi fare la routine di conversione da binario a stringa cosicchè stamperà il carattere A.
    .........se vuoi che siano numeri:
    mov ax,65
    add ax,1
    .....eseguendo la conversione da binario a decimale verrà stampato 66




    ciao

  5. #5
    grazie, veramente grazie, grazie, veramente grazie :gren: :gren:
    m' era venuto pure il mal di testa x capirlo .............................

    :gren: :gren: :gren:

  6. #6
    ma come posso dire che un byte è meno significativo dell' altro (big endian and little endian che lo ordinano in maniera diversa),
    cioè
    0000 0001
    0000 0010
    quale di questi due byte è meno significativo?
    (num 513)

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    La cifra piu' a destra di un numero binario e' quella di peso minore e viene chiamata LSB o least significant bit (bit meno significativo); la cifra piu' a sinistra di un numero binario e' quella di peso maggiore e viene chiamata MSB o most significant bit (bit piu' significativo).



    perchè il bit più a sinistra è quelo + significativo è presto detto:

    esempio il bit più significativo è sempre quello + a sinistra che vale 1 ne caso sotto il primo 1 partendo da sinistra:
    0101 = 5
    ora se aggiungo zeri alla sua destra tipo:
    0101 0000 il risultato sarà 80 infatti il bit + significativo significa molto di + il numero

    se invece aggiungiamo zeri alla sua sinistra
    0000 0101 il numero varrà sempre 5 se ne aggiungiamo altri di zeri
    0000 0000 0000 0101 il risultato è sempre 5
    ----AH--- ----AL---
    .......quindi in questi due byte sopra ora possiamo dire che il byte + significxativo è............... dillo tu!!!!!
    (AH = byte alto H=HI AL = byte basso L=LOW)
    0000 0010 0000 0101
    ----AH--- ----AL---
    invece ora quale è il byte + significativo???






    ciao

  8. #8
    Utente di HTML.it L'avatar di san
    Registrato dal
    Jul 2003
    Messaggi
    1,076
    complimenti scancode, hai spiegato tutto in modo chiarissimo ed esaustivo

    una ricchezza, per questo forum..

    -San-
    this is the return of the space cowboy

  9. #9
    sii potrebbe farne un how-to

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    305
    scancode ringrazia......... amici
    non è niente di speciale ciò che che ho scritto e se l'ho scritto così è perchè ci sono passato, vorrei che molti tutorial fossero scritti in questo modo, proprio perchè anche io sono andato al manicomio all'inizio.

    Un'altra cosa da sapere è perchè, se smonti il pc ci sono 20 fili:
    .......per questo vi suggerisco di studiare la struttura delle celle di memoria detta a fisarmonica, ovvero costituita da segmenti:
    BUS a 20 linee )i 20 fili) 1111 1111 1111 1111 1111 = FFFFF
    FFFFH:000FH corrisponde all'indirizzo lineare a 20 bit FFFFFH

    IL BUS DATI

    il bus dati a 8 bit è composto da 8 fili e preleva in un sol colpo solo 1 byte
    il bus dati a 16 bit è composto da 16 fili e preleva in un sol colpo solo 2 byte
    il bus dati a 32 bit è composto da 32 fili e preleva in un sol colpo solo 4 byte
    il bus dati a 64 bit è composto da 64 fili e preleva in un sol colpo solo 8 byte

    PARAGRAFO o segmento = 16 byte posso scrivere codice fino a 64kb
    infatti in vb è il limite massimo di una routine di più non lo permette, mentre in c/c++ si infatti il compilatore si autogestisce e si crea in automatico i segmenti, mentre in asm devi gestirli tu stesso.

    1 byte = 8 bit rappresento fino al numero 255
    16 byte = 128 bit rappresento fino a
    16 bit = 65536 + 16 = 1048576 1Mb ......... infatti posso indirizzare 1Mb

    le CPU Intel 80386DX, 80486DX, 80586 (classe Pentium, Pentium Pro, AMD Athlon, AMD Duron etc.)
    hanno un Address Bus a 32 linee (32 fili) e possono quindi indirizzare 2^32 = 4294967296 byte = 4 Gb in un sol colpo

    quì trovere tutto:
    http://spazioweb.inwind.it/ramsoft/

    programmare in asm è affascinante, una volta capito e capito come è strutturata una cpu e come ragiona, col c/c++ e vb andrete come il turbo facendo praticamente tutto.

    buon studio...........

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.