Vlákno názorů k článku Vznik Unixu a jazyka B na počítačích PDP od kvr - Zmiňovat zrovna i386 u porovnání orthogonality instrukční sady nebyl...

  • Článek je starý, nové názory již nelze přidávat.
  • 20. 10. 2009 10:10

    kvr (neregistrovaný)

    Zmiňovat zrovna i386 u porovnání orthogonality instrukční sady nebyl úplně dobrý nápad ;) 8086 či 80286 na tom byly hodně špatně, ale s příchodem i386 většina instrukcí už akceptovala téměř jakoukoli kombinaci (s výjimkou adresace EIP, což se u PIC ukázalo jako dost problematické).

    A jedna gramatická – lidí, kteří se podílelI (že by tam bylo původně osobností?).

    Jinak samozřejmě děkuju za článek či spíše celou sérii, tyhle historické pohledy je radost číst.

  • 20. 10. 2009 11:17

    Pavel Tišnovský
    Zlatý podporovatel

    Opravte me prosim jestli si to pamatuji presne (dnes uz asm na i386 nepouzivam), ale spousta instrukci IMHO ma stale implicitni registry, se kterymi pracuje.

    Namatkou: AAA, AAM, DAA (uprava vysledku po aritmetickych operacich na ASCII nebo BCD tvar), ale take MOVS, MOVZX atd. – implicitni registry pouzite pro source a destination. Minimalne jeste na 486 a Pentiich tyto instrukce byly bezparametricke, tudiz neortogonalni.

    Nehlede na to, ze ty dalsi kombinace se vytvari (opet AFAIK a FIXME) pomoci prefixovych opkodu, kdezto u PDP-11 je to vse v jednom slove (pekne oddelene tak, ze se da provadet rucni zpetny preklad z objektoveho kodu), podobne jako napriklad u MIPSu.

  • 20. 10. 2009 12:32

    kvr (neregistrovaný)

    Spousta bych nepsal. Letmo jsem prolítnul dokumentaci a kromě zmíněných adjust BCD/DEC instrukcí (ale ty nikoho nezajímaly už v době vzniku, takže se jimi logicky Intel u i386 ani nezabýval) to je ještě XLAT (tam jsou asi stejné důvody), dále násobení/dělení (poněkud překvapivě pouze signed MUL zorthogonalizovaná byla). Ostatní jsou spíš speciality – IN/OUT, řetězové operace (zmíněný MOVS apod.), load/save flags, u kterých důvodem pro nerožšíření byl asi buď prostor a nebo jsou tak specificky využívané, že to nemělo smysl. Takže jediné, co bych i386 vytknul, by byly asi ty (I)DIV/MUL. V době Pentia pak vznikla ještě lehce neorthogonální CMPXCHG (jeden ze tří operandů je pevný), ale opět jde o dost specifickou věc. MOVZX a MOVSX vznikly až na i386 a orthogonální jsou.

    Nové prefixy se AFAIK používaly pouze k rozlišení 16bit/32bit adresace a velikosti operandů (dva různé – daly se kombinovat), ale krk na to nedám ;)