Advertisement
orange_in_space

sqrt_orange.il

Feb 15th, 2018
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.64 KB | None | 0 0
  1. .assembly sqrt_orange{}
  2.  
  3. .method public static void main(){
  4.     .entrypoint
  5.     ldstr "Sqrt(2)="
  6.     call void [mscorlib]System.Console::Write(string)
  7.    
  8.     ldc.r8 2
  9.     call float64 sqrt(float64)
  10.     call void [mscorlib]System.Console::WriteLine(float64)
  11.     ret
  12. }
  13.  
  14. .method public static float64 sqrt(float64){
  15.     .maxstack 5
  16.     .locals init (
  17.         [0] float64 Left,
  18.         [1] float64 Right
  19.     )
  20.    
  21.     //Left=0;
  22.     ldc.r8    0.0
  23.     stloc.0
  24.     //Right= 1 arg +;
  25.     ldc.r8    1
  26.     ldarg.0 //
  27.     add
  28.     stloc.1
  29.    
  30.     br loop_begin //goto loop_begin
  31.     loop_next: // pop prev. Mid( = StackAllClear)
  32.         pop
  33.     loop_begin:
  34.         //Mid=
  35.         ldloc.0
  36.         ldloc.1
  37.         add
  38.         ldc.r8    2
  39.         div
  40.        
  41.         // F Mid
  42.         dup
  43.         dup
  44.         dup
  45.        
  46.         //debug begin(Show Mid)
  47.         //dup
  48.         //call void [mscorlib]System.Console::WriteLine(float64)
  49.         //debug end
  50.        
  51.        
  52.         // F Mid,Mid,Mid,Mid
  53.         mul
  54.         // F Square,Mid,Mid
  55.         ldarg.0
  56.         // F arg,Square,Mid,Mid
  57.        
  58.        
  59.         bgt to_right //if Square<arg then goto to_right
  60.         // F Mid,Mid
  61.        
  62.         to_left:
  63.            stloc.0  // Left=Mid
  64.            br loop_check //goto loop_check
  65.        
  66.         to_right:
  67.            stloc.1 // Right=Mid
  68.        
  69.         // F Mid
  70.         loop_check:
  71.        
  72.         ldloc.1
  73.         ldloc.0
  74.         sub  // F (Right-Left) Mid
  75.         ldc.r8    1E-06 // F 0.000001d, (Right-Left)
  76.         bgt loop_next // if (Right-Left) > 0.000001d then goto loop_next
  77.     loop_end:
  78.     ret
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement