From 000bb88ff53b62a983a73e75b6e19dea79d63981 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=B4me=20Benoit?= Date: Mon, 19 Jun 2017 21:31:36 +0200 Subject: [PATCH] IML TD: * Implement TD2 exercice 3 completly * Implement TD3 MIPS assembler MARS exercices --- TD2/exercise3/Makefile | 82 ++++++++++++++++++++++++++++++++++++++++ TD2/exercise3/exercise.c | 41 ++++++++++++++++++++ TD3/mips1.asm | 8 ++++ TD3/mips2.asm | 12 ++++++ TD3/mips3.asm | 24 ++++++++++++ 5 files changed, 167 insertions(+) create mode 100644 TD2/exercise3/Makefile create mode 100644 TD2/exercise3/exercise.c create mode 100644 TD3/mips1.asm create mode 100644 TD3/mips2.asm create mode 100644 TD3/mips3.asm diff --git a/TD2/exercise3/Makefile b/TD2/exercise3/Makefile new file mode 100644 index 0000000..33cbd2c --- /dev/null +++ b/TD2/exercise3/Makefile @@ -0,0 +1,82 @@ +# Sample Makefile to build simple project. +# +# This Makefile expect all source files (.c) to be at the same level, in the +# current working directory. +# +# It will automatically generate dependencies, compile all files, and produce a +# binary using the provided name. +# +# Set BINARY_NAME to the name of the binary file to build. +# Set BUILD_TYPE to either debug or release +# +# Automatic dependencies code from: +# http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/#tldr +BINARY_NAME=exo3 +BUILD_TYPE=debug + +# ==================================== +# DO NOT CHANGE STUFF BEYOND THIS LINE +# ==================================== + +all: $(BINARY_NAME) + +CC=gcc +LD=gcc + +WARN_FLAGS = -Wall -Wextra +STD_FLAG = -std=c11 + +ifeq ($(BUILD_TYPE),debug) +BUILDDIR := .build/debug +DEBUG_FLAG = -g +STRIP_FLAG = +OPTI_FLAG = -O0 +else +BUILDDIR := .build/release +DEBUG_FLAG = +STRIP_FLAG = -s +OPTI_FLAG = -O3 +endif + +CFLAGS := $(CFLAGS) $(WARN_FLAGS) $(STD_FLAG) $(OPTI_FLAG) $(DEBUG_FLAG) +LDFLAGS := $(LDFLAGS) $(STRIP_FLAG) + +OBJDIR := $(BUILDDIR)/objs +$(shell mkdir -p $(OBJDIR)) + +SRCS=$(wildcard *.c) +OBJS=$(patsubst %.c,$(OBJDIR)/%.o,$(SRCS)) + +DEPDIR := $(BUILDDIR)/deps +$(shell mkdir -p $(DEPDIR)) +DEPFLAGS = -MT $@ -MMD -MP -MF $(DEPDIR)/$*.Td +POSTCOMPILE = mv -f $(DEPDIR)/$*.Td $(DEPDIR)/$*.d + +$(BINARY_NAME): $(OBJS) + @echo "[LD ] $@" + @$(LD) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@ + +$(OBJDIR)/%.o: %.c $(DEPDIR)/%.d + @echo "[C ] $*" + @$(CC) $(DEPFLAGS) $(CFLAGS) -c $< -o $@ + @$(POSTCOMPILE) + +$(DEPDIR)/%.d: ; + +.PRECIOUS: $(DEPDIR)/%.d + +include $(wildcard $(patsubst %,$(DEPDIR)/%.d,$(basename $(SRCS)))) + +run: $(BINARY_NAME) + ./$(BINARY_NAME) + +clean: + @echo "[CLN]" + -@rm -r $(BUILDDIR) + -@rm $(BINARY_NAME) + +disassemble: $(BINARY_NAME) + objdump -d $< | less + +symbols: $(BINARY_NAME) + objdump -t $< | sort | less diff --git a/TD2/exercise3/exercise.c b/TD2/exercise3/exercise.c new file mode 100644 index 0000000..c4e9e41 --- /dev/null +++ b/TD2/exercise3/exercise.c @@ -0,0 +1,41 @@ +#include +#include +#include +#include + +#include +#include + +int main() { + int pipefd[2]; + char tmpbuf; + + if (pipe(pipefd) == -1) { + perror("Pipe creation failure\n"); + exit(EXIT_FAILURE); + }; + + pid_t cpid = fork(); + + if (cpid == -1) { + perror("fork failure\n"); + exit(EXIT_FAILURE); + } else if (cpid == 0) { + close(pipefd[0]); + dup2(pipefd[1], STDOUT_FILENO); + printf("[%d] Hey Jude\n", getpid()); + //execl("/bin/ls", "ls", (char*)NULL); + close(pipefd[1]); + exit(EXIT_SUCCESS); + } else { + close(pipefd[1]); + printf("[%d] REDIRECTION: \n", getpid()); + while (read(pipefd[0], &tmpbuf, 1) > 0) { + write(STDOUT_FILENO, &tmpbuf, 1); + } + close(pipefd[0]); + wait(NULL); + } + + return EXIT_SUCCESS; +} diff --git a/TD3/mips1.asm b/TD3/mips1.asm new file mode 100644 index 0000000..218cc57 --- /dev/null +++ b/TD3/mips1.asm @@ -0,0 +1,8 @@ +.data +msg: .asciiz "ça fonctionne" +.text +la $a0, msg +li $v0, 4 +syscall +li $v0, 10 +syscall \ No newline at end of file diff --git a/TD3/mips2.asm b/TD3/mips2.asm new file mode 100644 index 0000000..a4689d7 --- /dev/null +++ b/TD3/mips2.asm @@ -0,0 +1,12 @@ +.text +la $t1,34 +la $t2,63 +add $t3,$t2,$t1 +sub $t4,$t3,$t1 +mult $t3,$t4 +mflo $t5 +div $t2,$t1 +mflo $t6 +mfhi $t7 +la $v0,10 +syscall \ No newline at end of file diff --git a/TD3/mips3.asm b/TD3/mips3.asm new file mode 100644 index 0000000..080f63b --- /dev/null +++ b/TD3/mips3.asm @@ -0,0 +1,24 @@ +.data +msg_addition: .asciiz "Valeur attendue 97, obtenue" +msg_soustraction: .asciiz "Valeur attendue 63, obtenue" +msg_multiplication: .asciiz "Valeur attendue 6111, obtenue" +msg_division: .asciiz "Valeur attendue , obtenue" +.text +la $t1,34 +la $t2,63 +add $t3,$t2,$t1 +la $a0,msg_addition +li $v0,4 +syscall +sub $t4,$t3,$t1 +mult $t3,$t4 +mflo $t5 +div $t2,$t1 +mflo $t6 +mfhi $t7 + + + + +la $v0,10 +syscall \ No newline at end of file -- 2.34.1