Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Cos'è la bolla dell'IA e perché se ne parla
Cos'è la bolla dell'IA e perché se ne parla
Si parla molto ultimamente di "bolla dell'intelligenza artificiale", ma non è sempre chiaro perché: l'IA è una tecnologia molto promettente e che ha già cambiato molte cose dentro e fuori le aziende, ma ci sono enormi aspettative che stanno gonfiando a dismisura i valori delle azioni e distorcendo il mercato. Il che, com'è facile intuire, può portare a una ripetizione della "bolla dotcom", e forse anche di quella dei mutui subprime. Vediamo perché
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-11-2010, 13:09   #1
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
[Assembler 8086]Stampa caratteri a schermo

Ciao, ho iniziato da poco con questo linguaggio e stavo facendo un programma ( che funziona ) in assembler per sistemi 8086.
Ho scritto questo:
Codice:
; You are asked to develop an 8086 assembly program that write to console a 10 elements character vector defined
; as a global variable.
; Write operation must be performed through DOS int 21h facility.
DIM     EQU     10
        .MODEL  small
        .STACK
        .DATA
VETT    DB      75,119,98,32,82,111,99,107,115,33   ;Questi sono caratteri ASCCi. Stampa 'Kwb Rocks!'
        .CODE
        .STARTUP      
        MOV     CX,DIM                              ;Imposto 10 dentro CX
        MOV     AH,2                                ;Imposto AH a 2, così da poter stampare a schermo i numeri nel vettore
        MOV     DI,0                                ;Imposto 0 dentro DI. DI è un pointer per l'indicizzazione
lab2:   MOV     DL,VETT[DI]                         ;Sposto dentro DL l'elemento DIesmo di VETT. DL è usato per restituire l'output a schermo
        INC     DI                                  ;Aggiornamento del puntatore
        INT     21H                                 ;Visualizzo il carattere
        DEC     CX                                  ;Decremento il contatore
        CMP     CX,0                                ;Confronto CX con 0
        JNZ     lab2                                ;Se CX != da 0 vado a lab2
        .EXIT
        END
Perchè se definisco VETT come Word e non come Byte l'assembler mi da errore?
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 14:47   #2
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Ciao.

Quote:
Originariamente inviato da kwb Guarda i messaggi
Perchè se definisco VETT come Word e non come Byte l'assembler mi da errore?
Puoi indicare l'errore che ti da?

Perchè vorresti mettere word?
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 16:31   #3
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Volevo provare a mettere DW perchè a scuola abbiamo sempre messo DW... Tutto qua... Effettivamente devo ancora capire in base a cosa mettere DW, DB, DD o l'altro che ora mi sfugge... Comunque, questo è l'errore:


E mi sono dato una spiegazione: sul mio libro c'è scritto, a proposito dei registri di dato:
Ciascuno dei quattro registri da 16 bit ouò essere tratto come 2 registri di 8 bit ( il nome dei registri di 8 bit si ottiene sostituendo X con L o H a seconda che si tratti del byte basso o del byte alto, rispettivamente ).

Quindi, siccome io utilizzo il registro AL, di 8 bit ( 1 byte ), abbiam detto, se cerco di farci stare una word dentro ( 16 bit, 2 byte ), è chiaro che non ci sta... C'ho preso?

Una cosa che non ho capito nell'incrementazione dell'indice per un vettore:
mentre in C bastava mettere una costante che definisse il numero di celle del vettore, e una variabile contatore che ad ogni giro veniva incrementata; qua ora devo sia definire una costante che una variabile e ( se ho ben capito ), la prima la decremento e l'altra la aumento, ad ogni giro... E per capire se ho riempito tutto devo fare
CMP <registro_della_costante>, 0
Invece di operare su due dati, non posso aumentarne solo uno e compararlo alla costante?
Ovvero:
Codice:
DIM EQU 15
MOV CX, DIM
MOV DI, 0 ; DI è l'indice
...
CMP CX, DI ; if ( DI != CX ) torna all'etichetta altrimenti riga sotto
...
Ho appena fatto una prova con questo programmino e pare funzionare ( se ho capito bene come si fa a leggere nei registri e indirizzi di memoria )
Codice:
; You are asked to develop an 8086 assembly program that reads from console a 10 elements character vector and
; save it in a global variable. Read operation must be performed through DOS int 21h facility.

DIM     EQU     10
        .MODEL  SMALL
        .STACK
        .DATA
        
VETT    DB      DIM DUP (?)
        .CODE
        .STARTUP
        MOV     CX,DIM      ;Carica in CX la dimensione del vettore. CX è usato per i contatori o operazioni su stringhe
        MOV     DI,0        ;Azzero DI. DI è un pointer usato per l'indicizzazione
        MOV     AH,1        ;Imposto AH a 1, questo permette l'acquisizione di un carattere da tastiera.
lab1:   INT     21H         ;Leggo un carattere da tastiera che viene messo nel registro AL
        MOV     VETT[DI],AL ;Sposto il carattere dentro VETT[DI]
        INC     DI          ;Incremento DI di uno
        ;DEC     CX          ;Decremento CX di uno
        CMP     CX,DI        ;Confronto il valore in CX con quello di DI
        JNZ     lab1        ;Se diversi vado a lab1
        .EXIT
        END
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505

Ultima modifica di kwb : 06-11-2010 alle 16:40.
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 17:07   #4
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da kwb Guarda i messaggi
E mi sono dato una spiegazione: sul mio libro c'è scritto, a proposito dei registri di dato:
Ciascuno dei quattro registri da 16 bit ouò essere tratto come 2 registri di 8 bit ( il nome dei registri di 8 bit si ottiene sostituendo X con L o H a seconda che si tratti del byte basso o del byte alto, rispettivamente ).

Quindi, siccome io utilizzo il registro AL, di 8 bit ( 1 byte ), abbiam detto, se cerco di farci stare una word dentro ( 16 bit, 2 byte ), è chiaro che non ci sta... C'ho preso?
Uhm, diciamo si e no:
allora, tu in questo caso usi DB perchè vuoi memorizzare dei caratteri, che quindi sono di singolo byte. Se tu avessi voluto memorizzare dei numeri a 16 bit, avresti usato DW, che quindi riservava 2 byte per ogni elemento. Però, allocare 10 elementi DW è come allocare 20 elementi DB.
Visto che per la cpu non c'è nessuna differenza (non sa se sono 20 byte o 10 word), l'assemblatore pensa che tu stia facendo un errore, e ti dice che stai cercando di prendere dei dati che avevi dichiarato come word. Se tu vuoi ad ogni costo dichiarare il vettore come DW, e accedere a singoli byte, puoi modificare così l'istruzione
Codice:
MOV     DL, BYTE PTR VETT[DI]
Che genera lo STESSO codice macchina (perchè, come detto, alla cpu non interessa niente), ma ha l'effetto di dire all'assemblatore: "ok, lo so che sto prendendo byte anche se ho detto word, e voglio fare proprio così".
A questo punto però, devi fare un'altra modifica al listato... vediamo se riesci a trovarla

Quote:
Una cosa che non ho capito nell'incrementazione dell'indice per un vettore:
Ehm...

Quote:
mentre in C bastava mettere una costante che definisse il numero di celle del vettore, e una variabile contatore che ad ogni giro veniva incrementata; qua ora devo sia definire una costante che una variabile e ( se ho ben capito ), la prima la decremento e l'altra la aumento, ad ogni giro... E per capire se ho riempito tutto devo fare
CMP <registro_della_costante>, 0
Invece di operare su due dati, non posso aumentarne solo uno e compararlo alla costante?
Si, certo, si può fare tranquillamente. La ragione per cui si fà il contrario è anche un po' storica, per risparmiare istruzioni:
L'8086 ha una istruzione chiamata LOOP che è uguale a:
Codice:
LOOP etichetta -> CMP     CX,0
                  JNZ     etichetta
