feat: написаны приготовления для 2 пункта

В приготовления входит макрос для замера времени и предварительно записанные строки для printf
This commit is contained in:
root
2024-10-01 12:52:23 +03:00
parent 4594912561
commit df80a7190e
2 changed files with 77 additions and 0 deletions

66
04-addr-methods/task2.asm Normal file
View File

@ -0,0 +1,66 @@
global main
extern printf
struc timespec ; структура, в которой линукс хранит время. Тут нужна для удобства в будущем
.tv_sec: resq 1
.tv_nsec: resq 1
endstruc
%include "timer.inc"
section .note.GNU-stack
section .data
example: times 128 db 127
section .bss
; uses timespec model
start: resq 2
finish: resq 2
deltatime: resq 2
section .text
%define CLOCK_REALTIME 0
%macro TIME_10000 0-1+ ; принимает команду, которую будет пытаться обмерить по времени
mov rax, 228 ; Время начала
mov rdi, CLOCK_REALTIME
mov rsi, start
syscall
mov rcx, 10000
%%loop
%1
loop %%loop
mov rax, 228 ; Время конца
mov rdi, CLOCK_REALTIME
mov rsi, finish
syscall
; считаем секунды
mov rax, [finish + timespec.tv_sec]
sub rax, [start + timespec.tv_sec]
mov [deltatime + timespec.tv_sec], rax
; считаем наносекунды
mov rax, [finish + timespec.tv_nsec]
sub rax, [start + timespec.tv_nsec]
mov [deltatime + timespec.tv_nsec], rax
%endmacro
main:
; В качестве базы возьму inc
; регистровая
inc ecx
mov rax, example
xor rbx, rbx
; косвенно-регистровая
inc byte [rax]
; "Индексно-базовая", хотя у меня почти все может быть базой
inc byte [rax + rbx]
; "Индексно-базовая" со смещением
inc byte [rax + rbx + 122]
ret