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