/*
Praktikum: Simulasi Register & Flag
Dosen: Muhammad Ikhwan Fathulloh
Tujuan:
- Memahami fungsi register umum (R0–R31)
- Melihat status bit flag (C, Z, N, V, S) secara visual dengan LED
*/
#define LED_C 2 // Carry
#define LED_Z 3 // Zero
#define LED_N 4 // Negative
#define LED_V 5 // Overflow
#define LED_S 6 // Sign
byte R0, R1, R2; // Simulasi register umum
bool C, Z, N, V, S; // Flag status
void setup() {
Serial.begin(9600);
pinMode(LED_C, OUTPUT);
pinMode(LED_Z, OUTPUT);
pinMode(LED_N, OUTPUT);
pinMode(LED_V, OUTPUT);
pinMode(LED_S, OUTPUT);
Serial.println("=== Simulasi Register dan Flag ===");
}
void loop() {
R0 = random(0, 128); // nilai acak 0–127
R1 = random(0, 128);
R2 = R0 + R1; // operasi penjumlahan
// Flag Logika
C = (R2 > 255); // Carry
Z = (R2 == 0); // Zero
N = (R2 & 0x80); // Negative (bit 7)
V = ((R0 & 0x80) == (R1 & 0x80)) && ((R0 & 0x80) != (R2 & 0x80)); // Overflow
S = N ^ V; // Sign = N XOR V
// Tampilkan di Serial Monitor
Serial.println("----------------------");
Serial.print("R0: "); Serial.println(R0);
Serial.print("R1: "); Serial.println(R1);
Serial.print("R2: "); Serial.println(R2);
Serial.print("Flags -> C: "); Serial.print(C);
Serial.print(" | Z: "); Serial.print(Z);
Serial.print(" | N: "); Serial.print(N);
Serial.print(" | V: "); Serial.print(V);
Serial.print(" | S: "); Serial.println(S);
// Visualisasi LED
digitalWrite(LED_C, C);
digitalWrite(LED_Z, Z);
digitalWrite(LED_N, N);
digitalWrite(LED_V, V);
digitalWrite(LED_S, S);
delay(1500);
}