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

Вводим с клавиатуры число в секундах, программа просто ждет это время и после делает выход

30.11.2011, 08:56. Показов 6902. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вводим с клавиатуры число в секундах, программа просто ждет это время и после делает выход!

Вот пример, но у меня почему-то он не работает(((
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
.model small
.stack 100h
.data   
 
cr equ 0Dh ; \r
lf equ 0Ah ; \n
 
String  db 'Kursovaya rabota', lf, cr, '$'
String2 db '"Systemnoe programmnoe obespechenie"', lf, cr, '$'
String3 db 'Studenta gruppy "ASOI-438"', lf, cr, '$'
String4 db 'Safina Rustama Faritovicha', lf, cr, '$'
String5 db 'Variant 18.2.2.2.2', lf, cr, '$'
String6 db lf, cr, 'Nazhmite klavishu dlya prodolzheniya...', lf, cr, '$'
 
String_init db 'Schityvanie vremeni', lf, cr, '$'
 
String_alarm db 'Zvonok!', lf, cr, '$'
 
.code
main:
 
    mov dx, 03DAh  ; Установка видеорежима
    mov al, 10h
    out dx, al
    int 10h
    
    mov dx, 03C0h  ; Установка значения регистра видеоадаптера
    mov al, 00h
    out dx, al
    int 10h
    
    mov ax, @data  ; Настройка сегментного регистра
    mov ds, ax
    
    mov ah, 09h    ; Вывод текста
    
    lea dx, String
    int 21h
    lea dx, String2
    int 21h
    lea dx, String3
    int 21h
    lea dx, String4
    int 21h
    lea dx, String5
    int 21h
    lea dx, String6
    int 21h
    
    mov ah, 00h    ; Задержка до нажатия клавиши
    int 16h
    
    ;начало очистки экрана
    mov AX, 0600h  ; AH=06 (прокрутка), AL=00 (весь экран)        
    mov BH, 07     ; нормальный атрибут (черно/белый)
    mov CX, 0000   ; верхняя левая позиция
    mov DX, 184fh  ; нижняя правая позиция
    int 10h        ; вызов BIOS
 
    
    mov ah, 09h    ; Вывод текста "Считывание времени"
    lea dx, String_init
    int 21h
    
    mov ah, 02     ; Чтение текущего времени -> секунды в DH
    ; INT 4aH
    int 1Ah
    
    mov ah, 06     ; Установка таймера
    add dh, 5      ; Через 5 секунд
    int 1Ah
    
    push ds
    
    lea dx, new_4a
    MOV AX,SEG new_4a   ;сегмент процедуры
    MOV DS,AX   ;помещаем в DS
    mov ah,25h
    mov al,4Ah
    int 21h
    pop ds
    
    mov ah, 07     ; Сброс таймера
    int 1Ah
    
    mov ah, 00h    ; Задержка до нажатия клавиши
    int 16h
    
    new_4a proc FAR
    push AX
    mov ah, 09h
    lea dx, String_alarm
    int 21h
    pop AX
    
    ;MOV AL,20H ;эти две строки надо использовать
    ;OUT 20H,AL ;только для аппаратных прерываний
    IRET
    new_4a endp
 
    exit:
    
    mov ah, 49h    ; Освобождение памяти
    int 21h
    mov ah, 4Ch    ; Выход
    int 21h
 
end main
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2011, 08:56
Ответы с готовыми решениями:

Дано время N в секундах. Выразить это время в сутках, часах, минутах и секундах.
Дано время N в секундах. Выразить это время в сутках, часах, минутах и секундах. Можете помочь написать программу!? p.s. Буду...

Мы вводим число, а нам выводит это число в словах
Здравствуйте. Мне надо написать программу, где мы вводим число, а нам выводит это число в словах, и так до 1 000 000. Например мы вводим 4,...

Структуры. Программа должна выводить время в днях:часах:минутах:секундах и увеличивать,уменьшать время на 1 секунду
Помогите написать программу с помощью структур.Она должна выводить время в днях:часах:минутах:секундах и увеличивать,уменьшать время на 1...

35
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 09:21
demon2321
1) начнем с мелочей если убрать символ доллара в строках String, String2, String3, String4, String5 то вместо
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
mov ah, 09h ; Вывод текста
lea dx, String
int 21h
lea dx, String2
int 21h
lea dx, String3
int 21h
lea dx, String4
int 21h
lea dx, String5
int 21h
lea dx, String6
int 21h
достаточно только
Assembler
1
2
3
mov ah, 09h ; Вывод текста
lea dx, String
int 21h
2) игры с таймером хороши только если твоя программа запущенна под чистым DOS'ом, Windows карает такие игрища сообщением "Процессор NTVDM обнаружил недопустимую инструкцию. CS:0000 IP:0077 OP f0 37 05 0e 02 Для завершения работы приложения нажмите кнопку "Закрыть"
0
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 09:26  [ТС]
А что тогда будет выводиться? Такой вопрос, код не мой, но если убирать строки
Assembler
1
2
3
4
5
6
7
8
9
10
lea dx, String
int 21h
lea dx, String2
int 21h
lea dx, String3
int 21h
lea dx, String4
int 21h
lea dx, String5
int 21h
и еще вот это
Assembler
1
2
3
4
5
String db 'Kursovaya rabota', lf, cr, '$'
String2 db '"Systemnoe programmnoe obespechenie"', lf, cr, '$'
String3 db 'Studenta gruppy "ASOI-438"', lf, cr, '$'
String4 db 'Safina Rustama Faritovicha', lf, cr, '$'
String5 db 'Variant 18.2.2.2.2', lf, cr, '$'
то по завершению программы выходит ошибка, неизвестная команда. Или что то типа такого!

Miki, нужно добавить ввод с клавиатуры времени в секундах, честно, я хреново разбираюсь с Ассемблером!(
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 09:35
3) вызывать во вновьустановленном обработчике прерывания int 21h чтобы вывести на экран надпись чревато неприятностями
Assembler
1
2
3
4
5
6
7
8
new_4a proc FAR
push AX
mov ah, 09h
lea dx, String_alarm
int 21h <-- вот здесь
pop AX
IRET
new_4a endp
в таких случаях пишут напрямую в текстовый видеобуфер, наверное ошибка в этом
0
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 09:36  [ТС]
Цитата Сообщение от Mikl___ Посмотреть сообщение
3) вызывать во вновьустановленном обработчике прерывания int 21h чтобы вывести на экран надпись чревато неприятностями
Assembler
1
2
3
4
5
6
7
8
new_4a proc FAR
push AX
mov ah, 09h
lea dx, String_alarm
int 21h <-- вот здесь
pop AX
IRET
new_4a endp
в таких случаях пишут напрямую в текстовый видеобуфер, наверное ошибка в этом
А как тогда можно от этой ошибки избавиться? А вообще, этот код можете по править чтобы работало все хорошо?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 09:37
demon2321, читай внимательно "убрать символ доллара в конце строк String, String2, String3, String4, String5" и тогда достаточно вывести все пять строк одним вызовом
Assembler
1
2
3
mov ah, 09h ; Вывод текста
lea dx, String
int 21h
0
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 09:38  [ТС]
А, понял, теперь понятно!
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 09:41
demon2321, началось, я помогаю тебе найти ошибки, а ты требуешь от меня писать программу за тебя "А вообще, этот код можете по править чтобы работало все хорошо?" меня этими воплями "я хреново разбираюсь с Ассемблером!" не проймешь. Каким учебником ты пользуешься?
0
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 09:46  [ТС]
Абелем в основном! Плюс еще спрашиваю препода своего, просто получается так: лекций по предмету ЭВМ нет, а практики стоят, то есть предмет отдан на самостоятельное изучение! Вот и приходится крутиться и вертеться....

