Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 09-07-2004, 16:43   #1
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Alcune domandine su Assembler! Datemi una mano Per Favore!!

Allora vi spiego il mio dubbio:
lunedì ho un esamino sulle basi di assembler...
per studiare mi sto svlgendo tutti i vecchi appelli, adesso ho fatto un programmino che dati due vettori fa la somma di tutti gli elementi del primo e poi la somma di tutti gli elementi del secondo, e poi di questi due fa il prodotto.

andando a vedere le soluzioni dopo che l'ho svolto a modo mio ho trovato questa differenza...

Codice Soluzione:
Codice:
loopsomma:
movl 8(%ebp),%ebx
movl (%ebx,%esi,4),%eax
add %eax,-4(%ebp)
incl %esi
loop loopsomma
questo è il ciclo per fare la somma di tutti gli elemeti del primo vettore, la differenza in quello che ho fatto io sta nel mettere fuori ciclo la riga:

Codice:
movl 8(%ebp),%ebx
comando con cui sposto il vettore, che si trova ad 8(%ebp) in %ebx...

perchè secondo me metterlo nel ciclo è un passaggio inutile.. o ha una sua importanza? voi che dite?

poi non sapevo il comando per fare il prodotto, nelle soluzioni ho trovato queste righe:

Codice:
movl $0, %edx
movl -8(%ebp),%eax
imull -4(%ebp)
non conosco questo comando imull.. me lo spiegate per favore? e mi spiegate come queste tre righe fanno il prodotto?

Come sempre vi ringrazio!!
__________________

Ultima modifica di luxorl : 09-07-2004 alle 16:49.
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 16:52   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Re: Alcune domandine su Assembler! Datemi una mano Per Favore!!

Quote:
Originariamente inviato da luxorl
questo è il ciclo per fare la somma di tutti gli elemeti del primo vettore, la differenza in quello che ho fatto io sta nel mettere fuori ciclo la riga:

Codice:
movl 8(%ebp),%ebx
Hai fatto bene

Quote:
poi non sapevo il comando per fare il prodotto, nelle soluzioni ho trovato queste righe:

Codice:
movl $0, %edx
movl -8(%ebp),%eax
imull -4(%ebp)
imul <x> moltiplica eax per <x> e pone il risultato (a 64 bit) in edx:eax.
La prima mov che azzera edx per me è superflua.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 17:04   #3
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Grazie

questa scritta:

edx:eax

vuol dire che prima il risultato va in eax se poi nn ci entra va anche in edx?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 18:56   #4
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Vuole dire che i 32 bit meno significativi vanno in eax ed i 32 bit più siginificativi vanno comunque (anche se il risultato entrerebbe in 32 bit) in edx...

imul (integer multiply)...la 'l' in fondo sta a significare la dimensione degli operandi, come al solito... I numeri vengono considerati come interi, quindi con segno...

Esiste anche mul che opera una moltiplicazione fra interi senza segno...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 21:12   #5
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 15:42.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 21:41   #6
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Ingegneria elettronica.... è un esame di solo 3 crediti sulla base di assembler.. penso che tu stia confondendo/sbagliando qualcosa..
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 21:41   #7
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
per me il tuo codice è arabo.. MAI virso a corso!
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 21:43   #8
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
Esi lo incremento di uno perchè poi moltiplico per 4! forse è tardi e sei un po' stancuccia?
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2004, 21:45   #9
luxorl
Senior Member
 
L'Avatar di luxorl
 
Iscritto dal: Oct 2003
Città: Pisa/Cosenza
Messaggi: 1364
-8(%EBP)
accede allo stack partendo dove ho "congelato" %EBP e salendo di 2 posti (8 perchè uso Long) posto dedicato ad una variabile d'ambiente che mi sono creato!
__________________
luxorl è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 00:18   #10
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da repne scasb
1) Se usi ESI come indice nel loop lo devi incrementare non di 1 ma di 4 perche' stai sommando valori a 32 bit (32 bit=4 bytes)
Quella è la sintassi AT&T, la tua è quella Intel... Una grossa differenza sta appunto in questo...
E' giusta così, perchè il valore del registro indice (il secondo specificato) viene moltiplicato per lo scale factor che viene specificato successivamente...
Quote:
Originariamente inviato da repne scasb
3) Se EBP e un puntatore allo stack, l'accesso ai valori sullo stack si ottieme EBP + "qualcosa" e non EBP - "qualcosa", lo stack scende e non sale.
Se si fa il prologo della PROC in questo modo:

pushl %ebp
movl %esp, %ebp
subl $k, %esp #si riservano k byte per le variabili locali alla proc

Allora è perfettamente lecito usare un displacement negativo rispetto a ebp... Si va infatti a lavorare sulel variabili locali alla proc...

L'epilogo della proc diventa questo:

movl %ebp, %esp
popl %ebp
ret

Si ristabiliscono le condizioni iniziali dello stack per permettere alla ret di prelevare l'indirizzo di ritorno...

Questo prologo ed epilogo sono quelli standard usati nella traduzione delle funzioni dal C e C++ in assembly dai compilatori GNU...

I parametri attuali della funzione sono accessibili da %ebp + un displacement non negativo... Lo spazio per le varibili locali deve essere riservato con la sottrazione sopra...e per accedervi si utilizza un displacement negativo...

Ultima modifica di cionci : 10-07-2004 alle 00:23.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 09:21   #11
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 15:41.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 09:59   #12
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Quote:
Originariamente inviato da repne scasb
2) Dal 1989 i linguaggi di alto livello che necessitano di un "stack frame" (uno spazio per le variabili locali di una subroutine), "DEVONO" utilizzare le istruzione ENTER e LEAVE, che dispongono per loro natura la capacita' di generare un eccezione se lo spazio per lo stack "termina". Se utilizziamo lo spazio "sotto" lo stack senza dichiararlo chi ci assicura che lo stack non sia in overflow?
Formalmente hai ragione, ma questi linguaggi dichiarano le variabili locali per definizione nello stack... L'unico modo per evitare di fare N push è di fare la sottrazione....

Riguardo alla sintassi AT&T a me l'hanno fatta per imprare come un compilatore g++ traduce il codice C++ in assembly... Come prova pratica dovevamo tradurre alcune funzioni di una classe rispettando i formalismi del passaggio dei parametri e di nomeclatura delle varie funzioni...e poi linkado tutto insieme sorgente parziale C++ e sorgente ASM dovevamo ottenere un risultato coerente...
Per la LEAVE sono d'accordo con te...noi non la utilizzavamo perchè usavamo un compilatore chiamato DJGPP...che non è proprio il classico gcc... Il compialtore GNU invece la usa...

Tanto per farti un esempio:
Codice:
int funzione(int i, int j)
{
  int somma;
  somma = i+j;
  return somma;
}


int main()
{
  int res = funzione(10, 5);
  return 0;
}
Sorgente ASM generato dal compialtore:
Codice:
	.file	"prova.c"
	.text
	.align 2
.globl __Z8funzioneii
	.def	__Z8funzioneii;	.scl	2;	.type	32;	.endef
__Z8funzioneii:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$4, %esp
	movl	12(%ebp), %eax
	addl	8(%ebp), %eax
	movl	%eax, -4(%ebp)
	movl	-4(%ebp), %eax
	leave
	ret
	.def	___main;	.scl	2;	.type	32;	.endef
	.align 2
.globl _main
	.def	_main;	.scl	2;	.type	32;	.endef
_main:
	pushl	%ebp
	movl	%esp, %ebp
	subl	$24, %esp
	andl	$-16, %esp
	movl	$0, %eax
	movl	%eax, -8(%ebp)
	movl	-8(%ebp), %eax
	call	__alloca
	call	___main
	movl	$5, 4(%esp)
	movl	$10, (%esp)
	call	__Z8funzioneii
	movl	%eax, -4(%ebp)
	movl	$0, %eax
	leave
	ret
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 10:08   #13
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Ah...anche i compialtori M$ usano lo stesso metodo epr definire le variabili locali...
Questo non è un proprio vero sorgente ASM, ma il risultato del disassemblatore...
Codice:
1:    int funzione(int i, int j)
2:    {
00401020   push        ebp
00401021   mov         ebp,esp
00401023   sub         esp,44h
00401026   push        ebx
00401027   push        esi
00401028   push        edi
00401029   lea         edi,[ebp-44h]
0040102C   mov         ecx,11h
00401031   mov         eax,0CCCCCCCCh
00401036   rep stos    dword ptr [edi]
3:      int somma;
4:      somma = i+j;
00401038   mov         eax,dword ptr [ebp+8]
0040103B   add         eax,dword ptr [ebp+0Ch]
0040103E   mov         dword ptr [ebp-4],eax
5:      return somma;
00401041   mov         eax,dword ptr [ebp-4]
6:    }
Anche se sinceramente quel 44h non lo capisco...ma sembra una pratica standard per tutte le funzioni... Ogni chiamata riserve un minimo di 44h byte per le variabili locali... Secondo me è un enorme spreco, ma andiamo avanti...
Il sorgente del gcc (porting MinGW32) è molto più performante...perchè il Visual C++ inizializza sempre al valore 0xCCCCCCCCh la porzione di stack riservata alle variabili locali...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 10:47   #14
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 15:40.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 10:59   #15
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947

Ultima modifica di repne scasb : 03-02-2005 alle 15:40.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 12:08   #16
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Rgiuardo all'ottimizzazione sembra che l'unico compilatore veramente ottimizzato sia quello Intel e solo per codice SSE e SSE2... Nell'uso della FPU invece sono equivalenti agli altri...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 12:11   #17
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Quote:
Originariamente inviato da cionci
Rgiuardo all'ottimizzazione sembra che l'unico compilatore veramente ottimizzato sia quello Intel e solo per codice SSE e SSE2... Nell'uso della FPU invece sono equivalenti agli altri...
Che caso
Ma del compilatore intel........ne esiste una qualche vers gratisse ?
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 12:16   #18
repne scasb
Bannato
 
Iscritto dal: Feb 2003
Messaggi: 947
Immagini allegate
File Type: png tasm.png (18.1 KB, 16 visite)

Ultima modifica di repne scasb : 03-02-2005 alle 15:39.
repne scasb è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 12:16   #19
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Non credo... C'è un trial di 30 gg...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2004, 12:19   #20
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Quote:
Originariamente inviato da cionci
Non credo... C'è un trial di 30 gg...
Cerchero
Cmq... ma oggi, con tutti i cmpilatori che ci sono, è il caso di stare a comparare l'asm disassemblato??
Non è meglio lasciare assemblare a un compilatore?
In fondo, la maggior parte dei programmi, nn deve avere prestazioni real time....li si che l'asm sarebbe molto utile.

IMHO
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
OnePlus 15: debutto globale con design '...
Amazon Prime: addio alla prova gratuita ...
Windows 11 25H2: guida passo-passo per l...
ECOVACS Deebot Mini sotto i 300€, robot ...
USA chiedono a Taiwan di produrre chip i...
Abbiamo provato Nothing Ear (3), gli aur...
Skoda 110 R elettrica: la storica coupé ...
Snapdragon X2 Elite Extreme: i benchmark...
Electronic Arts (EA) acquisita per 55 mi...
Dopo 30 anni, un modder aggiorna la prim...
Amazon sorprende: iPhone 16 crolla a 699...
Fundo.one, la prima startup finanziata d...
Telegram al centro delle elezioni in Mol...
Densità energetica triplicata ris...
Nuove regole per l'AI di Meta: niente co...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:51.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v