Per questo si usava (usava, perchè con gli attuali processori paradossalmente è più veloce fare il cmp e il jump rispetto al fare il LOOP) solo quella istruzione in modo da risparmiare qualche byte e velocizzare il programma.
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 17:33   #5
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Uhm, diciamo si e no:
allora, tu in questo caso usi DB perchè vuoi memorizzare dei caratteri, che quindi sono di singolo byte. Se tu avessi voluto memorizzare dei numeri a 16 bit, avresti usato DW, che quindi riservava 2 byte per ogni elemento. Però, allocare 10 elementi DW è come allocare 20 elementi DB.
Visto che per la cpu non c'è nessuna differenza (non sa se sono 20 byte o 10 word), l'assemblatore pensa che tu stia facendo un errore, e ti dice che stai cercando di prendere dei dati che avevi dichiarato come word. Se tu vuoi ad ogni costo dichiarare il vettore come DW, e accedere a singoli byte, puoi modificare così l'istruzione
Codice:
MOV     DL, BYTE PTR VETT[DI]
Che genera lo STESSO codice macchina (perchè, come detto, alla cpu non interessa niente), ma ha l'effetto di dire all'assemblatore: "ok, lo so che sto prendendo byte anche se ho detto word, e voglio fare proprio così".
A questo punto però, devi fare un'altra modifica al listato... vediamo se riesci a trovarla
Ok, ho provato e avviando il programma succede che mi stampa il carattere più uno spazio. Questo perchè io vado ad occupare solo 1 dei 2 byte disponibili per carattere, però allo stesso tempo, quando incremento, gli dico di passare byte per byte e non di saltare di due in due.
È bastato cambiare l'istruzione
Codice:
INC DI
con
Codice:
ADD DI,2
E torna a stampare corretto.

Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Ehm...
Incremento volevo dire

Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Si, certo, si può fare tranquillamente. La ragione per cui si fà il contrario è anche un po' storica, per risparmiare istruzioni:
L'8086 ha una istruzione chiamata LOOP che è uguale a:
Codice:
LOOP etichetta -> CMP     CX,0
                  JNZ     etichetta
Per questo si usava (usava, perchè con gli attuali processori paradossalmente è più veloce fare il cmp e il jump rispetto al fare il LOOP) solo quella istruzione in modo da risparmiare qualche byte e velocizzare il programma.
Mha... Sarà... Io trovo molto più logico il mio ragionamento ( sarà perchè in C si fa così? )... Ora chiederò al professore se non gli scoccia se uso questo metodo... Visto che sto studiando due linguaggi di programmazione se posso semplificarmi le cose e rendere l'approccio al problema tramite strutture simile è meglio, almeno mi devo ricordare meno cose.

EDIT: Bellissimo il thread su WinUX, mi hai fatto fare due risate
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 17:53   #6
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da kwb Guarda i messaggi
Ok, ho provato e avviando il programma succede che mi stampa il carattere più uno spazio. Questo perchè io vado ad occupare solo 1 dei 2 byte disponibili per carattere, però allo stesso tempo, quando incremento, gli dico di passare byte per byte e non di saltare di due in due.
È bastato cambiare l'istruzione
Codice:
INC DI
con
Codice:
ADD DI,2
E torna a stampare corretto.
Esatto! è proprio così.

Quote:
Mha... Sarà... Io trovo molto più logico il mio ragionamento ( sarà perchè in C si fa così? )... Ora chiederò al professore se non gli scoccia se uso questo metodo... Visto che sto studiando due linguaggi di programmazione se posso semplificarmi le cose e rendere l'approccio al problema tramite strutture simile è meglio, almeno mi devo ricordare meno cose.
Si si il tuo ragionamento è giusto, non c'è niente di sbagliato, nessuno di obbliga a contare fino a 0 invece di comparare di volta in volta. Come ti dicevo, è solo una questione "storica", quando i limiti dell'hardware erano notevoli, e risparmiare qualche byte o qualche ciclo di clock faceva la differenza. Al giorno d'oggi con le nostre macchine superpotenti, con processori con sistemi di esecuzione avanzati e memorie enormi, questi problemi sono sempre meno rilevanti.

