void __delay(unsigned long loops)
{
delay_fn(loops);
}
static void (*delay_fn)(unsigned long) = delay_loop;
static void delay_loop(unsigned long loops)
{
int d0;
__asm__ __volatile__(
"\tjmp 1f\n"
".align 16\n"
"1:\tjmp 2f\n"
".align 16\n"
"2:\tdecl %0\n\tjns 2b"
:"=&a" (d0)
:"0" (loops));
}
#include <stdio.h>
static void delay_loop(unsigned long loops)
{
int d0;
__asm__ __volatile__(
"\\tjmp 1f\\n"
".align 16\\n"
"1:\\tjmp 2f\\n"
".align 16\\n"
"2:\\tdecl %0\\n\\tjns 2b"
:"=&a" (d0)
:"0" (loops));
}
int main()
{
int loops = 10;
delay_loop(loops);
return (0);
}
080483f0 <delay_loop>:
80483f0: 55 push %ebp
80483f1: 89 e5 mov %esp,%ebp
80483f3: 53 push %ebx
80483f4: 83 ec 10 sub $0x10,%esp
80483f7: 8b 45 08 mov 0x8(%ebp),%eax
80483fa: 89 c3 mov %eax,%ebx
80483fc: 89 d8 mov %ebx,%eax
80483fe: eb 00 jmp 8048400 <delay_loop+0x10>
8048400: eb 0e jmp 8048410 <delay_loop+0x20>
8048402: 8d b4 26 00 00 00 00 lea 0x0(%esi,%eiz,1),%esi
8048409: 8d bc 27 00 00 00 00 lea 0x0(%edi,%eiz,1),%edi
8048410: 48 dec %eax
8048411: 79 fd jns 8048410 <delay_loop+0x20>
8048413: 89 c3 mov %eax,%ebx
8048415: 89 5d f8 mov %ebx,-0x8(%ebp)
8048418: 83 c4 10 add $0x10,%esp
804841b: 5b pop %ebx
804841c: 5d pop %ebp
804841d: c3 ret
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |