通过输入gcc -S -o main.s main.c -m32将c程序编译成32位汇编代码cat main.s查看汇编码
查询资料知道:
eax:函数返回值保存寄存器 ebp:栈底指针寄存器 esp:栈顶指针寄存器(运行中的每个程序都有一段堆栈空间,用来存放程序运行中的数据) eip:当前指令位置寄存器 ······ 教材导读:程序的机器级表示 gcc -S xxx.c -o xxx.s获得汇编代码;想要64位机器上获得32位汇编代码gcc -m32 -S xxx.cobjdump -d xxx.o反汇编
不同数据的汇编代码后缀:
寄存器的理解:
寻址方式:操作数(operand)指示出执行一个操作中要使用的源数据值,以及放置结果的目的位置。第一种立即数,用来表示常数值;第二种寄存器表示某个寄存器的内容。第三种内存引用,根据计算出来的地址(有效地址)访问某个内存位置。有效地址的计算方式:Imm(Eb,Ei,s) = Imm + R[Eb] + R[Ei]*s
数据传送指令
算术与逻辑操作
汇编语言中的条件控制
## x in %rdi ,y in %rsi absdiff_se: cmpq %rsi, %rdi ##比较x,y jge .L2 ## if x>=y 跳转L2 addq $1, lt_cnt(%rip) ##lt_cnt++ movq %rsi, %rax %rsi送入%rax subq %rdi, %rax ##%rax-%rdi送入%rdi ret ##return .L2: addq $1, ge_cnt(%rip) ##ge_cnt++ movq %rdi, %rax ##向x传值 subq %rsi, %rax ##%rax-%rsi的值送入%rax ret ##return while循环## n in %rdi fact_do: movl $1,