Guest User

rectangles_in_asm

a guest
Sep 28th, 2011
155
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .code64
  2. .text
  3. .globl main
  4.     .type   main, @function
  5.  
  6. write:
  7.     pushq   %rcx
  8.     movl    %eax,%esi
  9.     movq    $format_out, %rdi
  10.     xorq    %rax,%rax
  11.     call    printf
  12.     popq    %rcx
  13.     ret
  14.  
  15. read:   movq    $8,%rcx
  16.  
  17. read1:
  18.     movq    $format_in,%rdi
  19.  
  20.     movq    $Y2,%rsi   
  21.     movq    %rcx,%rax
  22.     subq    $1,%rax
  23.     movq    $4,%rdx
  24.     mulq    %rdx
  25.     addq    %rax,%rsi
  26.     xorq    %rax,%rax
  27.  
  28.     pushq   %rcx
  29.     call    scanf
  30.     popq    %rcx
  31.     loopl   read1
  32.     ret
  33.  
  34. abs:
  35.     cmpl    $0,%eax
  36.     jge abs_end
  37.     negl    %eax
  38. abs_end:
  39.     ret
  40.  
  41. max:
  42.     pushq   %rbp
  43.     movq    %rsp,%rbp
  44.     movl    16(%rsp),%eax
  45.     movl    24(%rsp),%ebx
  46.     cmpl    %eax,%ebx
  47.     jle max_a
  48.     movl    %ebx,%eax
  49. max_a:
  50.     popq    %rbp
  51.     ret
  52.  
  53. min:
  54.     pushq   %rbp
  55.     movq    %rsp,%rbp
  56.     movl    16(%rsp),%eax
  57.     movl    24(%rsp),%ebx
  58.     cmpl    %eax,%ebx
  59.     jge min_a
  60.     movl    %ebx,%eax
  61. min_a:
  62.     popq    %rbp
  63.     ret
  64.  
  65. square:
  66.     movl    x2,%eax
  67.     movl    x1,%ebx
  68.     subl    %ebx,%eax
  69.     call    abs
  70.     pushq   %rax
  71.     movl    y2,%eax
  72.     movl    y1,%ebx
  73.     subl    %ebx,%eax
  74.     call    abs
  75.     movl    %eax,%ebx
  76.     popq    %rax
  77.     mull    %ebx
  78.     ret
  79.  
  80. Ix:
  81.     movl    x2,%eax
  82.     pushq   %rax
  83.     movl    X2,%eax
  84.     pushq   %rax
  85.     call    min
  86.     popq    %rdx
  87.     popq    %rdx
  88.     pushq   %rax
  89.     movl    X1,%eax
  90.     pushq   %rax
  91.     call    min
  92.     popq    %rdx
  93.     popq    %rdx
  94.     pushq   %rax
  95.     movl    x1,%eax
  96.     pushq   %rax
  97.     call    min
  98.     popq    %rdx
  99.     popq    %rdx
  100.     pushq   %rax
  101.  
  102.     movl    x2,%eax
  103.     pushq   %rax
  104.     movl    X2,%eax
  105.     pushq   %rax
  106.     call    max
  107.     popq    %rdx
  108.     popq    %rdx
  109.     pushq   %rax
  110.     movl    X1,%eax
  111.     pushq   %rax
  112.     call    max
  113.     popq    %rdx
  114.     popq    %rdx
  115.     pushq   %rax
  116.     movl    x1,%eax
  117.     pushq   %rax
  118.     call    max
  119.     popq    %rdx
  120.     popq    %rdx
  121.  
  122.     movl    %eax,%ebx
  123.     popq    %rax
  124.     subl    %ebx,%eax
  125.     call    abs    
  126.     pushq   %rax
  127.  
  128.     movl    x2,%ebx
  129.     movl    x1,%eax
  130.     subl    %ebx,%eax
  131.     call    abs
  132.  
  133.     movl    %eax,%ebx
  134.     popq    %rax
  135.     subl    %eax,%ebx
  136.     pushq   %rbx
  137.  
  138.     movl    X2,%ebx
  139.     movl    X1,%eax
  140.     subl    %ebx,%eax
  141.     call    abs
  142.     popq    %rbx
  143.     addl    %ebx,%eax
  144.     ret
  145.    
  146. Iy:
  147.     movl    y2,%eax
  148.     pushq   %rax
  149.     movl    Y2,%eax
  150.     pushq   %rax
  151.     call    min
  152.     popq    %rdx
  153.     popq    %rdx
  154.     pushq   %rax
  155.     movl    Y1,%eax
  156.     pushq   %rax
  157.     call    min
  158.     popq    %rdx
  159.     popq    %rdx
  160.     pushq   %rax
  161.     movl    y1,%eax
  162.     pushq   %rax
  163.     call    min
  164.     popq    %rdx
  165.     popq    %rdx
  166.     pushq   %rax
  167.  
  168.     movl    y2,%eax
  169.     pushq   %rax
  170.     movl    Y2,%eax
  171.     pushq   %rax
  172.     call    max
  173.     popq    %rdx
  174.     popq    %rdx
  175.     pushq   %rax
  176.     movl    Y1,%eax
  177.     pushq   %rax
  178.     call    max
  179.     popq    %rdx
  180.     popq    %rdx
  181.     pushq   %rax
  182.     movl    y1,%eax
  183.     pushq   %rax
  184.     call    max
  185.     popq    %rdx
  186.     popq    %rdx
  187.  
  188.     movl    %eax,%ebx
  189.     popq    %rax
  190.     subl    %ebx,%eax
  191.     call    abs    
  192.     pushq   %rax
  193.  
  194.     movl    y2,%ebx
  195.     movl    y1,%eax
  196.     subl    %ebx,%eax
  197.     call    abs
  198.  
  199.     movl    %eax,%ebx
  200.     popq    %rax
  201.     subl    %eax,%ebx
  202.     pushq   %rbx
  203.  
  204.     movl    Y2,%ebx
  205.     movl    Y1,%eax
  206.     subl    %ebx,%eax
  207.     call    abs
  208.     popq    %rbx
  209.     addl    %ebx,%eax
  210.     ret
  211. main:
  212.     call    read
  213.     call    Ix
  214.    
  215.     pushq   %rax
  216.     cmpl    $0,%eax
  217.     jle non_sub
  218.     call    Iy
  219.     cmpl    $0,%eax
  220.     jle non_sub
  221.     popq    %rbx
  222.    
  223.     mull    %ebx
  224.     pushq   %rax
  225.     call    square
  226.     popq    %rbx
  227.     subl    %ebx,%eax
  228.     jmp end_main
  229. non_sub:
  230.     call    square
  231.  
  232. end_main:
  233.     call    write
  234.     movl    $0, %eax
  235.     mov $1,%eax
  236.     int $0x80
  237. .data
  238. format_out:
  239.     .string "%d\n"
  240. format_in:
  241.     .string "%d"
  242. Y2: .long   0
  243. X2: .long   0
  244. Y1: .long   0
  245. X1: .long   0
  246. y2: .long   0
  247. x2: .long   0
  248. y1: .long   0
  249. x1: .long   0
  250. ans:    .long   0
  251.  
  252.  
RAW Paste Data