Fluxograma do funcionamento do Computador IAS

flowchart TB subgraph _fetch_cycle_ [Fetch Cycle] START((Start)):::greenClass --> B{"Is next instruction in IBR?"} B --> |"Yes No memory access required"| F("IR ← IBR(0:7) MAR ← IBR(8:19)") F --> I B --> |No| C("MAR ← PC") C --> D("MBR ← M(MAR)") D --> E{"Left instruction required?"} E --> |No| H("IR ← MBR(20:27) MAR ← MBR(28:39)") E --> |Yes| G("IBR ← MBR(20:39) IR ← MBR(0:7) MAR ← MBR(8:19)") H --> I("PC ← PC + 1 IBR ← 0") end subgraph _decode_ [ ] I --> DECODE G --> DECODE DECODE{{"Decode instruction in IR"}}:::orangeClass style _decode_ fill:transparent,stroke:transparent direction TB end subgraph _execution_cycle_ [Execution Cycle] DECODE --> |"ADD M(X) Opcode: 00000101"| ADD_MX subgraph ADD_MX ["ADD M(X)"] ADD_MX__A("MBR ← M(MAR)"):::clickable ADD_MX__B("AC ← AC + MBR"):::clickable ADD_MX__A ---> ADD_MX__B direction TB end DECODE ---> |"ADD |M(X)| Opcode: 00000111"|ADD_MX2 subgraph ADD_MX2 ["ADD |M(X)|"] ADD_MX2__A("MBR ← M(MAR)"):::clickable ADD_MX2__B("MBR(0) ← 0"):::clickable ADD_MX2__C("AC ← AC + MBR"):::clickable ADD_MX2__A --> ADD_MX2__B ADD_MX2__B --> ADD_MX2__C direction TB end DECODE --> |"SUB M(X) Opcode: 00000110"|SUB_MX subgraph SUB_MX ["SUB M(X)"] SUB_MX__A("MBR ← M(MAR)"):::clickable SUB_MX__B("AC ← AC - MBR"):::clickable SUB_MX__A ---> SUB_MX__B direction TB end DECODE --> |"SUB |M(X)| Opcode: 00001000"|SUB_MX2 subgraph SUB_MX2 ["SUB |M(X)|"] SUB_MX2__A("MBR ← M(MAR)"):::clickable SUB_MX2__B("MBR(0) ← 0"):::clickable SUB_MX2__C("AC ← AC - MBR"):::clickable SUB_MX2__A --> SUB_MX2__B SUB_MX2__B --> SUB_MX2__C direction TB end DECODE --> |"MUL M(X) Opcode: 00001011"|MUL_MX subgraph MUL_MX ["MUL M(X)"] MUL_MX_A("MBR ← M(MAR)"):::clickable MUL_MX_B("AC ← (MQ * MBR)(0:39)"):::clickable MUL_MX_C("MQ ← (MQ * MBR)(40:79)"):::clickable MUL_MX_A ---> MUL_MX_B ---> MUL_MX_C direction TB end DECODE ---> |"DIV M(X) Opcode: 00001100"|DIV_MX subgraph DIV_MX ["DIV M(X)"] DIV_MX_A("MBR ← M(MAR)"):::clickable DIV_MX_B("MQ ← AC/MBR AC ← AC%MBR"):::clickable DIV_MX_A ---> DIV_MX_B direction TB end DECODE --> |"LSH Opcode: 00010100"|LSH_A subgraph LSH_A ["LSH"] LSH("AC ← AC << 1"):::clickable end DECODE --> |"RSH Opcode: 00010101"|RSH_A subgraph RSH_A ["RSH"] RSH("AC ← AC >> 1"):::clickable end end subgraph _end_ [End] style _end_ fill:transparent,stroke:transparent END(("Go back to Start")):::greenClass ADD_MX --- END ADD_MX2 --- END SUB_MX --- END SUB_MX2 --- END MUL_MX --- END DIV_MX --- END LSH_A --- END RSH_A --- END direction TB end classDef greenClass fill:#008000 classDef orangeClass fill:#FF6347 classDef redFontClass color:#FF0000 classDef clickable cursor:pointer,stroke:#3366ff,stroke-width:2px