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

Резидентная программа: вывод времени на экран

30.05.2011, 16:14. Показов 1589. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет .
Скачал отсюда http://shackmaster.narod.ru/tsr.htm пример резидентной программы - clock . В архиве идёт .com и .asm .
В dosbox .com работает нормально , но скомпилировать .asm с таким же кодом никак не получается. Точнее компилируется но сама прога не работает .
Компилировал emu8086 и TAsm
Может знаете в чем может быть проблемма
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
code    segment                          ; определение кодового сегмента
        assume  cs:code,ds:code          ; CS и DS указывают на сегмент кода
        org     100h                     ; размер PSP для COM программы
start:  jmp     load                     ; переход на нерезидентную часть
        old     dd  0                    ; адрес старого обработчика 
        buf     db  ' 00:00:00 ',0       ; шаблон для вывода текущего времени
 
decode  proc                             ; процедура заполнения шаблона
        mov     ah,  al                  ; преобразование двоично-десятичного 
        and     al,  15                  ; числа в регистре AL
        shr     ah,  4                   ; в пару ASCII символов
        add     al,  '0'
        add     ah,  '0'
        mov     buf[bx + 1],  ah         ; запись ASCII символов
        mov     buf[bx + 2],  al         ; в шаблон
        add     bx,  3      
        ret                              ; возврат из процедуры
decode  endp                             ; конец процедуры 
 
clock   proc                             ; процедура обработчика прерываний от таймера
        pushf                            ; создание в стеке структуры для IRET
        call    cs:old                   ; вызов старого обработчика прерываний
        push    ds                       ; сохранение модифицируемых регистров
        push    es
    push    ax
    push    bx
        push    cx
        push    dx
    push    di
        push    cs
        pop     ds
 
        mov     ah,  2                   ; функция BIOS для получения текущего времени
        int     1Ah                      ; прерывание BIOS
 
        xor     bx,  bx                  ; настройка BX на начало шаблона
        mov     al,  ch                  ; в AL - часы
        call    decode                   ; вызов процедуры заполнения шаблона - часы
        mov     al,  cl                  ; в AL - минуты
        call    decode                   ; вызов процедуры заполнения шаблона - минуты
        mov     al,  dh                  ; в AL - секунды
        call    decode                   ; вызов процедуры заполнения шаблона - секунды 
 
        mov     ax,  0B800h              ; настройка AX на сегмент видеопамяти
        mov     es,  ax                  ; запись в ES значения сегмента видеопамяти
        xor     di,  di                  ; настройка DI на начало сегмента видеопамяти
        xor     bx,  bx                  ; настройка BX на начало шаблона
        mov     ah,  1Bh                 ; атрибут выводимых символов
@@1:    mov     al,  buf[bx]             ; цикл для записи символов шаблона в видеопамять
        stosw                            ; запись очередного символа и атрибута
        inc     bx                       ; инкремент указателя на символ шаблона
        cmp     buf[bx],  0              ; пока не конец шаблона,
        jnz     @@1                      ; продолжать запись символов
 
@@5:    pop     di                       ; восстановление модифицируемых регистров
        pop     dx
        pop     cx
        pop     bx
        pop     ax
        pop     es
        pop     ds
        iret                             ; возврат из обработчика
clock   endp                             ; конец процедуры обработчика
end_clock:                               ; метка для определения размера резидентной
                                         ; части программы
load:   mov     ax,  351Ch               ; получение адреса старого обработчика
        int     21h                      ; прерываний от таймера
        mov     word ptr old,  bx        ; сохранение смещения обработчика
        mov     word ptr old + 2,  es    ; сохранение сегмента обработчика
        mov     ax,  251Ch               ; установка адреса нашего обработчика
        mov     dx,  offset clock        ; указание смещения нашего обработчика
        int     21h                      ; вызов DOS
        mov     ax,  3100h               ; функция DOS завершения резидентной программы
        mov     dx, (end_clock - start + 10Fh) / 16 ; определение размера резидентной
                                                    ; части программы в параграфах
        int     21h                      ; вызов DOS
code    ends                             ; конец кодового сегмента
        end     start                    ; конец программы
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.05.2011, 16:14
Ответы с готовыми решениями:

Резидентная программа вывода времени на экран.
Резидентная программа вывода времени на экран. Как работает эта программа? Как время сохраняется и выводится на экран? TIMES SEGMENT ...

Резидентная программа вывода времени на экран
Есть готовая работающая программа, но никак не могу разобраться, как она работает:help:: puts macro string lea dx,string ...

Резидентная программа: вывод строки символов на экран каждые 45 секунд
Доброго времени суток. Дано задание, написать резидентную программу,которая вывод строку символов на экран каждые 45 секунд. code ...

2
 Аватар для zzzyyyxxx
768 / 312 / 11
Регистрация: 27.05.2011
Сообщений: 703
30.05.2011, 20:27
Создай .BAT файл с такими параметрами (это .com программа, а ты скорее всего до этого получал .exe)
Assembler
1
2
c:\tasm\bin\tasm [имя файла].asm
c:\tasm\bin\tlink /t /x  [имя файла].obj
если нужно, то измени путь
1
kpeved
30.05.2011, 21:13
Большое спасибо , проблемма все таки была с компилятором . Очередной раз убедился что emu8086 полностью бесполезен
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2011, 21:13
Помогаю со студенческими работами здесь

Резидентная программа вывода времени
Хотелось бы рассмотреть резидентные программы на деле. Искал резидентную программу (запускаемую под dosBox), которая будет по нажатию...

Резидентная программа, запускающая счетчик времени
Помогите пожалуйста, нужно сделать TSR-программу, которая должна по горячей клавише запускать счетчик времени, при повторном нажатии время...

Резидентная программа. Вывод названия файлов в папке
Доброго времени суток! Помогите с резидентной программой. при нажатии CTRL+C должно производится действие - вывод названия файлов в папке и...

Резидентная программа для периодического вывода строки на экран
Поставили такую задачу: 1. Написать программу для периодического вывода на экран: • Строка, которая выводится на экран: «Фамилия Имя»; ...

Нужна резидентная программа, которая выводит на экран часы
Не очень понимаю принцип работы резидентных программ, поэтому прошу помощи!


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru