Помогите новичку
-
Чтоб не плодить темы. Как выделить память? Нашел 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 20 guests