Leency wrote:В первый раз слышу)) А на что этот каталог влияет?
В ф.70 вызов файла без пути "/"? например просто filename.kex, приводит по умолчанию к обращению /rd/1/filename.kex - если же установить другой путь ф. 30, например /pathname, то при обращении просто filename.kex будет происходить обращение /pathname/filename.kex на уровне драйвера файловой системы.
Другими словами часть головной боли прикладного программиста перекладывается на драйвер файловой системы, хотя с точки зрения производительности дисковой операции ничего не меняется. Это просто удобство, типа макроса mcall вместо int 0x40, для сравнения.
johnfound wrote:Кстати, сделал в FreshLib, чтобы программа устанавливала текущую директорию там где находится исполнимый файл.
И возникает вопрос - а не лучше ли это сделать в ядре?
Версии под Windows и Linux делают так же?
Текущая директория предназначена не для программы, а для пользователя. Чтобы пользователь мог запустить команду fasm example.asm bin/example вместо fasm /absolute/path/to/example.asm /absolute/path/to/bin/example. Упражнение на понимание: что будет с первой командой, если fasm первым делом будет менять текущую директорию на папку с бинарником, а потом открывать и создавать файлы?
CleverMouse, теперь ясно, что надо менять файловые менажеры и shell, чтобы они правильно устанавливали текущую директорию. Конечно, я этот код не буду включать в библиотеку.
proc __TimerThreadProc
begin
.main_timer_loop:
cmp [__timer_stop], 0
jne .end_thread
mov eax, 5
mov ebx, 1
int $40
; do something on every 10ms :D
jmp .main_timer_loop
.end_thread:
mov eax, -1
int $40
endp
Можно ли сделать лучше и как?
Мне необходимо чтобы вызывалась некоторая процедура каждые 10мс, независимо от время выполнения этой процедуре. (конечно время должно быть меньше 10мс).
Наконец сделал и получилось как всегда неплохо. Использую ф.26.9 для измерение времени и ф.68.1 чтобы разгружать процессор. Процедура таймера будет вызываться всегда правильное количество раз, даже и если поток не сумел вовремя исполнится:
Spoiler: