Newsgroup: it.hobby.elettronica.digitale
Titolo: Assembly

Ciao Raga!Come và?Spero Tutto Ok!
E' un pò ke sn nel vostro ng ma nn avevo mai scritto!
Ora vi kiedo se potete darmi qualke dritta sull ' assembly.
m'interesserebbe sapere dove posso
trovare un pò di documentazione a riguardo e dove poter scaricare qualke
programma.
in alternativa vi sarei grato se mi deste qualke indicazione circa il nome
di alcuni assemblatori!
Grazie a tutti e continuate così!!
Siete troppo forti!!!
Whiskey83


A parte che a me le K usate al posto delle C danno una noia tremenda :),
potrei darti una piccola regola base : ogni microprocessore o
microcontrollore ha IL SUO ASSEMBLER specifico, e un altro assembler non
funzionerà mai.
Un programma assembler è il firmware di una macchina : tramite i suoi
comandi vai a cambiare direttamente gli stati logici degli ingressi/uscite.
Quello che a parer mio è il più semplice è quello dei PIC
(
www.microchip.com
)
--
Ciao
-------------------------------
       Jaco the Relentless
 
eec....@libero.it
http://digilander.iol.it/hienddgl/
-------------------------------
      Toscana - Firenze

Asd wrote:

Guarda però che assembly va con la macchina che lo riceve e ognuna ha il
suo.. quindi ogni µC o µP ha il proprio.
Le basi sono le stesse ma poi devi concentrarti su un tipo di ass.
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 funzionerà mai.
[...]
non ti avevo visto, scusa :)


 Un programma assembler č il firmware di una macchina : tramite i suoi
comandi vai a cambiare direttamente gli stati logici degli ingressi/uscite.
Quello che a parer mio č il piů semplice č quello dei PIC
se per piu' semplice intendi dire "elementare" allora sono daccordo, se con
piu' semplice intendi che e' piu' semplice scrivere programmi allora no:) Un
assembler CISC "convenzionale" (dall'Z80 al P4) facilita molto di piu' la
vita al programmatore rispetto ad uno RISC (le belle istruzioni di stringa
dell'8088 che sogno...), per fare anche le piu' semplici operazioni (loop,
conteggi operazioni aritmetiche ecc...) con i PIC devi fare i salti
mortali... ue', non c'e' neppure la somma con riporto!;)
ciao
Claudio F
PS:mi piacerebbe vedere il modo piu' semplice per fare una somma a 32 bit
(cosa elementarissima anche con uno Z80)...

 (cosa elementarissima anche con uno Z80)...
è un discreto casino, visto che lavora con 8 bit :)
Col compilatore invece è facilissimo :)))))


 Col compilatore invece è facilissimo :)))))
anche lo Z80 e' a 8 bit, ma avendo la somma con riporto (ADC) basta sommare
i 4 bytes degli addendi... se hai solo la ADD invece (che imposta il flag C
ma non ne tiene conto durante la somma) sei nelle peste perche' devi
salvarti "a mano" il carry dopo ogni somma parziale e tenerne conto
correttamente nella successiva;)... passino le altre stravaganze dei PIC, ma
questa mi sembra davvero una carenza colossale... (a meno che non mi sia
sfuggito un modo semplice e "troppo evidente" per fare la cosa)
ciao
Claudio F

 ha scritto nel messaggio
news:p8c99.3262$pX1....@news2.tin.it...


 Per curiosità.... quali sono le stravaganze dei PIC? Parlare di carenza
colossale mi sembra un tantino esagerato vista la rivoluzione che è riuscita
a fare la Microchip con i suoi prodotti.
Per esempio l'architettura a banchi piuttosto che lineare, i contatori dei
timer che vanno ad incremento invece che a decremento, il carry che nella
sottrazione funziona al contrario rispetto a tutti gli altri micro che ho
visto, il dover usare il PCLATH nelle long call o nelle tabelle perche' il
program counter non e' gestibile per intero... diciamo che trovo fastidioso
che il programmatore debba farsi carico di tantissimi dettagli (leggi
bittarelli vari settati/resettati) solo perche' hanno voluto mantenere
l'hardware ridotto all'osso... la somma senza riporto ripeto che pero' mi
sembra un'esagerazione (molto peggio della mancanza dell' OR negli ST6;).
ciao
Claudio F

... la somma senza riporto ripeto che pero' mi sembra un'esagerazione
(molto peggio della mancanza dell' OR negli ST6;).
mi spiego meglio, finora il modo piu' semplice per sommare A=A+B (dove A e B
sono due variabili a 32 bit formate dai bytes A1 A2 A3 A4 e B1 B2 B3 B4) mi
sembra:
      movf B1,w       ;carica primo bytes di B
      addwf A1,f      ;somma a primo bytes di A
      btfss STATUS,C  ;se overflow skip
      goto L1
      incfsz A2,f     ;propaga riporto su A2
      goto L1
      incfsz A3,f     ;propaga riporto su A3
      goto L1
      incf A4,f       ;propaga riporto su A4
