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