Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120

Ошибка чтения порта

26.02.2012, 19:55. Показов 3479. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно считать байт с порта, я использую операцию in, и записываю в регистр AL (восьмиразрядный), при указании порта <0FFh (255) запускается, но при вызове операции in вылетает с ошибкой "вызвал исключение класса EPrivilege, привилегированные инструкции". А при указании порта >0FFh говорит, что операнд не соответствует размеру, даже когда меняю регистр на AX или EAX

C++
1
2
3
_asm{
in al,60h
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.02.2012, 19:55
Ответы с готовыми решениями:

Ошибка чтения с диска
Я читаю с диска флоппи следующим кодом, а комп возвращает мне переноса флаг и код ошибки AH=02h. Привожу код: mov ah,020F mov bx,offset...

Ошибка прямого чтения HDD
Написал код: push di mov di, 08000h mov cx, 0E0h ;BPB_RootEntCnt next_item1: ...

Ошибка порта
Здравствуйте, я начинающий, не судите строго, использую в обучении emu8086 assembler, выбивает ошибку для порта 110, хотя в такой же...

8
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
26.02.2012, 20:18
1rop, это будет работать только в real mode, а ты видимо пытаешься запустить в программе под windows. В виндах доступ к портам закрыт, хотя в старых версиях это можно было обойти как то так
1
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
26.02.2012, 21:18  [ТС]
а, ок, с XP понятно, а вот как в семерке дать программе доступ к портам?
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
26.02.2012, 21:21
не могу знать. Семеркой не пользуюсь, предполагаю, что никак(только в эмуляторе)
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
27.02.2012, 01:09
Цитата Сообщение от vital792 Посмотреть сообщение
В виндах доступ к портам закрыт, хотя в старых версиях это можно было обойти как то так
увидел тему и стало интересно. А если использовать такие сишные драйверы/библиотеки
http://www.winfordeng.com/products/portio32/
http://logix4u.net/parallel-po... 982000ntxp
http://winio32.sourceforge.net/
или GiveIO это более низкий уровень? Просто используя эти библиотеки можно добраться до портов из-под windows с учётом написания программ на языке высокого уровня.
1
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
27.02.2012, 07:20  [ТС]
они похоже тоже только не выше XP, я вот думаю с RTX что-нибудь сделать, она имеет возможность разрешать доступ к портам, так как работает на низком уровне, но есть типа драйвера с функциями
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
27.02.2012, 10:58
да нет, не только для ХР. Я знаю несколько программ, которые работают с этими библиотеками на windows 7 (сам пользовался) в частности с portio и winio. Вот только не знаю возможно ли их подключить в asm, но вроде в исходниках есть файлы *.h
1
Ушел с форума
Автор FAQ
 Аватар для Mikl___
16373 / 7685 / 1080
Регистрация: 11.11.2010
Сообщений: 13,759
27.02.2012, 15:23
Лучший ответ Сообщение было отмечено как решение

Решение

_lunar_,
здесь можно использовать несколько способов, примеры можно найти в Сам себе Iczelion на WASM.RU/forum

Доступ к командам In/Out через kernel-mode драйвера
1) scp00 просто переделанный beeper. Содержит внутри outbs, синхронизация через KeStallExecutionProcessor. Вызывается из scp00-00. Неполнофункциональный драйвер
2) scp01 передает управление на фрагмент кода из scp01-00 в котором содержится outsb, синхронизация через предварительный подсчет тиков. Адрес процедуры передается через DeviceIoControl. Полнофункциональный драйвер.
3) scp02 написано на основе r0pc.sys by @L.chemist (Andrey A. Meshkov). передает управление на фрагмент кода из scp02-00 в котором содержится outsb, синхронизация через предварительный подсчет тиков. Адрес процедуры передается через WriteFile("\\.\scp02"). Полнофункциональный драйвер.
4) scp03 передает управление на фрагмент кода из scp03-00 в котором содержится outsb, синхронизация через предварительный подсчет тиков. Адрес процедуры передается через реестр. Недописан...
5) scp?? передает управление на фрагмент кода из scp??-00 в котором содержится outsb, синхронизация через предварительный подсчет тиков. Адрес процедуры подсчитан заранее и передан при создании sys. Недописан...
Доступ к командам In/Out через изменение карты IOPM
6) scp04 написано на основе giveio by Four-F открывает порты IOPM и использует Ke386SetIoAccessMap, Ke386QueryIoAccessMap, Ke386IoSetAccessProcess. ProcessId получает через реестр. Сочетание команд outsb и WinAPI функции Sleep. Неполнофункциональный драйвер.
7) scp05 написано на основе драйвера режима ядра PortTalk 2.0 by Craig Peacock. Открывает порты IOPM и использует Ke386SetIoAccessMap, Ke386QueryIoAccessMap, Ke386IoSetAccessProcess. ProcessId получает через DeviceIoControl. Сочетание команд outsb и WinAPI функции Sleep. Полнофункциональный драйвер.
8) scp06 написано на основе драйвера режима ядра UserPort 2.0 by Tomas Franzon changed to PsSetCreateProcessNotifyRoutin method. адресный диаппазон расширен до 0x7A80 для всех процессов и до 0xFFFF для \\.\scp06 процессов. Выполнение Ke386IoSetAccessProcess, сопровождается вызовом функции ZwYieldExecution, которая форсирует процесс переключения. Сочетание команд outsb и WinAPI функции Sleep. Полнофункциональный драйвер.
9) scp07 написано на основе драйвера режима ядра UserPort 1.0 by Tomas Franzon изменение адреса начала IOPM в TSS расширяет размер TSS до 0x2135. адресный диаппазон расширен до 0x7A80 для всех процессов и до 0xFFFF для \\.\scp07 процессов. Сочетание команд outsb и WinAPI функции Sleep. Для многопроцессорной или гипертрейдинговой машины может вызвать перезагрузку без BSOD. Полнофункциональный драйвер.
10) scp08 написано на основе драйвера режима ядра UserPort 1.1 by Tomas Franzon изменение адреса начала IOPM в TSS расширяет размер TSS до 0x2FFF работает с гипертрейдинговыми и многопроцессорными системами. Полнофункциональный драйвер.
Доступ к командам In/Out через установку user-mode приложению IOPL=3
11) my_directio делает CPL = IOPL из user-mode. Повышаем привелегию SeTcbPrivilege через функцию ZwSetInformationProcess(GetCurrentProces s(), ProcessUserModeIOPL, 0, 0) устанавливает IOPL=3. User-mode приложение, драйвер не нужен.
12) my_directio1 усовершенствованный my_directio. Упростил заполнение структуры TOKEN_PRIVILEGES, избавился от функций GetCurrentProcess и ExitProcess, вызываю функции NtOpenProcessToken, NtAdjustPrivilegesToken, NtSetInformationProcess через int 2Eh. User-mode приложение, драйвер не нужен.
13) scp09 при открытии драйвера через CreateFile("\\.\scp09") получаем адрес процесса через IoGetCurrentProcess. Устанавливаем поле KPROCESS.Iopl равным TRUE, в user-mode приложении создаем и запускаем поток, содержащий команды In/Out, для этого нового потока IOPL обновится, следом, после переключения задач, обновится EFLAGS. Полнофункциональный драйвер.
14) scp10 ProcessId получает через DeviceIoControl, реестр или через WriteFile("\\.\scp10"). Передадим в функцию PsLookupProcessByProcessId полученный идентификатор процесса ProcessId, получаем указатель на KPROCESS. Устанавливаем поле KPROCESS.Iopl равным TRUE, в user-mode приложении создаем и запускаем поток, содержащий команды In/Out. Полнофункциональный драйвер.
15) scp11 в драйвере получаем текущий поток и процесс, функция PsGetContextThread извлекает из стека ядра KTRAP_FRAME и преобразует его в структуру CONTEXT. В поле CONTEXT.ContextFlags устанавливаем флаги IOPL=3 и функция PsSetContextThread копирует переданный CONTEXT в KTRAP_FRAME. В user-mode приложении создаем и запускаем поток, содержащий команды In/Out. Полнофункциональный драйвер.

