Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-04-2009, 17:44   #41
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da misterx Guarda i messaggi
mi rimane il dubbio se è la cpu che vede la memoria segmentata oppure è l'SO a segmentarla.

Dico questo perchè ho provato a compilare un programma in C e visualizzare col debugger il corrispettivo codice assembly. Di fatto vedo il contenuto di tutti i registri della CPU e mi aspettavo che eseguendo il programma passo passo, il valore di CS, DS ed SS cambiasse invece rimane fisso.

Mi chiedo se questo comportemtno è dovuto al fatto che:

a) i segmenti sono di dimensione variabile e quindi il compilatore crea una zona di memoria che non verrà mai esaurita nel senso che, il mio programma non userà mai un altro segmento e quindi, non vedo cambiare i registri CS, DS,SS

b) il segmento è fisso ma il mio programma è di dimensioni talmente ridotte che sta comodamente in un segmento e per questo non vedo nessuna variazione

c) le variazioni dei registri DS, CS, SS li vedrei sse debugassi l'SO e non un mio programma
in modo x86 per cambiare segmento bisogna andare oltre i 64k
altrimenti e' sufficente l'offset..

La CPU in modo x86 vede la memoria in questo modo :

0000:0001 AB
0000:0002 1A
0000:0003 E3

dove il primo numero di 4 cifre esadecimale e' il registro di segmento CS (code segment)
il secondo numero di 4 cifre hexadecimal e' il registro di offset IP (instruction pointer)
e il terzo numero e' il dato in memoria a 8 bit.

Segment + Offset determinano l'indirizzo fisico delle 20 linee di memoria della CPU 8086
(con sovrapposizione delle aree di segmento x i noti probblemi... )

In pratica occorre cambiare segmento se si oltrepassano i 64k di memoria..
oppure se bisogna indirizzare delle aree fuori i 64k del codice..

In particolare i file eseguibili *.com del dos erano tutti intrasegmento, quindi non era
possibile utilizzare piu' di 64k
per eseguibili piu' grandi si utilizzavano gli *.exe..

bye
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 17:53   #42
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Non è esatto. Anche coi COM era possibile utilizzare più di 64KB.

Per il codice si utilizza la tecnica dell'overlay.

Per i dati... si allocavano richiamando le funzioni del DOS.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 18:34   #43
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da StateCity Guarda i messaggi
in modo x86 per cambiare segmento bisogna andare oltre i 64k
altrimenti e' sufficente l'offset..

La CPU in modo x86 vede la memoria in questo modo :

0000:0001 AB
0000:0002 1A
0000:0003 E3

dove il primo numero di 4 cifre esadecimale e' il registro di segmento CS (code segment)
il secondo numero di 4 cifre hexadecimal e' il registro di offset IP (instruction pointer)
e il terzo numero e' il dato in memoria a 8 bit.

Segment + Offset determinano l'indirizzo fisico delle 20 linee di memoria della CPU 8086
(con sovrapposizione delle aree di segmento x i noti probblemi... )

In pratica occorre cambiare segmento se si oltrepassano i 64k di memoria..
oppure se bisogna indirizzare delle aree fuori i 64k del codice..

In particolare i file eseguibili *.com del dos erano tutti intrasegmento, quindi non era
possibile utilizzare piu' di 64k
per eseguibili piu' grandi si utilizzavano gli *.exe..

bye
quindi se scrivo un programma che sta nei 64K non vedrò mai variazioni di segmento ?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 20:44   #44
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Come ho già scritto poco sopra, è possibile invece.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 20:45   #45
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Come ho già scritto poco sopra, è possibile invece.
ho provato ad allocare quantità assurde e non vedere alcuna variazione
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 21:04   #46
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Non è esatto. Anche coi COM era possibile utilizzare più di 64KB.

Per il codice si utilizza la tecnica dell'overlay.

Per i dati... si allocavano richiamando le funzioni del DOS.
invece e' esatto...

http://en.wikipedia.org/wiki/COM_file

"The COM format is the original binary executable format used in CP/M and MS-DOS. It is very simple; it has no header, and contains no metadata, only code and data. Its simplicity exacts a price, however: the binary has a maximum size of 65,280 (0xFF00) bytes (a little bit less than 64 KiB) and stores all its code and data in one segment."