L1
      movf B2,w       ;carica secondo bytes di B
      addwf A2,f      ;somma a secondo bytes di A
      btfss STATUS,C  ;se overflow skip
      goto L2
      incfsz A3,f     ;propaga riporto su A3
      goto L2
      incf A4,f       ;propaga riporto su A4
L2
      movf B3,w       ;carica terzo bytes di B
      addwf A3,f      ;somma a terzo bytes di A
      btfsc STATUS,C  ;se non overflow skip
      incf A4,f       ;propaga riporto su A4
      movf B4,w       ;carica quarto bytes di B
      addwf A4,f      ;somma a quarto bytes di A
...e alla fine non e' neppure detto che il carry sia impostato correttamente
in quanto dipende solo dall'ultima addizione... mentre con una normalissima
somma con riporto automatico (chiamiamola adcwf) sarebbe bastato:
      movf B1,w       ;carica primo bytes di B
      addwf A1,f      ;somma a primo bytes di A
      movf B2,w       ;carica secondo bytes di B
      adcwf A2,f      ;somma a secondo bytes di A
      movf B3,w       ;carica terzo bytes di B
      adcwf A3,f      ;somma a terzo bytes di A
      movf B4,w       ;carica quarto bytes di B
      adcwf A4,f      ;somma a quarto bytes di A
e il carry alla fine conterrebbe anche l'eventuale riporto su tutta la cifra
ciao
Claudio F
PS: con lo Z80 (usando solo istruz. a 8 bit) sarebbe:
      LD A,(B1)
      ADD A,(A1)
      LD (A1),A
      LD A,(B2)
      ADC A,(A2)
      LD (A2),A
      LD A,(B3)
      ADC A,(A3)
      LD (A3),A
      LD A,(B4)
      ADC A,(A4)
      LD (A4),A

       incfsz A2,f     ;propaga riporto su A2
una possibilita', piu' leggibile e forse anche piu' veloce:
	movf	B1, w
	addwf	A1, f
	movf	STATUS, w
	andlw	w, #0FEh
	addwf	A2, f
	movf	STATUS, w
	andlw	w, #0FEh
	addwf	A3, f
	movf	STATUS, w
	andlw	w, #0FEh
	addwf	A4, f
...
sul fatto che il bit di carry totale e' sbagliato, non ne sono del tutto 
sicuro, ma dovrei verificare quando ho un po' piu' di tempo...
nb: la sequenza 
movf STATUS, w
andlw	w, #FE
addwf 	Ax, f
e' in pratica l'istruzione ADDC dei pdp11, che somma *il carry* ad un 
registro: neanche i pdp11 avevano la 'ADC'.

 sul fatto che il bit di carry totale e' sbagliato, non ne sono del tutto
sicuro, ma dovrei verificare quando ho un po' piu' di tempo...
se l'ultima addwf non genera riporto il carry e' resettato, anche se prima
c'e' stata la propagazione di un riporto che aveva fatto tornare A4 a
zero... in altre parole bisognerebbe memorizzare un bit da qualche parte per
mettere in OR il carry derivante dalle due somme parziali... che e' poi lo
stesso OR presente nello schema classico dell'addizionatore completo ad 1
bit:
[FIDOCAD]
MC 75 50 1 0 730
MC 80 85 1 0 730
LI 70 75 70 85
LI 75 50 75 40
LI 65 40 60 40
LI 80 25 80 85
LI 90 40 65 40
MC 90 75 0 0 690
MC 130 85 1 0 710
LI 115 80 120 80
LI 120 80 120 85
LI 115 45 130 45
LI 130 45 130 85
LI 70 85 90 85
LI 80 75 90 75
SA 75 40
SA 80 75
SA 70 85
TY 19 37 5 3 0 0 0 * Primo addendo
TY 57 20 5 3 0 0 0 * Riporto precedente
TY 108 111 5 3 0 0 0 * Nuovo riporto
TY 69 111 5 3 0 0 0 * Somma
LI 60 50 90 50
MC 90 40 0 0 690
SA 65 50
TY 13 48 5 3 0 0 0 * Secondo addendo
MC 215 50 1 0 730
LI 215 50 215 40
LI 205 40 200 40
LI 230 40 205 40
SA 215 40
TY 159 37 5 3 0 0 0 * Primo addendo
LI 200 50 230 50
MC 230 40 0 0 690
SA 205 50
TY 153 48 5 3 0 0 0 * Secondo addendo
LI 255 45 255 85
LI 210 75 210 85
TY 201 85 5 3 0 0 0 * Somma
TY 245 85 5 3 0 0 0 * Riporto
TY 185 95 8 4 0 1 2 * Istruzioni addwf o addlw
TY 70 125 8 4 0 1 2 * Somma completa
ciao
Claudio F

 FE.
oppsss...
maa... una divisione 32bit : 16bit ?

 maa... una divisione 32bit : 16bit ?
cos'e'? una "singolar tenzone" all'ultimo bit?;)
comunque questa deve essere lunga;)
ciao
Claudio

 comunque questa deve essere lunga;)
e forse troppo lunga per essere utile...