汇编掌握

70 阅读1分钟

[root@dev-nfs01 ~]# vi demo1.c
[root@dev-nfs01 ~]# gcc -S -fno-asynchronous-unwind-tables demo1.c
[root@dev-nfs01 ~]# ll
总用量 30244
-rw-r--r--  1 root root       22 224 10:00 demo1.c
-rw-r--r--  1 root root      245 224 10:00 demo1.s
[root@dev-nfs01 ~]# cat demo1.s
	.file	"demo1.c"
	.text
	.globl	func
	.type	func, @function
func:
	pushq	%rbp
	movq	%rsp, %rbp
	movl	$10, -4(%rbp)
	popq	%rbp
	ret
	.size	func, .-func
	.ident	"GCC: (GNU) 4.8.5 20150623 (Red Hat 4.8.5-44)"
	.section	.note.GNU-stack,"",@progbits
	
	

esp:寄存器存放当前线程的栈顶指针
ebp:寄存器存放当前线程的栈底指针
eip:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。
eax:是"累加器"(accumulator), 它是很多加法乘法指令的缺省寄存器。

64位和32位的寄存器和汇编的比较

20160428232504330.png