Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 16.06.2009
Сообщений: 40

Будильник

29.09.2010, 17:37. Показов 2359. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Скажите почему программа компелируется, но звука нет, хотя .exe файл создан

вот исходник:

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
TITLE Программа "Будильник"
 
;Определение сегмента стека /можно оставлять без изменения/
;Имя сегмента стека - stacksg
StackSg SEGMENT PARA STACK 'Stack'  ;Стандартный заголовок определения стека
        dw 32 dup(?)                ;Задание глубины стека
StackSg ENDS                        ;Конец сегмента стека
 
;Определение сегмента данных
DataSg SEGMENT PARA 'Data'          ;Стандартный заголовок определения данных
        ;Здесь определяются данные
        MINUTES     DW    1     ;хранит число минут до звонка
        ALARMCOUNT  DW    0     ;хранит счетчик времени для звонка
DataSg ENDS      ;Конец сегмента данных
 
;Сегмент кода - тело программы
CodeSg SEGMENT PARA 'Code'          ;Заголовок сегмента кода
        ASSUME cs: CodeSg, ds: DataSg, ss: StackSg
Begin PROC far                      ;Начало программы - основной процедуры
        ;---Пролог EXE-файла---
        push ds
        mov ax,DataSg
        mov ds,ax
        ;---Конец пролога---
 
        ;---Непосредственно программа---
 
;---установка ожидаемого значения счетчика времени суток
        ;CALL  REQUEST_MINUTES  ;запрос числа минут до звонка (1-60)
        MOV   AX,0001;MINUTES   ;пересылка в AX
        MOV   BX,1092           ;число импульсов счетчика в минуте
        MUL   BX                ;умножаем - результат в AX
        push ax
        ;получаем текущее значение счетчика
        MOV   AH,0              ;номер функции чтения счетчика
        INT   1AH               ;читаем значение, младший байт в DX
        ;складываем оба значения
        pop ax
        ADD   AX,DX             ;
        MOV   ALARMCOUNT,AX     ;получаем нужное значение счетчика
 
 
;---заменяем вектор пустого прерывания
        PUSH  DS                ;сохраняем сегмент данных
        MOV   AX,SEG ALARM      ;берем сегмент процедуры ALARM
        MOV   DS,AX             ;помещаем его в DS
        MOV   DX,OFFSET ALARM   ;берем смещение процедуры
        MOV   AL,1CH            ;номер изменяемого вектора
        MOV   AH,25H            ;функция изменения вектора
        INT   21H               ;меняем вектор
        POP   DS                ;восстанавливаем сегмент данных
;
;---дальше продолжается программа
;
 
;---в конце программы возвращаем вектор прерывания
;       MOV   DX,0FF53H         ;оригинальные значения для
;       MOV   AX,0F000H         ;прерывания 1CH
;       MOV   DS,AX             ;помещаем сегмент в DS
;       MOV   AL,1CH            ;номер изменяемого вектора
;       MOV   AH,25H            ;номер функции
;       INT   21H               ;восстанавливаем вектор
        pop cx
        mov dx,cs
        sub dx,cx
        add dx,codsize
        mov ax,3100h
        int 21h
;       ret
Begin ENDP      ;Стандартный конец программы
 
 
;---процедура выдачи звукового сигнала
ALARM PROC FAR          ;создаем длинную процедуру
        push ds
         PUSH AX           ;сохраняем изменяемые регистры
         PUSH CX           ;
         PUSH DX           ;
        mov ax,DataSg
        mov ds,ax
;---читаем счетчик времени суток
         MOV  AH,0         ;номер функции чтения счетчика
         INT  1AH          ;читаем значение счетчика
;---сравниваем с требуемым значением
         MOV  CX,ALARMCOUNT   ;берем требуемое значение
         CMP  DX,CX        ;сравниваем с текущим
         JNE  NOT_YET      ;если неравны, то на выход
;---выдаем звуковой сигнал, если значения совпали
         CALL BEEP         ;эта процедура не показана
;---иначе возвращаемся из прерывания
NOT_YET: POP  DX           ;восстанавливаем регистры
         POP  CX           ;
         POP  AX           ;
        pop ds
         IRET              ;возврат из прерывания
ALARM ENDP              ;конец процедуры
 
;---------------------------Гудок-----------------------------------------
Beep PROC near          ;---гудок динамика
        mov dx,800      ;счетчик числа циклов
        in  al,61h      ;читаем порт B 8255
        and al,0FEH     ;выключаем бит таймера 8253
        NextCycle:
                or al,2         ;включаем бит динамика
                out 61h,al      ;посылаем байт в порт B
                mov cx,150      ;длительность первой половины
        CycleUp:
                loop CycleUp    ;задержка пока сигнал высокий
                and al,0FDH     ;выключаем бит динамика
                out 61h,al      ;посылаем байт в порт B
        CycleDown:
                loop CycleDown  ;задержка пока сигнал низкий
                dec dx          ;уменьшаем счетчик циклов
                jnz NextCycle   ;повторяем цикл пока DX не 0
        ret
Beep ENDP
codsize=($-Begin)/16+1
;-------------------------------------------------------------------------
CodeSg ENDS     ;
END Begin       ;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2010, 17:37
Ответы с готовыми решениями:

будильник
помогите с прогой, накопал исходник, но не пойму почему не работает...

Будильник
Ребята, помогите пожалуйста с задачками по ассемблеру! Написать нужно на чистом ассемблере и с комментариями. В соседней теме по С++...

Будильник на ассемблере исправить
есть код будильника,должна воспроизводится мелодия ,но этого не происходит,необходимо исправить!так же где идет ввод значения часов и минут...

1
1779 / 757 / 153
Регистрация: 03.06.2009
Сообщений: 5,940
29.09.2010, 21:45
Знакомая программа... https://www.cyberforum.ru/asse... 61853.html

Потому что запускать нужно из-под виртуальной машины с установленным ДОСом, а не в винде.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2010, 21:45
Помогаю со студенческими работами здесь

Не работает будильник по int 4Ah
Добрый день. Сделал тестовую програмку для будильнику. Устанавливаю минуты с последней цифрой 4, но можно и другую. На int 4Ah вешаю...

Будильник по прерыванию int 4ah
Задача стоит в том, чтобы задать будильник и в указанное время вызвать процедуру( в моем случае Beep). Я прочитал, что делается это с...

Резидентный будильник (не могу изменить сигнал)
Есть резидентный будильник , он работает правильно, только вот сигнал не очень, поменял частоты, теперь уши режет.... Как бы изменить...

Составить программу, где есть КМОП-часы, будильник
Помогите плииз !! По ассемблеру ничего не шарю.:((( Вот моя задача: Некоторая тестовая задача выводит на экран текущее время из КМОП –...

Будильник
include '%fasm%/win64ax.inc' section '.code' executable start: sub rsp,8 @@: invoke GetSystemTime,lpSystemTime ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru