Я не могу зафиксировать и считывать данные со счетчика 8253 в режиме 2

#assembly #x86 #emu8086 #microprocessors

#сборка #x86 #emu8086 #микропроцессоры

Вопрос:

Я новичок в proteus. Я хочу зафиксировать и прочитать постоянно работающий счетчик в режиме 2, чтобы сгенерировать случайное число от 1 до 5.

это код эмулятора. Когда мы фиксируем его, вывод фиксируется, а значение в AL равно 11111111.

Может кто-нибудь помочь, пожалуйста.

это мой код:

 mov       ax,0100h
mov       ds,ax
mov       es,ax
mov       ss,ax
mov       sp,0FFFEH
  

Это основной код:

 ;intialise porta amp; upper port C as input ,portb amp; lower portc as output 
mov al,00010100b
out 0eh,al
mov al,5
out 08h,al
mov al,80h
out 06h,al
mov al,00001111b
out 00h,al
mov al,00000000b
out 0eh,al

in al,08h
out 02h,al
mov al,11111111b
out 02h,al

xi: jmp xi
  

Комментарии:

1. IIRC, записанное значение счетчика не передается в счетчик до следующего тактового импульса. Так что, возможно, вы фиксируете слишком рано. Попробуйте задержку. Кроме того, без задержки (случайной длины) между запуском и фиксацией счетчика таймер будет бесполезен в качестве генератора случайных чисел.

2. Да, я использую нажатие кнопки пользователя как случайную длину. Мы попробовали задержку после загрузки, а также после фиксации. Это не работает.

3. Пожалуйста, отредактируйте свой вопрос и проясните это в примере кода. Еще один вопрос: почему mov al,11111111b / out 02h,al ? Разве вы не перезаписываете результат in al,08h / out 02h,al там?