5 Commits
v1.9 ... master

Author SHA1 Message Date
1412250b36 tests 2024-12-22 18:18:41 +01:00
f737d1e695 examples 2024-12-22 14:08:57 +01:00
02b2ed46c7 add fibo example 2024-12-22 11:47:16 +01:00
e4aac05b9a update README 2024-12-21 11:00:57 +01:00
ddb9853ac4 add facto example 2024-12-21 10:55:33 +01:00
5 changed files with 221 additions and 1 deletions

View File

@@ -10,7 +10,7 @@ There are 3 format types :
- "int" : 32 bits integers are written. Exemple : `10878976`
- "binint" : bits are written. Exemple : `00000000 10100110 00000000 00000000`
- "bin" : the file is written in pure binary
- "logisim" (default) : the file is written in binary for use in LogiSim
- "logisim" (default) : the file is written in hexa for use in LogiSim
## Exemple
@@ -60,6 +60,8 @@ Produces
11111000 00000000 00000000 00000000
```
Other examples are located in the `examples` folder
## Releases
Pre-compiled binaries are available in the [Release](https://git.ale-pri.com/Persson-dev/Assembleur/releases) section.
@@ -92,4 +94,8 @@ Parses the file `test.asm` and writes the output into the file `memory`
You can also add the binary to your path using
```bash
xmake install
```
or copy the binary in the `bin` folder after
```
xmake install -o .
```

30
examples/facto.asm Normal file
View File

@@ -0,0 +1,30 @@
XOR R0 R0 R0
ADD R0 R0 #5 # n = 5
XOR R6 R6 R6
XOR R7 R7 R7
ADD R7 R7 #35 # SP = 40
STR R0 R7 # on empile n
CALL facto # on appelle facto dessus
JMP fin # on saute à la fin du programme
facto:
LD R1 R7 # on dépile n
JEQU R1 R6 ff # si n = 0, on retourne 1
SUB R2 R1 #1 # sinon, R2 prend n -1
ADD R7 R7 #1 # on incrémente le SP
STR R2 R7 # on empile n - 1
CALL facto # on appelle facto
LD R3 R7 # on dépile le résultat
SUB R7 R7 #1 # on décrémente le SP
LD R4 R7 # on dépile n
MUL R1 R3 R4 # on multiplie n avec facto(n-1)
STR R1 R7 # on empile facto(n)
RET # on retourne
ff:
XOR R3 R3 R3
ADD R3 R3 #1 # R3 = 1
STR R3 R7 # on empile facto(0) = 1
RET # on retourne
fin:
LD R1 R7 # on met le resultat final dans R1
stop:
JMP stop # boucle infinie de fin

37
examples/fibo.asm Normal file
View File

@@ -0,0 +1,37 @@
XOR R0 R0 R0
ADD R0 R0 #7 # n = 7
XOR R1 R1 R1
ADD R1 R1 #1 # constante à 1
XOR R7 R7 R7
ADD R7 R7 #40 # SP = 40
STR R0 R7 # on empile n
CALL fibo # on appelle fibo dessus
JMP fin # on saute à la fin du programme
fibo:
LD R2 R7 # on dépile n
JSUP R2 R1 suite # si n <= 1, on retourne n (donc on ne fait rien)
RET
suite:
SUB R2 R2 #1
STR R2 R7 # on empile n - 1
ADD R7 R7 #1
SUB R2 R2 #1
STR R2 R7 # on empile n - 2
CALL fibo
LD R2 R7 # on dépile fibo(n-2)
SUB R7 R7 #1
LD R3 R7 # on dépile n - 1
STR R2 R7 # on empile fibo(n-2)
ADD R7 R7 #1
STR R3 R7 # on empile n - 1
CALL fibo
LD R2 R7 # on dépile fibo(n-1)
SUB R7 R7 #1
LD R3 R7 # on dépile fibo(n-2)
ADD R2 R2 R3
STR R2 R7 # on empile fibo(n)
RET
fin:
LD R1 R7
stop:
JMP stop

68
test/testUAL.asm Normal file
View File

@@ -0,0 +1,68 @@
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
XOR R4 R4 R4
XOR R5 R5 R5
XOR R6 R6 R6
XOR R7 R7 R7
ADD:
ADD R0 R0 #1
ADD R1 R1 R0
XOR R0 R0 R0
XOR R1 R1 R1
SUB:
ADD R0 R0 #1
ADD R1 R1 #1
ADD R2 R2 #2
SUB R0 R0 #1
SUB R3 R2 R1
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
AND:
ADD R0 R0 #5
ADD R1 R1 #3
AND R2 R0 #1
AND R3 R1 R0
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
OR:
ADD R0 R0 #5
ADD R1 R1 #2
OR R2 R0 #1
OR R3 R1 R0
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
SL:
ADD R0 R0 #5
ADD R1 R1 #2
SL R2 R0 #1
SL R3 R0 R1
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
SR:
ADD R0 R0 #20
ADD R1 R1 #2
SR R2 R0 #1
SR R3 R0 R1
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
MUL:
ADD R0 R0 #20
ADD R1 R1 #2
MUL R2 R0 #2
MUL R3 R0 R1
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3

79
test/testsAutres.asm Normal file
View File

@@ -0,0 +1,79 @@
debut:
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
XOR R4 R4 R4
XOR R5 R5 R5
XOR R6 R6 R6
XOR R7 R7 R7
jump:
JMP jump_equ
ADD R7 R7 #1
jump_equ:
ADD R0 R0 #1
ADD R1 R1 #1
JEQU R0 R1 jump_equ2
ADD R7 R7 #2
jump_equ2:
ADD R0 R0 #1
ADD R6 R6 #1
JEQU R0 R1 jump_neq
SUB R6 R6 #1
jump_neq:
JNEQ R0 R1 jump_neq2
ADD R7 R7 #4
jump_neq2:
ADD R2 R2 #1
ADD R6 R6 #2
JNEQ R1 R2 jump_sup
SUB R6 R6 #2
jump_sup:
JSUP R1 R0 jump_sup2
ADD R7 R7 #8
jump_sup2:
ADD R6 R6 #4
JSUP R0 R1 jump_inf
SUB R6 R6 #4
jump_inf:
JINF R0 R1 jump_inf2
ADD R7 R7 #16
jump_inf2:
ADD R6 R6 #8
JSUP R1 R0 store
SUB R6 R6 #8
store:
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
ADD R0 R0 #1
ADD R1 R1 #24
STR R0 R1
load:
LD R0 R2
JEQU R1 R2 fin_load
ADD R7 R7 #32
fin_load:
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
XOR R4 R4 R4
XOR R5 R5 R5
foo:
ADD R0 R0 #1
JEQU R0 R1 fin
CALL bar
RET
bar:
ADD R1 R1 #2
CALL foo
RET
fin:
ADD R0 R0 #42
XOR R0 R0 R0
XOR R1 R1 R1
XOR R2 R2 R2
XOR R3 R3 R3
XOR R4 R4 R4
XOR R5 R5 R5