Вопрос о циклах

Тема в разделе "WASM.BEGINNERS", создана пользователем imfibri, 10 июл 2010.

  1. imfibri

    imfibri New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    6
    Добрый день. Я только в самом начале пути изучения assemblera, так что прошу сильно не ругать)) Начал изучение с книги Калашникова - Ассемблер - это просто!
    Скачал с его сайта masm611. Разобрался с компиляцией. Но , я дошел до циклов, и стал получать ошибку ( Error 2085 ). Она гласит, что регистр или команда не доступны в данном режиме CPU. Вот пример кода из учебника.
    Код (Text):
    1. CSEG segment
    2. org 100h
    3.  
    4. Begin:
    5.     mov cx, 3
    6.     Labal_1:
    7.         mov ah, 9
    8.         mov dx, offset Str
    9.         int 21h
    10.         loop Label_1
    11.  
    12. Str db, 'Hello!$'
    13.  
    14. CSEG ends
    15. end Begin
    Полностью осознаю, что данный код под MS-DOS. Вопрос в том, как заставить его работать на моей машине? Ведь примеры из первых 2 глав работали без проблем.
    Заранее спасибо!
     
  2. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    STR - это команда защищённого режима, Store Task Register
    Для пользовательских имён использовать нельзя.
    И запятая после db лишняя.
    Замени на
    Код (Text):
    1. mov dx, offset Message
    2. ; ....
    3. Message db 'Hello!$'
     
  3. imfibri

    imfibri New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    6
    Спасибо, 1 проблему решил, но сразу же появилась другая.
    [​IMG]

    Если нажать пропустить то начнет выводить кучу мусора , и довольно длительное время.
    Нагуглил вот это - http://support.microsoft.com/kb/245184 , но это полный бред по-моему (но всё равно не помогло , попробовал :)) )

    кто нибудь сталкивался? Знает как решить?
     
  4. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    просто после цикла надо добавить еще выход из приложения
    добавь это после команды loop Label_1
    Код (Text):
    1. mov ax, 4C00h
    2. int 21h
     
  5. imfibri

    imfibri New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    6
    Спасибо , так работает, только тогда не понятно, почему в книге об этом не сказано.))
     
  6. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    Наверняка сказано, надо быть внимательнее. Из .Com можно использовать ret (если стэк сбалансирован).
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    baldr
    +1 или int 20h, но универсальный способ mov ax, 4C00h/int 21h (не надо задумываться com или exe, сбалансирован ли стек или нет)