таймер

Тема в разделе "WASM.ASSEMBLER", создана пользователем 0136, 9 дек 2007.

  1. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    В РМ32 с таким кодом:
    xor ax,ax
    mov al, 00110110b ; канал 0, режим 3, вид операции 3, счёт двоичный
    out 43h, al
    mov ax, 4h ; значение фиксатора
    out 40h, al
    mov al, ah
    out 40h, al

    происходит исключение 13

    а с таким кодом:
    xor ax,ax
    mov al, 00110110b ; канал 0, режим 3, вид операции 3, счёт двоичный
    out 43h, al
    mov ax, 100 ; значение фиксатора
    out 40h, al
    mov al, ah
    out 40h, al

    не происходит.

    В чём проблема?
     
  2. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    Как вариант - при высокой частоте (маленьком делитете) обработчик IRQ0 не успевает завершиться до следующего вызова. Либо что-то с контроллером прерываний - зависит от того, в каком месте обработчика ему подаётся сигнал окончания обработки.
     
  3. 0136

    0136 New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2007
    Сообщения:
    112
    шлюз - ловушка прерывания - при входе в такой обработчик, все прерывания запрещены до команды, которая уставливает флаг прерываний, обычно это iret.
    Кстати, в досе всё работает и обрабатывается. Может я неправильно обрабатываю прерывание? Вот обработчик:
    int_irq0:
    pushad
    pushfd
    mov al, 20h ; EOI
    out 20h, al
    popfd
    popad
    iret