Некомпилируется код...

Тема в разделе "WASM.BEGINNERS", создана пользователем Karasb, 3 сен 2007.

  1. Karasb

    Karasb New Member

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

    Компилятор: TASM 5
    ОС: Хп Хом идишн, СервисПак 2

    Немного неправильнно тему обозвал... Всё компилируется, но ничево непроисходит... Тобишь никакой рожице в левом углу я ненаблюдаю.

    В чём собственно может быть причина?

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

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    А видео режим у вас там какой?
    Ну а далее... забавно. Первый раз вижу что-то подобное.

    int 21h
    Код (Text):
    1. Inp.:
    2.     AH = 10h
    3.     DS:DX -> File Control Block (see #01345)
    4. Return: AL = status
    5.         00h successful
    6.         FFh failed
    7. Notes:  a successful close forces all disk buffers used by the file to be
    8.       written and the directory entry to be updated
    9.     not supported by MS Windows 3.0 DOSX.EXE DOS extender
    10.  
    11.  
    12. Copied from Ralf Brown's Interrupt List
    Честно говоря вообще не представляю зачем этот вызов.

    int 16h
    Что-то делаем с КЛАВОЙ? Но вопрос что?

    int 20h
    Завершаем СОМ программу.
     
  3. Karasb

    Karasb New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    8
    Где его смотреть?

    В оригинальном коде 21-ого прерывания небыло. Это уже я пытался оживить программу методом тыка.
    16-е (функция 10h) прерывание кажись как недаёт программе закрыться сразу, а ждёт нажатия кнопки на клаве.

    Вот, привёл оригинальный код и прокоментировал насколько меня хватило....
    Код (Text):
    1. CSEG segment        ; начало сегмента
    2. org 100h               ; выставляем сдвиг чевототам
    3. _beg:                   ; начинаем программу
    4. mov ax, 0B800h     ; записываем значение 0B800h в ax
    5. mov es,ax             ; записываем значение ax в es
    6. mov di, 0              ; записываем 0 в di
    7.  
    8. mov ah, 31           ; записываем в ah значение 31 (ярко белый символ на синем фоне)
    9. mov al, 1             ; записываем в al значение 1 (значёк рожицы по ASCII)
    10. mov es:[di], ax     ; записываем по адрессу 0B800:0000h значение ax (это у нас рожица)
    11.  
    12. mov ah, 10h        ; запишим в ah номер функции 10h
    13. int 16h     ; вызываем 16-е прерывание (Приостанавливаем программу, до нажатии кнопки)
    14.  
    15. int 20h               ; выходим из программы
    16.  
    17. CSEG ends          ; конец сегмента
    18. end _beg            ; конец программы
    add
    Режим экрана: 1024 на 768 True Color (32 бита), 75Гц.
     
  4. Termo_in_work

    Termo_in_work TermoSINteZ

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    20
    Адрес:
    на работе
    немного уменьшил прогу, пробуй:
    Код (Text):
    1. mov ax,3
    2. int 10h
    3.  
    4. push 0B800h
    5. pop es
    6. xor di, di
    7.  
    8. mov ax,01f01h
    9. mov es:[di], ax    
    10.  
    11. mov ah, 10h      
    12. int 16h    
    13.  
    14. ret
     
  5. Karasb

    Karasb New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    8
    Спасибо, работает. Щас буду разбираться....

    А почемуже "мой" код неработает? Просто я изучаю по книжке и "отходить" от программы которую задал автор неочень хочется... Грубо говоря я ещё непроходил: push, pop и прочее....
     
  6. Termo_in_work

    Termo_in_work TermoSINteZ

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    20
    Адрес:
    на работе
    Karasb
    Дело не в push , pop , а вот прочее оч важно :
    Код (Text):
    1. mov ax,3
    2. int 10h
    Приводит экран в нормальный вид. А если точнее это функция стандартного видеосервиса ROM-BIOS. ah = 0 установить видео режим. Очистить экран, установить поля BIOS, al = режим в нашем случае 3 (текст 80x25 16 цветов)
     
  7. Karasb

    Karasb New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    8
    Угу )
    Спасибо... теперь и "мой" код работает.