не компилится файл на masm 6.11 [ под DOS]

Тема в разделе "WASM.BEGINNERS", создана пользователем dmitriy_big, 15 сен 2009.

  1. dmitriy_big

    dmitriy_big New Member

    Публикаций:
    0
    Регистрация:
    15 сен 2009
    Сообщения:
    6
    сам код по себе лёгок как два пальца обо сфайл
    но не пойму в чём дело создал код который выводит сообщение "Hello"
    теперь в этот же код добавил еще операторы которые создают в теле кода ЦИКЛ
    кол-во раз цикла 3
    т.е. цикл должен вывести 3 раза слово "Hello"
    но объектный файл не создается
    Почему???
    без цикла код комплится и открывается но с в несением не работает!!!

    а вот КОД:

    CSEG segment
    -------------------------------------------------------
    org 100h
    start:
    mov cx,3 ;здесь задается кол-во цикла
    label: ;метка цикла
    mov ah,9
    mov dx,offset string
    int 21h ;прерывание вывода слова
    string db 'Hello$'
    loop label
    CSEG ends
    end start
    ------------------------------------------------------

    пример взят с учебника!!!! Калашникова

    кто не логнал код пишется в MASM 6.11 под DOS
     
  2. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    не читал Калашникова, но пример неверный:
    1.где код завершения программы?
    2.почему текстовая строка находится прямо внутри кода без обходов?
    3.откуда уверенность, что cx после вызова int 21h не изменится?
     
  3. shoo

    shoo New Member

    Публикаций:
    0
    Регистрация:
    17 июл 2003
    Сообщения:
    1.537
    Адрес:
    Ukraine
    не понятно: так компилится или не компилится, если да то работает или не работает?
    для начала нужно правильно описывать проблему: "не компилится, ассемблер выдаёт такое то сообщение об ошибке", - и желательно это сообщение тут полностью вставить, или хотя бы начало, если список ошибок очень длинный. и т.п. - не все ж тут ясновидцы.

    будешь так писать - никто помогать не будет
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    А куда управление возвращается по возврату из этого прерывания, кажется мне что на строку..
     
  5. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    ...однажды к поезду прицепили два 6-х вагона... Продублирую, ибо один удалят.


    Возможно, потому, что "label" - псевдооператор, зарезервированное слово? А ты им метку обозвал.
    Возможно, потому, что у программы нет конца? Где "ret" или "int 20h" или еще какой-нибудь способ завершения программы?
    Возможно, потому, что строка (то есть данные) неизбежно выполнится как код, и будет ли выполняться команда loop - еще бабушка надвое сказала. Потому что выполнится

    ...
    and al, e2h
    neg al
    ...
    (а loop'а не будет, его порвало как грелку).

    А учебник Калашникова все равно бяка, выкинь :)))
     
  6. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    Код (Text):
    1. CSEG segment
    2. -------------------------------------------------------
    3. org 100h
    4. start:
    5. mov cx,3  ;здесь задается кол-во цикла
    6. label:       ;метка цикла          
    7.   mov ah,9
    8.   mov dx,offset  string
    9.  int 21h             ;прерывание вывода слова
    10. string  db 'Hello$' <---------
    11. loop label    
    12. CSEG  ends
    13. end start
    14. ------------------------------------------------------
    ваш код содержит грубейшие ошибки
    1. вы всунули кусок данных в код и допустили чтоб на них попало управление см на стрелку
    2. после инструкции loop должен быть код возвращающий упраление ОС его у вас нету и здесь опять по завершению цикла управление получает "воздух"

    3.
     
  7. Rockphorr

    Rockphorr Well-Known Member

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

    Код (Text):
    1. CSEG segment
    2. -------------------------------------------------------
    3. org 100h
    4.  
    5. $start:
    6. mov cx,3  ;здесь задается кол-во цикла
    7. jmp $loop
    8. string  db 'Hello$'
    9.  
    10. $loop:       ;метка цикла          
    11. mov ah,9
    12. mov dx,offset  string
    13. int 21h             ;прерывание вывода слова
    14. loop $loop
    15.  
    16. ret
    17. ------------------------------------------------------
    18. CSEG  $ends
    19. end start
    эдак все должно компилиться только не забудь ключи поставить для com файлов(пример вроде как com программы)
     
  8. Rockphorr

    Rockphorr Well-Known Member

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

    исправте уж мое упущение
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Регистрация:
    9 июн 2004
    Сообщения:
    2.622
    Адрес:
    Russia
    короче я не забыл а промахнулся так что там ошибок тоже 2
    пришлось исправить
    CSEG segment
    -------------------------------------------------------
    org 100h

    $start:
    mov cx,3 ;здесь задается кол-во цикла
    jmp $loop
    string db 'Hello$'

    $loop: ;метка цикла
    mov ah,9
    mov dx,offset string
    int 21h ;прерывание вывода слова
    loop $loop

    ret
    ------------------------------------------------------
    CSEG ends
    end $start
     
  10. Rockphorr

    Rockphorr Well-Known Member

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

    Rockphorr Well-Known Member

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

    iidsp New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2009
    Сообщения:
    6
    мой вариант

    CSEG segment
    -------------------------------------------------------
    org 100h

    start:

    mov ah, 09h
    mov dx, offset string

    mov cx,3

    label:
    int 21h
    loop label

    int 20h

    string db 'Hello$'
    ------------------------------------------------------
    CSEG ends
    end start
     
  13. Microedition

    Microedition Active Member

    Публикаций:
    0
    Регистрация:
    5 июн 2008
    Сообщения:
    814
    iidsp
    ваш вариант не будет ассемблироваться, так как "------- ..." - нет такой инструкции.
     
  14. iidsp

    iidsp New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2009
    Сообщения:
    6
    Microedition
    вы либо шутите, либо не понимаете, что ---------- это просто так, визуальное отделение, которое я тупо взял с первого поста, смысл то не в них...
     
  15. Rockphorr

    Rockphorr Well-Known Member

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