Hi Newbee,
I don't use keil that much, and I don't use the '51, but I can answer your question, I think. You will need to take a look at the listing file your compiler gives you to see exactly what is happening in your code.
Yes, it should complete in a few micro seconds, and that is it. However, some compilers put a sleep instruction at the end, if your code does not loop. This is to prevent the program from running on, into undefined memory locations. If you don't tell your program how to end, then the program counter just keeps right on incrementing, off into uncharted memory.
So the idea of a 'super loop' is quite common on micros. You initialize, then put a lable, your program, then send it back to the lable, and it keeps on forever.
Now, I don't know how keil handles it, so if you look at your listing file (and you may have to tell the compiler to do this, in your compiler preferences settings,) you should see the equivelent instructions in assembly. This will tell you how your code is being handled.
Hope this is clear, it is very late at night where I am, and I'm bagged. If you have questions, i'll try to help you.
Regards,
Robert