praegune kellaaeg 22.06.2025 08:49:25
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Wiltz
HV Guru
liitunud: 28.01.2002
|
08.01.2005 19:28:02
registrid protsessoris, adresseerimine jms... |
|
|
mida kujutavad endast protsessoris paiknevad registrid, on nad samamoodi mingi kogus mälu, nagu seda on cache ja ram? mida neis registrites täpsemalt hoitakse ja milleks nad vajalikud on? kas registritest loetakse ja sinna salvestatakse kogu arvutusteks vajalik ja arvutustest saadud data, või loetakse sealt vaid mingeid aadresse datale, mis tuleb põhimälust, kõvakettalt?
üldiselt, kui keegi oskab neile kysimustele eestikeelseid ja arusaadavaid vastuseid anda, oleks väga nimelt on suht võimatu sellest asjast aru saada materjalide põhjal, kust õppima pean
kindlasti oleks kasu ka mõnedest headest linkidest (eesti või inglise keeles), ja eriti tore oleks, kui seal kirjeldataks kogu seda süstemaatikat suhtkoht a'st ja o'st, sest väga raske on aru saada materjalidest, kus bp+bx+nihe lihtsalt annavad efektiivaadressi ja see kõik on väga loogiline
_________________ "There will be an entire generation of deaf audio enthusiasts who were brought up on CD players and Best Buy receivers, electronic music and so on. These people won't know good sound if it bites them in the ass, so in the end the industry wins." |
|
Kommentaarid: 275 loe/lisa |
Kasutajad arvavad: |
   |
:: |
9 :: |
3 :: |
226 |
|
tagasi üles |
|
 |
wolfe
HV kasutaja

liitunud: 01.07.2004
|
|
Kommentaarid: 14 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
14 |
|
tagasi üles |
|
 |
Wiltz
HV Guru
liitunud: 28.01.2002
|
09.01.2005 03:34:46
|
|
|
üllatavalt lihtne, aga täitsa kasulik kokkuvõte asjast oli see HSW kirjutis! tegi asja selgemaks küll, eriti just sellel päris algtasandil
aga kui kellelgi on veel häid linke selle teema kohta, andke aga tulla!
_________________ "There will be an entire generation of deaf audio enthusiasts who were brought up on CD players and Best Buy receivers, electronic music and so on. These people won't know good sound if it bites them in the ass, so in the end the industry wins." |
|
Kommentaarid: 275 loe/lisa |
Kasutajad arvavad: |
   |
:: |
9 :: |
3 :: |
226 |
|
tagasi üles |
|
 |
stepzter
HV veteran