Добавлено через 1 минуту
А как написать на прямую в видео буфер? Не используя прерывание Int 21h?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 09:46
Со считыванием времени потом разберешься, считай для начала, что секунды у тебя в переменной Х
0
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 09:48  [ТС]
Там ведь секунды в dh хранятся, или нет? Можно сделать так: Поставить изначально ввод с клавиатуры, и как-нибудь потом передать это вот сюда?
Assembler
1
2
3
mov ah, 06 ; Установка таймера
add dh, 5 ; Через 5 секунд
int 1Ah
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 09:55
прямая запись
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
new_4a proc FAR
push es
push ds
push ax
push di
push si
push cx
mov ax,0B800h
mov es,ax
mov ax,cs
mov ds,ax
mov di,0
lea si, String_alarm
mov ah,0Fh
mov cx,7
l1: lodsb
stosw
loop l1
pop cx
pop si
pop di
pop AX
pop ds
pop es
IRET
String_alarm db 'Zvonok!' 
new_4a endp
кажется так!

Добавлено через 1 минуту
Цитата Сообщение от demon2321 Посмотреть сообщение
Там ведь секунды в dh хранятся, или нет?
Справочники, учебники, поиск в интернете
1
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 09:58  [ТС]
А..... Освобождение памяти в конце обязательно как я понимаю? И вот еще
Assembler
1
2
mov ah, 4Ch ; Выход
int 21h
это ведь просто выход? А нельзя для ah сделать так, что бы он после ждал нажатия Enter? Пробовал mov ah, 4c00h, говорит что слишком большое значение!?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 10:02
Цитата Сообщение от demon2321 Посмотреть сообщение
String db 'Kursovaya rabota'
а ты еще не в курсе что в регистр AH больше 0FFh не положишь? набери в GOOGL "4Сh функция 21h прерывания" и читай внимательно, в Абеле об этом тоже есть
Сперва прочитай всё что найдешь о программах-резидентах и о перепрограммировании прерываний, а потом уже садись за написание программы, на сегодня всё!
1
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 10:05  [ТС]
Да я знал это, но задержку надо все равно организовать! String db 'Kursovaya rabota' что Вы этим хотели сказать?
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
30.11.2011, 10:11
demon2321,
знал что?
организуй, а завтра покажешь
что для уровня курсовой работы слабовато, даже если автор не ты, "хотя меня терзают смутные сомненья.."
1
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
30.11.2011, 20:32  [ТС]
Я просто искал что-то похожее на таймер, наткнулся на чью-то курсовую и из нее стал уже пытаться что-то делать! Спасибо большое за помощь!!!

