Помогите новичку
-
Чтоб не плодить темы. Как выделить память? Нашел Sys68 функция 12, но там написано, что выделяется 4кб. Мне нужно по 12-100 байт примерно, но часто, эта функция каждый раз по 4кб будет выделять?
Ограничение менеджера памяти - 4 кб. Нужно меньше, но чаще - советую использовать свой менеджер памяти, в пользовательском режиме.
В смысле "написать самому"? В ядре такая же ситуация с выделением памяти?SoUrcerer wrote:Ограничение менеджера памяти - 4 кб. Нужно меньше, но чаще - советую использовать свой менеджер памяти, в пользовательском режиме.
Вроде у johnfound во FreshLib весьма развитый менеджер памяти, не?
В разработке: воспроизводственный контур ИТ
Sergo
Тебе нужна malloc, 68.12 ей не является.
Тебе нужна malloc, 68.12 ей не является.
Где можно посмотреть, что делает int 0x40, когда eax=5? По вики это пауза, по логике программы тут вывод строки...
Где тут? Код выложи или прикрепи.
Code: Select all
align 4
; void __stdcall sc_puts(char *str);
_sc_puts:
push esp
push ebx
mov esi, [esp+12]
mov edi, [sc_buffer]
mov al, SC_PUTS
stosb
@@:
lodsb
stosb
test al, al
jnz @b
mov ebx, [sc_buffer]
@@:
mov byte dl, [ebx]
test dl, dl
jz @f
push ebx
mov eax, 5
mov ebx, 5
int 0x40
pop ebx
jmp @b
@@:
pop ebx
pop esp
ret 4
Sergo wrote:Где можно посмотреть, что делает int 0x40, когда eax=5? По вики это пауза, по логике программы тут вывод строки...
Узнаю свой код. 5-я функция - это действительно пауза. В коде представлена функция вывода строки с нулевым последним байтом для консольных приложений Shell по особому интерфейсу.Sergo wrote:нашел, когда искал, как вывести строку в консоль, хочу адаптировать под свои нужды
1) Консольное приложение Shell, запущенное из него, должно создать именованную область pid-SHELL, где PID - этого приложения. Именованная область - буфер, через который передаются команды и данные.
2) Команд немного (максимальное количество - 255+1) и они есть в инклуде (начинаются с SC_).
3) Функция sc_puts выводит строку - записывает в нулевой байт буфера константу SC_PUTS, а с первого байта - нужную строку. И ожидает до тех пор, пока Shell эту строку не выведет (и установит нулевой байт в константу SC_OK). Чтобы не расходовать процессорное время между проверками нулевого байта, используется 5-я функция. Интервал 0,05 с вполне достаточен, чтобы снизить нагрузку процессора и оставить консольное приложение отзывчивым.
Спасибо за обстоятельный ответ! 
я сдаюсь. код вот такой
По идее, после прочитанной строки и перед выводом ее код должен печатать мою строку (test string), но этого не происходит. Печатает только введенную строку. Перед выводом строка должна быть как-то хитро сформирована? В отладчике не могу отловить момент сразу после ввода строки, чтобы посмотреть, что на самом деле происходит...
Code: Select all
START: ; start of execution
call _sc_init
mov dword [state], STATE_CONFIG_GLOBAL
;call clear_token_list
main_loop:
push dword user_input_raw
call _sc_gets
push dword test_input
call _sc_puts
push dword user_input_raw
call _sc_puts
jmp main_loop
test_input db 'test string',0
user_input_raw rb 256
1. Вместо ф.5 можно использовать ф.68.1 - это более обосновано сточки зрения работы операционной системы в целом.
2. Все же вместо того чтобы заставлять других гадать на кофейной гуще, полезней было бы выложить весь исходник. Вероятность нахождения причины проблемы в этом случае будет существенно выше.
2. Все же вместо того чтобы заставлять других гадать на кофейной гуще, полезней было бы выложить весь исходник. Вероятность нахождения причины проблемы в этом случае будет существенно выше.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Вопрос снимается.
Я просто все незначительное убрал из кода, что бы не загромождать, на самом деле было так
Ну и rb затирали нулями строку(Почему, кстати?). Перенес строку выше - все ок стало. Песец, 3 часа убил на это...
Я просто все незначительное убрал из кода, что бы не загромождать, на самом деле было так
Code: Select all
param_area rb 256
app_path rb 256
test_input db 'test string',10,13,0
user_input_raw rb 256
А вот это задачку стоит решить самому, тогда получишь очередной LevelUP в навыках.Sergo wrote:Ну и rb затирали нулями строку(Почему, кстати?).
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Вернусь к своему давнему сообщению viewtopic.php?f=2&t=684&p=43100#p43100
Ну вот давайте на примере t_edit:
Запускаем программу.
Нажимаем на кнопку с папкой — появляется OpenDialog. Пока уберём его немного в сторону.
Теперь снова нажимаем кнопку с папкой, но отпускаем мышь не сразу(ждём немного). И обращаем внимание на OpenDialog.
Оно так и должно быть?
Ну вот давайте на примере t_edit:
Запускаем программу.
Нажимаем на кнопку с папкой — появляется OpenDialog. Пока уберём его немного в сторону.
Spoiler:

Spoiler:

Who is online
Users browsing this forum: No registered users and 6 guests