# Talk:Assemblyfuck

## My idea for making a compiler

### Tags

To make tags my idea is that the program runs on an infinite loop, like this:

```+[code]
```

But that doesn't do anything, so my idea is that the first two cells of the tape of any program looks like this:

```cell #1: 255
cell #2: 1
cell #3: 0
cell #4: 0
cell #5: 0
```

The cell #1 is a cell that you can come to it later by easily writing this `+[-<+]-`
The cell #2 is the cell that marks which tag is running right now
The cell #3 is just for doing a equality algorithm
The cell #4 is also for doing the equality algorithm
The cell #5 is just for breaking loops

```->+[
if tag 1[code+[-<+]->>>>]
+[-<+]->if tag 1[code+[-<+]->>>>]
+[-<+]->if tag 2[code+[-<+]->>>>]
+[-<+]->if tag 3[code+[-<+]->>>>]
etc
end of code loop+[-<+]->]
```

by doing that you can only have 255 tags which isn't enough. The new code is:

```  start of program
->+[
copy tag cell so equal algorithm doesnt break it
>[-]<[->+>+<<]>>[-<<+>>]<<
detect if tag equals 1
>>+<<-[>>-<<[-]]
tag 1 code
>>[>>
||||| TAG 1 CODE |||||
==end of tag 1 code
fix tag cell because equal algorithm did break it
+[-<+]->>[-<+>]
break tag 1 loop
>[-]>
] end of tag 1 code loop
<<< end of program loop
]
```

I think my comments are understandable, right?. A program that does have 6 tags looks like this:

```  start of program
->+[
copy tag cell so equal algorithm doesnt break it
>[-]<[->+>+<<]>>[-<<+>>]<<
detect if tag equals 1
>>+<<-[>>-<<[-]]
tag 1 code
>>[>>
||||| TAG 1 CODE |||||
==end of tag 1 code
fix tag cell because equal algorithm did break it
+[-<+]->>[-<+>]
break tag 1 loop
>[-]>
] end of tag 1 code loop
copy tag cell so equal algorithm doesnt break it
>[-]<[->+>+<<]>>[-<<+>>]<<
detect if tag equals 2
>>+<<--[>>-<<[-]]
tag 2 code
>>[>>
||||| TAG 2 CODE |||||
==end of tag 2 code
fix tag cell because equal algorithm did break it
+[-<+]->>[-<+>]
break tag 2 loop
>[-]>
] end of tag 3 code loop
copy tag cell so equal algorithm doesnt break it
>[-]<[->+>+<<]>>[-<<+>>]<<
detect if tag equals 3
>>+<<---[>>-<<[-]]
tag 3 code
>>[>>
||||| TAG 3 CODE |||||
==end of tag 3 code
fix tag cell because equal algorithm did break it
+[-<+]->>[-<+>]
break tag 3 loop
>[-]>
] end of tag 4 code loop
copy tag cell so equal algorithm doesnt break it
>[-]<[->+>+<<]>>[-<<+>>]<<
detect if tag equals 4
>>+<<----[>>-<<[-]]
tag 4 code
>>[>>
||||| TAG 4 CODE |||||
==end of tag 4 code
fix tag cell because equal algorithm did break it
+[-<+]->>[-<+>]
break tag 4 loop
>[-]>
] end of tag 4 code loop
copy tag cell so equal algorithm doesnt break it
>[-]<[->+>+<<]>>[-<<+>>]<<
detect if tag equals 5
>>+<<-----[>>-<<[-]]
tag 5 code
>>[>>
||||| TAG 5 CODE |||||
==end of tag 5 code
fix tag cell because equal algorithm did break it
+[-<+]->>[-<+>]
break tag 5 loop
>[-]>
] end of tag 5 code loop
copy tag cell so equal algorithm doesnt break it
>[-]<[->+>+<<]>>[-<<+>>]<<
detect if tag equals 6
>>+<<------[>>-<<[-]]
tag 6 code
>>[>>
||||| TAG 6 CODE |||||
==end of tag 6 code
fix tag cell because equal algorithm did break it
+[-<+]->>[-<+>]
break tag 6 loop
>[-]>
] end of tag 6 code loop
<<< end of program loop
]
```

code is slooooooooooooooooooooooooow but this assembly wasn't mean to be compiled to brainfuck (unlike BF-ASM:8)