Добавлено через 10 часов 19 минут
Тот код был нормальный, по словам препода!
Assembler
1
2
3
4
5
6
7
8
9
10
11
new_4a proc FAR
push AX
mov ah, 09h
lea dx, String_alarm
int 21h
pop AX
 
;MOV AL,20H ;эти две строки надо использовать
;OUT 20H,AL ;только для аппаратных прерываний
IRET
new_4a endp
Пытался вот этот поставить:
Assembler
1
2
3
4
5
6
7
8
9
10
 mov ah,1
 int 21h
 sub al, 30h
 mul 10
 mov bl, al
 mov ah, 1
 int 21h
 sub al, 30h
 add bl, al
 mov al, bl
Где умножение ругается, не пойму почему( И почему-то первый раз в Ассемблере программа работает правильно, то есть ждет 5 секунд, а если запускать еще раз, уже не ждет эти 5 секунд а просто делает выход!( Что за чертовщина(((
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
01.12.2011, 10:13
demon2321, для ввода числа секунд с клавиатуры используй 0Ah функцию 21h прерывания, а не занимайся сатанизмом принимая по одному символу через 1-ую функцию DOS. Дай пользователю ввести всю строку, при этом он может использовать клавиши Delete, Bkspace и стрелки влево/вправо во время набора и нажмет Enter когда строка будет набрана, причем всё это поддерживает ОС а твоя голова этой проблемой не занята

Добавлено через 10 минут
код
Assembler
1
2
3
4
new_4a proc FAR
. . .
IRET
new_4a endp
поставь после строк
Assembler
1
2
mov ah, 4Ch ; Выход
int 21h
чтобы на него случайно не было передано управление, и где-то в тексте программы у тебя должен быть вызов прерывания int 4Ah иначе твоя строка 'Zvonok!' не будет выводится...
1
0 / 0 / 0
Регистрация: 12.09.2011
Сообщений: 28
01.12.2011, 10:54  [ТС]
Кстати, что насчет вот этого блока:
Assembler
1
2
3
4
5
6
7
8
new_4a proc FAR
push AX
mov ah, 09h
lea dx, String_alarm
int 21h
pop AX
IRET
new_4a endp
Какой лучше использовать? Ваш или этот?

Добавлено через 23 минуты
Еще вопросик, тут используются прерывания таймера? Специальные которые есть... Просто нужно от них избавиться!(
0
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
01.12.2011, 11:25
Цитата Сообщение от demon2321 Посмотреть сообщение
Какой лучше использовать?
Чего гадать? пробуй... Просто при переопределении прерывания не рекомендуется использовать другие прерывания...
Цитата Сообщение от demon2321 Посмотреть сообщение
тут используются прерывания таймера?
Читай книжки -- от них больше прока, ценность ошибок в том, что ты их обнаруживаешь самостоятельно, а не в том, что тебя в них тычут носом
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.12.2011, 11:25
Помогаю со студенческими работами здесь

Программа(консольная) работает и одновременно ждет данные от клавиатуры. Как?
Консольная программа. Например, рассмотрит игру &quot;змейка&quot;. В этой игре одновременно змейка ползет и ждет данные от клавиатуры. Но если...

Вводим с клавиатуры число - день от начала года и надо получить дату этого дня
помогите пожалуйста с задачей, в С++ не очень понимаю, а зачет без этой задачки не получу:) или хотя бы идейку подкиньте какую-нибудь. ...

После ввода времени в минутах программа выводит, какое расстояние в метрах пройдёт свет за это время
Выполнил данную задачу, но преподаватель сказал что не верно, вставляю код, подскажите в чём ошибка :D t = float(input(&quot;Введите...

Пользователь вводит время в Днях,часах,минутах и секундах,программа переводит все в секунды
Пользователь вводит время в Днях,часах,минутах и секундах,программа переводит все в секунды

Вводим число и программа должна показать сколько от 0 до этого числа четных чисел
Это из школьной программы, возможно у когонить есть программы выполняющие действия 1)Программа подсчитывающая по граммам цену конфет ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru