Системный таймер - Assembler
Формулировка задачи:
Здравствуйте!
Мне нужно получить текущее значение системного таймера (пишу на nasm)
При попытке сделать так:
возникает ошибка сегментирования. То есть до кода:
дело даже не доходит.
Используя прерывание,
опять же возникает ошибка сегментирования.
Подскажите, пожалуйста, в чем проблема и как ее устранить?
Заранее спасибо!
push ds push 40h pop ds ... pop ds
mov eax, [ds:006ch]
mov ah, 0 int 1ah
Решение задачи: «Системный таймер»
textual
Листинг программы
BITS 32 %define __NR_exit 1 %define __NR_getitimer 105 %define ITIMER_REAL 0 GLOBAL _start SECTION .bss timervalue resd 2 ; первое двойное слово - секунды, второе - микросекунды SECTION .code _start: mov eax,__NR_getitimer mov ebx,ITIMER_REAL mov ecx,timervalue int 80h ; результат в timervalue, значение с течением времени уменьшается (а не увеличивается) mov eax,__NR_exit xor ebx,ebx int 80h ; выход из программы
Объяснение кода листинга программы
В коде используется системный вызов по адресу 105 (getitimer) для установки интервала времени. Переменная timervalue содержит начальное значение интервала. После выполнения системного вызова значение переменной timervalue уменьшается (а не увеличивается) с течением времени. Затем используется системный вызов по адресу 1 (exit), передавая в него нулевое значение (xor ebx,ebx), что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д