функция 48h под дос

Тема в разделе "WASM.ASSEMBLER", создана пользователем NoName, 6 май 2008.

  1. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    почему-то след код:
    Код (Text):
    1. mov bx,8
    2. mov ah,48h
    3. int 21h
    4. jc alloc_error
    ведет себя крайне странно. Например если запустить его в отладчике td то иногда он выполняется нормально, а иногда функция возвращает что может выделить только 7 параграфов :dntknw: Помогите пж-та разобратся. Я непонимаю в чем дело.

     
  2. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Что на выходе в bx?
     
  3. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    на выходе
    bx = 7
    cf = 1
     
  4. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    как можно получить к ней доступ простым способом или как так запустить программу в оболочке без exec
     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    551360 байт :)

    Код (Text):
    1.    ;когда процесс получает управление через функцию 4bH EXEC,
    2.    ;вся доступная память уже распределена ему, поэтому освобождаем её часть сразу
    3.    ;при запуске программы es и ds указывают на начало PSP
    4.    mov ax,es
    5.    mov bx,seg zseg ;по файлу kursovik.map видно что zseg начинается в самом конце
    6.    sub bx,ax
    7.    mov ah,4ah
    8.    int 21h
    9. jc...
    10.  
    11.    mov eax,0
    12.    mov ebx,0
    13.    mov bx,0FFFFh ;869C
    14.    mov ah,48h
    15.    int 21h
    16.    jc alloc_error
     
  6. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Надо проделать вот это с использованием PSP и надо примерно знать размер твоей программы - т.е. сколько оставить памяти твоей программе. Остальное фунцкия 4Аh отрезает и дает назад в DOS:

    http://www.ousob.com/ng/dos5/ng14fd0.php