poi volendo avevi anche la libberta' di fare come ti pare..

"In the .COM system, larger programs (up to the available memory size) can be loaded and run, but the system loader assumes that all code and data is in the first segment, and it is up to the .COM program to provide any further organization."
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 21:12   #47
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da misterx Guarda i messaggi
quindi se scrivo un programma che sta nei 64K non vedrò mai variazioni di segmento ?
se vuoi variare il segmento CS puoi farlo, basta fare un salto lontano...

tipo JMP 00AA:0011

(intersegmento diretto opcode "EA")

Ma c'e' il rischio di fare un salto nel buio..
e facilmente si va' a pescare un opcode che blocca la cpu..

oppure si puo' saltare in un area sovrapposta..

JMP B004:000A = elettrico B004A
JMP B003:001A = elettrico B004A
JMP B002:002A = elettrico B004A

in modo 8086 compatibile sono tutti salti alla stessa locazione di memoria...

in questo caso e' facile cambiare CS e IP all' interno di un piccolo programma.

Ultima modifica di StateCity : 25-04-2009 alle 21:26.
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 21:25   #48
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da StateCity Guarda i messaggi
invece e' esatto...

http://en.wikipedia.org/wiki/COM_file

"The COM format is the original binary executable format used in CP/M and MS-DOS. It is very simple; it has no header, and contains no metadata, only code and data. Its simplicity exacts a price, however: the binary has a maximum size of 65,280 (0xFF00) bytes (a little bit less than 64 KiB) and stores all its code and data in one segment."

poi volendo avevi anche la libberta' di fare come ti pare..

"In the .COM system, larger programs (up to the available memory size) can be loaded and run, but the system loader assumes that all code and data is in the first segment, and it is up to the .COM program to provide any further organization."
Esattamente come avevo detto io.

Grazie per la conferma.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 21:28   #49
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Esattamente come avevo detto io.

Grazie per la conferma.
anche se nn hai raggione,
se avessi una ragazza che mi sta' appresso come te' sarei il maschio il piu' felice del mondo..


ciao caro

Ultima modifica di StateCity : 25-04-2009 alle 21:30.
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 21:46   #50
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da StateCity Guarda i messaggi
se vuoi variare il segmento CS puoi farlo, basta fare un salto lontano...

tipo JMP 00AA:0011

(intersegmento diretto opcode "EA")

Ma c'e' il rischio di fare un salto nel buio..
e facilmente si va' a pescare un opcode che blocca la cpu..

oppure si puo' saltare in un area sovrapposta..

JMP B004:000A = elettrico B004A
JMP B003:001A = elettrico B004A
JMP B002:002A = elettrico B004A

in modo 8086 compatibile sono tutti salti alla stessa locazione di memoria...

in questo caso e' facile cambiare CS e IP all' interno di un piccolo programma.

da chi viene variato il registro DS ?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 22:13   #51
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
http://www.itipedia.org/images/f/fa/8086.pdf
http://www.ece.unm.edu/faculty/jimp/...es/assem3.html
http://www.cad.polito.it/~sonza/05ch...e/ASSEM_01.pdf
http://www.ing.unife.it/elettr/CE/8086Asm02-03.pdf

tutti documenti molto utili..

basta sgooglare "assembler 8086" non assembly

altrimenti nun se trova nulla..

Ultima modifica di StateCity : 25-04-2009 alle 22:38.
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2009, 22:33   #52
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
una session di debug dos...

Codice:
0D03:0100  B80B0A  mov ax,0A0B
0D03:0103  8ED8      mov es,ax
0D03:0105  8EC0      mov ds,ax
0D03:0107  90           nop
0D03:0109  90           nop
carica in ES e DS il valore diretto di 0A0B
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 06:38   #53
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da StateCity Guarda i messaggi
anche se nn hai raggione,
se avessi una ragazza che mi sta' appresso come te' sarei il maschio il piu' felice del mondo..

ciao caro
Sarebbero tanti i maschietti, per cui non so quanto potresti essere felice visto che faresti parte di una fooooooooolta schiera.

Tornando a noi:
Quote:
Originariamente inviato da StateCity Guarda i messaggi
In particolare i file eseguibili *.com del dos erano tutti intrasegmento, quindi non era
possibile utilizzare piu' di 64k

per eseguibili piu' grandi si utilizzavano gli *.exe..

bye
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Non è esatto. Anche coi COM era possibile utilizzare più di 64KB.

Per il codice si utilizza la tecnica dell'overlay.

Per i dati... si allocavano richiamando le funzioni del DOS.
A meno che tu non voglia ridefinire il significato del verbo "usare", le cose stanno come ho detto io.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 09:06   #54
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da StateCity Guarda i messaggi
una session di debug dos...

Codice:
0D03:0100  B80B0A  mov ax,0A0B
0D03:0103  8ED8      mov es,ax
0D03:0105  8EC0      mov ds,ax
0D03:0107  90           nop
0D03:0109  90           nop
carica in ES e DS il valore diretto di 0A0B

preso da qui

Data segment (DS) is a 16-bit register containing address of 64KB segment with program data. By default, the processor assumes that all data referenced by general registers (AX, BX, CX, DX) and index register (SI, DI) is located in the data segment. DS register can be changed directly using POP and LDS instructions.

E' il registro che contiene l'indirizzo dei vari segmenti di dimensioni di 64KB e tali segmenti contengono i dati usati e quindi caricati nei registri (AX, BX, CX, DX) ed i registri indice (SI, DI).

La parte in grassetto dice che DS può essere cambiato direttamente dal programmatore quindi usando opportune istruzioni: quindi far puntare i registri (AX, BX, CX, DX) e (SI, DI) è compito del programmatore assembly e non è un automatismo della cpu come contrariamente credevo.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 15:00   #55
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Sarebbero tanti i maschietti, per cui non so quanto potresti essere felice visto che faresti parte di una fooooooooolta schiera.

Tornando a noi:


A meno che tu non voglia ridefinire il significato del verbo "usare", le cose stanno come ho detto io.
Tu saresti capace di mettere eseguibili in memoria video..
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 15:32   #56
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Sarebbero tanti i maschietti, per cui non so quanto potresti essere felice visto che faresti parte di una fooooooooolta schiera.

Tornando a noi:


A meno che tu non voglia ridefinire il significato del verbo "usare", le cose stanno come ho detto io.
Ma siccome i file *.com di tipo eseguibile sono stati implementati la prima volta nel CP/M
che nn poteva indirizzare piu' di 64k ecco che e' rimasto il limite del segmento...
il supero della capacita' e' stato dato solo dalle facilitazioni del dos..
come la memoria maggiore di un mega in modo 8086 del 386
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 15:58   #57
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da misterx Guarda i messaggi
preso da qui

Data segment (DS) is a 16-bit register containing address of 64KB segment with program data. By default, the processor assumes that all data referenced by general registers (AX, BX, CX, DX) and index register (SI, DI) is located in the data segment. DS register can be changed directly using POP and LDS instructions.

E' il registro che contiene l'indirizzo dei vari segmenti di dimensioni di 64KB e tali segmenti contengono i dati usati e quindi caricati nei registri (AX, BX, CX, DX) ed i registri indice (SI, DI).

La parte in grassetto dice che DS può essere cambiato direttamente dal programmatore quindi usando opportune istruzioni: quindi far puntare i registri (AX, BX, CX, DX) e (SI, DI) è compito del programmatore assembly e non è un automatismo della cpu come contrariamente credevo.
non vedo perche' utilizzare pop e lds
quando si puo' fare direttamente con mov ds,ax..
forse si risparmia qualche ciclo di clock..

il segmento ds e' implicito se si scrive :

0000:0100 8B04 mov ax,[si]

la cpu prende implicitamente il segmento DS per formare l'indirizzo in memoria DS:SI

altrimenti si deve specificare direttamente..

0000:0102 368B04 mov ax,[ss:si]

(si nota che 36hex e' il prefisso di segmento.. )

e in debug verrebbe scritto solo cosi' :

0000:0102 36 ss:
0000:0103 8B04 mov ax,[si]

essedo il resto dell'opcode uguale al primo sopra..

in questo caso e' l'indirizzo e' formato da SS:SI

Questo si studia nei 7 modi di indirizzamento delle cpu 8086.. du

ma sono sicuro che cdimauro avra' qualcosa da ridire..

Ultima modifica di StateCity : 26-04-2009 alle 16:07.
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 16:28   #58
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da StateCity Guarda i messaggi
non vedo perche' utilizzare pop e lds
quando si puo' fare direttamente con mov ds,ax..
forse si risparmia qualche ciclo di clock..

il segmento ds e' implicito se si scrive :

0000:0100 8B04 mov ax,[si]

la cpu prende implicitamente il segmento DS per formare l'indirizzo in memoria DS:SI

altrimenti si deve specificare direttamente..

0000:0102 368B04 mov ax,[ss:si]

(si nota che 36hex e' il prefisso di segmento.. )

e in debug verrebbe scritto solo cosi' :

0000:0102 36 ss:
0000:0103 8B04 mov ax,[si]

essedo il resto dell'opcode uguale al primo sopra..

in questo caso e' l'indirizzo e' formato da SS:SI

Questo si studia nei 7 modi di indirizzamento delle cpu 8086.. du

ma sono sicuro che cdimauro avra' qualcosa da ridire..

però non hai risposto alla mia domanda e cioè se è il programmatore a variare l'indirizzo contenuto in DS.
Mi chiedo anche come fa la CPU a leggere all'indirizzo DS nel senso che, ho capito che tale indirizzo viene usato dai registri AX, etc.. ma come avviene l'incremento per puntare al prossimo dato per la prossima istruzione ?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 16:35   #59
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
cmq. dipende anche dalla variabile puntatore...

MOV ax,[si]
utilizza DS come segmento implicito (se non diversamente specificato nel prefisso)
MOV ax,[bp] utilizza SS come segmento implicito (se non diversamente specificato nel prefisso)

In ogni caso il programma *.com prevede che tutto sia dentro i 64k
quindi assume che CS=ES=SS=DS..
e allora non c'e' necessita' di specificare valori diversi per il segmento.

se si volesse scirvere/leggere in un area di memoria esterna ai 64k
si possono comunque cambiare i valori del registro DS

MOV AX, B000 (carica in AX il valore B000)
MOV DS,AX (carica in DS il valore di AX)
MOV AX,[SI] (carica in AX il valore della memoria B000:SI )

con LDS si dovrebbe prima scrivere il valore di DS in area memoria dati, e poi richiamare
la funzione LDS che assieme a DS carica pure l'operando destinazione..

IMHO..
StateCity è offline   Rispondi citando il messaggio o parte di esso
Old 26-04-2009, 16:38   #60
StateCity
Bannato
 
Iscritto dal: Jan 2009
Messaggi: 194
Quote:
Originariamente inviato da misterx Guarda i messaggi
però non hai risposto alla mia domanda e cioè se è il programmatore a variare l'indirizzo contenuto in DS.
Mi chiedo anche come fa la CPU a leggere all'indirizzo DS nel senso che, ho capito che tale indirizzo viene usato dai registri AX, etc.. ma come avviene l'incremento per puntare al prossimo dato per la prossima istruzione ?
La CPU esegue le istruzioni indirizzate da CS:IP
e IP viene incrementato automaticamente alla frequenza di clock..

x Gli altri registri e' compito del sistema operativo dare i valori iniziali per il programma..
in modo che non vadano ad interferire con altri processi della cpu

Ultima modifica di StateCity : 26-04-2009 alle 16:40.
StateCity è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
Il Motorola Edge 70 non ha più se...
Alcuni Galaxy S26 utilizzeranno il chip ...
Amazon, ecco i super sconti del weekend:...
Scovare un bug di sicurezza sui disposit...
Offerta Amazon su NordVPN: proteggi 10 d...
ECOVACS DEEBOT X8 PRO OMNI in offerta su...
Scope elettriche Tineco in offerta su Am...
Offerta Amazon sui robot EUREKA J15 Ultr...
Chrome disattiverà automaticament...
Tornano tutti e 4 i colori disponibili p...
Super sconto su iPhone 16: Amazon abbass...
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: 16:48.


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