Anche qualsiasi compilatore C usa il tuo metodo, se compili questo codice inutile:
Codice:
int main()
{
	int a, c;

	for(c=0; c<10; ++c)
		a = c;

	return 0;
}
(ho usato la GCC con la riga di comando:
Codice:
gcc prova.c -S -O0 -masm=intel -m32
)
viene tradotto in questo assembly:
Codice:
main:
	push	ebp				; prepara lo stack e alloca le 2 variabili
	mov	ebp, esp
	sub	esp, 16
	mov	DWORD PTR [ebp-8], 0

	jmp	.L2
ciclo:
	mov	eax, DWORD PTR [ebp-8]		; prende C
	mov	DWORD PTR [ebp-4], eax		; lo salva in a

	add	DWORD PTR [ebp-8], 1		; ++c
.L2:
	cmp	DWORD PTR [ebp-8], 9		; confronta C con 9
	jle	ciclo				; salta se è minore o uguale

	mov	eax, 0				; return 0
	leave
	ret
Come puoi vedere, usa la tua stessa idea (non ti preoccupare di quei DWORD PTR ...).
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 18:53   #7
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Si si il tuo ragionamento è giusto, non c'è niente di sbagliato, nessuno di obbliga a contare fino a 0 invece di comparare di volta in volta. Come ti dicevo, è solo una questione "storica", quando i limiti dell'hardware erano notevoli, e risparmiare qualche byte o qualche ciclo di clock faceva la differenza. Al giorno d'oggi con le nostre macchine superpotenti, con processori con sistemi di esecuzione avanzati e memorie enormi, questi problemi sono sempre meno rilevanti.

Anche qualsiasi compilatore C usa il tuo metodo, se compili questo codice inutile:
Codice:
int main()
{
	int a, c;

	for(c=0; c<10; ++c)
		a = c;

	return 0;
}
(ho usato la GCC con la riga di comando:
Codice:
gcc prova.c -S -O0 -masm=intel -m32
)
viene tradotto in questo assembly:
Codice:
main:
	push	ebp				; prepara lo stack e alloca le 2 variabili
	mov	ebp, esp
	sub	esp, 16
	mov	DWORD PTR [ebp-8], 0

	jmp	.L2
ciclo:
	mov	eax, DWORD PTR [ebp-8]		; prende C
	mov	DWORD PTR [ebp-4], eax		; lo salva in a

	add	DWORD PTR [ebp-8], 1		; ++c
.L2:
	cmp	DWORD PTR [ebp-8], 9		; confronta C con 9
	jle	ciclo				; salta se è minore o uguale

	mov	eax, 0				; return 0
	leave
	ret
Come puoi vedere, usa la tua stessa idea (non ti preoccupare di quei DWORD PTR ...).
No ma fammi capire... GCC è in grado di generare codice assembly da codice C?
I commenti li hai aggiunti tu immagino
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 18:59   #8
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da kwb Guarda i messaggi
No ma fammi capire... GCC è in grado di generare codice assembly da codice C?
Ehm... è proprio quello che ci si aspetta da un compilatore
Il ciclo di compilazione è:

sorgenteC ---compilatore--> sorgenteASM ---assembler--> codiceOggetto ---linker--> programmaEseguibile

In effetti quando chiami Gcc lui da solo poi richiama l'assemblatore e il linker automaticamente.
Ci sono poi anche compilatori che traducono direttamente in codice macchina, ma non so dirti quali siano.

Quote:
I commenti li hai aggiunti tu immagino
Sarebbe chiedere troppo
__________________
| Il mio "OS" (thread su HWU) | |
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 19:03   #9
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Ehm... è proprio quello che ci si aspetta da un compilatore
Il ciclo di compilazione è:

sorgenteC ---compilatore--> sorgenteASM ---assembler--> codiceOggetto ---linker--> programmaEseguibile

In effetti quando chiami Gcc lui da solo poi richiama l'assemblatore e il linker automaticamente.
Ci sono poi anche compilatori che traducono direttamente in codice macchina, ma non so dirti quali siano.


Sarebbe chiedere troppo
Beh io credevo che GCC traducesse direttamente in codice macchina... O meglio che GCC fosse l'insieme di compilatore, linker e assembler... ( lo so che GCC sta per Gnu C Compiler ) ecco perchè non mi spiegavo questo...
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 19:11   #10
Z80Fan
Senior Member
 
L'Avatar di Z80Fan
 
Iscritto dal: Sep 2009
Messaggi: 638
Quote:
Originariamente inviato da kwb Guarda i messaggi
Beh io credevo che GCC traducesse direttamente in codice macchina... O meglio che GCC fosse l'insieme di compilatore, linker e assembler... ( lo so che GCC sta per Gnu C Compiler ) ecco perchè non mi spiegavo questo...
Non è più vero neanche questo
http://it.wikipedia.org/wiki/GNU_Compiler_Collection

Quando chiami solo "gcc" dalla linea di comando, non chiami neanche più il compilatore vero e proprio, ma un front-end che richiama poi il compilatore, assembler e linker... per il linguaggio giusto in base al sorgente che gli passi come parametro (almeno per i sorgenti con un'estensione identificabile).
Infatti se vuoi puoi passare a gcc il nome di un file Assembly, e lui provvede da solo a chiamare solo l'assemblatore e il linker, o puoi passargli dei file oggetto e lui chiama solo il linker, oppure gli puoi passare tutti e tre i tipi contemporaneamente e lui si preoccupa di attivare le fasi giuste in base al file.
__________________
| Il mio "OS" (thread su HWU) | |

Ultima modifica di Z80Fan : 06-11-2010 alle 19:13.
Z80Fan è offline   Rispondi citando il messaggio o parte di esso
Old 06-11-2010, 20:03   #11
kwb
Senior Member
 
L'Avatar di kwb
 
Iscritto dal: Jul 2003
Città: Alessandria
Messaggi: 10167
Quote:
Originariamente inviato da Z80Fan Guarda i messaggi
Non è più vero neanche questo
http://it.wikipedia.org/wiki/GNU_Compiler_Collection

Quando chiami solo "gcc" dalla linea di comando, non chiami neanche più il compilatore vero e proprio, ma un front-end che richiama poi il compilatore, assembler e linker... per il linguaggio giusto in base al sorgente che gli passi come parametro (almeno per i sorgenti con un'estensione identificabile).
Infatti se vuoi puoi passare a gcc il nome di un file Assembly, e lui provvede da solo a chiamare solo l'assemblatore e il linker, o puoi passargli dei file oggetto e lui chiama solo il linker, oppure gli puoi passare tutti e tre i tipi contemporaneamente e lui si preoccupa di attivare le fasi giuste in base al file.
Ah ok, capito grazie!
__________________
Dell XPS 13 (9350) :: i5-2500K - HD6870 - AsRock Z68 Pro3 - Corsair Vengeance 8GB (4x2) DDR3 :: Samsung Galaxy S4 GT-i9505
kwb è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
FRITZ!Repeater 1700 estende la rete super-veloce Wi-Fi 7 FRITZ!Repeater 1700 estende la rete super-veloce...
SpaceX: un satellite ha fotografato il s...
36 idee regalo con offerte Amazon sotto ...
Sony assume il controllo dei Peanuts: Sn...
DJI Neo scende a 149€ su Amazon, in vers...
Scoperto un nuovo esopianeta che orbita ...
Blue Origin NS-37: successo per la missi...
Potrebbe essere stata rilevata una super...
La cometa interstellare 3I/ATLAS è...
Xiaomi 17 Ultra: l'autonomia non sarà un...
Il processo produttivo a 2 nm di TSMC è ...
L'atteso aggiornamento dei driver della ...
The Elder Scrolls VI nel 2029 e Fallout ...
Il Ryzen 7 9850X3D appare nel catalogo d...
Weekend pre natalizio Amazon, ecco tutte...
Prezzi giù su Oral-B iO: spazzolini elet...
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: 11:41.


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