PDA

View Full Version : [assembler] aiuto per 3 programmi che devo fare


max_smp_
10-07-2007, 14:44
salve a tutti, sono nuovo, un pò disperato e anche ignorante :cool: (perchè spero che si possa chiedere una cosa del genere, anche se non ho trovato nessuna regola che lo vieta)
la questione è molto semplice, per dare un esame devo prima consegnare 3 elaborati in assembler, ma se il resto della materia l'ho capito bene, la parte di assembler (che tra l'altro non è la + importante durante la prova scritta) è per me assoluto arabo...è una materia nuova, ma se in programazione c so almeno come potermi muovere, in assembler prorpio non ho capito dove mettere le mani...
se io metto i titoli degli elaborati (che per voi saranno assolute cavolate), qualcuno avrebbe voglia di indirizzarmi sul cosa e come fare? (anche trovarmi il programma già fatto non sarebbe male, ma sono realista e mi accontento anche di meno :stordita: )
un grazie anticipato a chi prenderà parte in questa impresa

1.cifrare/decifrare un testo con il cifrario di Vigenère, data la parola chiave. Nle testo cifrato il codice ASCII di ogni carattere è aumentato dal codice ASCII del corrispondente carattere nella parola chiave sovrapposta al testo.
input: due stringhe (testo cifrato o da cifrare e parola chiave), entrambi array di BYTE terminanti con 0;un BYTE (0 se il testo è da cifrare, 1 se è da decifrare)
output: una nuova stringa (un array di BYTE da terminare con il valore 0) contenente il testo cifrato (o decifrato)

2. Calcolare la matrice di DWORD prodotto di due matrici di WORD. Le matrici sono memorizzate per righe all'interno di un array monodimensionali. Gli elementi delle matrici sono da considerarsi con segno (in complemento a due)
input: 3 DWORD (numero di righe e di colonne della prima matrice, numero di colonne della seconda matrie); due array di WORD ( le due matrici memorizzate per righe)
output: un array di DWORD (contenente la matrice prodotto memorizzata per righe)

3. Data una sequenza di bit, individuare la più lunga sotto-sequnza di bit a 1 (contigui) e restituirne la lunghezza.
input: un'array di BYTE da considerare come sequenza di bit (i bit in ogni byte sono ordinati dal meno significativo al più significativo); una DWORD (il numero totale di bit)
output: una DWORD (la lughezza della sotto-sequenza di 1 + lunga)

andbin
10-07-2007, 15:16
devo prima consegnare 3 elaborati in assemblerInnanzitutto assembly di quale processore? Inoltre devi soltanto scrivere la sola parte di codice a livello "teorico" o devi scrivere proprio il programma completo da assemblare ed eseguire? E in quest'ultimo caso, quali software e su quale S.O. vuoi o puoi usare?

max_smp_
10-07-2007, 17:53
rispondendo in ordine:
-l'assembly di un processore x86, e in particolare abbiamo trattato solo i processori pentium con supporto MMX, quindi niente di troppo recente
-devo proprio scrivere il programma da assemblare ed eseguire
-il S.O. è windows xp e tramite e con il corso mi hanno dato visual studio 2005, quindi questi 3 progetti devo farli con quello, però se conosci altri software con cui poter fare dei programmi in assembly, elenca pure, che visual mi è troppo pesante e preferisco conoscere anche altri programmi :fagiano:

andbin
11-07-2007, 09:05
-l'assembly di un processore x86, e in particolare abbiamo trattato solo i processori pentium con supporto MMX, quindi niente di troppo recenteOk. Beh, comunque è già abbastanza recente, se escludi le estensioni più specifiche come SSE o le 3DNow! di AMD. ;)

-devo proprio scrivere il programma da assemblare ed eseguire
-il S.O. è windows xp e tramite e con il corso mi hanno dato visual studio 2005, quindi questi 3 progetti devo farli con quello, però se conosci altri software con cui poter fare dei programmi in assembly, elenca pure, che visual mi è troppo pesante e preferisco conoscere anche altri programmi :fagiano:Visual studio 2005 è la suite completa, se vuoi fare qualcosa in assembly dovresti usare il solo Visual C++ 2005. Con il VC++ il target è chiaramente quello di realizzare applicazioni Win32 e il modo più semplice e veloce per usare del codice assembly è scriverlo "inline", cioè dentro un sorgente C/C++ usando una apposita sintassi.

Altri software dedicati all'assembly ci sono, ovviamente. I tre principali software sono i "soliti": TASM (della Borland), MASM (della Microsoft) e NASM (opensource). Cercali con google o meglio su Wikipedia per avere altre info.
Non sono gli unici, sebbene siano quelli più conosciuti e validi.

Se vuoi usare l'assembly inline del VC++, ecco un esempio:
#include <stdio.h>

int main (void)
{
int valore = 1234;
char bin[33];

__asm
{
mov eax, valore
mov ecx, 32
lea edi, bin
loop1:
shl eax, 1
mov bl, '0'
adc bl, 0
mov [edi], bl
inc edi
loop loop1

mov [byte ptr edi], 0
}

printf ("%d in binario %s\n", valore, bin);

return 0;
}

ettore1992
10-05-2015, 13:19
ciao max, alla fine sei riuscito ad avere la soluzione del primo elaborato?