liitunud: 11.11.2001
|
09.01.2005 06:05:49
|
|
|
Korralike öinke kahjuks anda ei oska, aga kui tõesti huvitab see asi, siis oskan raamatut soovitada. Hennesy & Patterson "Computer Architecture: A Quantitative Approach". Paras mürakas raamat on, mida netist tellides peaks kuskil 800 krooni eest kätte saama, kui juhtud ise käima või tunned kedagi kes käib TTÜ's siis seal raamatukogus on mõned eksemplarid seda olemas. Ma kahjuks ei tea, mis nende poliitika ülejäänud inimkonnale laenutamise osas on. Samuti võib sirvida mõne vanema ja lihtsama protsessori manuali. Intel 8080 oma saab näiteks siit.
Lühidalt kokkuvõttes on registrid pisikesed mälu jupid, kust protsessori tuum masinkäskude alusel loeb andmeid ja kirjutab andmeid. Iga protsessori puhul on defineeritud mingi hunnik registreid mida saab tehete tegemiseks kasutada. Üldine loogika on umbes selline, et "ADD eax, ebx" käsu peale ühendab protsessor liitmisüksuse ühele sisendile eax registri lugemispordi ja teisele sisendile registri ebx lugemispordi ning kui liitmine on tehtud, mis võib olla näiteks järgmine protsessori takt, ühendab liitmisüksuse väljundi registri eax kirjutamissisendisse. Registrite kasutamisvõimalused sõltuvad protsessori käsustikust. Aga üldjuhul on käsustikus muuhulgas sellised käsud
"Liida/Korruta/Jaga/Lahuta registris x olevad andmed ja registris y olevad andmed"
"Salvesta registrisse x arv y" (arv y pannakse otse käsku kirja)
"Salvesta registrisse x mäluaadressil y olevad andmed" (mälu aadress pannakse otse käsku kirja)
"Salvesta registrisse x andmed, mis asuvad registris y oleval aadressil"
"Salvesta mäluaadressile x registris y asuvad andmed"
"Salvesta registris x olevale mäluaadressile registris y olevad andmed"
"Hüppa programmi täitmisega aadressile x"
"Hüppa programmi täitmisega registris x olevale aadressile"
"Kui register x on suurem/võrdne väiksem kui 0 hüppa aadressile y"
RISC tüüpi protsessorid umbes sellise käsustikuga piirduvadki, CISC tüüpi protsessoritel on igasugu kavalaid käske juurde leiutatud.
Üks hea näide.
Zilog Z80 manual kirjutas: |
INIR
Description:
The contents of register C are placed on the bottom half (A0-A7) of the address
bus to select the I/O device. Register B is used as a byte counter, and its
contents are placed on the top half (A8-A15) af the address bus at this time.
Then one byte from the selected port is placed on the data bus and written to the
CPU. The contents of the HL register pair are pointer to store the redden byte
in memory. The register pair HL is incremented, the byte counter B is decremented.
If decrementing causes B to go to zero, the instruction is terminated. If B is not
zero, the instruction is repeated.
|
|
|
Kommentaarid: 26 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Wiltz
HV Guru
liitunud: 28.01.2002
|
09.01.2005 18:14:40
|
|
|
ttü jah, arvutid 2 on aineks...homme siis üritan raamatukogust sellist raamatut välja otsida! loodetavasti seal on asja seletatud natuke rohkem algusest, kui minu materjalides
register kui selline on nüüd nagu enamvähem arusaadavaks muutunud, kuid segane on, kuidas registri sisu võib peale mingi kindla arvutuseks vajaliku muutuja või käsu olla veel näiteks mingi aadress? ALU, mis saab neist registrist käske, ei oska ju selle aadressiga midagi peale hakata? arusaamatu on ka see, milleks kõik need erinevad registrid vajalikud on, ja miks on osadel nii spets nimed (SP- stack pointer)? tundub, nagu oleks need ainult mingite kindlate andmete hoidmiseks, aga kuskil seda konkreetselt seletatud ei ole!
omaette teema tundub olema veel segmentregistrid CS, DS, SS, ES. milleks nad täpselt vajalikud on, on ka arusaamatu. selline mulje on jäänud, nagu oleks need registrid mingi vahelüli ram'i ja otseselt ALU'ga seotud registrite ax, bx jne vahel. kuid pole kohe üldse kindel, et see nii on
igatahes tänud, uurin-puurin edasi ja näis, kas saab targemaks...
_________________ "There will be an entire generation of deaf audio enthusiasts who were brought up on CD players and Best Buy receivers, electronic music and so on. These people won't know good sound if it bites them in the ass, so in the end the industry wins." |
|
Kommentaarid: 275 loe/lisa |
Kasutajad arvavad: |
   |
:: |
9 :: |
3 :: |
226 |
|
tagasi üles |
|
 |
stepzter
HV veteran

liitunud: 11.11.2001
|
09.01.2005 21:35:12
|
|
|
RISC protsessorites on harva käske, mis lubavad aritmeetilises käsus ühe operandina kasutada kaudadresseerimist (käsus on näidatud ära, kust loetakse mäluaadress kust operand võtta), aga x86 kui CISC käsustik sisaldab päris palju selliseid käske. Vanades protsessorites, kus korraga täideti niikuinii ainult ühte käsku, käis kaudadresseerimine umbes nii, et mäluüksusesse saadeti registrist aadress, kust lugeda on vaja ning seejärel saadeti ALU üheks operandiks otse antud operand ja teiseks operandiks ühendati sisend andmesiinilt. Uutes protsessorites on konveieris üks aste eraldi puhver, kus käsud istuvad, kuni operandid saabuvad, kas siis registrist või registri alusel mälu alamsüsteemist. Sealt astmest suunatakse käsk koos operandidega juba tavaliselt ALU'sse.
SP ehk stackpointer register sisaldab mäluaadressi kuhu saab andmeid spetskäskudega kõrvale panna. Näiteks funktsiooni välja kutsumiseks CALL käsuga suurendatakse SP registrit 4 võrra (32 bitti = 4 baiti), kirjutatakse programmi täitmise asukoht (PC ehk program counter register) mäluaadressile, kuhu viitab SP ning tehakse hüpe CALL käsus viidatud aadressile. Funktsioonist tagasi tulemiseks on RET käsk, mis loeb SP registris olevast aadressilt, kus jäi funktsiooni välja kutsudes programmi täitmine pooleli, teeb hüppe sellele aadressile ning vähendab SP registrit 4 võrra. See tähendab seda, et kui programmi täitmine peatada ja uurida, mis asub mälus SP poolt viidatud aadressil, saab teada, kust kohast kutsuti välja hetkel täidetav funktsioon.
Segment registritega midagi väga keerulist ei ole. Tasub x86 käsustiku kirjeldusest vaadata kuidas neid täpselt kasutatakse. Põhimõtteliselt kui mälust lugemisel ei kasutata otse-adresseerimist vaid mingit teist adresseerimis rezhiimi, siis ehitab mäluüksus aadressist ja segmentregistrite sisust täieliku mäluaadressi kokku. See võimaldab näiteks 16 bitise aadressiga kasutada rohkem kui 64kB mälu, tõsi küll segment registritega programmeerimine on sellisel juhul tohutult veaaltis ja keeruline.
|
|
Kommentaarid: 26 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Wiltz
HV Guru
liitunud: 28.01.2002
|
09.01.2005 23:32:07
|
|
|
ütlesid selle SP registri seletuse juures, et seda suurendatakse 4byte'i, 32bit'i võrra, kõik muu oli nagu suht lihtne ja loogiline, aga mida selle suurendamise ja vähendamise all mõista? mis seal Sp registris enne seda on, kui teda 4 võrra suurendatakse?
kas protsessori mingis üksuses on põhimõtteliselt eraldi kirjas kõikvõimalikud (põhi)mälu aadressid? ja kas segmentregistrid ongi need registrid, mis sisaldavad vaid mingit osa füüsilise mäluaadressi "arvutamiseks" vajalikust aadressist ja ei midagi muud? kui mingi programm loeb ennast põhimällu, kas sis edastatakse segmentregistitesse aadressid, kuhu see proge asetab põhimälus oma operatsioonid ja data?
kas stack=cache mäluga (L1, L2 jne)?
_________________ "There will be an entire generation of deaf audio enthusiasts who were brought up on CD players and Best Buy receivers, electronic music and so on. These people won't know good sound if it bites them in the ass, so in the end the industry wins." |
|
Kommentaarid: 275 loe/lisa |
Kasutajad arvavad: |
   |
:: |
9 :: |
3 :: |
226 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
10.01.2005 00:05:42
|
|
|
SP's hoitakse stacki aadressi. Stacki salvestatakse iga funktsiooni välja kutsumisel kõik tema parameetrid ning program counter(mis näitab programmi järgmist täidetavat käsku). Kui funktsioon lõpetab loetakse stackist vana program coutner ning jätkatakse tööd mis tuleb peale funktsiooni täitmist.
Stack on tõenäoliselt jah mingis kiiremas mälus kuid kui cache täis saab ei ole mingeid probleeme see kusagile mujale paigutada, ainult aeglaseks muutub.
4 baidi võrra muudetakse SP'd ainult 32bitistel masinatel, 64'stel see vastavalt 8 baiti.
|
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
stepzter
HV veteran

