Видеорежим

Тема в разделе "WASM.ASSEMBLER", создана пользователем Asm75, 3 янв 2009.

  1. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Упорно хочу все-таки разобраться с вопросом http://rusfaq.ru/info/question/156488
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    А где вопрос?
     
  3. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    щелкните по ссылке в моем посте - там описание проблемы
     
  4. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Там регистрация нужна.
     
  5. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Ну тогда так.
    Описание проблемы:

    Изучаю книгу "Ассемблер - это просто..." Но ни одна из программ-примеров (те, что в папках с номерами 001,002 и т.д. ) не работает. Может я не так что-то делаю? Книгу и прилагаемые программы качал с сайта О. Калашникова. Как запускать примеры? Или они не работают?

    • Ответ № 240176 от Лысков Игорь Витальевич, Специалист
    Здравствуйте, Asm75!
    Все программы были написаны ля работы под ДОС-ом
    Прямая запись в видеопамять под Windows в досовской программе будет работать только
    после инициализации видеорежима. Т.о., в начале программы необходимо вставить

    Код:
    mov ax, 0003hint 10h

    Действительно, что-то не так делаете.
    Первый совет: внимательно прочитайте "несущественное" начало - как устанавливать, как писать, где сохранять, как компилировать ... .
    Второе: многие программы выполняются, выводят в консольное окно какую-то информацию и закрываются вместе с ним. Так что на быстрой машине даже моргнуть не успеете, как все закончилось. Может сложиться впечатление, что ничего не получилось. Здесь совет: еще раз прочитайте первый совет.
    Ну и, конечно, напишите, какие сообщения получаете? Каким ассемблером пользуетесь?
    ==
    И наконец, трудно дать ответ по такой малой информации. Если б мы сидели рядом с Вами, то поняли бы сразу, что Вы не так делаете. А тут нужно больше информации о Ваших действиях
    -------
    Boriss, Профессор
    -------------------------------------------------------------------------------
    [03.01.2009, 00:10]
    Спасибо. Согласен. С компиляцией и линкованием проблем нет. Ассемблер - MASM611. Как запускать созданные com-файлы - двойным щелчком левой кнопки мыши или из cmd? Пробовал по всякому. Результат - черное окно cmd с мигающим курсором и всё. Нажатие клавиш ничего не меняет. Закрыть окно можно только нажав крестик в правом верхнем углу окна диалога. Затем знакомое большинству пользователей ПК окно сообщения Программа не отвечает-Завершить сейчас? На что отвечаю О.К. Вот и весь мой ассмемблер. Машина Pentium D ОЗУ 1 Гб.

    После вставки кода:

    mov ax, 0003h
    int 10h

    в программу после компиляции файла .com cmd сообщила, что start adress is not equal to 0x100 for /TINY (это я знаю - вроде как модель памяти DOS). Ну, а мне и не надо вроде бы соответствия с DOS, мне FLAT надo? или я ошибаюсь int10h с другой стороны это прерывание ДОС и оно должно с указанием номера функции этого прерывания и режима (ah00 и al03) напрямую записывать файл в видеопамять под Windows.

    Два вопроса:
    1/Как открывать файлы .com?
    2/Куда вставлять вышеуказанный код? после Begin: или куда? В Бейсике видеорежим определяется в самом начале программы, а в асме?

    Я остановился на том месте книги, где описывается пример 007. Вот когда его двойным щелчком из папки открываешь или когда из cmd запускаешь, то программа-пример ничего не выводит, хотя должна заполнять экран ASCII символами, а вместо этого ведет себя вышеописанным образом. Пробовал и сам набирать код примера 007 в файл .asm и готовый пример запускать - одно и то же: не работает.
    Кстати рожицу (из предыдущих глав книги) тоже не смог нарисовать но двинулся дальше.
    Еще вопрос вдогонку: зачем в создаваемой com-программе писать строку assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG если и так все регистры устанавливаются в соответствии с сегментом куда загружается .com?
    ------------------------------------------------------------------------------
    Когда вставляешь код
    mov ax,0003h
    int 10h
    в программу после Begin: то файл .com запускается из cmd и при нажатии ESC окно cmd становится синим. Почему?
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Можно просто запускать двойным щелчком по файлу, а можно и из cmd.
    Я предпочитаю запускать cmd так как окно не закрывается.

    Хочется узнать какая у вас windows.

    Теперь вернемся к вопросом о коде.
    Вставлять надо после start. Но автор почемуто не стал использовать start хотя это зарезервированное слово, а использовал begin.

    Tiny и Flat это модели памяти. И к досу они имеют слабое отношение.
    Это прерывания не Dos, а BIOS.

    Где хочешь. Вот только виндовсе что-бы заработали примеры нужно перед выводом в видео память проинициировать видео режим.

    Это чтобы проинформировать компилятор о том что именно загруженно в регистр.
    По большому счету это нужно только для проверки выхода за границы сегментов. Тех сегментов которые мы объявим в коде. Эта проверка делается на стадии компиляции поэтому от выхода за приделы массива не спасет. Зато поможет компилятору/линкеру верно рассчитать смещения до меток и переменных в коде.
    К примеру com файл загрузился в сегмент 1000h, а мы хотим чтобы данные распологались в сегменте
    2000h. Чтобы не писать везде +1000h мы можем просто загрузить сегментый регист данные. Но компилятор должен знать что именно эти данные будут раположены расположенны а некокието ддругии. Вот чтобы непутоться мы и указываем. assume ds:DSEG
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Asm75
    Из справки на MASM.

    Код (Text):
    1. Memory model
    2.  
    3.      Your choice of a memory model determines how memory is set up for
    4.      program code and data. The following table shows attributes of the
    5.      different memory models. Select a memory model for more information.
    6.  
    7.  
    8.               Code      Data      Segment  Data and Code
    9.               Distance  Distance  Width    Combined?
    10.              +---------+---------+--------+-------------+
    11.      Tiny    | NEAR    | NEAR    | 16-bit | Yes         |
    12.  
    13.              +---------+---------+--------+-------------+
    14.      Small   | NEAR    | NEAR    | 16-bit | No          |
    15.              +---------+---------+--------+-------------+
    16.      Compact | NEAR    | FAR     | 16-bit | No          |
    17.              +---------+---------+--------+-------------+
    18.      Medium  | FAR     | NEAR    | 16-bit | No          |
    19.              +---------+---------+--------+-------------+
    20.      Large   | FAR     | FAR     | 16-bit | No          |
    21.              +---------+---------+--------+-------------+
    22.  
    23.      Huge    | FAR     | FAR     | 16-bit | No          |
    24.              +---------+---------+--------+-------------+
    25.      Flat    | NEAR    | NEAR    | 32-bit | Yes         |
    26.              +---------+---------+--------+-------------+
    27.      The OPTION SEGMENT and SEGMENT directives can override the default
    28.      segment width.
    FLat мы используетм в виндоусовском приложении, в досе мы используем другии модели памяти.
    Flat - в переводе плоский. Вся память доступна сразу. И адресуется очень просто [рег32] сегментые регистры практически не используются. 32 бита просто потому что система у нас 32 битная.

    Tiny - в переводе простой. Тут все просто один сегмент 64 кбайта. В нем расположен и код и данные. Компилятору мы можем сообщить это как
    Код (Text):
    1. .tiny
    Так же об этом сигнализирует установка сегментов
    Код (Text):
    1. assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
    Все регистры установленны в один сегмен. Вот еслибы были разные то это уже другая модель памяти.
     
  8. fa2t3d

    fa2t3d New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2010
    Сообщения:
    2
    Ничего не помогло из вышесказаного..... гугл тоже молчит.....
    Уважаемые форумчане, помогите решить вопрос. Очень хочеться продолжать изучение ассемблера по Калашникову или предложите ему альтернативу)

    Вот оригинальный код из книги :

    Код (Text):
    1. CSEG segment
    2. org 100h
    3. _beg:
    4.  
    5.         mov ax, 0B800h
    6.         mov es, ax
    7.         mov di, 0
    8.  
    9.         mov ah, 31
    10.         mov al, 1
    11.         mov es: [di], ax
    12.  
    13.         mov ah, 10h
    14.         int 16h
    15.  
    16.         int 20h
    17.  
    18. CSEG ends
    19. end _beg
     
  9. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    fa2t3d Блин, все новички на эту бомбу попадаются. Набери в поисковике Калашников + masm. Думаю найдешь кучу разъяснений и ссылок на другие исходники. Либо используй tasm, но это такое ретро, что для обучения IMHO бессмысленно. Да и здесь кроме Калашникова ну тьма материала...
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    у меня все тип топ под 2000

    смотрите вложение там все включая картинку с результатом
     
  11. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    пусть вас не смущает что в результате белая рожица на синем фоне
    вы ведь забыли букву h у 31 да и символ с атрибутом местами поменяли
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    упс - все тип топ когда запускаешь из под нортона
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    теперь все тип топ и из проводника
     
  14. fa2t3d

    fa2t3d New Member

    Публикаций:
    0
    Регистрация:
    4 янв 2010
    Сообщения:
    2
    Rockphorr, большое спасибо.

    valterg, ну теперь все новички будут попадать на этот топик из гугля)