OnEmAnArMy Inviato 14 Marzo 2007 Segnala Condividi Inviato 14 Marzo 2007 Fai ingegneria informatica, vero? no faccio ingegneria elettronica allora.. come promesso ecco come funziona.. lo faccio con la somma che è più semplice (ma concettualmente identico! ) Immagina di avere un processore con 32 registri interni ad 8 bit. Il massimo numero rappresentabile su 8 bit è 255 ( 0b 11111111 ) vuoi allora eseguire per esempio 255 + 52 ( = 307 = 0b 0001 0011 0011 )... come si fa ?? usiamo un ASM semplice e commentato. metto in R16 255 e R17 il 52 LDI R16, 255 LDI R17,52 il risultato è più di 8 bit.. quindi avremmo bisogno di un registro più grande.. nel caso sarebbero 9 bit... allora scegliamo di mettere il risultato nei registri R21-R20 (due registri a 8 bit, con R20 parte bassa e R21 parte alta). CLC ; Setta a zero il bit di carry nello status register MOV R16, R20 ; Copia il contenuto di R16 su R20 ADD R17, R20 ; Aggiungi il contenuto di R17 a quello di R20 BRCS 1 ; Se c'e' stato riporto salta di due righe RJMP END ; Se non ce ne è stato finisci INC R21 ; Se c'e' stato riporto, incrementa il registro della parte alta... esattamente come si fa nelle addizioni "a mano" RJMP END ; Fine :END NOP ; Non fare niente spero di essere stato chiaro se ci sono domande basta chiedere Cum fovet fortuna, cave, namque rota rotunda Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.