From 623731461fd0e07d149272dc6c6b3562a423c58a Mon Sep 17 00:00:00 2001 From: root Date: Thu, 3 Oct 2024 17:59:26 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BF=D1=80=D0=BE=D1=82=D0=BE=D1=82?= =?UTF-8?q?=D0=B8=D0=BF=20=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20=D1=81=D1=82=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 05-subroutines-params/task.asm | 70 ++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 05-subroutines-params/task.asm diff --git a/05-subroutines-params/task.asm b/05-subroutines-params/task.asm new file mode 100644 index 0000000..bf45501 --- /dev/null +++ b/05-subroutines-params/task.asm @@ -0,0 +1,70 @@ +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