Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    cray0000
    судя по коду, ты пишешь для 16-битной ДОС.
     
  2. cray0000

    cray0000 New Member

    Публикаций:
    0
    Регистрация:
    28 дек 2008
    Сообщения:
    4
    А что добавить, что бы было для 32-битной?
    Или там совсем другая структура?
     
  3. meduza

    meduza New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2008
    Сообщения:
    212
    cray0000
    Либо писать под 32-битную систему, либо использовать dos-расширитель. (Уже была такая тема, поищи по форуму).
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    cray0000
    Поставь хотя-бы директиву.
    .386
     
  5. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    taksos
    вместо DOS-функции 2Ch используйте функцию 1Ah -- она возвращает часы, минуты, секунды в упакованном двоично-десятичном формате -- проще переводить для вывода на экран
    Код (Text):
    1. mov AH,02h
    2.       int 1Ah; получили текущее время
    3.       mov si,offset timer
    4.       xor bx,bx
    5.       mov al,ch; часы
    6.       call BCD_in_string
    7.        mov al,cl; минуты
    8.        call BCD_in_string
    9.        mov al,dh; секунды
    10.        call BCD_in_string
    11.        mov AH,0Eh; выводим на экран
    12.        mov cx,8
    13. a1:     lodsb
    14.         int 10h
    15.         loop a1
    16.         mov ah,0; ждем нажатия на любую клавишу
    17.         int 16h
    18.         ret; выходим из программы
    19. BCD_in_string proc
    20.     mov ah,3
    21.     ror ax,4
    22.     shr ah,4
    23.     or ah,30h  
    24.     mov [si+bx],ax
    25.     add bx,3
    26.     ret
    27. BCD_in_string endp    
    28. timer    db 0,0,':',0,0,':',0,0
    29. end start
     
  6. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    Всем здравствуйте. Не подскажете, что означает вот эта ошибка и как её исправить?
    Код (Text):
    1.  This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information.
     
  7. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    Как заменить вот это: на чтение из файла и запись в базу???
    Код (Text):
    1. //чтение из базы и запись в файл
    2.     int nNumFields = recordset->Fields->Count;
    3.     while (!recordset->adoEOF)
    4.     {
    5.         /*чтение из поля i
    6.         for(long i=0;i<nNumFields;i++)
    7.         {
    8.  
    9.             _bstr_t strName = recordset->Fields->Item[i]->Name;
    10.             _bstr_t strValue = recordset->Fields->Item[i]->Value;
    11.             _variant_t var;
    12.             var = recordset->Fields->GetItem(strName)->GetValue();
    13.             CString strText =(char *)_bstr_t(var);
    14.             TCHAR * pBuf = (TCHAR *)(LPCTSTR)strText;
    15.             txt_length=lstrlen(pBuf);
    16.             pBuf[txt_length]=';';
    17.             WriteFile(f, pBuf, txt_length+1, &written, NULL);
    18.         } */
     
  8. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    OlechkaA
    Re: #1246
    Программа пытается завершиться нестандартно. Наверное, разработчиками хотят знать, как Вы добились такого от программы.

    Re: #1247
    Рекордсет должен быть открыт "на добавление", например
    Код (Text):
    1. recordset->Open("Table1", connection.GetInterfacePtr(), ADODB::adOpenDynamic, ADODB::adLockOptimistic, ADODB::adCmdTable);
    Организовать цикл чтения из файла, наверное, строки - это записи. Внутри строк организовать разбор полей.

    Добавить новую запись
    Код (Text):
    1. recordset->AddNew();
    или открыть текущую на изменение
    Код (Text):
    1. recordset->Edit();
    Собственно внесение значений, необходимо, чтобы тип поля соответствовал типу записываемого значения
    Код (Text):
    1. recordset->Fields->GetItem(strName)->PutValue(var);
    Подтвердить внесение изменений
    Код (Text):
    1. recordset->Update();
     
  9. Liam

    Liam New Member

    Публикаций:
    0
    Регистрация:
    3 ноя 2008
    Сообщения:
    7
    Помогите пожалуйста 2 контрольных написать, сегодня сдать нужно.

    Вот первая:
    1) Дана строка символов, рассчитать сколько раз встречается слово "мир". Обработку строки оформить процедурой с передачей параметров в процедуру: адрес строки и её длину, из процедуры - полученное число. (Препод просит передавать через стек, и не использовать команду pop для "взятия" значений внутри процедуры, нужно типа mov ax,[bp+4], mov ax,[bp+6]).

    И вот то, что написал:

    Код (Text):
    1.           .data
    2. msg     db          'Enter string: $'
    3. rmsg    db          10,13 'Result: $'
    4. buf      db          250
    5. len      db          ?
    6. str      db           250 dup('?')
    7. out      db          250 dup('$')
    8. temp    db
    9.  
    10.           .code
    11. begin:
    12.           mov          ax,@data
    13.           mov          ds,ax
    14.           mov          ah,09h
    15.           lea            dx,msg
    16.           int            21h
    17.           mov          ah,0Ah
    18.           lea           dx,buf
    19.           int            21h
    20.           lea            si,str
    21.           push          si
    22.           push          len
    23.           call           my_proc
    24.           mov          ax,09h
    25.           lea            dx,out
    26.           int            21h
    27.           mov          ax,4c00h
    28.           int            21h
    29. end     begin
    Что писать в процедуре - не знаю :dntknw:.

    2) Дан массив, найти max и min элемент массива. Обработку массива оформить в виде процедуры с передачей через стек следующих параметров: в процедуру адрес адрес массива и его длину, из процедуры через стек возвращаем min и max элементы.

    Тут что-то я совсем не знаю как делать, не умею с массивами на асме работать.
     
  10. OlechkaA

    OlechkaA New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2008
    Сообщения:
    35
    q_q
    Спасибо. А как сделать, чтобы программа записывала с начала таблицы, каждый раз после ее(программы) вызова? т.е. новый вызов пограммы и новые данные в таблице???
     
  11. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    OlechkaA
    Если можно, то удалить все записи из таблицы, например, connection->Execute("DELETE FROM Table1"), а затем добавлять новые AddNew и заполнять поля, кстати, добавлять, можно Execute("INSERT INTO ... VALUES ..."). Если удалять нельзя, то вставать на первую/очередную запись, если она существует, то переводить ее в режим редактирования (Edit), если не существует, то добавлять новую запись и заполнять поля.
     
  12. LomuX

    LomuX New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    6
    Помогите пожалуйста.
    Нужно сделать лабораторную. На ассемблере.
    Написать программу установки времени срабатывания “будильника” RTC и разрешения прерывания от него.

    Спасибо.

    Да... пояснения были бы супер....
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    LomuX
    Когдато копал в эту сторону. Рабочий код, но один минус - смещение поля чексуммы биос различно для разных мат. плат, поэтому нужно перед перепрограммированием чипа просканить его для поиска поля с чексуммой и диапазон адресов её. Вот код установки будильника:
    Код (Text):
    1. ;Gigabyte GA-8IPE1000MK
    2.  
    3. CMOS_ADDRESS_PORT   equ 70h
    4. CMOS_DATA_PORT  equ 71h
    5.  
    6. CMOS_CLOCK struct
    7. Seconds     BYTE ?  ;+00h Текущая секунда
    8. SecondsAlarm    BYTE ?  ;+01h Сигнальная секунда
    9. Minutes     BYTE ?  ;+02h Текущая минута
    10. MinutesAlarm    BYTE ?  ;+03h Сигнальная минута
    11. Hours       BYTE ?  ;+04h Текущий час
    12. HoursAlarm  BYTE ?  ;+05h Сигнальный час
    13. DayOfWeek       BYTE ?  ;+06h Текущий день недели (1 - Воскресенье)
    14. DayOfMonth  BYTE ?  ;+07h Текущий день месяца
    15. Month       BYTE ?  ;+08h Текущий месяц
    16. Year            BYTE ?  ;+09h Текущий год (2 последние цифры его)
    17. CMOS_CLOCK ends
    18.  
    19. CMOS_CSR struct ;Control Status Registers
    20. RegisterA       BYTE ?
    21. RegisterB       BYTE ?
    22. RegisterC       BYTE ?
    23. RegisterD       BYTE ?
    24. CMOS_CSR ends
    25.  
    26. ;Control Status Register B
    27. CMOS_CSRB_DSE   equ 00000001b   ;Daylight Saving Enable
    28. CMOS_CSRB_HF    equ 00000010b   ;Hour Format (1 = 24-hour format, 0 = 12-hour format)
    29. CMOS_CSRB_DF    equ 00000100b   ;Data Format (1 = Binary, 0 = BCD)
    30. CMOS_CSRB_SQWE  equ 00001000b   ;Square-Wave Enable (1 = Enabled, 0 = Disabled and held low)
    31. CMOS_CSRB_UIE   equ 00010000b   ;Update Cycle Interrupt Enable (1 = Enabled, 0 = Disabled)
    32. CMOS_CSRB_AIE   equ 00100000b   ;Alarm Interrupt Enable (1 = Enabled, 0 = Disabled)
    33. CMOS_CSRB_PIE   equ 01000000b   ;Periodic Interrupt Enable (1 = Enabled, 0 = Disabled)
    34. CMOS_CSRB_UTI   equ 10000000b   ;Update Transfer Inhibit (1 = Inhibits transfer and clears UIE, 0 = Allows transfer)
    35.  
    36. CMOS_RTC struct
    37. Clock   CMOS_CLOCK <>
    38. Csr     CMOS_CSR <>
    39. CMOS_RTC ends
    40.  
    41. CMOS_ALL_REGISTERS      equ 80h ;128, число всех регистров
    42. CMOS_STORAGE_REGISTERS  equ CMOS_ALL_REGISTERS - SizeOf CMOS_RTC    ;72h
    43.  
    44. CMOS struct
    45. Rtc             CMOS_RTC <>
    46. StorageRegisters    BYTE CMOS_STORAGE_REGISTERS DUP (?)
    47. CMOS ends
    48. PCMOS typedef ptr CMOS
    49.  
    50. CmosCheckAmountOffset   equ 2Eh
    51. BiosAlarmOffset     equ 54h
    52. BiosPowerFlagsOffset    equ 4Bh
    53.  
    54. BiosCheckAmountOffset   equ 7Dh ;Контрольная сумма ;[65%124]
    55. BiosCheckAmountLo       equ 41h
    56. BiosCheckAmountHi       equ 7Ch
    57. ;----------------------------------------------
    58. ;+4Bh, BiosPowerFlags
    59. BIOS_POWER_ON_BY_MOUSE      equ 00001000b   ;Double Click
    60. BIOS_POWER_ON_BY_KEYBOARD   equ 01000000b   ;Keyboard 98
    61. BIOS_POWER_OFF_POWER_BUTTON equ 10000000b   ;Delay 4
    62. ;----------------------------------------------
    63. ;+54h, BIOS_ALARM.Alarm
    64. BIOS_POWER_ALARM        equ 00000001b
    65. ;----------------------------------------------
    66. ;+53h, BIOS_ALARM.Flags
    67. BIOS_POWER_WAKE_ON_LAN  equ 00001000b
    68. ;----------------------------------------------
    69. BIOS_ALARM struct
    70. Flags   BYTE ?  ;53h
    71. Alarm   BYTE ?  ;54h - BIOS_ALARM_ENABLE, разрешает или запрещает будильник
    72. Period  BYTE ?  ;55h - день(если ноль то каждый день)
    73. Seconds BYTE ?  ;56h
    74. Minutes BYTE ?  ;57h
    75. Hours   BYTE ?  ;58h
    76. BIOS_ALARM ends
    77. PBIOS_ALARM typedef ptr BIOS_ALARM
    78.  
    79. ;Флаги PostStatus
    80. POST_CLOCK_CORRECT      equ 00000100b   ;Время правильное
    81. POST_HDD_INVALID        equ 00001000b   ;Неверный загрузочный жесткий диск
    82. POST_RAM_INVALID        equ 00010000b   ;Неверный размер ОЗУ
    83. POST_DEVICE_INVALID     equ 00100000b   ;Неверное оборудование
    84. POST_CMOS_INVALID       equ 01000000b   ;Неверная контрольная сумма CMOS
    85. POST_BATTERY_INVALID    equ 10000000b   ;Батарея CMOS разряжена
    86.  
    87. CMOS_DATA struct    ;x CMOS_STORAGE_REGISTERS
    88. PostStatus  BYTE ?  ;+0Eh Байт диагностики загрузки POST_
    89. ShutdownStatus  BYTE ?  ;+0Fh Байт статуса завершения работы ПК
    90. FloppyType  BYTE ?  ;+10h Тип дисковода
    91. Reserved1       BYTE ?  ;+11h
    92. HddType     BYTE ?  ;+12h Тип винчестера
    93. Reserved2       BYTE ?  ;+13h
    94. DeviceFlags BYTE ?  ;+14h
    95. BaseMemory  WORD ?  ;+15h
    96. AddMemory       WORD ?  ;+17h
    97. HddType0        BYTE ?  ;+19h
    98. Undefined1  BYTE 6 DUP (?)  ;+1Ah
    99. HddType1        BYTE ?  ;+20h
    100. Undefined2  BYTE 0Dh DUP (?)    ;+21h
    101. CmosCheck       WORD ?  ;+2Eh Контрольная сумма значений по адресам от 10Н по 20Н
    102. Reserved3       BYTE 2 DUP (?)  ;+30h
    103. Age         BYTE ?  ;+32h Век, в BCD формате
    104. Undefined3  BYTE 18h DUP (?)    ;+33h
    105. BiosPowerFlags  BYTE ?  ;4Bh
    106. Undefined4  BYTE 7 DUP (?)  ;4Ch
    107. BiosAlarm       BIOS_ALARM <>   ;+53h
    108. Undefined5  BYTE 24h DUP (?)
    109. BiosCheck       WORD ?  ;+7Dh
    110.             BYTE ?
    111. CMOS_DATA ends
    112. PCMOS_DATA typedef ptr CMOS_DATA
    113.  
    114. CMOS_EX struct
    115. Rtc     CMOS_RTC <>
    116. Data        CMOS_DATA <>
    117. CMOS_EX ends
    118. PCMOS_EX typedef ptr CMOS_EX
    119.  
    120. Delay macro
    121.     pushfd
    122.     popfd
    123.     jmp short $ + 2
    124. endm
    125.  
    126. ALARM_DATA struct
    127. Enable  BYTE ?
    128. Seconds BYTE ?
    129. Minutes BYTE ?
    130. Hours   BYTE ?
    131. Period  BYTE ?
    132. ALARM_DATA ends
    133. PALARM_DATA typedef ptr ALARM_DATA
    134.  
    135. SetRtcAlarm proc AlarmData:PALARM_DATA
    136.     mov al,CMOS_EX.Rtc.Csr.RegisterB    ;Register B
    137.     mov ebx,AlarmData
    138.     assume ebx:PALARM_DATA
    139.     out CMOS_ADDRESS_PORT,al
    140.     Delay
    141.     in al,CMOS_DATA_PORT
    142.     or al,CMOS_CSRB_UTI or CMOS_CSRB_PIE or CMOS_CSRB_AIE or CMOS_CSRB_HF or CMOS_CSRB_DF
    143.     Delay
    144.     mov cx,ax
    145.     mov al,CMOS_EX.Rtc.Csr.RegisterB    ;Register B
    146.     out CMOS_ADDRESS_PORT,al
    147.     Delay
    148.     mov ax,cx
    149.     out CMOS_DATA_PORT,al
    150.     Delay
    151. ;BIOS_ALARM.Alarm  
    152.     mov eax,CMOS_EX.Data.BiosAlarm.Alarm
    153.     movzx cx,[ebx].Enable
    154.     out CMOS_ADDRESS_PORT,al
    155.     Delay
    156.     in al,CMOS_DATA_PORT
    157.     Delay
    158.     .if !Cx ;Disable
    159.     and al,not(BIOS_POWER_ALARM)
    160.     .else
    161.     or al,BIOS_POWER_ALARM
    162.     .endif
    163.     mov cx,ax
    164.     Delay
    165.     mov eax,CMOS_EX.Data.BiosAlarm.Alarm
    166.     out CMOS_ADDRESS_PORT,al
    167.     Delay
    168.     mov eax,ecx
    169.     out CMOS_DATA_PORT,al
    170.     Delay
    171. ;BIOS_ALARM.Period
    172.     mov eax,CMOS_EX.Data.BiosAlarm.Period
    173.     out CMOS_ADDRESS_PORT,al
    174.     Delay
    175.     mov al,[ebx].Period
    176.     out CMOS_DATA_PORT,al
    177.     Delay
    178. ;CMOS_CLOCK.SecondsAlarm
    179.     mov al,CMOS_EX.Rtc.Clock.SecondsAlarm
    180.     out CMOS_ADDRESS_PORT,al
    181.     Delay
    182.     mov al,[ebx].Seconds
    183.     out CMOS_DATA_PORT,al
    184.     Delay
    185. ;BIOS_ALARM.Seconds
    186.     mov eax,CMOS_EX.Data.BiosAlarm.Seconds
    187.     out CMOS_ADDRESS_PORT,al
    188.     Delay
    189.     mov al,[ebx].Seconds
    190.     out CMOS_DATA_PORT,al
    191.     Delay
    192. ;CMOS_CLOCK.MinutesAlarm
    193.     mov al,CMOS_EX.Rtc.Clock.MinutesAlarm
    194.     out CMOS_ADDRESS_PORT,al
    195.     Delay
    196.     mov al,[ebx].Minutes   
    197.     out CMOS_DATA_PORT,al
    198. ;BIOS_ALARM.Minutes
    199.     mov eax,CMOS_EX.Data.BiosAlarm.Minutes
    200.     out CMOS_ADDRESS_PORT,al
    201.     Delay
    202.     mov al,[ebx].Minutes
    203.     out CMOS_DATA_PORT,al
    204.     Delay
    205. ;CMOS_CLOCK.HoursAlarm
    206.     mov al,CMOS_EX.Rtc.Clock.HoursAlarm
    207.     out CMOS_ADDRESS_PORT,al
    208.     Delay
    209.     mov al,[ebx].Hours
    210.     out CMOS_DATA_PORT,al
    211.     Delay
    212. ;BIOS_ALARM.Hours
    213.     mov eax,CMOS_EX.Data.BiosAlarm.Hours
    214.     out CMOS_ADDRESS_PORT,al
    215.     Delay
    216.     mov al,[ebx].Hours
    217.     out CMOS_DATA_PORT,al
    218.     Delay
    219.     mov al,CMOS_EX.Rtc.Csr.RegisterB    ;Register B
    220.     out CMOS_ADDRESS_PORT,al
    221.     Delay
    222.     in al,CMOS_DATA_PORT
    223.     and al,not(CMOS_CSRB_UTI)
    224.     Delay
    225.     mov ecx,eax
    226.     mov al,CMOS_EX.Rtc.Csr.RegisterB    ;Register B
    227.     out CMOS_ADDRESS_PORT,al
    228.     Delay
    229.     mov eax,ecx
    230.     out CMOS_DATA_PORT,al
    231.     Delay
    232. ;Корректируем контрольную сумму
    233.     mov edx,BiosCheckAmountLo
    234.     xor ecx,ecx
    235. loop_:
    236.     mov eax,edx
    237.     out CMOS_ADDRESS_PORT,al
    238.     Delay
    239.     in al,CMOS_DATA_PORT
    240.     Delay
    241.     inc edx
    242.     add ecx,eax
    243.     cmp edx,BiosCheckAmountHi + 1
    244.     jc loop_
    245.     mov eax,BiosCheckAmountOffset
    246.     out CMOS_ADDRESS_PORT,al
    247.     Delay
    248.     mov al,ch       ;Старшее слово
    249.     out CMOS_DATA_PORT,al
    250.     Delay
    251.     mov eax,BiosCheckAmountOffset+1
    252.     out CMOS_ADDRESS_PORT,al
    253.     Delay
    254.     mov al,cl       ;Младшее слово
    255.     out CMOS_DATA_PORT,al
    256.     Delay
    257.     xor eax,eax
    258.     ret
    259. SetRtcAlarm endp
    260. end
     
  14. LomuX

    LomuX New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    6
    Будильник:

    Мои мысли и собранная информация:

    Имеем RTC и Контроллер прерываний2 – INTC2,
    Часы реального времени вырабатывают аппаратное прерывание IRQ8, которому соответствует прерывание с номером 70h. Это прерывание может вырабатываться по трем причинам:
    прерывание по окончанию изменения данных. Вырабатывается при установленном бите 4 регистра состояния B после каждого обновления регистров часов;
    прерывание будильника. Вырабатывается при совпадении регистров часов и регистров будильника и при установленном бите 5 регистра состояний B;
    периодическое прерывание. Вырабатывается с интервалом примерно 1 мс при установленном бите 6 регистра состояний B.

    При срабатывании будильника BIOS вырабатывает прерывание INT 4Ah. Программа может подготовить собственный обработчик для этого прерывания.
    Для работы с часами реального времени вы можете обращаться непосредственно к перечисленным выше ячейкам памяти CMOS, используя порты 70h и 71h. Однако лучше всего воспользоваться функциями 2 - 7 прерывания INT 1Ah
    (взято от сюда http://olddos.narod.ru/doc/comp/bsp/v33/ch4.htm)

    мысли:

    1. надо разрешить будильник (Адресное пространство, выделяемое второму контроллеру прерываний – 0А0h-0ВFh. Адреса, реально используемые контроллером–
    0А0h-0А1h. Вместе с этим изменился адрес регистра NMI – для разрешения или запрета немаскируемых прерываний используется запись бита 7 по
    адресу 70h. 1 в этом бите запрещает поступление сигнала NMI напроцессор, 0 - разрешает)

    2. надо записать будильник в регистры:
    01H Секундная тревога
    03H Минутная тревога
    05H Часовая тревога

    3. надо как то показать срабатывание будильника (например сигнал BEEP)

    Это всё что мне удалось найти.... програмировать на асме я не умею (да уже и не хочу) а здавать экзамен надо :dntknw:
    Помогите если кому не трудно...

    Сасибо.
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    LomuX
    Ну я же рабочий код дал, чего есчо нужно то ?
    Или есчо код установки вектора прерывания нужен.. хз в общем. Кстати для винды можешь забыть про биос, этот контроллер прерываний и остальное.. ах да у вас же дос..)
     
  16. LomuX

    LomuX New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    6
    Clerk

    Спасибо за код.

    Но есть сложности... :dntknw:
    асм я не знаю и поэтому твой код преподу пояснить будет трудно...
    не знаю в чём компилировать.... препод дал компилятор turbo (досовский) вот пример кода который желателен
    begin
    asm

    MOV BL, 1
    MOV AX, 0

    @M2: MOV AL, 10110110b
    OUT 43h, AL
    ADD AX, 1000

    OUT 42h, AL
    MOV AL, AH
    OUT 42h, AL
    IN AL, 61h
    OR AL, 00000011b
    OUT 61h, AL

    MOV DX,900
    @M1: MOV CX, 0
    @M: NOP
    NOP
    NOP
    NOP
    NOP
    LOOP @M
    DEC DX
    JNZ @M1

    IN AL, 61h
    AND AL, 11111100b
    OUT 61h, AL

    MOV DX, 500
    @M3: MOV CX, 65333
    @M4: NOP
    NOP
    NOP
    LOOP @M4
    DEC DX
    JNZ @M3

    INC BL
    CMP BL, 11
    JNZ @M2

    end;
    end.

    тут спикер бибикает....

    вот такой абзац.... :dntknw:
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    LomuX
    Есть один подводный камень, а именно контрольная сумма данных биос, если ты установишь будильник не подправив чексумму, то при следущем ребуте все регистры кмос сбросяться и биос потеряет все настройки.
     
  18. LomuX

    LomuX New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    6
    Clerk

    Пропадут все настройки или только настройки будильника? если будильника то не страшно. (нужно что бы была возможность бибикнуть через установленное время и всё).
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    LomuX
    Все.
    Если тебе нужно на спикер звук подать то зачем юзоть будильник не понятно, он нужен только чтобы ATX-блок питания врубить. Для остальных задач, как у тебя(звук на спикер подать спустя указанный интервал времени) PIT достаточно, зачем лезть в дебри.
    [Впрочем я хз.]
     
  20. LomuX

    LomuX New Member

    Публикаций:
    0
    Регистрация:
    18 ноя 2008
    Сообщения:
    6
    Clerk
    Да не... мне нужен будильник, сигнал это что реакция будильника.

    Установить будильник

    Регистры на входе:


    AH = 06h

    CH = часы в BCD-формате;

    CL = минуты в BCD-формате;

    DH = секунды в BCD-формате

    Регистры на выходе:


    CF = CY = 1, если часы реального времени не установлены

    Эта функция позволяет установить будильник на заданное время. Когда будильник “зазвенит”, будет вызвано прерывание INT 4Ah (его вызывает BIOS после прихода аппаратного прерывания от часов реального времени IRQ8, то есть прерывания с номером 70h). Программа, использующая функцию будильника, должна подготовить обработчик прерывания INT 4Ah, завершающий свою работу выполнением команды IRET.


    Это взято из ссылки см. выше.