Документация
-
Добавлена документация по новым подфункциям 5 и 6 функции 70. В текстовой версии (и в svn-версии) описана также новая функция 18.18 завершения процесса по PID.
Обновление, теперь во все версии включено описание функции 18.18.
Нашел небольшую ошибку в klbr_doc.chm - в функции 62/8,9,10 не сказано, что посылаемое значение записывается в dl/dx/edx.
diamond
Нужно в документацию функции 70 добавить, что поддерживается не только RD, FD и HDx, но и CDx, для подфункций: 0,1,5.
Нужно в документацию функции 70 добавить, что поддерживается не только RD, FD и HDx, но и CDx, для подфункций: 0,1,5.
Включена документация по новой функции 70.7 (запуск приложения). В общем описании к 70-й функции добавлен пункт насчёт /CDx.
halyavin
Вроде бы никаких dl/dx/edx...
halyavin
Code: Select all
sys_pci:
call pci_api
mov [esp+36], eax
ret
Ушёл к умным, знающим и культурным людям.
diamond
В документацию 70 функции еще нужно добавить в примечаниях, что для подфункций 2, 6 доступ к CD не поддерживается по аппаратным причинам.
В документацию 70 функции еще нужно добавить в примечаниях, что для подфункций 2, 6 доступ к CD не поддерживается по аппаратным причинам.
halyavin
Ой, меня проглючило, там действительно на входе есть dl/dx/edx. Всё-таки у метода copy-paste (в данном случае с подфункций 4,5,6) есть отдельные недостатки. Спасибо.
Mario79
Спасибо за замечание, будет учтено в следующем обновлении.
all
Модификации в связи с новой моделью горячих клавиш (удалена 18.12, изменения в описании событий, функции 2, добавлены 66.3 и 66.4, удалено одно из замечаний в 21.2). Восстановлена документация по 59-й функции.
Ой, меня проглючило, там действительно на входе есть dl/dx/edx. Всё-таки у метода copy-paste (в данном случае с подфункций 4,5,6) есть отдельные недостатки. Спасибо.
Mario79
Спасибо за замечание, будет учтено в следующем обновлении.
all
Модификации в связи с новой моделью горячих клавиш (удалена 18.12, изменения в описании событий, функции 2, добавлены 66.3 и 66.4, удалено одно из замечаний в 21.2). Восстановлена документация по 59-й функции.
Ушёл к умным, знающим и культурным людям.
Обновление в документации. Добавлено замечание про CD. Удалено замечание в описании функции 18.6. Несколько мелких исправлений. В описании старых функций работы с рамдиском добавлено замечание о неподдерживаемости папок. Описание функции 4 скорректировано для соответствия с текущей реализацией. Кстати, текущая реализация нелогична - она прекращает вывод по завершающему нулевому символу, но тем не менее требует длину в esi. Если уж так хочется выводить ASCIIZ-строки, логичней было бы предусмотреть, например, старший бит ecx - если он установлен, то не надо задавать esi, поскольку конец строки определяется нулевым символом, а если сброшен, то выводится ровно esi символов. Может, так и сделать? (Даже интересно, кто не проигнорирует этот вопрос? Mario79 наверняка ответит, а вот остальные очень ленивы...)
Ушёл к умным, знающим и культурным людям.
>Кстати, текущая реализация нелогична - она прекращает вывод по завершающему нулевому символу, но тем не менее требует длину в esi.
Если что раньше длина или \0, то имхо это не баг а фича.
Если что раньше длина или \0, то имхо это не баг а фича.
nn2
Вопрос не в правильности процедуры, а в ее непродуманности.
То, что предлагает Diamond уменьшает размер кода приложения, так как если текст ограничивать определенным символом, то задавать длину вывода становится излишним.
diamond
Вопрос не в правильности процедуры, а в ее непродуманности.
То, что предлагает Diamond уменьшает размер кода приложения, так как если текст ограничивать определенным символом, то задавать длину вывода становится излишним.
diamond
Как говорил Черномырдин "Мне лучше промолчать, иначе опять, что ни будь скажу..."Даже интересно, кто не проигнорирует этот вопрос? Mario79 наверняка ответит, а вот остальные очень ленивы...
ИМХО, ничо так поведение. Когда консоль писал пользовалса этой фичей
Нет ли приложений полагающихся на это поведение? А так вполне можно ^_~
Нет ли приложений полагающихся на это поведение? А так вполне можно ^_~
diamond
Может сделать в стиле Win: esi = -1 - строка завершается нулем и система сама определяет её длину, иначе esi = длина строки в символах.
Может сделать в стиле Win: esi = -1 - строка завершается нулем и система сама определяет её длину, иначе esi = длина строки в символах.
Mario79 - если передавать в eсх значение, то код увеличится как минимум на проверку. Можно вариант в студию ?
Мы его детально обсудим.
вот текущий код:
Как видно, в начале проверяется не равна ли длинна строки 0, затем проверяется на 0 символ, загруженный из строки.
к особенности данной функции стоит отнести то, что в ней размыты границы между двумя возможностями. Т.е. условия вывода строк с фиксированной строкой выполнится в полной мере, если в последовательности ASCII строки не будет 0.
ASCII строка не выведется полностью, если в esi будет значение меньше реальной длинны выводимой строки.
Данную особенность можно назвать фитчей, а можно и размытостью, почему я уже написал.
Я думаю стоит определиться.
1) Даже если реализовать вариант предложенный diamond, потребуется проверка
2) Если передавать в esi = -1, то система просто выведет ASCII строку, завершающуюся 0. По сути этот вариант уже реализован, только ASCII строка выведется в любом случае, если в esi загружено число больше или равно длины ASCII строки.
Мы его детально обсудим.
вот текущий код:
Code: Select all
dtext.lnew:
test esi, esi ; zero length ?
jnz @f
jmp dtext.output_end
@@:
movzx edx,byte [ebp] ;edx=ascii code
test edx,edx
jz dtext.output_end
test ecx,0x10000000
jnz dtext.letnew2
align 4
.letnew:
к особенности данной функции стоит отнести то, что в ней размыты границы между двумя возможностями. Т.е. условия вывода строк с фиксированной строкой выполнится в полной мере, если в последовательности ASCII строки не будет 0.
ASCII строка не выведется полностью, если в esi будет значение меньше реальной длинны выводимой строки.
Данную особенность можно назвать фитчей, а можно и размытостью, почему я уже написал.
Я думаю стоит определиться.
1) Даже если реализовать вариант предложенный diamond, потребуется проверка
2) Если передавать в esi = -1, то система просто выведет ASCII строку, завершающуюся 0. По сути этот вариант уже реализован, только ASCII строка выведется в любом случае, если в esi загружено число больше или равно длины ASCII строки.
<Lrz>
Я написал:
Для того что предложил diamond вполне допустимо сделать две отдельные процедуры в ядре. Немного увеличив код ядра мы можем гораздо больше выиграть на сокращении кода приложений. Вызов mcall 4 достаточно часто встречается в приложениях. Причем потери скорости будут несущественными, если их вобще удастся замерить.
Я написал:
Я ничего не говорил про ядро.То, что предлагает Diamond уменьшает размер кода приложения
Для того что предложил diamond вполне допустимо сделать две отдельные процедуры в ядре. Немного увеличив код ядра мы можем гораздо больше выиграть на сокращении кода приложений. Вызов mcall 4 достаточно часто встречается в приложениях. Причем потери скорости будут несущественными, если их вобще удастся замерить.
Скорректировано описание 0-й функции, добавлено описание новой функции 71.1.
(Кстати, текущая реализация последней не возвращает значения.)
По поводу 4-й функции. Такое поведение было добавлено уже после дистрибутива 0.5.8.1 (в ревизии 106), так что приложений, полагающихся на эту особенность, быть ещё не должно. Поэтому я и предлагаю это изменить, пока не поздно. Сейчас я буду с кодом в руках доказывать остальным то, что сразу понял Mario79.
Это нормальный, работающий с давних пор код.
Этот код до ревизии 106 выведет всю строку (включая 'continued'), нулевой символ будет выведен как пробел. Начиная с ревизии 106 он выведет только первую часть. Вопрос на понимание материала: какой вариант имел в виду программист, писавший такой код?
Вот как предлагается писать для вывода ASCIIZ-строк в текущей версии ядра.
А теперь согласитесь, что в этих целях с точки зрения программы было бы логичнее писать, например, так:
При этом остаётся полная совместимость со старым ядром и для вывода ASCIIZ-строк не нужна явно лишняя инструкция заполнения esi (5 байтов или 3 байта с включённой оптимизацией, умножить на количество вызовов функции 4 в программе).
(Кстати, текущая реализация последней не возвращает значения.)
По поводу 4-й функции. Такое поведение было добавлено уже после дистрибутива 0.5.8.1 (в ревизии 106), так что приложений, полагающихся на эту особенность, быть ещё не должно. Поэтому я и предлагаю это изменить, пока не поздно. Сейчас я буду с кодом в руках доказывать остальным то, что сразу понял Mario79.
Code: Select all
mov eax,4
mov ebx,100*65536+100 ; x=y=100
mov ecx,0x10808080 ; font=1, color=0x808080
mov edx,string
mov esi,string.len
int 0x40
...
string db 'Some string'
.len = $-string
Code: Select all
...
mov esi,string.len
...
string db 'Some string',0,'continued...'
.len = $-string
Code: Select all
...
mov edx,string
mov esi,-1
int 0x40
...
string db 'ASCIIZ-string',0
А теперь согласитесь, что в этих целях с точки зрения программы было бы логичнее писать, например, так:
Code: Select all
mov eax,4
mov ebx,100*65536+100 ;x=y=100
mov ecx,0x90808080 ;font=1, старший бит установлен=ASCIIZ-строка, color=0x808080
mov edx,string
int 0x40
...
string db 'ASCIIZ-string',0
Ушёл к умным, знающим и культурным людям.
Who is online
Users browsing this forum: No registered users and 13 guests