Files
solutions/04-addr-methods/task2.asm
root df80a7190e feat: написаны приготовления для 2 пункта
В приготовления входит макрос для замера времени и предварительно записанные строки для printf
2024-10-01 12:52:23 +03:00

67 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 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