liitunud: 11.11.2001
|
10.01.2005 03:22:52
|
|
|
Leidsin ühe päris hea allika selle kohta: http://en.wikipedia.org/wiki/X86
SP funktsioon on sisuliselt võimaldada registrite sisu (kaasa arvatud programmi täitmise järg, mis on program/instruction counter registris) kirjutada ajutiselt mällu, et seda saaks pärast tagurpidi tagasi lugeda. SP on lihtsalt järjehoidja, mis näitab, kuhu saab andmeid lisada, kui veel andmeid kõrvale tahab panna ja kust lugeda tuleb, kui tahab andmeid tagasi saada.
Näide assembleris. (mu eelmine seletus oli tagurpidine, andmeid lisatakse mällu tagurpidi, ehk andmete kirjutamisel stacki vähendatakse SP'd)
; Ütleme, et SP väärtus on 10h, mälu aadressitel 00h-13h on
; 0000h: 00 00 00 00 04h: 00 00 00 00 08h: 00 00 00 00 0Ch:00 00 00 00
; 0010h: 00 00 00 00
; ja EAX register sisaldab väärtust 00 00 00 10h, EBX 00 00 00 20h ja ECX 00 00 00 30h
PUSH EAX ; Kirjutab ECX SP poolt näidatud aadressile (10h) ja teeb SP := SP - 4 (0Ch)
PUSH EBX ; Kirjutab EBX SP poolt näidatud aadressile (0Ch) ja teeb SP := SP - 4 (08h)
PUSH ECX ; Kirjutab EAX SP poolt näidatud aadressile (08h) ja teeb SP := SP - 4 (04h)
; Siin on mingi kood, mis võib oma äranägemise järgi EAX EBX ja ECX registreid kasutada
; SP = 08h, mälu sisu on
; 0000h: 00 00 00 00 04h: 00 00 00 00 08h: 00 00 00 30 0Ch:00 00 00 20
; 0010h: 00 00 00 10
POP ECX ; Teeb SP := SP + 4 (08h), Loeb SP poolt viidatud aadresilt (08h) väärtuse ja kirjutab selle registrisse ECX
POP EBX ; Teeb SP := SP + 4 (0Ch), Loeb SP poolt viidatud aadresilt (0Ch) väärtuse ja kirjutab selle registrisse EBX
POP EAX ; Teeb SP := SP + 4 (10h), Loeb SP poolt viidatud aadresilt (10h) väärtuse ja kirjutab selle registrisse EAX
; EAX EBX ECX ja SP registrite väärtused on nüüd täpselt samad, mis enne seda koodilõiku
[EDIT] Segmentide kohta saab lugeda siit: http://en.wikipedia.org/wiki/X86_assembly_programming_in_real_mode
|
|
Kommentaarid: 26 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Wiltz
HV Guru
liitunud: 28.01.2002
|
10.01.2005 05:43:49
|
|
|
kas sul seal koodis raudselt kirjavigu ei ole?
kui push eax kirjutab ecx'i aadressile 10h (ecx'i väärtus on 00 00 00 30h), kuidas on mälu sisu 0010h pärast siis hoopis 00 00 00 10? (ja 08h - 00 00 00 30) minu loogika järgi peaks see ikka vastupidi olema?
"Siin on mingi kood, mis võib oma äranägemise järgi EAX EBX ja ECX registreid kasutada
; SP = 08h, mälu sisu on "
siin on SP 08h, aga varemalt siin: "PUSH ECX ; Kirjutab EAX SP poolt näidatud aadressile (08h) ja teeb SP := SP - 4 (04h) " tehakse SP ju hoopis 04h'x?
...sul on näites toodud, et EAX sisaldab väärtust 00 00 00 10h, kas ta saab näiteks sisaldada ka väärtust 10 00 00 00 (mis on 10nd sysis 268435456) või näiteks 1F FF FF FF, ehk siis et kas see väärtus saab olla 10nd arvudes 0'st kuni ...päris mitmesaja miljonini? või käsitletakse neid 32bitiseid 00 blokke nagu eraldi? muutuja väärtus registris oleks ju ikka kogu selle xx xx xx xx rea väärtus?
_________________ "There will be an entire generation of deaf audio enthusiasts who were brought up on CD players and Best Buy receivers, electronic music and so on. These people won't know good sound if it bites them in the ass, so in the end the industry wins." |
|
Kommentaarid: 275 loe/lisa |
Kasutajad arvavad: |
   |
