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

Выгрузка прерывания из памяти

16.06.2013, 02:57. Показов 1863. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
программа не выгружается из памяти, просмотрел много чего в интернете, но, к сожалению, так и не получилось.
надеюсь на вашу помощь, вопрос нескольких строчек кода
(выгрузка должна происходить при параметре командной строки "/un")

вот код

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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
code segment 
assume CS:code,DS:data,SS:stack, ES:nothing
data segment
    str_int_set db "Interrupt is just set",13,10,"$"
    str_int_had_set db "Interrupt is already set",13,10,"$"
    str_int_no_more db "Interruption unloaded",13,10,"$"
data ends
stack segment stack
 db 100h dup(?)
stack ends
start:
    jmp begin
    
start_proc:     
    str_count db "Number of interruptions: "
    count_to_str db "       " ; число прерываний - строка вывода
    count dw 0  ; число прерываний - число
    keep_curs dw 0 ; для хранения позиции курсора
    resident_id dw 0205h ; идентификатор резидента
    keep_cs dw 0 ; для хранения сегмента
    keep_ip dw 0 ; смещения прерывания
 
rout proc far ; обработчик прерывания
... - код прерывания
end_proc:
 
;Основная программа
begin:
    push DS
    mov ax, data
    mov DS, ax  
 
;Получаем вектор прерываний
    push ES  ; Сохраняем регистр ES
    mov ah, 35h
    mov al, 1Ch
    int 21h
    cmp ES:[bx - 6], 0205h
    je next
    
    mov keep_ip, bx ; запоминаем смещение 
    mov keep_cs, ES ; запоминаем сегмент
    
;Устанавливаем свое прерывание в поле векторов прерываний
    push DS 
    mov dx, offset rout
    mov ax, seg rout
    mov DS, ax
    mov ah, 25h
    mov al, 1Ch
    int 21h 
    pop DS  
 
;Сообщение, что прерывание установлено
    mov dx, offset str_int_set 
    mov ah, 9h
    int 21h 
    
;Оставляем обработчик прерываний в резидентной памяти    
    mov dx, offset end_proc 
    mov bx, offset start_proc
    sub dx, bx
    add dx, 10Fh
    mov cl, 4h
    shr dx, cl
    inc dx
    mov ah, 31h
    int 21h 
    jmp exit    
 
;Проверяем хвост командной строки
next:
    pop ES  
    mov si, 81h
    inc si
    mov al, byte ptr ES:[si]
    cmp al, '/'
    jne no_command
    inc si
    mov al, byte ptr ES:[si]
    cmp al, 'u'
    jne no_command
    inc si
    mov al, byte ptr ES:[si]
    cmp al, 'n'
    jne no_command
    jmp next_2
    
;Сообщение, что прерывание уже установлено
no_command:
    mov dx, offset str_int_had_set
    mov ah, 9h
    int 21h
    jmp exit
 
next_2:
;Восстанавливаем стандартный вектор прерываний
    mov ah, 35h
    mov al, 1Ch
    int 21h
    cli
    push DS
    mov dx, ES:[bx - 2] ; восстанавливаем смещение
    mov ax, ES:[bx - 4] ; восстановление сегмента
    mov DS, ax
    mov ah, 25h
    mov al, 1Ch
    int 21h
    pop DS
    sti 
 
;Сообщение, что прерывание выгружено
    mov dx, offset str_int_no_more
    mov ah, 9h
    int 21h 
    
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;Выгружаем прерывание из памяти
;   pop DS
;   mov di, 2Ch
;   mov ax, [di]
;   mov ES, ax
;   mov ah, 49h
;   int 21h 
;   mov ax, DS
;   mov ES, ax
;   mov ah, 49h
;   int 21h
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  
 
exit:
    mov ah, 4Ch
    int 21h
code ends
 
end start
end begin
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.06.2013, 02:57
Ответы с готовыми решениями:

Выгрузка резидента из обработчика прерывания
Здравствуйте! Вопрос такой: Как в программе выгрузить из памяти резидент , в конце обработчика прерывания int 09h(в данном случае)???? ...

Выделение блока памяти, обработчик прерывания таймера
всем привет! вобщем выкопал я из траншеи программу вывода времени, увы написанную не мной.. RGB EQU 1Fh VAD EQU 0B800h ROW...

Загрузка и выгрузка программы из оперативной памяти
Пишу программу ... не важно что она будет делать , я пока не могу просто сделать бонально загрузку и выгрузку программы из оперативной...

4
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
16.06.2013, 08:03
Цитата Сообщение от fitter_happier Посмотреть сообщение
mov ah, 4Ch
int 21h
Этого достаточно, но лучше
Assembler
1
2
mov ax, 4C00h
int 21h
Программа из памяти не может выгрузиться. Просто область памяти, в которой она находится помечается свободной и код программы "выгружается", то есть затирается только если в эту область будет записана другая программа
1
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 8
16.06.2013, 13:08  [ТС]
Спасибо большое)
но всё же как именно пометить её свободной?
набор этих команд не помогает
Assembler
1
2
3
4
5
6
7
mov es,cs:2ch
mov ah,49h 
int 21h
push cs 
pop es
mov ah,49h 
int 21h
0
202 / 168 / 11
Регистрация: 30.05.2012
Сообщений: 703
16.06.2013, 13:19
Цитата Сообщение от fitter_happier Посмотреть сообщение
но всё же как именно пометить её свободной?
Да это досъ сам выполняет. При запуске программы дос выделяет блок памяти для программы (ставит ему флаг "занят". После вызова mov ax,4C00h/int 21h или int 20h дос ставит для этого блока флаг "свободен" и использует данный блок памяти как свободное место при необходимости
1
0 / 0 / 0
Регистрация: 16.06.2013
Сообщений: 8
16.06.2013, 13:27  [ТС]
так программа-то сама, выгружается, а установленное прерывание - нет
оно так и остается в памяти, и проблема в этом
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.06.2013, 13:27
Помогаю со студенческими работами здесь

Выход из резидентной программы или выгрузка ее из памяти
Я уже сюда не раз писал насчет резидентной программы. Многие помогли) Большое все спасибо) У меня есть программа, загружаемая...

[Вопрос] Перехват прерывания прямым доступом к вектору прерывания
Всех приветствую! В данный момент разбираюсь с обработкой аппаратного прерывания (прерывание таймера 08h и 1Ch, -//- клавиатуры 09h). ...

Вычислить адрес вектора прерывания по номеру прерывания.
17. По заданному номеру прерывания (13 h) вычислите логические адреса хранения исходных адресов обработчиков прерывания в таблице векторов....

Обработчик прерывания int 21h (по книге Калашникова)
Доброе время суток, я чтиаю книгу Калашникова-Ассемблер и уже втрой день не могу понять почему обработчик не перехватывает прерывания и не...

Выгрузка из памяти и время
Делаю активити, на котором пользователь отвечает на вопросы(тест с вариантами ответа). Под это отведено определённое время. Кучу проблем...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью 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 , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru