Avatar billede bumle90 Nybegynder
22. maj 2003 - 10:06 Der er 19 kommentarer og
1 løsning

generelle CPU spg.

Når man i en CPU har en stack(S), en stack pointer(SP), en datapointer(DPTR), en program counter(PC) og en række registre, så har jeg lidt svært ved at skelne mellem hvad der er hvad, og hvad de forskellige lagringspladser bruges til.
Jeg ved at PC holder styr på hvilken instruktion der skal udføres som den næste. Disse instruktioner som PC peger på ligger i en hukommelse (Hvor ?)
Desuden, hvad er det DPTR peger på?
Den peger så vidt jeg ved på en addresse ude i noget ekstern RAM. Korrkt ?
Hvis ja..hvorfor er det smart at bruge addresseplads derude...Altså et helt andet sted?
Og til sidst, Stacken...hvad er det og hvad bruges den til. Det samme med stackpointeren?
Så vidt jeg har forstået er det noget med nogle subrutinekald(interrupts). Når et sådant kommer, bliver registreværdierne pushet op på stacken.
Når subrutinekaldet er færdigt, bliver disse poppet tilbage til registrene igen, så CPUen kan fortsætte hvor den slap før subrutinekaldet.
Er det helt forkert forstået ?
Hvis der er nogle der kan være så venlige at forklare mig alt dette lidt uddybende ville jeg være glad...Takker på forhånd.
Avatar billede arne_v Ekspert
22. maj 2003 - 10:39 #1
Program kode ligger i normal hukommelse. Og PC peger på hvor man er
kommet til.

Stak ligger også i normal hukommelse og bruges til:
  - automatisk variable (i C alle variable erklæret inde i
    funktioner som ikke har static keyword)
  - diverse i forbindelse med funktions kald
  - memory allokeret med alloca (hvis C koden er >20 år gammel)

SP peger på top/bund af stak. Og allokering af 4 bytes gøres ved
at tælle SP 4 op eller ned (afhængig af hvordan stakken vender).

PUSH = lig en værdi på toppen af stakken
POP = fjern en værdi fra toppen af stakken

DPTR er ikke et universelt begreb.
Avatar billede arne_v Ekspert
22. maj 2003 - 10:41 #2
Stakkens modsætning er heap som indeholder bl.a. memory allokeret
med malloc (C/C++) og new (C++).

Hvad der sker ved et funktions-kald er meget system specifikt.

Nogle systemer pusher alle registere ved call og poper alle
registre ved ret.

Nogle systemer bruger registre til både argumenter og retur værdi.

[det første er almindeligt på CISC - det andet er almindeligt på RISC]
Avatar billede soreno Praktikant
22. maj 2003 - 10:47 #3
Når en process loades af Operativ Systemet peges på kodesegmentets start.

For hver process som loades opretter Operativ Systemet en "Process Control Block" som indeholder info om processens tilstand.

Process state: new, ready, running, waiting, halted, zombie (selvfølgelig afhængig af hvilket operativ system der snakkes om).

Program counter: Peger på adressen på næste instruktion der skal eksekveres.

CPU registers: opdateres med processens aktuelle register indhold (sker ved et context switch).

PCB kan også indeholde flere informationer men de er ikke så relevante i denne sammenhæng.


Dvs. operativ systemet sørger for at lagre hver process' information (i RAM).
Avatar billede bumle90 Nybegynder
22. maj 2003 - 10:48 #4
oki...Lige præcis det jeg er i gang med at lære om er en mikroprocessor. En 8051'er.
Så dvs. at registerværdierne ikke blir gemt på stacken vedet interrupt ?
Avatar billede soreno Praktikant
22. maj 2003 - 10:50 #5
Det er jo Operativ Systemet der bestemmer hvad der skal gemmes og hvad der ikke skal.

Der er også forskel på hardware og software interrupt.
Avatar billede soreno Praktikant
22. maj 2003 - 10:53 #6
En processor er jo bare en dum chip der gør hvad den får besked på :-)
Avatar billede arne_v Ekspert
22. maj 2003 - 11:06 #7
Det er ihvertfald ikke operativ-systemet det bestemmer hvad der
skal pushes/popes på stak.

Der er to muligheder:

1)  det kan gøres hardware mæssigt af "call" og "ret" instruktioerne

2)  det kan være defineret i en calling convention

    assembler => programmøren skal selv huske det

    high level language => compileren skal sørge for det
Avatar billede arne_v Ekspert
22. maj 2003 - 11:08 #8
Nogle systemer kan have mere end en calling convention.
Avatar billede bumle90 Nybegynder
22. maj 2003 - 11:22 #9
oki...tak for de gode svar....Er det oki jeg lige lader spørgsmålet være åbent lidt endnu ?
Avatar billede arne_v Ekspert
22. maj 2003 - 11:29 #10
Selvfølgelig.
Avatar billede bumle90 Nybegynder
22. maj 2003 - 14:11 #11
Har du nogensinde hørt om en DPTR før ?
Avatar billede soreno Praktikant
22. maj 2003 - 14:17 #12
Jeg søgte lige lidt sporadisk på goole og fandt denne bog:
http://www.yorku.ca/mack/8051book.html

Måske biblioteket har den ?
Avatar billede arne_v Ekspert
22. maj 2003 - 14:19 #13
Nej. DPTR siger mig ikke noget.

Men jeg kender heller ikke 8051.
Avatar billede bumle90 Nybegynder
22. maj 2003 - 18:52 #14
et spørgsmål til hvis det er i orden...Du skal nok få flere pts. hvis du vil ha det.
Men i den 8051 jeg læser om kører krystallen med en frekvens på 11.059MHz
Hvad jeg ikke forstå er at en machincycle er på 12 crystal pulser. Betyder det så ikke at processoren kun kører med en hastighed af ca. 1 MHz ?
Avatar billede bumle90 Nybegynder
22. maj 2003 - 18:54 #15
Undskyld... 11059 Hz må det være :)
Avatar billede bumle90 Nybegynder
22. maj 2003 - 18:54 #16
Hvorfor er 1 machincycle ikke bare på 1 clockpuls ?
Avatar billede arne_v Ekspert
22. maj 2003 - 19:17 #17
Det ved jeg ikke.

Det mener jeg også at det normalt er.
Avatar billede jakoba Nybegynder
24. maj 2003 - 01:07 #18
for at kunne virke skal de forskellige busser indin CPUen konstant synkroniseres. Det gøres med clock-pulsen der sørger for at et resultat først bliver sendt videre når den giver signal.

forestil dig fc en addition:    111111111 + 00000001

der kommer mente hele vejen op så additionen af de laveste bit er færdig længe før de højeste bit er bergnet (de skal jo vente på at menten når op til dem)

Men det er absolut ikke nogen naturlov at der skal gå en hel clockpuls imellem de synkroniseringer. i den gamle 6800 CPU var der 4 (jep FIRE) synkroniseringer  for hver clock-cyklus.

De 2 er nemme nok: en når clock signalet stiger, og en når det falder
De 2 andre blev lavet ev at forsinke klokken lidt og så også bruge stigende og faldende flanke der.

Den store bagdel ved metoden var så at imens 8080 kunne prale med en 2 MHz clock havde 6800 'kun' en 0,5 MHz clock. Jeg tror det var en god del af grunden til at Intel vandt CPU-krigen, de lød hurtigere, selvom der reel ikke var nogen forskel i hastigheden på de to processorer.

mvh JakobA
Avatar billede arne_v Ekspert
02. juni 2003 - 20:14 #19
bumle>

Tid at lukke spørgsmålet ?
Avatar billede bumle90 Nybegynder
03. juni 2003 - 08:10 #20
Yep..sorry...:)
Gode svar i har givet. Tusind tak...Bukker dybt og ærbødigt :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester