Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Aké sú rôzne opcody MIPS používané na vykonávanie aritmetických a logických operácií v procesore?

MIPS ALU Opcodes sa používajú vo funkcii Funct pole pokynov typu R na určenie presnej operácie vykonanej aritmetickou logickou jednotkou (ALU). Pole `Opcode` v inštrukcii je vždy` 0x00` pre pokyny typu r a pole Funct` rozlišuje medzi rôznymi operáciami. Tu je zrútenie bežných kódov Funct Alu Funct MIPS a ich zodpovedajúcich operácií, zoskupené podľa typu pre prehľadnosť:

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ť.

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené