BeispielCPU

Struct BeispielCPU 

Source
pub struct BeispielCPU { /* private fields */ }
Expand description

Eine fiktive Beispiel-CPU.

Trait Implementations§

Source§

impl CPU for BeispielCPU

Source§

fn eins_ausführen(&mut self) -> Result<u64, ()>

Sehen wir uns einmal genauer an, wie unsere fiktive CPU eine Rechenoperation vornimmt.

Keine Sorge, wenn du den exakten Programmablauf nicht verstehst: Es geht hier vielmehr um das Konzept als die tatsächliche Anwendung. Solltest du trotzdem Verständnisfragen haben, konsultiere gerne https://doc.rust-lang.org/std/index.html sowie https://doc.rust-lang.org/book/title-page.html oder Bjarne.

§Fetch
let instruction = self.instructions[self.instruction_pointer];

Hier deklarieren wir die Variable instruction und laden sofort die aktuelle instruction (vorgegeben durch instruction_pointer) aus dem Vektor instructions.

§Decode und Execute
self.return_register = match instruction {
    Instructions::Addieren => self.rax + self.rbx,
    Instructions::Subtrahieren => self.rax - self.rbx,
};

Hier wird sowohl dekodiert als auch ausgeführt:

  • Mit match machen wir effektiv ein if {} else if {} zu einer übersichtlichen Operation und bieten Ausgänge für alle möglichen Operationen
  • Wenn die Operation Addieren ist (dekodieren):
    • Addiere rax und rbx (ausführen)
  • Wenn die Operation Subtrahieren ist (dekodieren):
    • Subtrahiere rbx von rax (ausführen)
§Save
Ok(self.return_register)

Das berechnete Ergebnis wird wieder zurück gegeben und die Funktion endet.

Source§

fn architektur(&self) -> Architektur

Die Architektur, zu der dieser Prozessor gehört.
Source§

fn kerne(&self) -> u8

Wie viele logische Kerne der Prozessor besitzt.
Source§

fn basis_takt(&self) -> u64

Der Standard-Takt der CPU
Source§

fn turbo_takt(&self) -> Option<u64>

Der Turbo-Takt ist der Takt, mit dem die CPU arbeitet, wenn diese erhöhte Last sowie eine ausreichend niedrige Temperatur besitzt.
Source§

fn features(&self) -> Vec<Features>

Zusätzliche CPU-Features.
Source§

fn alles_ausführen(&mut self) -> Result<Vec<u64>, ()>

Source§

impl Debug for BeispielCPU

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.