PDA

View Full Version : [ASSEMBLER] traduzione da C in Assembler - URGENTISSIMO!


C-noobprogrammer
26-01-2009, 23:45
Ho un elaboratore con CPU a 16 bit con 16 registri (R0, R1...R15) più il Program Counter, l'Instruction Register, lo Stack Pointer e 4 flag (zero, negativo, riporto e overflow).

Per chi sa programmare con l'assembler, quello che uso io è quello con, ad esempio, queste istruzioni:
LDWI, LDWA, LDWR, LDBI, LDBA, LDBR... STWA...PUSH, POP...TSTI,TSTO...JMP,JMPZ,JMPNZ...

dovrei tradurre questo frammento di codice:

while((ch = *S) != '\0')
{
*s = toupper(ch);
s++;
}


avendo: indirizzo della stringa s già memorizzato nel registro R10, variabile char deve essere memorizzata nel registro R11 e funzione TOUPPER già disponibile all'indirizzo di memoria 00AA (e preveda il passaggio dell'argomendo nel registro R1 e restituisca il risultato nel registro R0)

Ringrazio anticipatamente chi mi saprà aiutare con questo problemino.

banryu79
27-01-2009, 09:17
Ringrazio anticipatamente chi mi saprà aiutare con questo problemino.

Nessuno, se non cominci a postare la tua soluzione all'esercizio, e vediamo quali dubbi/difficoltà hai nello specifico :)

Questo perchè venire qui postando solo il testo dell'esercizio con una generica richiesta d'aiuto viene percepito dalla comunità come un'implicita richiesta di soluzione dello stesso. E il regolamento della sezione Programmazione vieta questo genere di thread ;)

C-noobprogrammer
27-01-2009, 10:34
hai ragione, chiedo venia ;)

Il fatto è che non ci capisco molto di assembler, comunque la mia versione, che vi chiedo di commentare, è la seguente:

START: LDWR R1 R10
JMPZ HALT
LOOP: CALL 00AA
LDWR R1 R10
JMPNZ LOOP
STWR R11 R0
HALT: HLT


grazie ancora in anticipo

banryu79
27-01-2009, 10:36
Lascio campo libero ad altri utenti: io di assembly non so nulla :p

Furla
27-01-2009, 11:20
ti aiuterei volentieri, ma conosco solo il gnu asm. posta il codice che hai fatto tu e vediamo se ci capisco qualcosa.

C-noobprogrammer
27-01-2009, 13:11
START: LDWR R1 R10
JMPZ HALT
LOOP: CALL 00AA
LDWR R1 R10
JMPNZ LOOP
STWR R11 R0
HALT: HLT



ecco

davideHC
27-01-2009, 13:47
mi interessa anke a me qst soluzione xk l'ho avuta nell'esame..... ma non son stato capace di fare niente... ma poi la funzione toupper dovevamo solo chiamarla o anke descriverla in assembler?

C-noobprogrammer
27-01-2009, 14:34
solo chiamarla.
in che esame l'hai avuta? quando?

davideHC
27-01-2009, 14:36
architettura dei calcolatori il 22 gennaio

C-noobprogrammer
27-01-2009, 14:41
ing elettronica?

davideHC
27-01-2009, 14:43
si si 1 anno

C-noobprogrammer
27-01-2009, 14:46
bello skifo di esame. l'hai fatto quello del mosaico?

davideHC
27-01-2009, 14:48
si quello del mosaico l'ho fatto abbastanza bene credo...
ascolta le domande di teoria erano
1 sulla paginazione.
1 sui codici di prefisso,che non so cosa siano
e che altro c'era?

C-noobprogrammer
27-01-2009, 14:53
c'era quella di convertire un numero in base 4 e quella del CRC (messaggio e polinomio generatore.. se sai dove trovarlo sul sito dimmi, che non ho idea nemmeno di che argomento sia :-( )

davideHC
27-01-2009, 14:57
http://web.diegm.uniud.it/pierluca/public_html/teaching/fondamenti_II/doc/lucidi_delle_lezioni/versione_a_colori/B10_controllo_e_correzione_degli_errori.pdf
questo è l'argomento del CRC, si tratta della correzione degli errori durante la trasmissione dei dati, se non mi sbaglio basta fare una divisione, pero non mi ricordo bene

C-noobprogrammer
27-01-2009, 15:00
azz, è vero!
bon, amen, tanto architetture so già di non averla passata.
Hai dato anke programmazione?

davideHC
27-01-2009, 15:04
oh yes e su quello contoparekkio perchè mi pare di averlo fatto bene, almeno credo, te?

C-noobprogrammer
27-01-2009, 15:10
quello della matrice ok.
L'altro mi pare di aver cannato di brutto nella lettura dei dati dal file.
Niente mate oggi?

davideHC
27-01-2009, 15:21
ssi ho fatto lo scritto ma mi sono ritirato... l'orale poi l'hanno spostto a venerdi mattina

Dr. Cox
27-01-2009, 15:25
.

C-noobprogrammer
27-01-2009, 15:27
com'era il compito? cosa ha kiesto?

davideHC
27-01-2009, 17:23
praticamente tutto un es per ogni argomento

limiti

serie

studio di funzione

calcolo differenziale

integrale curvilineo

C-noobprogrammer
27-01-2009, 18:57
grazie x l'informazione ;-)

DanieleC88
27-01-2009, 19:22
hai ragione, chiedo venia ;)

Il fatto è che non ci capisco molto di assembler, comunque la mia versione, che vi chiedo di commentare, è la seguente:

START: LDWR R1 R10
JMPZ HALT
LOOP: CALL 00AA
LDWR R1 R10
JMPNZ LOOP
STWR R11 R0
HALT: HLT


grazie ancora in anticipo

Ho letto molto velocemente senza soffermarmi troppo sulle richieste, ma non dovrebbe essere un esercizio difficilissimo.
Prova a fare prima uno schema logico delle operazioni da fare, e poi crea il vero e proprio codice assembly:
.LOOP:
leggi un carattere dalla memoria puntata in R10 e mettilo in R11
se è zero, salta ad .ESCI
copia R11 in R1
chiama 00AA
scrivi R0 nella memoria puntata da R10
incrementa R10
salta a .LOOP

.ESCI:
interrompi
Poi come tradurlo dipende dal tuo linguaggi assembly. Cosa usate?

C-noobprogrammer
27-01-2009, 22:03
cosa usiamo... boh! XD
non saprei dirti il nome preciso, so solo che usiamo un simulatore di cpu RISC a 16 bit con 16 registri di uso generale (R0, R1,...,R15) più il Program Counter, l'Instruction Register, lo Stack Pointer e 4 flag (zero, carry, negative e overflow).

Cmq grazie mille, il tuo "schema logico" mi ha dato un buono spunto