:: |
9 :: |
3 :: |
226 |
|
tagasi üles |
|
 |
stepzter
HV veteran

liitunud: 11.11.2001
|
10.01.2005 06:04:53
|
|
|
On jah kirjaviga, stack pointer on seal keskel 04h (stack pointer on tegelikult 32 bitine väärtus seega 00 00 00 04h oleks õigem öelda), registrite sisuvõib olla suvaline 32 bitine väärtus 0 kuni 4 miljardit või -2 kuni 2 miljardit sõltuvalt tõlgendusest. Ma jagasin mälu sisu kahesteks gruppideks lihtsalt, et oleks näha mälu baidi kaupa adresseerimine. Teoreetiliselt on võimalik ka selline süsteem, kus mälu adreseeritakse 4 baidi kaupa ja 32bitise aadressiväljaga ehk 4miljardi aadressiga saab märkida ära 16GB mälu. Muideks x86 käsustikus on olemas käsud, millega kasutatakse näiteks ainult 16alumist bitti registris.
|
|
Kommentaarid: 26 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
26 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
10.01.2005 13:41:42
|
|
|
IA32 arhidektuuriga masinatel alates P6'st saab adresseerida kuni 64GB mälu 4GB segmentide(page) kaupa. Kahjuks pole hetkel vastavat inteli arhidektuuri manuali kõrval et asja täpsemalt uurida.
|
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
Wiltz
HV Guru
liitunud: 28.01.2002
|
10.01.2005 16:28:27
|
|
|
hmm, jah, arvasin alguses et sellest aadressist iga 00 väli 4 byte'ne, aga panin puusse, ikka 1 byte on igaüks!
Ho Ho, alates pentium pro'st on address pin'e 32 asemel 36, sellepärast tulebki see 64gb minumeelest...see 4gb piir hakkas vist juba pidurdama mingeid servereid ja võimsamaid aparaate
_________________ "There will be an entire generation of deaf audio enthusiasts who were brought up on CD players and Best Buy receivers, electronic music and so on. These people won't know good sound if it bites them in the ass, so in the end the industry wins." |
|
Kommentaarid: 275 loe/lisa |
Kasutajad arvavad: |
   |
:: |
9 :: |
3 :: |
226 |
|
tagasi üles |
|
 |
ragface
HV kasutaja

liitunud: 28.04.2004
|
10.01.2005 17:47:56
|
|
|
uhh, arvutustehnika alused aastast 97, soovin nüüd, et ei oleks maganud selles loengus tü informaatika 2. kursus oli see mulle.
suutsin sellal assemblerit progeda (enamus pascali graafilisest osast tuli algselt asmis kirjutada, assotsatsioon tekkis selle ALU operaatoriga ) kuid seda teemat lugedes tundus kõik nagu täitsa uus, aga nagu oleks kusagil enne kuulnud
mul tekkis hiljuti selline küsimus, kuidas on risc arhitektuuri käsud ühepikkused? mul on meeles selline lause hr mati fischeri suust: kõik tehted on tegelikult liitmine - kuid midagi on vist puudu... tahaks maakeeles üleseletamist et läbi liitmise kirjeldamise peaks käskude keerukus/pikkus kiirelt kasvama.
_________________ -
\R |
|
Kommentaarid: 18 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
16 |
|
tagasi üles |
|
 |
Ho Ho
HV Guru

liitunud: 16.02.2002
|
10.01.2005 17:56:50
|
|
|
minu teada on puhtas risc arhidektuuris ainult suhteliselt lihtsad masinkäsud mida kõiki täidetakse ainult ühe takti jooksul. Kõigi keerukamate asjade jaoks tuleb kasutada mitut käsku mitme takti jooksul.
|
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
86 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|