To je otázka, co je "správně" a co "prohozené". Když jsem se s intelí syntaxí setkal poprvé (ještě na 8080), připadalo mi to pořadí divné a nechápal jsem, proč to udělali "obráceně". Když jsem se pak později začal (už spíš u disassembleru než assembleru) setkávat s AT&T zápisem, připadal mi "obráceně" ten, protože už jsem byl zvyklý na Intel. No a dnes už mi zase "obráceně" připadá Intel.
Na druhou stranu, adresace typu 0x1(%rbp,%rsi,8) působí podivně pořád, i když už s jejich čtením většinou problém nemám. :-)
Zjednodusovat se nebude - je to prece x86. Pokud neco, tak by mohli pridat dalsi bit ci rovnou dva, k executable strankam, ktere budou napovidat, ze tam ulozeny kod neni ci je zarovnan na hranici 4 / 8 / 16 bajtu (a vypadovan treba NOPy, pro zpetnou kompatibilitu). Pak si muze ID vzit tento hint a dekodovat paralelne kolik instrukci chce, protoze budou "fixni" velikosti a nemusi hledet na vocasni bajty - ty jsou ignorovany (maj byt nop).
koukam ze zarovnani dost hraje roli uz ted, kvuli uop cache
https://www.bazhenov.me/posts/2024-02-performance-roulette/
https://www.youtube.com/watch?v=IX16gcX4vDQ
Když přepnu do unreal režimu (real režim s nastavenými segment-limity na max), zůstanou tam i po tom, co změním hodnotu segmentového registru, nebo se to vrátí do 8086 módu adresace?
Tedy v unreal režimu, změna segmentu znamená pouze změnu báze, nebo přepsání všech skrytých částí podle realného režimu?
IIRC by se mělo aktualizovat všechno, právě proto se jako jeden z kroků po přechodu do/z real modu nastaví všechny segmentové registry, aby fungovaly správně podle toho nového režimu. Ten termín unreal mode
je tak trochu zavádějící, ve skutečnosti to není samostatný mód, je to normální real mode, jen se vynechá tenhle jeden krok "čištění". A myšlenka je právě ta, že když jsou všechny segmenty přes celý adresní prostor, můžu na segmentaci zapomenout a se segmentovými registry není potřeba vůbec hýbat.
limity zůstanou. ono takto (asi) fungovaly některé ovladače paměti, že vlastně přepnuly do nereálného režimu, ale v ostatních věcech se to tváří jako běžnej reálnej režim pro aplikace psané pro reálnej režim. Tedy dokud někdo ten limit nepřekročí, protože to najednou "půjde". Už si to nepamatuju přesně, ale emm386 nebo himem.sys (prostě něco z DOSu) to takto dělával.