Jump to content
PLC Forum


Piero Darlato

Processore 8088 e segmentazione

Recommended Posts

Piero Darlato

Ciao a tutti, sto approfondendo un pò di assembler dell'8088 e ho letto questo : il processore per poter indirizzare + di 64k utilizza due word, esempio

 

0AB1:0001

 

ho letto anche che i segmenti iniziano ogni 16byte e sono lunghi 64k.
Quindi il primo segmento spazia tra questi indirizzi : 0AB1:0001 e 0AB1:FFFF

 

il secondo segmento da dove inizia ? da 0AB2:0001 ? o si sovrappone all'indirizzo 0AB1:0010 ?

 

Leggo anche che si parla di indirizzo assoluto, ma che significa la cella di memoria a partire da 0 ?

 

Edited by Piero Darlato

Share this post


Link to post
Share on other sites

Livio Orsini
19 minuti fa, Piero Darlato scrisse:

Ciao a tutti, sto approfondendo un pò di assembler dell'8088 e ho letto questo

 

Mamma mia questo processore era vecchio ed obsoleto gia a metà anni 80 del secolo scorso!

Dovrei avere sugli scaffali ancora un paio di manuali; magari con calma me li vado a guardare.

22 minuti fa, Piero Darlato scrisse:

il secondo segmento da dove inizia ? da 0AB2:0001 ? o si sovrappone all'indirizzo 0AB1:0010 ?

perchè mai dovrebbe sovrapporsi?

23 minuti fa, Piero Darlato scrisse:

Leggo anche che si parla di indirizzo assoluto, ma che significa la cella di memoria a partire da 0 ?

 

Se ricordo bene, ma non lo giureri, l'indirizzo assoluto è quello completo di segmento, mentre quello relativo indica solo la posizione all'interno del sgmento. Se lavori sempre all'interno del segmento le operazioni di salto e di indirizzamento son più veloci.

Share this post


Link to post
Share on other sites
Piero Darlato

Eppure il libro dice che il secondo segmento inizia dopo 16 byte, ed è qui che nasce la confusione : si sovrappongono ?

 

 

Share this post


Link to post
Share on other sites
Darlington
1 ora fa, Livio Orsini scrisse:

Mamma mia questo processore era vecchio ed obsoleto gia a metà anni 80 del secolo scorso!

 

Che commercialmente sia vecchio significa poco o nulla, anche 386 è un'architettura superata eppure quei processori vengono ancora prodotti ed usati largamente, specie in aeronautica dove conta più l'affidabilità che le prestazioni pure (un processore stra iper collaudato è garantito che non presenta bug hardware che possono compromettere il malfunzionamento della macchina nel momento più infelice, senza contare l'efficienza del processo produttivo migliorato durante gli anni ed il fatto che considerando l'iter di certificazioni che dovrebbe passare un eventuale nuovo hardware, se non c'è realmente la necessità di aggiornare non ne vale la pena).

 

Non mi stupirei di sapere che nel settore industriale, medicale o simili esistono tuttora applicazioni embedded realizzate con 8088 o 286, anche recenti...

Edited by Darlington

Share this post


Link to post
Share on other sites
_angelo_

Forse posso aiutare,

 

se funziona come l'8086 si usa l'indirizzamento 16bit real mode:

Si indirizza l'address space sommando due registri:

BASE:OFFSET

 

dei 20 bit risultanti, i 12bit centrali si sovrappongono. Fai 20 bit totali, infatti queste cpu non andavano olre il 20esimo bit (1 mega, memoria convenzionale fino a 512K + memoria alta, per la "estesa" si usava famoso gate-A20 (21esimo bit)).

Quindi puoi combinare base e offset come vuoi, per avere l'indirizzo finale:

mov si, 0xa000;

mov dx, 0x100;

mov ax, si:[dx]  

 

Sovrapponi (fai un or logico) i 12 bit centrali, vuol dire che in ax avrai la word puntata da 0xa0100;

 

Edited by _angelo_

Share this post


Link to post
Share on other sites
Livio Orsini
1 ora fa, _angelo_ scrisse:

se funziona come l'8086 si usa l'indirizzamento 16bit real mode:

 

Dai miei ricordi 8088 e 8086 erano indentici tranne che per il bus di dati che nello 8088era da 8 bits e non da 16.

 

2 ore fa, _angelo_ scrisse:

Si indirizza l'address space sommando due registri:

BASE:OFFSET

 

Si ora mi ricordo. Anche se io in effetti non usavo lo 8088 ma la versione più moderna lo 80188, spesso accoppiato con lo 80187 coprocessore aritmentico.

Con buona pace di Darlington, già a metà anni '90, nell'industria, eran già tutti o quasi, migrati al 386Ex.

Share this post


Link to post
Share on other sites
ilguargua
29 minuti fa, Livio Orsini scrisse:

nell'industria, eran già tutti o quasi, migrati al 386Ex.

Correggetemi se sbaglio, ma mi sembra di ricordare che il 386 è stato il primo processore (Intel) in grado di eseguire codice in "modalità protetta", un bel salto, sopratutto per i sistemi operativi. Infatti Linus Torvalds prese la palla al balzo e creò Linux, che aveva proprio bisogno di quella specifica funzione, prima riservata a processori troppo costosi per essere accessibili ad uno studente.

 

 

Ciao, Ale.

Share this post


Link to post
Share on other sites
_angelo_
44 minuti fa, ilguargua scrisse:

Correggetemi se sbaglio, ma mi sembra di ricordare che il 386 è stato il primo processore (Intel) in grado di eseguire codice in "modalità protetta", un bel salto, sopratutto per i sistemi operativi. Infatti Linus Torvalds prese la palla al balzo e creò Linux, che aveva proprio bisogno di quella specifica funzione, prima riservata a processori troppo costosi per essere accessibili ad uno studente.

 

Gia.

 

Anche nei moderni x86_64 (amd64) ci si puo esercitare con codice real mode, o anche usando emulatori come virtualbox / bochs. Con firmware "BIOS" (e emulatori in genere) si parte in real mode, poi si salta in protected mode, e poi nel piu attuale "long" mode (64bit).

 

Con firmware UEFI invece cambia tutto, credo si parta gia in protected mode.

 

PS: Per Livio, avrei una domanda in PM.

 

Ciao

 

Edited by _angelo_

Share this post


Link to post
Share on other sites
Livio Orsini
13 ore fa, ilguargua scrisse:

Correggetemi se sbaglio, ma mi sembra di ricordare che il 386 è stato il primo processore (Intel) in grado di eseguire codice in "modalità protetta

 

Si ed il 386Ex, o 386 Embedded, era la versione che Intel licenziò per applicazioni industriali quando produsse il 486 per applicazioni PC.

Con il 386Ex, progettai la mia ultima scheda a microprocessore per applicazioni industriali, era l'anno 1995.

 

12 ore fa, _angelo_ scrisse:

PS: Per Livio, avrei una domanda in PM.

 

Mandami pure il messaggio, non c'è alcun problema.

Share this post


Link to post
Share on other sites
_angelo_

Beh complimenti, una scheda 386 dev'essere stata piuttosto complessa!

 

Io ho lavorato qualche anno su degli 80186 turbo, che il costruttore vendeva come RISC - style,  cioè  dichiarava 1 istruzione per ciclo di clock. Alla fine comunque set di istruzioni 8086 e' arrivato fino agli odierni 64bit, cambiano nomi dei registri , tipo ax >eax >rax e ci sono ovviamente istruzioni nuove ma il set istruzioni base e' lo stesso di 8086 e lavorare in indirizzamento "flat" e' molto più semplice.

 

PS: inviato msg privato.

Share this post


Link to post
Share on other sites
Livio Orsini
7 ore fa, _angelo_ scrisse:

Beh complimenti, una scheda 386 dev'essere stata piuttosto complessa!

 

Lo Hw, se hai una buona abitudine a progettare dispositivi con questa componentistica, non lo è poi tanto.

E il Sw che diventa pesante.Scrivere in Asm per questi processori è veramente faticoso.

 

Nei miei archivi dovrei avere ancora gli schemi cartacei delle varie schede embedded a partire da quella con lo 8051, per passare a quella con lo 81186/187 ed alla fine con il 386ex. racchiudono un arco temporale di circa 15 anni

Edited by Livio Orsini

Share this post


Link to post
Share on other sites
_angelo_

Hai fatto un buon percorso, il vecchio 8051 lo conosco anch'io, che per altro lo hanno rifatto potenziato in tutte le salse, specie la Dallas, ho sviluppato per hobby un po' di schede con quei Dallas xx51 tanti anni fa, anche un po di architettura Harvard non guasta a capire il futuro che ormai sui nuovi "system on chip" multicore e' di innumerevoli miscele Harvard e Von Neumann.

 

In assembly 8086 ho scritto anche un intero client di posta elettronica tanti anni fa, cosi per imparare, ma in modalita "flat" 32 bit, che e' ben piu semplice rispetto alla modalita real mode base:offset con cui hai lavorato, come puntatori usi un unico registro 32bit (oggi a 64) e hai tutto l'address space virtuale a disposizione: 

 

mov eax, [esi]      ; dove esi in modalita' protetta/flat erano i 4GB virtuali della macchina

 

 

Se a qualcuno interessa, c'e' il compilatore gratuito masm32 per giocare l'assembly su PC windows, e molti tutorial

http://service.scs.carleton.ca/sivarama/asm_book_web/free_MASM.html

 

In Linux, il mio preferito, c'e' gia gcc, gas, C con inline assembly, debugger tutto gratis. La sintassi cambia tuttavia, e' AT&T, ma ci si abitua presto.

 

Edited by _angelo_

Share this post


Link to post
Share on other sites
Livio Orsini
2 ore fa, _angelo_ scrisse:

Hai fatto un buon percorso, il vecchio 8051

 

A dir la cerità io ho iniziato ancora con lo F8, con lo Sc/Mp, con gli 8085 e Z80, oltre ad aver sviluppato CPU booleane con lo ICU motorola ICU16000 (la sigla non so se è esatta perchè dopo oltre 40 anni ho qualche ... problema di memoria.)

 

Anzi a dir la verità il primo microprocessore che ho studiato, senza peraltro realizzare alcun progetto con esso, è stato l'antenato dello F8 giunto in Olivetti direttamente dai laboratori Farchild USA. Non era ancora chiamato microporocessore ma era visto solo come un LSI. Con questo l?olivetti si riproponeva di realizzare la nuova (era l'anno 1972) generazione di calcolatrici.

 

Comunque nel 1987 ho realizzato, con una piccola scheda basta su 8052, un controllore embedded in grado di chiudere un anello PID in meno di 5 ms, pur lavorando in virgola mobile. Usai quello che io reputo che sia, ancora oggi, il miglior linguaggio per applicazioni in real time: il PLM. Questo linguaggio deriva dal PL1 (program language 1: il primo linguaggio strutturato). Il CERN derivò dal PL1 il PL11 per il mitico PDP11 (vera pietra migliare nel campo dei calcolatori di processo). Da questo Intel derivò il PLMxx, Program Language Micro dove con xx si individua la serie dei processori; si iniziò con PLM80, per poi passare al PLM51 e PLM86. Poi Itel abbandonò lo sviluppo di compilatori dedicati ai suoi micro.

 

Con quella schedina, che poteva essere applicata a bordo di un convertitore per motori in cc, realizzai tra l'altro un controllo di avvolgitura che anò ad equipaggiare centinaia di macchine di una notissima azienda USA produttrice di pellicole e carta fotografica.

Edited by Livio Orsini

Share this post


Link to post
Share on other sites
_angelo_

Ooh interessante, no, fino al PLM non ci arrivo, mondo sconosciuto per me, ho dato una letta in rete ora, si vedo che era un linguaggio performante, proprio perche' creato ad hoc per determinati micro quindi accedeva alle porte I/O, memoria etc, senza troppi passaggi. Eh si il mondo e' cambiato. Per curiosita', poi dopo tutte queste schede hai cambiato ramo ?

Share this post


Link to post
Share on other sites
Livio Orsini
6 minuti fa, _angelo_ scrisse:

poi dopo tutte queste schede hai cambiato ramo ?

 

No o continuato sino a quando, nel 2001, sono andato in pensione; ma da allora ho continuato sviluppando Hw e Sw con PIC e DSPic. In questi ultimi anni ho abbandonato lo sviluppo di Hw

Share this post


Link to post
Share on other sites
_angelo_

Ah ok :) Beato te. Io avro ancora un 15 anni davanti ma cerco di divertirmi, il mio cuore e' su Linux embedded , :)

Share this post


Link to post
Share on other sites
Livio Orsini
1 ora fa, _angelo_ scrisse:

Beato te

 

Mica tanto, visto che son molto più vecchio di te.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...