A IN/A OUT:0=take inputted a,1=save current output and use it as a until turned back to zero

B IN/B OUT:0=take inputted b,1=save current output and use it as b until turned back to zero

ALU SELECTION:0=take gate alu as output,1=take operation alu as output

TOP 3=the systems current a

MIDDLE 3=output

BOTTOM 3=the systems current b

GATE SELECTION:00=A AND B,01=A OR B,10=NOT A/B,11=A XOR B

A/B IN FOR NOT:0=take a as input for NOT,1=take b as input for NOT

OPERATION SELECTION:0=A+B,1=A-B

SAVE A:put this alus current output in register a

SAVE B:put this alus current output in register b

OUT ALU:take output from alu

OUT A:take output from register a

OUT B:take output from register b

to input code please put your desired opcode into the computer on page "main", if you see that your codes are not being used properly, you are probably forgetting to turn on "ADD TO RAM" which enters your opcode into the program in the selected address, if you turn "ADD TO RAM" off later you can use the function saved at that address.

you probably don`t understand how my assembly works, but its actually really simple, the first 4 bits(from the left) are the functions, then the next are the first register address(unused in the manual input mode/function) then next is the second register(unused in not, input, full 1111 etc.) and the last 4 bits is where the output of the operation goes.

1->not,2->and,3->or,4->xor,5->nand,6->nor,7->xnor,8->add,9->full 1111,10->left shift,11->right shift,12->input,13->copy,14->a if a>b,15->b if b>a and finally 16->sub

1. **NOT**:

- Inverts the input value (if a bit is 1, it becomes 0, and vice versa).

2. **AND**:

- Outputs 1 only if both inputs are 1. Otherwise, outputs 0.

3. **OR**:

- Outputs 1 if at least one input is 1. Outputs 0 only if both inputs are 0.

4. **XOR (Exclusive OR)**:

- Outputs 1 if the inputs are different (one is 1, the other is 0). Outputs 0 if they are the same.

5. **NAND**:

- Outputs 0 only if both inputs are 1. Otherwise, it outputs 1 (the opposite of AND).

6. **NOR**:

- Outputs 1 only if both inputs are 0. Otherwise, it outputs 0 (the opposite of OR).

7. **XNOR**:

- Outputs 1 if the inputs are the same (both 1 or both 0). Outputs 0 if they are different (the opposite of XOR).

8. **ADD**:

- Performs binary addition on the two inputs, outputting the sum,has no carry.

9. **FULL 1111**:

- makes the register`s value 1111.

10. **LEFT SHIFT**:

- Shifts all bits of the input to the left by one position, effectively multiplying the number by 2(discarding the most significant bit)

11. **RIGHT SHIFT**:

- Shifts all bits of the input to the right by one position, effectively dividing the number by 2 (discarding the least significant bit).

12. **INPUT**:

- Represents the initial data entering the circuit.

13. **COPY**:

- Takes an input from a register and puts it in another.

14. **A IF A > B**:

- Outputs the value of A if A is greater than B; otherwise, it outputs 0 .

15. **B IF B > A**:

- Outputs the value of B if B is greater than A; otherwise, it outputs 0.

16. **SUB**:

- Performs binary subtraction on the two inputs, outputting the difference and wrap if needed.