global task_regs global task_stack section .note.GNU-stack section .text task_regs: ; rdi - указатель первое на число, rsi - указатель второе на число, rdx - результат push rax mov rax, [rdi] mov [rdx], rax mov rax, [rdi + 8] mov [rdx + 8], rax mov rax, [rsi + 8] add [rdx + 8], rax mov rax, [rsi] adc [rdx], rax pop rax ret task_stack: ; разрядность - 1 байт. Дальше читаем сколько надо. Читает в 2 раза больше разрядности push rbp mov rbp, rsp mov al, [rbp + 8] test al, 64 jnz .64bit test al, 32 jnz .32bit test al, 16 jnz .16bit test al, 8 .8bit: xor rax, rax mov al, [rbp + 9] mov ah, [rbp + 10] mov cl, [rbp + 11] mov ch, [rbp + 12] add al, cl adc ah, ch jmp .end .16bit: xor rax, rax mov ax, [rbp + 11] ; старшая часть 1-го mov dx, [rbp + 15] ; старшая часть 2-го mov cx, [rbp + 9] ; младшая mov bx, [rbp + 13] ;младшая add cx, bx adc ax, dx pushfq ; Сохраним флаги на всякий sal eax, 16 mov ax, cx popfq jmp .end .32bit: xor rax, rax mov eax, [rbp + 11] ; старшая часть 1-го mov edx, [rbp + 15] ; старшая часть 2-го mov ecx, [rbp + 9] ; младшая mov ebx, [rbp + 13] ;младшая add ecx, ebx adc eax, edx pushfq ; Сохраним флаги на всякий sal rax, 32 mov eax, ecx popfq jmp .end .64bit: ;crush .end: ret