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

     1  [BITS 32]
     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  
    12  section .text
    13  
    14  ;_start:
    15  ;	call    div_m8
    16  ;	; sys_exit(eax)
    17  ;	mov     ebx, eax
    18  ;	mov     eax, 1
    19  ;	int     0x80
    20  
    21  ;add:
    22  ;	mov     eax, 29
    23  ;	add     eax, 13
    24  ;	ret
    25  
    26  ;sub:
    27  ;	mov     eax, 55
    28  ;	sub     eax, 13
    29  ;	ret
    30  
    31  ;mul:
    32  ;	mov     eax, 2
    33  ;	mov     ebx, 21
    34  ;	mul     eax
    35  ;	ret
    36  
    37  ;imul:
    38  ;	mov     eax, 2
    39  ;	imul    eax, 21
    40  ;	ret
    41  
    42  ; === [ div arg ] ==============================================================
    43  ;
    44  ; --- [ 8-bit divisor arg ] ----------------------------------------------------
    45  ;
    46  ;           AX
    47  ;    ___________________ => AL (quotient) and AH (remainder)
    48  ;    arg (8-bit divisor)
    49  ;
    50  div_r8:
    51  	; 42 = 84 / 2
    52  	mov     ax, 84
    53  	mov     bl, 2
    54  	div     bl
    55  	and     eax, 0x000000FF
    56  	ret
    57  
    58  div_m8:
    59  	; 42 = 84 / 2
    60  	mov     ax, 84
    61  	mov     byte [m8], 2
    62  	div     byte [m8]
    63  	and     eax, 0x000000FF
    64  	ret
    65  
    66  ; --- [ 16-bit divisor arg ] ---------------------------------------------------
    67  ;
    68  ;           DX:AX
    69  ;    ____________________ => AX (quotient) and DX (remainder)
    70  ;    arg (16-bit divisor)
    71  ;
    72  div_r16:
    73  	; 42 = 84 / 2
    74  	mov     dx, 0
    75  	mov     ax, 84
    76  	mov     bx, 2
    77  	div     bx
    78  	and     eax, 0x0000FFFF
    79  	ret
    80  
    81  div_m16:
    82  	; 42 = 84 / 2
    83  	mov     dx, 0
    84  	mov     ax, 84
    85  	mov     word [m16], 2
    86  	div     word [m16]
    87  	and     eax, 0x0000FFFF
    88  	ret
    89  
    90  ; --- [ 32-bit divisor arg ] ---------------------------------------------------
    91  ;
    92  ;         EDX:EAX
    93  ;    ____________________ => EAX (quotient) and EDX (remainder)
    94  ;    arg (32-bit divisor)
    95  ;
    96  div_r32:
    97  	; 42 = 84 / 2
    98  	mov     edx, 0
    99  	mov     eax, 84
   100  	mov     ebx, 2
   101  	div     ebx
   102  	ret
   103  
   104  div_m32:
   105  	; 42 = 84 / 2
   106  	mov     edx, 0
   107  	mov     eax, 84
   108  	mov     dword [m32], 2
   109  	div     dword [m32]
   110  	ret
   111  
   112  ;imul:
   113  ;	mov     eax, 2
   114  ;	imul    eax, 21
   115  ;	ret
   116  
   117  section .bss
   118  
   119  ; 8-bit memory variable.
   120  m8: resb 1
   121  
   122  ; 16-bit memory variable.
   123  m16: resw 1
   124  
   125  ; 32-bit memory variable.
   126  m32: resd 1