1rop,
при указании порта https://www.cyberforum.ru/cgi-bin/latex.cgi?\leq 0FFh в командах in/out номер порта можно указывать непосредственно. А при указании порта https://www.cyberforum.ru/cgi-bin/latex.cgi?>0FFh, но https://www.cyberforum.ru/cgi-bin/latex.cgi?\leq 0FFFFh операнд передается через регистр DX учите матчасть
3
0 / 0 / 0
Регистрация: 04.11.2011
Сообщений: 120
27.02.2012, 17:18  [ТС]
Спасибо, буду знать, просто сам изучаю и все тонкости не знаю)

а с драйверами попробую сегодня)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2012, 17:18
Помогаю со студенческими работами здесь

Первичный загрузчик - Ошибка boot о невозможности чтения загрузочного диска
Доброго времени суток. Вобщем дело такое написал на fasm - е &quot;загрузчик&quot; ( copy/paste и немного изменил ), он ничего особенного не...

Драйвер чтения данных из СОМ-порта(Ассемблер)
Доброго времени суток,может завалялся у кого драйвер DOS на ассемблере под COM-порт(без разницы на какой,очень нужна простейшая основа...

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

Оптимизация чтения с COM - порта
И снова здравствуйте, у меня возникла проблема, от которой уже мозги кипят. Разобраться с ней вроде бы не сложно, но у меня уже не...

Функция чтения ком порта
Господа помогите новичку. Необходимо написать функцию чтения строк с ком порта длина которых больше 19. DLL_API DWORD COM_Read( DWORD...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru