feat: добавлена отдельная логика компиляции для task2

Дело в том, что там я намереваюсь воспользоваться фукнциями стандратной библиотеки Си, поэтому процесс компиляции должен быть особым
This commit is contained in:
root
2024-10-01 12:49:35 +03:00
parent 53a82c8ea0
commit 95df24eaa5
2 changed files with 72 additions and 0 deletions

67
01-asm-basics/time.asm Normal file
View File

@ -0,0 +1,67 @@
global main
extern printf
%define CLOCK_REALTIME 0
; struct timespec { time_t tv_sec; long tv_nsec; }
struc timespec
.tv_sec: resq 1
.tv_nsec: resq 1
endstruc
section .note.GNU-stack ; чтобы не жаловался линкер
section .bss
start: ; uses timespec model
times 2 resq 1
finish:
times 2 resq 1
section .data
fstring db "Operations took %ul seconds and %ul milliseconds", 10, 0
flen equ $-fstring
section .text
main: ; лично в моей системе time_t представляет из себя long int
mov rax, 228 ; Системный вызов получения времени
mov rdi, CLOCK_REALTIME
mov rsi, start
syscall
; insert your code here
mov rcx, 20000
looper:
mov rax, start
loop looper
mov rax, 228
mov rdi, CLOCK_REALTIME
mov rsi, finish
syscall
; считаем время для секунда и миллисекунд
; секунды
mov rsi, [finish + timespec.tv_sec]
sub rsi, [start + timespec.tv_sec]
; миллисекунды
mov rdx, [finish + timespec.tv_nsec]
sub rdx, [start + timespec.tv_nsec]
mov rdi, fstring
mov rax, 0
sub rsp, 8
call printf
add rsp, 8
exit:
mov rax, 60
mov rdi, 0
syscall

View File

@ -1,7 +1,12 @@
ASM = nasm ASM = nasm
CXX = gcc
CXX_FLAGS = -Os -static
ASM_FLAGS = -felf64 -g ASM_FLAGS = -felf64 -g
LINK = ld LINK = ld
task2: task2.o
$(CXX) $(CXX_FLAGS) $^ -o $@
%: %.o %: %.o
$(LINK) -o $@ $^ $(LINK) -o $@ $^