Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 06.03.2018
Сообщений: 6
1

Занесение данных в регистр ds

12.03.2018, 17:35. Показов 2319. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Такой вопрос, как мне занести в регистр ds значение 01 по определенному адресу?
Хочу сделать так чтобы, когда происходит прерывание в регистре ds по адресу 106, 00 менялся на 01

Вот код программы с прерыванием 04:
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
.model small
.stack 256
.code
old04   dd ?    ;старый вектор прерывания 04
msg db 13,10,"OF flaf is set! Check data formats...",13,10,"$"
start:
    mov ax,cs   ;Настраиваем сегментные регистры
    mov ds,ax
    mov es,ax
    push es     ;сохранить регистр
    mov ax,3504h    ;ф-я получения вектора прерывания 04
    int 21h     ;получаем вектор 04 прерывания
    mov word ptr old04,bx   ;сохраняем
    mov word ptr old04+2,es ;его
    pop es      ;восстановить регистр
    lea dx,new04    ;адрес нового обработчика прерывания 04
    mov ax,2504h    ;ф-я установки вектора прерывания
    int 21h     ;установить новый обработчик прерывания 04
    
    mov ax,1000 ;1000
    add ax,10000    ;1000+10000=11000 -> переполнения нет
    into        ;проверяем переполнение (прерывание не выполняется)
    add ax,22000    ;11000+22000=33000, но произошло переполнение
    into        ;проверяем переполнение (и в этот раз прерывание выполняется)
    
    lds dx,old04    ;загрузить старый вектор прерывания 04
    mov ax,2504h    ;ф-я установки вектора прерывания
    int 21h     ;вернуть старый обработчик прерывания 04
    mov ax,4c00h    ;закончить программу
    int 21h
;новый обработчик прерывания 04
new04   proc
    push dx         ;сохранить регистры
    push ax
    mov ah,9        ;функция вывода сообщения на экран
    lea dx,msg      ;выводимое сообщение
    int 21h         ;выводим на экран
    pop ax          ;восстановить регистры
    pop dx 
    iret
 
new04 endp
end start
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2018, 17:35
Ответы с готовыми решениями:

Занесение вещественного числа в регистр
здравствуйте.помогите пожалуйста как занести в регистр вещественное число dd .386 extrn...

Определение данных и занесение в регистр AX, BX, CX, DX процессора
Доброе времени суток, помогите мне пожалуйста решить такую задачку на Assambler. Спасибо ...

Запись данных в регистр
Всегда интересовал один вопрос, всегда на него находил ответ, и также успешно забывал. А именно...

Даны два числа. Записать в регистр SI меньшее, а в регистр DI - большее из них
Даны два числа. Записать в регистр SI меньшее, а в регистр DI - большее из них.

4
0 / 0 / 0
Регистрация: 06.03.2018
Сообщений: 6
12.03.2018, 17:37  [ТС] 2
вот tasm
Миниатюры
Занесение данных в регистр ds  
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
12.03.2018, 18:31 3
Лучший ответ Сообщение было отмечено Vadim1231 как решение

Решение

Вы же не меняете контекст - не отдаёте управление другой программе. Поэтому содержимое сегментных регистров ничто не меняет. Пользуйтесь ими, как будто прерыавание это продолжение программы.
Единственно, непонятно, зачем выбирать модель память small если данные хранятся в сегменте кода.
Раз уж так поступаете, после .code добавьте строку
Assembler
1
assume ds:@code
Добавлено через 1 минуту
Assembler
1
2
3
4
5
6
msg db 13,10
x   db "OF flaf is set! Check data formats...",13,10,"$"
 
 
mov [x], '0'
mov [x], '1'
0
0 / 0 / 0
Регистрация: 06.03.2018
Сообщений: 6
12.03.2018, 18:42  [ТС] 4
Я хочу сделать так чтобы в ячейке в ds допустим был 00, если прерывание не выполняется, и 01 если прерывание выполнится( в моем случае оно всегда выполняется) и я хочу, чтобы когда я запуская программу в пошаговом режиме через td (tasm)
Видел что 00 в какой-то ячейке меняется на 01( тк прерывание выполнилось)
Другими словами, можно ли как-то по ходу выполнения программы поменять 00 в регистре ds на 01 при выполнении прерывания
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
12.03.2018, 18:47 5
Не совсем понятно. И почему именно регистр ds.
Поменяйте в начале и верните перед iret.
0
12.03.2018, 18:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.03.2018, 18:47
Помогаю со студенческими работами здесь

Поместить в регистр BX константу 100 (16). Старший байт BX переместить в регистр BL
здраствуйте помогите пож-та разобраться в задаче!написал прогу но не работает! Поместить в регистр...

Занести в регистр AX значение регистра CS, а в регистр BL записать заданное число
Здравствуйте, у меня такая проблема: Нужно составить программу, которая заносит в регистр AX...

(MCS-51) Внести в регистр А двоично-десятичное число XX, в регистр R5 — XX
Внести в регистр А двоично-десятичное число XX, в регистр R5 - XX, попеременно отображать эти числа...

Регистр флагов в обычный регистр
Можно ли положить регистр флагов в обычный регистр (допустим, eax)? (для дальнейшего вывода на...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru