Compare commits

..

No commits in common. "25d2cbe07e28e7e4c28e273006c99ed1410d9e72" and "130eaa54f0a3d2e4b90094014d61bafda19421d0" have entirely different histories.

7 changed files with 1 additions and 163 deletions

3
.gitignore vendored
View File

@ -4,5 +4,4 @@
**/build
TD/TD3/ENB.log
TD/TD3/ibm4q05.dat
TD/TD10/88
TD/TD3/ibm4q05.dat

Binary file not shown.

Binary file not shown.

View File

@ -1,13 +0,0 @@
88PATH = ../../TD/TD10/88/bin
asm: main.asm
nasm -f elf32 -o main.o main.asm
ld -m elf_i386 -o main main.o
rm -f main.o
exec-88: main.s
$(88PATH)/as88 main.s || echo error
$(88PATH)/s88 main.s
clean:
rm -f main main.# main.$$ main.88 main.o

View File

@ -1,26 +0,0 @@
# Test de primalité en assembleur (x86 et 8088)
Les entrées sont dans les fichiers de code, à modifier avant la compilation (avec la valeur par défaut 37).
Le programme prend en entrée un entier `n>1` et vérifie pour chacun des nombres de 2 à n-1 si celui-ci le divise.
Le résultat s'affiche sur la sortie standard et dans l'exit code du programme.
## Compilation
Pour compiler pour 8088, et exécuter directement (sans l'interpréteur interactif):
```bash
make exec-88
```
Pour compiler pour x86:
```bash
make asm
```
Cela demande `nasm` d'installé et fournit un exécutable `main`
Pour nettoyer le projet:
```bash
make clean
```

View File

@ -1,56 +0,0 @@
; This programs checks if a number n>1 is prime
; it checks for divisors from 2 to n-1, but does not terminate if n=1
section .data
is_prime db "prime"
is_len equ $ - is_prime
not_prime db "not prime"
not_len equ $ - not_prime
section .text
global _start
_start:
mov ebx, 37 ; hardcoded number to check
call check_prime
; n is loaded from ebx
check_prime:
mov ecx, 2 ; number to start at for primality check
loop:
cmp ecx, ebx
je end_is_prime ; if at the end of the loop, call end_is_prime
; operate division (bdx/ecx) <=> (num/current)
xor edx, edx ; will store remainder
mov eax, ebx
div ecx
cmp edx, 0 ; check if ecx divides ebx
je end_is_not_prime
inc ecx ; continue loop
jmp loop
; success
end_is_prime:
mov edx, is_len
mov ecx, is_prime
mov ebx, 1 ; stdout
mov eax, 4 ; sys_write
int 0x80
mov eax, 1 ; sys_exit
mov ebx, 0 ; exit code 0
int 0x80 ; syscall
; failure
end_is_not_prime:
mov edx, not_len
mov ecx, not_prime
mov ebx, 1 ; stdout
mov eax, 4 ; sys_write
int 0x80 ; syscall
mov ebx, 1 ; exit code 1
mov eax, 1 ; sys_exit
int 0x80 ; syscall

View File

@ -1,66 +0,0 @@
! This programs checks if a number n>1 is prime
! it checks for divisors from 2 to n-1, but does not terminate if n=1
_EXIT = 1
_WRITE = 4
_STDOUT = 1
.SECT .TEXT
start:
MOV BX,37 ! hardcoded number to check
CALL check_prime
PUSH 2
PUSH _EXIT
SYS
! n is loaded from BX
check_prime:
MOV CX,2 ! number to start at for primality check
l: CMP CX,BX
JE end_is_prime ! if CX=BX, exit, n is prime
! operate division (DX/CX) <=> (num/current)
XOR DX,DX ! will store remainder
MOV AX,BX
DIV CX
CMP DX,0 ! check if CX divides BX
JE end_is_not_prime
INC CX ! continue loop
JMP l
end_is_prime:
PUSH 6
PUSH is_prime
PUSH _STDOUT
PUSH _WRITE
SYS
SUB SP,8
PUSH 0
PUSH _EXIT
SYS
end_is_not_prime:
PUSH 10
PUSH not_prime
PUSH _STDOUT
PUSH _WRITE
SYS
SUB SP,8
PUSH 1
PUSH _EXIT
SYS
.SECT .DATA
is_prime:
.ASCII "prime\n"
not_prime:
.ASCII "not prime\n"
.SECT .BSS