github.com/decomp/exp@v0.0.0-20210624183419-6d058f5e1da6/lift/x86/testdata/x86_64/arithmetic/arithmetic.asm (about)

     1  [BITS 64]
     2  
     3  ;global _start:function
     4  
     5  global div_r8:function
     6  global div_m8:function
     7  global div_r16:function
     8  global div_m16:function
     9  global div_r32:function
    10  global div_m32:function
    11  global div_r64:function
    12  global div_m64:function
    13  
    14  section .text
    15  
    16  ;_start:
    17  ;	call    div_m64
    18  ;	; sys_exit(eax)
    19  ;	mov     ebx, eax
    20  ;	mov     eax, 1
    21  ;	int     0x80
    22  
    23  ;add:
    24  ;	mov     eax, 29
    25  ;	add     eax, 13
    26  ;	ret
    27  
    28  ;sub:
    29  ;	mov     eax, 55
    30  ;	sub     eax, 13
    31  ;	ret
    32  
    33  ;mul:
    34  ;	mov     eax, 2
    35  ;	mov     ebx, 21
    36  ;	mul     eax
    37  ;	ret
    38  
    39  ;imul:
    40  ;	mov     eax, 2
    41  ;	imul    eax, 21
    42  ;	ret
    43  
    44  ; === [ div arg ] ==============================================================
    45  ;
    46  ; --- [ 8-bit divisor arg ] ----------------------------------------------------
    47  ;
    48  ;           AX
    49  ;    ___________________ => AL (quotient) and AH (remainder)
    50  ;    arg (8-bit divisor)
    51  ;
    52  div_r8:
    53  	; 42 = 84 / 2
    54  	mov     ax, 84
    55  	mov     bl, 2
    56  	div     bl
    57  	and     rax, 0x000000FF
    58  	ret
    59  
    60  div_m8:
    61  	; 42 = 84 / 2
    62  	mov     ax, 84
    63  	mov     byte [rel m8], 2
    64  	div     byte [rel m8]
    65  	and     rax, 0x000000FF
    66  	ret
    67  
    68  ; === [ div arg ] ==============================================================
    69  ;
    70  ; --- [ 16-bit divisor arg ] ---------------------------------------------------
    71  ;
    72  ;           DX:AX
    73  ;    ____________________ => AX (quotient) and DX (remainder)
    74  ;    arg (16-bit divisor)
    75  ;
    76  div_r16:
    77  	; 42 = 84 / 2
    78  	mov     dx, 0
    79  	mov     ax, 84
    80  	mov     bx, 2
    81  	div     bx
    82  	and     rax, 0x0000FFFF
    83  	ret
    84  
    85  div_m16:
    86  	; 42 = 84 / 2
    87  	mov     dx, 0
    88  	mov     ax, 84
    89  	mov     word [rel m16], 2
    90  	div     word [rel m16]
    91  	and     rax, 0x0000FFFF
    92  	ret
    93  
    94  ; === [ div arg ] ==============================================================
    95  ;
    96  ; --- [ 32-bit divisor arg ] ---------------------------------------------------
    97  ;
    98  ;         EDX:EAX
    99  ;    ____________________ => EAX (quotient) and EDX (remainder)
   100  ;    arg (32-bit divisor)
   101  ;
   102  div_r32:
   103  	; 42 = 84 / 2
   104  	mov     edx, 0
   105  	mov     eax, 84
   106  	mov     ebx, 2
   107  	div     ebx
   108  	mov     rbx, 0x00000000FFFFFFFF
   109  	and     rax, rbx
   110  	ret
   111  
   112  div_m32:
   113  	; 42 = 84 / 2
   114  	mov     edx, 0
   115  	mov     eax, 84
   116  	mov     dword [rel m32], 2
   117  	div     dword [rel m32]
   118  	mov     rbx, 0x00000000FFFFFFFF
   119  	and     rax, rbx
   120  	ret
   121  
   122  ; === [ div arg ] ==============================================================
   123  ;
   124  ; --- [ 64-bit divisor arg ] ---------------------------------------------------
   125  ;
   126  ;         RDX:RAX
   127  ;    ____________________ => RAX (quotient) and RDX (remainder)
   128  ;    arg (64-bit divisor)
   129  ;
   130  div_r64:
   131  	; 42 = 84 / 2
   132  	mov     rdx, 0
   133  	mov     rax, 84
   134  	mov     rbx, 2
   135  	div     rbx
   136  	ret
   137  
   138  div_m64:
   139  	; 42 = 84 / 2
   140  	mov     rdx, 0
   141  	mov     rax, 84
   142  	mov     qword [rel m64], 2
   143  	div     qword [rel m64]
   144  	ret
   145  
   146  ;imul:
   147  ;	mov     eax, 2
   148  ;	imul    eax, 21
   149  ;	ret
   150  
   151  section .bss
   152  
   153  ; 8-bit memory variable.
   154  m8: resb 1
   155  
   156  ; 16-bit memory variable.
   157  m16: resw 1
   158  
   159  ; 32-bit memory variable.
   160  m32: resd 1
   161  
   162  ; 64-bit memory variable.
   163  m64: resq 1