|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Computer Programspråk >> Content

    Vilka är de olika MIP:s Alu -opcoder som används för att utföra aritmetiska och logiska operationer i en processor?

    MIPS ALU -opcoder används i funct Fält för R-typinstruktioner för att specificera den exakta operationen som utförs av den aritmetiska logikenheten (ALU). Fältet "Opcode" i instruktionen är alltid "0x00" för R-typ-instruktioner och fältet "Funct" skiljer mellan olika operationer. Här är en uppdelning av de gemensamma MIPS ALU -funct -koderna och deras motsvarande operationer, grupperade efter typ för tydlighet:

    aritmetiska operationer:

    * `add` (tillägg):

    * `Funct =0x20` (100000 i binär)

    * Lägger till två register och lagrar resultatet i ett destinationsregister. Överflöde * orsakar ett undantag.

    * `addu` (tillägg osignerad):

    * `funct =0x21` (100001 i binär)

    * Lägger till två register och lagrar resultatet i ett destinationsregister. Överflödet är * ignoreras * (inget undantag). Använd detta för modulär aritmetik, eller när du vet att överflödet är omöjligt/acceptabelt.

    * `sub` (subtraktion):

    * `funct =0x22` (100010 i binär)

    * Subtraherar ett register från en annan och lagrar resultatet i ett destinationsregister. Överflöde * orsakar ett undantag.

    * `subu` (subtraktion osignerad):

    * `funct =0x23` (100011 i binär)

    * Subtraherar ett register från en annan och lagrar resultatet i ett destinationsregister. Överflödet är * ignoreras * (inget undantag).

    * `mult` (multiplikation):

    * `funct =0x18` (011000 i binär)

    * Multiplicerar två register. 64-bitarsresultatet lagras i registerna "Hi" och "lo".

    * `multu` (multiplikation osignerad):

    * `funct =0x19` (011001 i binär)

    * Multiplicerar två register som osignerade värden. 64-bitarsresultatet lagras i registerna "Hi" och "lo".

    * `div` (division):

    * `funct =0x1a` (011010 i binär)

    * Delar ett register av ett annat. Kvoten lagras i "lo" -registret och resten lagras i "HI" -registret.

    * `divu` (division osignerad):

    * `funct =0x1b` (011011 i binär)

    * Dela upp ett register med ett annat som osignerade värden. Kvoten lagras i "lo" -registret och resten lagras i "HI" -registret.

    Logiska operationer:

    * `och` (bitwise och):

    * `funct =0x24` (100100 i binär)

    * Utför lite och operation i två register och lagrar resultatet i ett destinationsregister.

    * `eller` (bitvis eller):

    * `Funct =0x25` (100101 i binär)

    * Utför en bitvis eller operation i två register och lagrar resultatet i ett destinationsregister.

    * `xor` (bitvis xor):

    * `Funct =0x26` (100110 i binär)

    * Utför en bitvis XOR (exklusiv eller) operation i två register och lagrar resultatet i ett destinationsregister.

    * `inte heller (bitvis eller):

    * `Funct =0x27 '(100111 i binär)

    * Utför en bitvis eller (inte eller) operation i två register och lagrar resultatet i ett destinationsregister.

    * `sll` (skift vänster logisk):

    * `funct =0x00` (000000 i binär)

    * Skiftar ett register som lämnats av ett specifikt antal bitar (specificerat i fältet "Shamt" i R-typen av R-typ). Nollor flyttas in från höger.

    * `srl` (skift höger logisk):

    * `funct =0x02` (000010 i binär)

    * Skiftar ett register direkt med ett specifikt antal bitar (specificerat i fältet "Shamt" i R-typen av R-typ). Nollor flyttas in från vänster.

    * `sra` (skift till höger aritmetik):

    * `funct =0x03` (000011 i binär)

    * Skiftar ett register direkt med ett specifikt antal bitar (specificerat i fältet "Shamt" i R-typen av R-typ). Skyltbiten (mest betydande bit) replikeras och skiftas in från vänster och bevarar tecknet på numret.

    set-on-less-than (relationella operationer):

    * `sLt` (ställ in mindre än):

    * `funct =0x2a` (101010 i binär)

    * Ställer in destinationsregistret till 1 om det första registret är mindre än det andra registret och 0 annars. Behandlar register som signerade heltal.

    * `Sltu` (ställ in mindre än osignerad):

    * `funct =0x2b` (101011 i binär)

    * Ställer in destinationsregistret till 1 om det första registret är mindre än det andra registret och 0 annars. Behandlar register som osignerade heltal.

    Andra ALU -operationer (viktiga, men inte direkt ALU -operationer i samma mening som ovan):

    * `mfhi` (flytta från HI):

    * `funct =0x10` (010000 i binär)

    * Flyttar värdet från "HI" -registret (som lagrar de övre 32 bitarna av ett multiplikationsresultat eller resten av en division) till ett allmänt register.

    * `mflo` (flytta från lo):

    * `funct =0x12` (010010 i binär)

    * Flyttar värdet från "Lo" -registret (som lagrar de lägre 32 bitarna i ett multiplikationsresultat eller kvoten på en division) till ett allmänt register.

    * `mthi` (flytta till HI):

    * `funct =0x11` (010001 i binär)

    * Flyttar värdet från ett allmänt register i HI -registeret.

    * `mtlo` (flytta till lo):

    * `funct =0x13` (010011 i binär)

    * Flyttar värdet från ett allmänt register i LO -registret.

    * `jr` (Jump Register):

    * `funct =0x08` (001000 i binär)

    * Hoppar till adressen lagrad i det angivna registret. Så här implementeras funktionsavkastningen vanligtvis. Även om det involverar adressregistret används ALU troligen för att beräkna måladressen.

    * `syscall` (systemsamtal):

    * `funct =0x0c` (001100 i binär)

    * Åberopar operativsystemet för att utföra en systemtjänst. Den begärda tjänsten identifieras med en kod i register `$ v0` (` $ 2 ').

    Viktiga överväganden:

    * r-typformat: Alla dessa instruktioner är R-typ, vilket innebär att de använder följande format:

    `Opcode | rs | rt | rd | shamt | funct`

    Där:

    * `OpCode`:Alltid 0x00 för instruktioner av R-typ.

    * `RS`:Källregister 1

    * `rt`:källregister 2

    * `RD`:Destination Register

    * `Shamt`:Skiftbelopp (används endast av skiftinstruktioner)

    * `Funct`:Funktionskoden som anger den specifika operationen.

    * osignerad kontra signerad: `U` -suffixet (t.ex.` addu`, `subu`,` multu`, `divu`,` sLtu`) indikerar att operanden behandlas som osignerade heltal. Detta påverkar hur överflödet hanteras och hur jämförelser utförs.

    * hej och lo register: Registren "Hi" och "Lo" är specialregister som används för att lagra resultaten av multiplikation och uppdelningsoperationer.

    * Instruktionsuppsättning Variationer: Olika MIPS -implementeringar kan innehålla ytterligare eller något modifierade instruktioner. Ovanstående lista täcker de vanligaste och allmänt stödda operationerna.

    Denna omfattande uppdelning bör ge dig en solid förståelse av MIPS ALU -opcoder (Funct -koder) och de operationer de utför. När du skriver MIPS -montering, hänvisar alltid till den specifika dokumentationen för MIPS -arkitekturen du riktar dig till för att säkerställa noggrannhet.

    Tidigare:

    nästa:
    relaterade artiklar
    ·SQLite Filtyper
    ·Färdigheter som behövs för CIS Spelprogrammering
    ·Hur man kan begränsa text i HTML
    ·Hur Center en bild med HTML -programmering
    ·Jämförelse av sorteringsalgoritmer
    ·Hur ta bort flera poster i Entity Framework Utan Loopin…
    ·Nybörjare SQL Träning
    ·Hur man gör det kortaste koden för en oändlig slinga…
    ·Vad används monteringsspråk för i datorprogrammering…
    ·Vad läser ett koduttalande konverterar det till en ell…
    Utvalda artiklarna
    ·Hur man kan stoppa en oändlig slinga
    ·Hur man anropar en PHP-fil i en tabell
    ·Hur man använder den lägga till formulär inloggnings…
    ·Hur man gör ett TextField Default till noll i Java
    ·Hur man se om en post förekommer i MySQL
    ·Hur man tar bort en text i Python
    ·Hur hittar du antalet förekomster av ett tecken i en S…
    ·Fördefinierade procedurer i Turbo Pascal
    ·Hur man gör en installation i VB.NET
    ·Hur man använder Avlänka PHP
    Copyright © Dator Kunskap https://www.dator.xyz