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
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
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
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.