Grundlegender Block

In der Computerwissenschaft ist ein grundlegender Block ein Teil des Codes innerhalb eines Programms mit bestimmten wünschenswerten Eigenschaften, die es hoch zugänglich der Analyse machen. Bearbeiter zersetzen gewöhnlich Programme in ihre grundlegenden Blöcke als ein erster Schritt im Analyse-Prozess. Grundlegende Blöcke bilden die Scheitelpunkte oder Knoten in einem Kontrollfluss-Graphen.

Definition

Der Code in einem grundlegenden Block hat:

  • ein Zugang-Punkt, keinen Code innerhalb seiner bedeutend, ist der Bestimmungsort einer Sprung-Instruktion überall im Programm;
  • ein Ausgangspunkt, nur die letzte Instruktion bedeutend, kann das Programm veranlassen zu beginnen, Code in einem verschiedenen grundlegenden Block durchzuführen.

Unter diesen Verhältnissen, wann auch immer die erste Instruktion in einem grundlegenden Block durchgeführt wird, wird der Rest der Instruktionen genau einmal in der Ordnung notwendigerweise durchgeführt.

Der Code kann Quellcode, Zusammenbau-Code oder eine andere Folge von Instruktionen sein.

Mehr formell bildet eine Folge von Instruktionen einen grundlegenden Block wenn:

  • die Instruktion in jeder Position herrscht vor, oder führt immer vorher, alle diejenigen in späteren Positionen und durch
  • keine andere Instruktion führt zwischen zwei Instruktionen in der Folge durch.

Diese Definition ist allgemeiner als die intuitive in mancher Hinsicht. Zum Beispiel erlaubt es vorbehaltlose Sprünge zu durch andere Sprünge nicht ins Visier genommenen Etiketten. Diese Definition nimmt die Eigenschaften auf, die grundlegende Blöcke leicht machen, damit zu arbeiten, wenn sie einen Algorithmus bauen.

Die Blöcke, zu denen Kontrolle nach dem Erreichen des Endes eines Blocks überwechseln kann, werden die Nachfolger dieses Blocks genannt, während die Blöcke, aus denen Kontrolle gekommen sein kann, wenn sie in einen Block eingeht, die Vorgänger dieses Blocks genannt werden. Der Anfang eines grundlegenden Blocks kann zu von mehr als einer Position gesprungen werden.

Algorithmus, um grundlegende Blöcke zu erzeugen.

Der Algorithmus, um grundlegende Blöcke aus einer Auflistung des Codes zu erzeugen, ist einfach: Der Analysator scannt über den Code, Block-Grenzen kennzeichnend, die Instruktionen sind, die entweder beginnen oder einen Block beenden können, weil sie entweder Kontrolle übertragen oder Kontrolle von einem anderen Punkt akzeptieren. Dann wird die Auflistung einfach an jedem dieser Punkte "geschnitten", und grundlegende Blöcke bleiben.

Bemerken Sie, dass diese Methode maximale grundlegende Blöcke durch die formelle Definition nicht immer erzeugt, aber sie sind gewöhnlich genügend (maximale grundlegende Blöcke sind grundlegende Blöcke, die durch das Umfassen angrenzender Blöcke nicht erweitert werden können, ohne die Definition eines grundlegenden Blocks zu verletzen).

Eingang: Eine Folge von Instruktionen (größtenteils Drei Adresscode).

Produktion: Eine Liste von grundlegenden Blöcken mit jeder Drei-Adressen-Behauptung in genau einem Block.

Schritt 1. Erkennen Sie die Führer im Code. Führer sind Instruktionen, die unter einigen der folgenden 3 Kategorien kommen:

  1. Die erste Instruktion ist ein Führer.
  2. Das Ziel eines bedingten oder einer vorbehaltlosen goto/jump Instruktion ist ein Führer.
  3. Die Instruktion, die sofort einem bedingten oder einer vorbehaltlosen goto/jump Instruktion folgt, ist ein Führer.

Schritt 2. Von einem Führer anfangend, ist der Satz von ganzem im Anschluss an Instruktionen bis und nicht einschließlich des folgenden Führers der grundlegende Block entsprechend dem Startführer.

So hat jeder grundlegende Block einen Führer.

Instruktionen, die einen grundlegenden Block beenden, schließen ein

  • Vorbehaltlose und bedingte Zweige, sowohl direkter als auch indirekter
  • Umsatz zu einem Benennen-Verfahren
  • Instruktionen, die eine Ausnahme werfen können
  • Funktionsanrufe können am Ende eines grundlegenden Blocks sein, wenn sie wie Funktionen nicht zurückkehren können, die Ausnahmen oder spezielle Anrufe wie C und werfen
  • Der Rückkehrbefehl selbst.

Instruktionen, die einen neuen grundlegenden Block beginnen, schließen ein

  • Verfahren- und Funktionszugang spitzt an
  • Ziele von Sprüngen oder Zweigen
  • "Misslingen Sie" Instruktionen im Anschluss an einige bedingte Zweige
  • Instruktionen im Anschluss an dieses Werfen Ausnahmen
  • Ausnahme-Dressierer.

Bemerken Sie, dass, weil Kontrolle das Ende eines grundlegenden Blocks nie durchführen kann, einige Block-Grenzen nach der Entdeckung der grundlegenden Blöcke können modifiziert werden müssen. Insbesondere misslingen Sie bedingte Zweige müssen zu Zweiwegezweigen geändert werden, und Funktionsanrufe, die Ausnahmen werfen, müssen vorbehaltlose Sprünge nach ihnen hinzufügen lassen. Das Tun von diesen kann das Hinzufügen von Etiketten zum Anfang anderer Blöcke verlangen.

Siehe auch

Referenzen

Außenverbindungen


Das Schnur-Käse-Ereignis / Binäre Übersetzung
Impressum & Datenschutz