Недопустимая инструкция

Тема в разделе "WASM.ASSEMBLER", создана пользователем Zhelezka, 6 авг 2008.

  1. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    На даче стоит компьютер(процессор Pentium 4)
    Создал программу(Fasm):
    MAIN.ASM
    Код (Text):
    1. org 100h
    2. use16
    3. MAIN_Code:
    4.     include 'GFX.ASM'
    5.     mov ah, 10h
    6.     int 16h
    7.     int 20h
    8. MAIN_Data:
    9. MAIN_End:
    GFX.ASM
    Код (Text):
    1. use16
    2.     mov ax,3
    3.     int 10h
    4.     push cs
    5.     pop  ds
    6.     mov si,text
    7.     mov di,3900
    8.     mov ax,0B800h
    9.     mov es,ax
    10.     mov ah,7
    11. @@:
    12.     lodsb
    13.     or al,al
    14.     je @F
    15.     stosw
    16.     jmp @B
    17. @@:
    18.     mov ah, 10h
    19.     int 16h
    20.     mov ax, 13h
    21.     int 10h
    22.     mov ah, 0ch
    23.     mov cx, 255
    24.     mov bh, 0
    25. @@:
    26.     mov al, cl
    27.     mov dx, 10
    28.     mov cl, al
    29.     add cl, 10
    30.     int 10h
    31.     mov cl, al
    32. loop @B
    33. jmp GFX_End
    34. GFX_Data:
    35.     text db 'Loading...',0h
    36. GFX_End:
    Работает.
    Но когда запустил её на городском компьютере(Intel Core 2 Duo):
    Он пишет:
    16-разрядная подсистема MS-DOS
    **************\Projects\video\MAIN.COM
    Процессор HTVDM обнаружил недопустимую инструкцию.
    CS:c000 IP:d6d8 OP: fedecec6c6
    Главное адрес (даже смещение всегда одинаковы)
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Zhelezka
    Судя по "CS:c000" - видеобиос.
     
  3. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Кстати с биосом мне не повезло(глючил постоянно)

    Застревает на строчках
    Код (Text):
    1.     mov ax, 13h
    2.     int 10h
    Возможно-ли что версия не удачная?
    p.s. Надо без биоса: In, Out — этим всё сказано, но изучать долго.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Zhelezka
    Насчет ошибок проверь по справочникам. Возможно некоректное значение в регистрах.
    Но если застривает чисто на строчках
    То биос видео карты плохой.

    Поищи пример с in out - в интернете были, даже на wasm проскакивали. Переключение режимов делается на автомати записью ряда значений в порты. Значения табличные так что думать не нужно. Разве что пару нюансов есть, но я думаю если пример найдешь тебе его хватит.
     
  5. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Я так и не понял: что мне менять: биос или видео-карту?
     
  6. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Видимо что видео-карту.
     
  7. Barbos

    Barbos Slavon

    Публикаций:
    0
    Регистрация:
    13 ноя 2007
    Сообщения:
    280
    Адрес:
    Kharkov
    а нафига в AX грузить 13h? это че за режим? зачем 4-й бит взведен?
     
  8. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    320X240X256
     
  9. Zhelezka

    Zhelezka New Member

    Публикаций:
    0
    Регистрация:
    21 июл 2008
    Сообщения:
    103
    Жалко, что не биос, он вроде подешевле, а почему Windows и все другие игры работают?
    А может быть из-за этого проблемма: Windows при загрузке всегда говорит:
    p.s.: Точно сообщение не помню, звучит примерно так.
     
  10. bugaga

    bugaga New Member

    Публикаций:
    0
    Регистрация:
    1 июл 2007
    Сообщения:
    361
    16-битные функций BIOS'a врядли выкинут из "современных систем"
    тут хрен его знает конечно, чтоб окончательно определиться с глюкаловом надо заценить работу кода на
    Intel Core 2 Duo в чистом DOS ;) а то 16-разрядная подсистема MS-DOS (c
    Процессором HTVDM) глюкодром тот еще.

    еще неплохо провереть (на коре под голым досом ) режим Unreal с доступом к LFB
    (это круто)
    320x200x256 вобщето. с 64кб окном доступное по A0000 адресу.
     
  11. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    проверь под отладчиком. Пошагово. Вызов int 10h сделай StepOver. Иногда, на некоторых биосах, после вызова портится регистр AX. Поэтому в момент
    Код (Text):
    1. int 10h
    2. mov cl, al
    вовсе не факт, что в cl то, что тебе надо. Там может быть что-то иное... строго говоря, как и в аh. Натыкался (давно еще) на похожие грабли, считая, что регистры после вызова сохраняются ;) Оказалось, не всегда.