Question: I'm struggling to understand what this code does

```
ldi r20, 80
loop: asr r20
     brsh loop
      nop

```

What is this code doing and how many clock cycles does this code take to execute?

Answer: 
If you're looking to define a globally-scoped procedure then the short answer is no, you can't do this in c#. No global functions, procedures or objects.

In C# everything apart from namespaces and types (class, struct, enum, interface) must be defined inside a type. Static members (fields, properties and methods) can be used without an instance of the class, but only by referencing the type that owns them. Non-static members need an instance of the owning class.

This is fundamental to the syntax of the language. C# is neither C nor C++, where you *can* define global objects, functions and procedures.
In C#? Not possible. Because it's a full OOP programming language and it was designed to work with objects you can't use functions outside the scope of an object. When calling static methods you have to specify the class where that static method lives...

```
Class.StaticMethod();

```

you can only use the short-hand notation if this method is call from within the same class...

```
StaticMethod();

```

But remember that you will not get access to instance members because static methods donot belong to instance of an object

Update based on comment
-----------------------

Looks like it will be possible to call static members without having to specify the class that declares it in C# 6, and you will be able to reference classes directly in `using` statements...in similar fashion to Java...[more info here](http://roslyn.codeplex.com/wikipage?title=Language%20Feature%20Status&referringTitle=Home)