непонятно из пособия

Тема в разделе "WASM.BEGINNERS", создана пользователем sa2, 21 июл 2006.

  1. sa2

    sa2 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2006
    Сообщения:
    3
    поясните пожалуйста этот листинг
    [​IMG]
    тут
    http://avtom.fet.mrsu.ru/prog_asm/
    написано, что прога выводит на экран строку, хотя отладчики некорректно обрабатывают эту программу
    действительно выводит, но я не могу понять пояснения к этому примеру, там написано
    как они могут затирать int 20 когда они заносятся в стэк раньше int 20?????
    поясните пожалуйста такое!
     
  2. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    Что значит "раньше"? Команда 'push ax' в данном контексте - это примерно то же, что и
    mov [sp-2], ax ; а там 9090h
    sub sp, 2
    так как sp указывает на SUB01 (см. строка 5), то код команды int 20h - 0CDh 20h затирается значениями 90h 90h, т.е. nop nop и после выполнения push'а строки с 7-й и далее выглядят так:
    Код (Text):
    1. ...
    2. push ax
    3. nop
    4. nop
    5. mov ah, 9
    6. ...
    и код, вместо того, чтобы бесславно сдохнуть, в смысле завершиться, в 8-й строке выполняется дальше.
     
  3. sa2

    sa2 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2006
    Сообщения:
    3
    с трудом понял :)
    получается из-за того что все сегменты в данном случае находятся в одном сегменте, то при наложение адресов сегмента стэка на адреса кода программы - код программы модифицируется в процессе её выполнения данными стэка...
    так?
     
  4. sa2

    sa2 New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2006
    Сообщения:
    3
    всё, кажись дошло :)