1
Vývoj / Re:Rozdíl mezi ASM a strojovým kódem
« Poslední příspěvek od Jiří Havel kdy Dnes v 10:58:53 »Otázka do flamu. Pokud použiju separátní tool (který ani nezná kompletní syntaxi C) abych jím lepil platformně závislé kousky textu dohromady, můžu ještě mluvit o přenositelném jazyce? Protože s preprocesorem tak jde psát přenositelně i assembler.To jsou zase plkyTeprve jazyk C vyřešil přenositelnost.V rámci možností. Pokud člověk například nepotřebuje vědět, jestli char je signed nebo unsigned. Nebo jak velký je int. Viz nedávné flame vlákno o bit shiftování signed intu.
Pokud někdo potřebuje zajistit přesnou velikost typu přenositelným způsobem, tak na to je knihovna <stdint.h>, která je součást standardu.
A věci jako endiany nebo jestli mám vůbec dvojkový doplněk se zjišťují hůř. Ty jako makro naservírované nedostanu.
Citace
Jestli je něco signed nebo unsigned jazyk definuje taky - že to pak nějaký kompilátor overridne je druhá věc.Tak zrovna u charu je to "implementation defined". Takže jazyk C definuje jen to, že to kompilátor "overridnout" prostě musí.
A proto jsou taky "char", "signed char" a "unsigned char" 3 různé typy (aby to nebylo nudné jako u intů).

Citace
A bit shift signed intu je prostě UB, tak shiftuj unsigned a taky máš přenositelný program.Ano, v C se dá psát přenositelný kód. Ale protože je to jazyk z punkových časů, tak toho ta přenositelná podmnožina až tak moc neumí. A málo šedivé programátory to může překvapit, protože spousta těch věcí z dnešního pohledu už fakt nedává smysl.
A abych přispěl i k původní otázce, tak rozdíl mezi assemblerem a strojákem nemusí být jen ty symbolické adresy. U DSPček (myslím že to bylo nějaké TMS320) jsem potkal i to, že pipeline nebyla maskovaná. Instrukce ve strojáku byly v pořadí v jakém se cpaly do pipeliny, ne v jakém se nakonec vykonaly. Takže assembler i přerovnával instrukce (podle latence + přidával potřebné nopy) z lidsky čitelného pořadí do toho jejich hnusnopekla.
Poslední příspěvky