Instrukce movf

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#16 Příspěvek od piitr »

Andrea píše:Neznám jiný RISC, který by měl akumulátor a neuměl přesouvat data mezi registry. Když už to má málo instrukcí, tak by to mělo mít hodně univerzálních registrů a ne jeden akumulátor.
To je otázka pohledu. Ono se na tom PICu píše spíš stylem, že má hodně registrů, akorát jakoby místo jedné instrukce píšeš dvě. Často ale vystačíš s jednou, protože hodnotu už v tom W máš. Není to až tak špatný přístup - pro malou paměť.
Andrea píše: To je důvod proč je AVR 20x-50x rychlejší než x51 a 10x-20x rychlejší než PIC, protože nemusí kvůli každé aritmetické/logické operaci přesouvat data do akumulátoru a zase z něj přendávat jinam.
Tak hrozné to nebude. V nejhorším případě píšeš těch instrukcí dvojnásobek, ale to je vážně limitní případ. V praxi ani to nehrozí.
Andrea píše:Když jsi psal, že se ti líbí 8086, tak u něj už to počítání taktů moc nefunguje...
To počítání taktů jsem myslel jen pro PIC. Myslím, že jsem to tak i napsal.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#17 Příspěvek od Andrea »

piitr píše:Tak hrozné to nebude. V nejhorším případě píšeš těch instrukcí dvojnásobek, ale to je vážně limitní případ. V praxi ani to nehrozí.

Tak schválně, jak na PIC sečteš dvě 16-bit čísla uložená v registrech. :)

Na AVR:

Kód: Vybrat vše

    add A_Lo,B_Lo
    adc A_Hi,B_Hi

= 2 takty oscilátoru, při 4MHz je to 500ns.

Ty poměry rychlostí AVR/PIC/x51 jsem si nevycucala z prstu, to jsou výsledky porovnání doby běhu testovacího programu na různých procesorech.
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#18 Příspěvek od piitr »

Andrea píše:Na AVR:

Kód: Vybrat vše

    add A_Lo,B_Lo
    adc A_Hi,B_Hi

= 2 takty oscilátoru, při 4MHz je to 500ns.
No, to je zase něco jiného. Dvě osmibitová čísla sečtu:

Kód: Vybrat vše

movf B, 0
addwf A, 1
To je přesně to, co jsem psal - dvojnásobek. Což je lepší než trojnásobek u klasického akumulátoru:

Kód: Vybrat vše

mov a, A
add a, B
mov A, a
Je pravda, že s šestnáctibitovými čísly je problém, protože PIC má jen ADD a ne ADC. Takže to pak vyjde o dost delší. Když člověk uváží, k čemu ten PIC má být, asi se to dá pochopit - obě instrukce se nevešly, práce s 16-ti bity se asi moc nepředpokládala, naopak neustálé CLC by otravovalo. Takže máš a nemáš pravdu. V tomhle je PIC mnohem pomalejší, ale není to tím přesouváním z a do akumulátoru.

Asi bych to udělal nějak takto:

Kód: Vybrat vše

movf B_hi, 0
addwf A_hi, 1
movf B_lo, 0
addwf A_lo, 1
btfsc status, c
incf A_hi, 1
Tedy 6 instrukcí. Při 32 bitech by to asi bylo ještě zamotanější. Není to už dvojnásobek, jak jsem psal, ale je to kvůli něčemu jinému. O tom jsme nemluvili. A pořád to není 10x-20x horší.
Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 00:00

#19 Příspěvek od Andrea »

piitr píše:Asi bych to udělal nějak takto:

Kód: Vybrat vše

movf B_hi, 0
addwf A_hi, 1
movf B_lo, 0
addwf A_lo, 1
btfsc status, c
incf A_hi, 1
Tedy 6 instrukcí. Při 32 bitech by to asi bylo ještě zamotanější. Není to už dvojnásobek, jak jsem psal, ale je to kvůli něčemu jinému. O tom jsme nemluvili. A pořád to není 10x-20x horší.

Je to 12x horší. :)
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#20 Příspěvek od piitr »

Andrea píše:Je to 12x horší. :)
Nejsi ty ženská?:)
Já vím, mají jinak udělaný hodiny a s tím související řízení, takže krystal běží na čtyřnásobku instrukčního cyklu. To ale s instrukční sadou už vůbec nesouvisí. Možná jim to tak vyšlo jednodušeji, ovšem tím AVRáckým způsobem by to šlo taky. Já detaily neznám.

Máš pravdu, je to spíš řadič než procesor. To já tvrdím od začátku taky. Jen chci říct, že ta architektura není tak zhůvěřilá, jak se ti asi zdá. Naopak pro dané použití je velice elegantní.
Uživatelský avatar
piitr
Příspěvky: 1003
Registrován: 19 říj 2007, 00:00
Kontaktovat uživatele:

#21 Příspěvek od piitr »

Klidně přiznám i to, že si myslím, že v dnešní době je PIC překonaný, protože levné mikročipy už jsou tak složité, že tato architektura je nevhodná. V době jejich vzniku to bylo jinak.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“