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