Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
aritmetické operácie:
* `Add` (pridanie):
* `Funct =0x20` (100 000 v binárnom)
* Pridá dva registre a uloží výsledok do cieľového registra. Pretečenie * spôsobuje výnimku.
* `addU` (pridanie nepodpísané):
* `Funct =0x21` (100001 v binárnom)
* Pridá dva registre a uloží výsledok do cieľového registra. Pretečenie je * ignorované * (žiadna výnimka). Použite to pre modulárnu aritmetiku alebo keď viete, že pretečenie je nemožné/prijateľné.
* `sub` (odčítanie):
* `Funct =0x22` (100010 v binárnom)
* Odčítanie jedného registra od iného a ukladá výsledok do cieľového registra. Pretečenie * spôsobuje výnimku.
* `Subu` (nepodpísané odčítanie):
* `Funct =0x23` (100011 v binárnom)
* Odčítanie jedného registra od iného a ukladá výsledok do cieľového registra. Pretečenie je * ignorované * (žiadna výnimka).
* `mul` (násobenie):
* `Funct =0x18` (011000 v binárnom)
* Znásobuje dva registre. 64-bitový výsledok je uložený v registroch „Hi` a` Lo`.
* `multu` (multiplikačné nepodpísané):
* `Funct =0x19` (011001 v binárnom)
* Vynásobí dva registre ako nepodpísané hodnoty. 64-bitový výsledok je uložený v registroch „Hi` a` Lo`.
* `Div` (delenie):
* `Funct =0x1a` (011010 v binárnom)
* Rozdeľuje jeden register iným. Kvocient je uložený v registri `LO` a zvyšok je uložený v registri„ hi`.
* `divi (delenie nepodpísané):
* `Funct =0x1b` (011011 v binárnom)
* Rozdeľuje jeden register ako druhý ako nepodpísané hodnoty. Kvocient je uložený v registri `LO` a zvyšok je uložený v registri„ hi`.
logické operácie:
* `a" (bitwise a):
* `Funct =0x24` (100100 v binárnom)
* Vykonáva trochu a prevádzku na dvoch registroch a ukladá výsledok do cieľového registra.
* `alebo„ bitwise alebo):
* `Funct =0x25` (100101 v binárnom)
* Vykonáva trochu alebo operáciu v dvoch registroch a ukladá výsledok do cieľového registra.
* `xor` (bitwise xor):
* `Funct =0x26` (100110 v binárnom)
* Vykonáva operáciu Bitwise XOR (exkluzívne alebo) operácie v dvoch registroch a výsledok ukladá do cieľového registra.
* `Nor` (bitwise nor):
* `Funct =0x27` (100111 v binárnom)
* Vykonáva trochu (nie alebo) operáciu v dvoch registroch a ukladá výsledok do cieľového registra.
* `sll` (Shift vľavo logické):
* `Funct =0x00` (000000 v binárnom)
* Posunie register, ktorý ponechal zadaný počet bitov (určených v poli `Shamt` inštrukcie typu R). Nuly sa posúvajú sprava sprava.
* `srl` (Shift Right Logical):
* `Funct =0x02` (000010 v binárnom)
* Posunie register priamo zadaným počtom bitov (uvedených v poli `Shamt` inštrukcie typu R). Zľava sa posúvajú zľava.
* `sra` (aritmetika v pravom posunu):
* `Funct =0x03` (000011 v binárnom)
* Posunie register priamo zadaným počtom bitov (uvedených v poli `Shamt` inštrukcie typu R). Znak bit (najvýznamnejší bit) sa replikuje a presunie zľava a zachováva znamenie čísla.
set-on-bez (relačné operácie):
* `slt` (nastavte menej ako):
* `Funct =0x2a` (101010 v binárnom)
* Nastaví cieľový register na 1, ak je prvý register menší ako druhý register, a 0 inak. Zaoberá sa registrmi ako s podpísanými celých čísel.
* `sltu` (nastavte menej ako nepodpísané):
* `Funct =0x2b` (101011 v binárnom)
* Nastaví cieľový register na 1, ak je prvý register menší ako druhý register, a 0 inak. Zaoberá sa registrmi ako s nepodpísanými celých čísel.
Iné operácie ALU (dôležité, ale nie priamo ALU operácie v rovnakom zmysle ako vyššie):
* `mfhi` (presuňte sa z hi):
* `Funct =0x10` (010000 v binárnom)
* Presúva hodnotu z registra „hi` (ktorý ukladá horných 32 bitov výsledku násobenia alebo zvyšku divízie) do registra všeobecného účtu.
* `mflo` (presuňte sa z lo):
* `Funct =0x12` (010010 v binárnom)
* Presúva hodnotu z registra `LO` (ktorý ukladá nižšie 32 bitov výsledku násobenia alebo kvocientu divízie) do registra všeobecného účelu.
* `mthi` (prejdite na hi):
* `Funct =0x11` (010001 v binárnom)
* Presunie hodnotu z registra všeobecného účelu do registra HI.
* `mtlo` (presuňte sa na lo):
* `Funct =0x13` (010011 v binárnom)
* Presúva hodnotu z registra všeobecného účelu do registra LO.
* `jr` (skokový register):
* `Funct =0x08` (001000 v binárnom)
* Skoky na adresu uloženú v zadanom registri. Takto sa zvyčajne implementujú návraty funkcií. Aj keď sa týka registra adresy, ALU sa pravdepodobne používa na výpočet cieľovej adresy.
* `sysCall` (systémové volanie):
* `Funct =0x0C` (001100 v binárnom)
* Vyvoláva operačný systém na vykonanie systémovej služby. Požadovaná služba je identifikovaná podľa kódu v registri `$ v0` (` $ 2`).
Dôležité úvahy:
* R-type formát: Všetky tieto pokyny sú typ R, čo znamená, že používajú nasledujúci formát:
`OPCODE | RS | RT | Rd | Shamt | funkcia
Kde:
* `Opcode`:Vždy 0x00 pre pokyny typu r.
* `RS`:Zdrojový register 1
* `RT`:Zdrojový register 2
* `Rd`:cieľový register
* `Shamt`:Shift Sumenie (používa iba pokyny na zmenu)
* `Funct`:Funkčný kód, ktorý určuje konkrétnu operáciu.
* nepodpísané vs. podpísané: Prípona `u` (napr.` Addu`, `subu`,` multu`, `diu`,` sltu`) naznačuje, že operandy sa považujú za nepodpísané celé čísla. To ovplyvňuje spôsob riešenia pretečenia a ako sa vykonávajú porovnania.
* ahoj a lo registruje: Registre „Hi` a` LO` sú špeciálne účelné registre používané na ukladanie výsledkov násobenia a operácií divízie.
* Varianty sety: Rôzne implementácie MIPS môžu obsahovať ďalšie alebo mierne upravené pokyny. Vyššie uvedený zoznam pokrýva najbežnejšie a najčastejšie podporované operácie.
Toto komplexné zrútenie by vám malo poskytnúť solídne porozumenie Opcodes MIPS ALU (Funct Codes) a operácií, ktoré vykonávajú. Pri písaní zostavy MIPS sa vždy pozrite na konkrétnu dokumentáciu pre architektúru MIPS, ktorú zacieľujete, aby ste zaistili presnosť.