Skip to content

03.TheCodeWindow

nonodev96 edited this page Jul 2, 2022 · 5 revisions

La ventana de código

En esta sección se muestra el proceso para almacenar el código a ejecutar que se encuentra en la memoria, esto nos permite visualizar las instrucciones, los registros y los datos que se insertan en la memoria.

En esta ventana se nos muestra la dirección de memoria en formato hexadecimal, el texto que representa al label junto al desplazamiento, así como el binario de su representación, el formato hexadecimal, el stage que se encuentra y la instrucción en sí.

Ventana de código

Además, nos permite una representación sencilla de la ejecución en el cauce (Pipeline).

Al realizar una simulación, esta ventana nos muestra un color representativo de la etapa en la que se encuentra cada instrucción en el pipeline.

Ventana de código en ejecución

Desarrollo

Podemos pedir directamente al servidor que nos genere el código máquina de nuestro código, para ello usamos los eventos CodeRequest enviando el mensaje con el tipo de dato TypeFile, el servidor nos responderá por el evento ** CodeResponse** con las instrucciones máquina en una lista de objetos de tipo TypeCodeResponse.

export type TypeFile = {
  content: string;
  // ...
}

export type TypeDirectiveData = {
  address:      TypeAddress;
  hexValue:     string;
  text:         string;
  directive:    TypeDirective;
};

export type TypeInstructionsData = {
  address:      TypeAddress;    
  code:         string;
  text?:        string;
  instruction:  string;
};

export type TypeCodeResponse = {
  machineDirectives:    TypeDirectiveData[],
  machineInstructions:  TypeInstructionsData[],
};
{
  "id":                 "",
  "filename":           "prim.s",
  "date":               "2021-08-28T10:25:00.000Z",
  "canSimulate":        true,
  "lines":              68,
  "machineDirectives":  [ {
    "address":  "0x00000000",   "text":         "COUNT",
    "hexValue": "0x0000000A",   "directive":    "WORD"
  } ],
  "machineInstructions": [ {
    "address":  "0x00000100",   "text":         "$TEXT",
    "code":     "0x20010000",   "instruction":  "ADDI R1, R0, 0x0" 
  }, {
    "address":  "0x00000104",   "text":         "MAIN+0x4",
    "code":     "0x20020002",   "instruction":  "ADDI R2, R0, 0x2" 
  } ],
  "runner": [ {
    "step":             0,
    "line":             0,
    "isNewInstruction": false,
    "pipeline": {
      "IF": {
        "address": "", "addressRow": 0, "draw": false
      }, 
      "ID": {
        "address": "", "addressRow": 0, "draw": false
      }, 
      "intEX": {
        "address": "", "addressRow": 0, "draw": false
      }, 
      "MEM": {
        "address": "", "addressRow": 0, "draw": false
      }, 
      "WB": {
        "address": "", "addressRow": 0, "draw": false
      },
      "faddEX":         [],
      "fmultEX":        [],
      "fdivEX":         [],
      "arrows":         []
    },
    "registers":        [],
    "memory":           [],
    "statistics":       {}
  } ]
}
Clone this wiki locally