Ошибка NTVDM

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

  1. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Почему не работает программа, написанная самостоятельно в debug.exe по статье "Введение в машинный код" с сайта wasm.ru?
    При запуске нижеприводимого com-файла получено сообщение в окошке с заголовком 16-bit subsystem: NTVDM обнаружила недопустимую инструкцию по адресу траляля.

    У меня какие-то непонятные проблемы с запуском com-файлов, которые я создаю в учебных целях... и примеры com-файлов к книге "Ассемблер - это просто " не работают так как описано в книге. Либо вообще не запускаются, т.е черный экран cmd, либо не работают так как описано. А набираю код, компилирую и компоную абсолютно точно.

    В чем может состоять проблема?

    Код:

    Код (Text):
    1. 0100 XOR AL,AL  ;окошко первое
    2. :0102 MOV BH,10
    3. :0104 MOV CH,05
    4. :0106 MOV CL,10
    5. :0108 MOV DH,10
    6. :010A MOV DL,3E
    7. :010C MOV AH,06
    8. :010E INT 10
    9. :0110 MOV BH,20  ;окошко второе
    10. :0112 MOV CH,06
    11. :0114 MOV CL,11
    12. :0116 MOV DH,0F
    13. :0118 MOV DL,3D
    14. :011A INT 10
    15. :011C MOV BH,30  ;окошко третее
    16. :011E MOV CH,07
    17. :0120 MOV CL,12
    18. :0122 MOV DH,0E
    19. :0124 MOV DL,3C
    20. :0126 INT 10
    21. :0128 MOV BH,40  ;окошко четвертое
    22. :012A MOV CH,08
    23. :012C MOV CL,13
    24. :012E MOV DH,0D
    25. :0130 MOV DL,3B
    26. :0132 INT 10
    27. :0134 MOV BH,50  ;окошко пятое
    28. :0136 MOV CH,09
    29. :0138 MOV CL,14
    30. :013A MOV DH,0C
    31. :013C MOV DL,3A
    32. :013E INT 10
    33. :0140 INT 20     ;конец проги...
    34. :0142
    35. -r cx
    36. CX 0012
    37. -n five.com
    38. -w
    39. Запись 00026 байт
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Asm75
    > В чем может состоять проблема?
    Первая инструкция расположена по адресу 100h, последняя - 140h и занимает 2 байта. Итого размер программы 42h байт, а ты просишь записать 12h байт.

    > Запись 00026 байт
    Ты ничего не путаешь?
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    щас угадаю, ты наверна все это под вистой делаешь? в винде вроде бы запрещены прерывания
    попробуй сделать то же самое, только в досе. Не в эмуляторах всяких, а именно в дос
     
  4. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Нет, система у меня WinXP Professional Edition SP3, запускаю из cmd или двойным щелчком просто из папки.А что значит "не в эмуляторах, а именно в ДОСе"? ДОС инсталлировать как-то надо отдельно?
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    q_q
    Первая инструкция расположена по 100h, а сохронение идет по IP.

    Asm75
    Ответ в первом посте.
     
  6. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Странно, при трассировке в debug пишет, что Программа завершилась нормально и выдает зеленое окошко в синей рамке. Но это же не то, что должна делать программа по описанию в статье "Введение в машинный код". Насколько я понял, программа должна выдать 4 окна, вложенных в основное окно.
     
  7. Asm75

    Asm75 New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2009
    Сообщения:
    28
    Принтскрин
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Pavia
    Где в первом посте ты видишь, что ip отличен от 100h?

    Asm75
    Размер твоего файла five.com - 38 байт?
    Если да, то ты записал 26h байт, а надо 42h. Т.о. последняя команда твоего five.com - :0124 MOV DL,3C, т.е. не вызывается int 10h, следовательно, не рисуется третье окно. За последней командой следует "мусор", который "крашит" NTVDM, что касается выполнения по debug'ером, то, наверное, его "мусор" позволяет завершиться программе "корректнее".