Помогите новичку

Applications development, KoOS API questions
  • Ограничение менеджера памяти - 4 кб. Нужно меньше, но чаще - советую использовать свой менеджер памяти, в пользовательском режиме.
  • SoUrcerer wrote:Ограничение менеджера памяти - 4 кб. Нужно меньше, но чаще - советую использовать свой менеджер памяти, в пользовательском режиме.
    В смысле "написать самому"? В ядре такая же ситуация с выделением памяти?
  • Вроде у johnfound во FreshLib весьма развитый менеджер памяти, не?
  • Sergo
    Тебе нужна 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? По вики это пауза, по логике программы тут вывод строки...
    Sergo wrote:нашел, когда искал, как вывести строку в консоль, хочу адаптировать под свои нужды
    Узнаю свой код. 5-я функция - это действительно пауза. В коде представлена функция вывода строки с нулевым последним байтом для консольных приложений Shell по особому интерфейсу.
    1) Консольное приложение Shell, запущенное из него, должно создать именованную область pid-SHELL, где PID - этого приложения. Именованная область - буфер, через который передаются команды и данные.
    2) Команд немного (максимальное количество - 255+1) и они есть в инклуде (начинаются с SC_).
    3) Функция sc_puts выводит строку - записывает в нулевой байт буфера константу SC_PUTS, а с первого байта - нужную строку. И ожидает до тех пор, пока Shell эту строку не выведет (и установит нулевой байт в константу SC_OK). Чтобы не расходовать процессорное время между проверками нулевого байта, используется 5-я функция. Интервал 0,05 с вполне достаточен, чтобы снизить нагрузку процессора и оставить консольное приложение отзывчивым.
  • Спасибо за обстоятельный ответ! :)
  • я сдаюсь. код вот такой

    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
    
    
    По идее, после прочитанной строки и перед выводом ее код должен печатать мою строку (test string), но этого не происходит. Печатает только введенную строку. Перед выводом строка должна быть как-то хитро сформирована? В отладчике не могу отловить момент сразу после ввода строки, чтобы посмотреть, что на самом деле происходит...
  • 1. Вместо ф.5 можно использовать ф.68.1 - это более обосновано сточки зрения работы операционной системы в целом.
    2. Все же вместо того чтобы заставлять других гадать на кофейной гуще, полезней было бы выложить весь исходник. Вероятность нахождения причины проблемы в этом случае будет существенно выше.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Вопрос снимается.
    Я просто все незначительное убрал из кода, что бы не загромождать, на самом деле было так

    Code: Select all

    param_area	rb  256
    app_path	rb  256
    test_input  db  'test string',10,13,0
    user_input_raw rb 256
    
    Ну и rb затирали нулями строку(Почему, кстати?). Перенес строку выше - все ок стало. Песец, 3 часа убил на это...
  • Sergo wrote:Ну и rb затирали нулями строку(Почему, кстати?).
    А вот это задачку стоит решить самому, тогда получишь очередной LevelUP в навыках.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Вернусь к своему давнему сообщению viewtopic.php?f=2&t=684&p=43100#p43100
    Ну вот давайте на примере t_edit:

    Запускаем программу.

    Нажимаем на кнопку с папкой — появляется OpenDialog. Пока уберём его немного в сторону.
    Spoiler:Image
    Теперь снова нажимаем кнопку с папкой, но отпускаем мышь не сразу(ждём немного). И обращаем внимание на OpenDialog.
    Spoiler:Image
    Оно так и должно быть?
  • Who is online

    Users browsing this forum: No registered users and 20 guests