diff --git a/study_assembly_x86/Makefile b/study_assembly_x86/Makefile new file mode 100755 index 0000000..7bcdb25 --- /dev/null +++ b/study_assembly_x86/Makefile @@ -0,0 +1,28 @@ +CC = gcc +CFLAGS = -Wall -g + +# 默认目标,生成所有文件 +all: main.i main.s main.o main + +# 预处理: 生成 main.i +main.i: main.c + $(CC) -E $< -o $@ + +# 编译: 生成汇编代码 main.s +main.s: main.i + $(CC) -S $< -o $@ + +# 汇编: 生成目标文件 main.o +main.o: main.s + $(CC) -c $< -o $@ + +# 链接: 生成可执行文件 main +main: main.o + $(CC) $< -o $@ + +# 清理所有生成的文件 +clean: + rm -f main.i main.s main.o main + +# .PHONY 表示这些目标不是文件名 +.PHONY: all clean diff --git a/study_assembly_x86/main b/study_assembly_x86/main new file mode 100755 index 0000000..82454eb Binary files /dev/null and b/study_assembly_x86/main differ diff --git a/study_assembly_x86/main.c b/study_assembly_x86/main.c new file mode 100755 index 0000000..4ba0127 --- /dev/null +++ b/study_assembly_x86/main.c @@ -0,0 +1,8 @@ +int add_a_and_b(int a, int b) { + return a + b; +} + +int main() { + return add_a_and_b(2, 3); +} + diff --git a/study_assembly_x86/main.i b/study_assembly_x86/main.i new file mode 100755 index 0000000..a673ba4 --- /dev/null +++ b/study_assembly_x86/main.i @@ -0,0 +1,13 @@ +# 0 "main.c" +# 0 "" +# 0 "<命令行>" +# 1 "/usr/include/stdc-predef.h" 1 3 4 +# 0 "<命令行>" 2 +# 1 "main.c" +int add_a_and_b(int a, int b) { + return a + b; +} + +int main() { + return add_a_and_b(2, 3); +} diff --git a/study_assembly_x86/main.o b/study_assembly_x86/main.o new file mode 100755 index 0000000..79d6bfb Binary files /dev/null and b/study_assembly_x86/main.o differ diff --git a/study_assembly_x86/main.s b/study_assembly_x86/main.s new file mode 100755 index 0000000..a80eb11 --- /dev/null +++ b/study_assembly_x86/main.s @@ -0,0 +1,44 @@ + .file "main.c" + .text + .globl add_a_and_b + .type add_a_and_b, @function +add_a_and_b: +.LFB0: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movl %edi, -4(%rbp) + movl %esi, -8(%rbp) + movl -4(%rbp), %edx + movl -8(%rbp), %eax + imul %edx, %eax + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE0: + .size add_a_and_b, .-add_a_and_b + .globl main + .type main, @function +main: +.LFB1: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset 6, -16 + movq %rsp, %rbp + .cfi_def_cfa_register 6 + movl $3, %esi + movl $2, %edi + call add_a_and_b + popq %rbp + .cfi_def_cfa 7, 8 + ret + .cfi_endproc +.LFE1: + .size main, .-main + .ident "GCC: (GNU) 14.1.1 20240720" + .section .note.GNU-stack,"",@progbits