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

Создание пользовательского обработчика прерывания определяющего установку единиц в 9-ом и 2-ом битах слова

03.10.2017, 19:43. Показов 1625. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Можете, пожалуйста, объяснить код и сказать является ли он верным?
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
.386
cseg segment use16
assume cs:cseg
    chsl    dw 0204h
    segm    dw ?
    smesh   dw ? 
    z       db 0
 
m1: LEA SI, CS:chsl
    MOV AX, 3583h
    INT 21h
    MOV CS:segm, ES 
    MOV CS:smesh, BX
 
    MOV AX, 2583h
    MOV BX, CS 
    MOV DS, BX 
    LEA DX, CS:fu
    INT 21h 
 
    INT 83h
 
    MOV AX, 3583h
    MOV DS, CS:segm
    MOV DX, CS:smesh
    INT 21h
 
    MOV AH, 4ch
    INT 21h
 
fu: MOV AX, CS: [SI]
    AND AX, 0000001000000010b
    SUB AX, 0202h
    JZ zj
    MOV DS:z, 1 
zj: IRET
cseg ends
end m1
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.10.2017, 19:43
Ответы с готовыми решениями:

Создание пользовательского обработчика прерывания, определяющего наименьшее значение в массиве
Ребят,как мне в прерывании поменять его функционал Например ,есть номер прерывания 6E ,а мне нужно чтобы эта процедура определяла...

Возврат из обработчика прерывания.
Продублирую вопрос сюда, ибо в "Мелких вопросах" висит он неприкаянно: Как осуществить возврат из обработчика прерываний. Чип -...

Выход из обработчика прерывания
Есть обработчик прерывания, который проверяет состояние кнопки и в зависимости от состояния кнопки переходит в определенный адрес. Как...

18
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
03.10.2017, 20:38
В принципе - похож на правильный.
Хотя и несколько необычно оформлен.

Добавлено через 1 минуту
Действия кода по аналогии с Создание пользовательского обработчика прерывания, определяющего наименьшее значение в массиве
0
Эксперт Hardware
Эксперт Hardware
 Аватар для R71MT
6209 / 2443 / 403
Регистрация: 29.07.2014
Сообщений: 3,174
Записей в блоге: 4
03.10.2017, 23:06
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Хотя и несколько необычно оформлен
как я понял необычность кроется в AND - остаток от деления на 514 - глюк! можно только 512
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 00:10  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Действия кода по аналогии с Перехват прерывания
А что в результате этой программы я должна получить?

Добавлено через 7 минут
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
В принципе - похож на правильный.
Хотя и несколько необычно оформлен.
Задание было таким: нужно создать свое прерывание для вот такого условия
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 00:15
В программе перехватывается прерывание 83h и на негу устанавливается собственный обработчик. Потом вызов обработчика. Потом восстановление таблицы векторов.

Так что задание выполнено.

Правда я не проверял его компиляцией и исполнением.
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 00:23  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Правда я не проверял его компиляцией и исполнением.
Не знаю, как должен выглядеть результат. Первый раз сталкиваюсь с ассемблером
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 00:58
Вы лукавите. На 1-ю лабу не дают таких тем.

Сам по себе данный код ничего не вводит и не выводит. При помощи перехватываемого прерывания проводится какое-то вычисление переменной z. Т.е. действие предполагается наблюдать под отладчиком, выполняя программу по шагам.

Добавлено через 6 минут

Не по теме:

katyatsyganova, мне не хочется терять время поисками источников и написания пояснительного материала на 2-3 листа 4-го формата. Прошу это понять. Но я надеюсь, что у вас есть учебник, методичка в которых вы можете найти ответы на вопросы по устройству процессора intel8086, операционной системе DOS.

У ассемблера нет понятия "видеоуроки". Нужно только читать и разбираться.



Добавлено через 37 секунд
Я могу лишь к вашему коду добавить комментариев.

Добавлено через 2 минуты
Так, стоять. Программа с ошибкой. Сейчас исправлю.

Добавлено через 16 минут
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
dseg segment
    chsl    dw 0204h
    segm    dw ?
    smesh   dw ?
    z       db 0
dseg ends
 
sseg segment stack
    db 100h dup(?)
sseg ends
 
cseg segment use16
assume cs:cseg, ds:dseg, ss:sseg
    ;инициализация сегмента стека программы типа exe
m1: mov ax, dseg
    mov ds, ax
    ;чтение и сохранение исходного вектора прерывания 83h
    ;в переменных segm и smesh
    MOV AX, 3583h
    INT 21h
    MOV segm, ES
    MOV smesh, BX
    ;установка собственного обработчика прерывания 83h
    push ds     ;сохранение важного регистра ds
    MOV AX, 2583h
    MOV BX, CS
    MOV DS, BX
    LEA DX, CS:fu
    INT 21h
    pop ds      ;восстановление регистра ds
    ;тестовый вызов пользовательского обработчика прерывания
    LEA SI, chsl
    INT 83h
    ;восстановление исходного обработчика
    push ds
    MOV AX, 3583h
    MOV DX, smesh
    MOV si, segm
    mov ds, si
    INT 21h
    pop ds
    ;завершения программы
    MOV AH, 4ch
    INT 21h
 
;-----------------------------------------
;процедура нового обработчика прерывания
fu: MOV AX, DS: [SI]
    AND AX, 0000001000000010b
    SUB AX, 0202h
    JZ zj
    MOV DS:z, 1
zj: IRET
cseg ends
end m1
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 01:01  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Вы лукавите. На 1-ю лабу не дают таких тем.
Это вторая лабораторная по ОС, а первая была установить виртуальную машину и установить в нее винду
Я правда впервые столкнулась с таким ассемблером, так как до этого я училась на другой кафедре, а потом моя кафедра не аккредитовалась и нас перевели на кафедру, где все строится на ассемблере, а знаний у меня никаких нет
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 01:10
Могу лишь посочувствовать. Но учить придётся. Если учили хоть какой нибудь C/Pascal/BASIC будет много легче.

Возьмите одну из этих книг и упорно читайте с попытками набора и проверкой. Задавайте вопросы на форуме, сокурсникам. Было бы желание - через 3 недели сможете уверенно выполнять подобные лабы.
Питер Абель. Ассемблер и программирование для IBM PC - она суховатая, но нормальная. я бы назвал "академическая"
Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. - довольно легко читается

В обоих книгах применяется masm старых версий, но вы легко сможете компилировать совместимыми компиляторами tasm и даже masm32 для Windows - хотя результирующие программы будут для DOS.
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 01:25  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
хотя результирующие программы будут для DOS.
А данную программу я могу запустить в dos? или что-то изменить придется?

Добавлено через 1 минуту
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Питер Абель. Ассемблер и программирование для IBM PC - она суховатая, но нормальная. я бы назвал "академическая"
Скэнлон Л. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. - довольно легко читается
Спасибо за рекомендацию. Обязательно буду стараться изучить.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 01:31
Можете в чистом DOS, а можете в виртуальной машине с DOS.
Достаточно удобно программы для DOS запускать не в полноценной виртуалке с DOS, а в специализированной программе эмуляторе DOS - DOSBox. Если лабы будут в DOS, лучше работать именно в DOSBox - самая основная причина - обмен файлами между гостевой ОС и хостом именно для DOS очень затруднён.

Где-то здесь я пояснял, как настраивал DOSBox под себя. Но и в сети много советов.
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 01:45  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
в виртуальной машине с DOS.
У меня почему-то не создается файл с расширением .exe после создания файла с расширением .obj через tlink
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 01:49
А что именно вы делаете (команды)?
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 01:53  [ТС]
TASM>tlink.exe prog1.obj /x
В консоле пишет, что в этой программе встречается 32-х битная запись, поэтому он не может создать
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 01:59
Надеюсь, вы компилируете код из сообщения #7 без изменений. Не добавляя в неё .386.

Добавлено через 3 минуты
Если хотите использовать ряд команд из более поздних процессоров - перенесите строку .386 внутрь сегмента кода - иначе считается, что всё работает в 32-разрядном режиме.
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 02:02  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Не добавляя в неё .386.
Ой. Я ее не удалила из старого кода.
Последний вопрос, как мне понять, что программа работает правильно?
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 02:15
Запустить отладчик TurboDebugger (td.exe) и выполнить программу по шагам. Если всё правильно сделано, то после вызова int 83h в строке 33, значение z должно измениться или нет в зависимости от значения chsl.
Переменные можно смотреть View - Dump. Только вызывайте это окно после выполнения инициализации сегмента данных.

Добавлено через 2 минуты
Если компилировать и компоновать с отладочной информацией, то переменные можно наблюдать в символьном виде, а не как ячейки дампа.
tasm /zi prog.asm
tlink /v prog.obj
0
0 / 0 / 0
Регистрация: 11.09.2016
Сообщений: 39
04.10.2017, 02:32  [ТС]
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
значение z должно измениться
оно не меняется при любых комбинациях
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8655 / 4490 / 1669
Регистрация: 01.02.2015
Сообщений: 13,898
Записей в блоге: 12
04.10.2017, 08:06
Вряд ли. Нужно попробовать компиляцию и пуск с параметром 0202h и с параметром 0001h.
Должно меняться.

Вот прогон в TurboDebugger с двумя разными значениями переменной chsl
Видно изменение переменной z после вызова прерывания
Миниатюры
Создание пользовательского обработчика прерывания определяющего установку единиц в 9-ом и 2-ом битах слова   Создание пользовательского обработчика прерывания определяющего установку единиц в 9-ом и 2-ом битах слова  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.10.2017, 08:06
Помогаю со студенческими работами здесь

Выход из обработчика прерывания
Задача: По прерыванию (нажатие кнопки) нужно покинуть рабочий цикл и передать управление некой подпрограмме. Обработчик прерывания: ...

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

Прерывания в ОСи: прототип функции-обработчика
Как реализовать прерывания на C++. Какой должен быть прототип функции-обработчика. Как делать выход из обработчика. Mожет callback надо...

Выход из цикла в функции обработчика прерывания
Здравствуйте. Понадобилась программа работающая по прерыванию, а именно по приему данных через UART. Пишу в CodeVision AVR. Использую...

Сброс обработчика прерывания из более приоритетного прер-я
Здравствуйте спецы! Столкнулся с задачей, с которой ранее дел не имел и даже не интересовался. Вот в чем суть: выполняется...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru