虚拟机下跑的Linux ,switch.c 使用gcc -Og -S switch.c 编译输出汇编语句:
cs app上关于数据传送说的是6个参数内,会使用寄存器传递参数。7+个参数才会使用栈指针,这个虚拟机跑的Linux几个参数都用的栈指针,难道虚拟机无法用寄存器?
switch函数:
#include <stdio.h>
int main(){}int switcher(long a,long b,long c,long *dest){ long val; switch (a){ case 5: c=b^15; case 0: val=c+112; break; case 2: case 7: val=(b+c)<<2; break; case 4: val=a; break; default: val =b; } *dest =val; }
对应的汇编语句: switcher: .LFB23: .cfi_startproc movl 4(%esp), %eax cmpl $7, %eax ja .L8 jmp *.L4(,%eax,4) .section .rodata .align 4 .align 4 .L4: .long .L3 .long .L8 .long .L5 .long .L8 .long .L2 .long .L7 .long .L8 .long .L5 .text .L7: movl 8(%esp), %eax xorl $15