diff --git a/related_info/lab1/Makefile b/related_info/lab1/Makefile index e6f9adb..4bcf613 100644 --- a/related_info/lab1/Makefile +++ b/related_info/lab1/Makefile @@ -1,4 +1,4 @@ -all: lab1-ex0.exe lab1-ex1.exe +all: lab1-ex0.exe lab1-ex1.exe lab1-ex3.s lab1-ex0.exe: defines.h lab1-ex0.s gcc -m32 -g -o lab1-ex0.exe lab1-ex0.s @@ -10,6 +10,10 @@ lab1-ex1.exe: lab1-ex1.c strace -c ./lab1-ex1.exe echo "watch the interrupts in linux" more /proc/interrupts + +lab1-ex3.s: lab1-ex3.c + echo "show .s files" + gcc -m32 -S lab1-ex3.c clean: - rm lab1-ex0.exe lab1-ex1.exe + rm lab1-ex0.exe lab1-ex1.exe lab1-ex3.s diff --git a/related_info/lab1/lab1-ex3.c b/related_info/lab1/lab1-ex3.c new file mode 100644 index 0000000..b81d908 --- /dev/null +++ b/related_info/lab1/lab1-ex3.c @@ -0,0 +1,17 @@ +void inline ex1(void){ + asm ("movl $0xffff, %%eax\n"); +} + +void inline ex2(void){ + unsigned cr0; + asm volatile ("movl %%cr0, %0\n" :"=r"(cr0)); + cr0 |= 0x80000000; + asm volatile ("movl %0, %%cr0\n" ::"r"(cr0)); +} + +void inline ex3(void){ +long __res, arg1 = 2, arg2 = 22, arg3 = 222, arg4 = 233; +__asm__ __volatile__("int $0x80" + : "=a" (__res) + : "0" (11),"b" (arg1),"c" (arg2),"d" (arg3),"S" (arg4)); + } diff --git a/related_info/lab1/lab1-ex3.md b/related_info/lab1/lab1-ex3.md new file mode 100644 index 0000000..95437fb --- /dev/null +++ b/related_info/lab1/lab1-ex3.md @@ -0,0 +1,8 @@ +# inline assembly for C example +Try below command +``` +gcc -m32 -S lab1-ex3.c +``` +Then you will get lab1_ex3.s + +Try to understand the contents of this .s file and the relation between .c file and .s file.