виснет com программа

Тема в разделе "WASM.BEGINNERS", создана пользователем Tiks0n, 6 июл 2007.

  1. Tiks0n

    Tiks0n New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    15
    компилю тасмом com программу
    --------------------код------------------------
    cseg segment
    assume cs:cseg, ds:cseg,es:cseg,ss:cseg
    org 100h
    start:
    mov ax, 0b800h
    mov es,ax
    mov di, 0

    mov ah,31
    mov al, 1
    mov es:[di], ax
    mov ax, 10h
    int 16h
    int 20h
    cseg ends
    end start
    --------------------код------------------------
    tasm program.asm
    tlink program.obj/t/x

    все ок(тасм ошибок никаких не выдает) , запускаю из командной строчки и программа виснет(ОС не виснет) , смайлик не выводится.... раньше выводился. В чем проблема?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Tiks0n
    Добавь
    Код (Text):
    1. ...
    2. start:
    3. mov ah,0Fh  ;; !
    4. int 10h     ;; !
    5. mov ax, 0b800h
    6. ...
    объяснить не могу, но это подтолкнет win'ду к отображению видеопамяти в консоле.
     
  3. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    Ты наверное раньше был под 98, а сейчас перешол на ХР? Если да, то нужно есчё менять видеорежим, в даном случае 3, т.е
    Код (Text):
    1. mov ax,0x0003
    2. int 0x10
    3. ...
    И все будет работать.
     
  4. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    rudik
    Менять не обязательно. Достаточно обозначить заинтересованность программы в "видео".
     
  6. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Достаточно заменить mov ax,10h на mov AH :derisive: Форточки здесь ни при чём.
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Vov4ick
    Каким образом замена int16h fn=00h на int16h fn=10h появлению смайлика?
     
  8. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    причём тут эта строка??? Вот шо выдает смайлик на экран:
    Код (Text):
    1. mov ah,31 ; цвет
    2. mov al, 1 ; символ :)
    3. mov es:[di], ax ;запись в 0xB800:0000 - вот он, наш символ. (хотя ето и не по дзенски ;))
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    В #7 пропустил слово способствует.
     
  10. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    Всё тут уже говорили!
    Для смайлика:
    Код (Text):
    1. mov ax, 3
    2. int 10h
    Номер функции в AH, а не в AX:
    Код (Text):
    1. mov ah, 10h
    2. int 16h
    Прога не виснет, а ждёт нажатия any key :)

    PS. УЖАС!! Отредактировано!!
     
  11. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    когда записуеш в ах, меняется и ah. Так вот, когда в ах записать 10, в ah окажется 0. инт16 вызовет 0 функцию, тобыш будет ждать пока не нажмёш. Кривовато но работает.
     
  12. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    Ну, если это и хотели, тогда согласен :) Но в чём тайный смысл установки AL в 10h? :)
     
  13. JAPH

    JAPH New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2007
    Сообщения:
    124
    И ещё один ЖАХ: добавлено!!
     
  14. Tiks0n

    Tiks0n New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2006
    Сообщения:
    15
    Vov4ick
    да , тут я ошибся mov ax, 10h нужно было заменить на mov ah, 10h
    но даже так программа работает не так как нужно...
    JAPH
    я знаю что это
    mov ah, 10h
    int 16h
    ожидание нажатия клавиши, но все рано работает не так как нужно
    PS незнаю почему но вставка кода, мосле метки start:
    mov ah,0Fh
    int 10h
    помогла...
     
  15. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Tiks0n
    Кажись, нужно сначала проверить наличие keystroke
    mov ah, 1
    int 16h
    а потом считывать.
     
  16. rudik

    rudik Руденко Артём

    Публикаций:
    0
    Регистрация:
    6 дек 2006
    Сообщения:
    302
    Адрес:
    г. Харьков
    теперь ясно?:)