Files
solutions/05-subroutines-params/task.asm

71 lines
1.5 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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