_asm{
mov ax,0x0B103 // найти устройство PCI заданного класса
mov si,0 // индекс (порядковый номер) устройства
mov cx, clas
push cx
mov ch, subclas
mov cl, interface
push cx
db 0x66,0x59 // получаем так сказать ECX
int 0x1A // выполняем прерывание
mov b_h,bh // читаем
mov b_l,bl // данные
mov a_h,ah // в
mov s_i,si // переменные
}
MS V C++ 2010 - Синтаксическая ошибка во встроенном коде на ассемблере
Редактирую исходник программки на MS Visual С++ с ассемблерными вставками.
Программа изначально была написана вроде под Борланд С++, но его у меня нет. По этому переделываю под MS Visual C++. Все ошибки устранил, но одну побороть не могу.
А именно:
Код:
Ругается на: db 0x66,0x59
Ошибка: error C2400: синтаксическая ошибка во встроенном коде на языке ассемблера в "код операции"; обнаружено "constant"
Программу писал не я. Надеюсь на вашу помощь. Спасибо!
это pop cx
Как правильно записать в VC++ ? Чтобы не ругалось.
хотя не уверен ..
С компилировалось, но под win 7 результат не запускается... х(
А эта прога случайно не под дос была раньше?
Пойду гуглить...
У доса ж прерывания другие. Естественно, что инструкции вида int ... у вас работают некорректно.
Подскажите, что сделать то? Чтобы программа заработала :)
Цитата:
INT 1A - PCI BIOS v2.0c+ - FIND PCI CLASS CODE
AX = B103h
ECX = class code (see also #F0085,#00878)
bits 31-24 unused
bits 23-16 class
bits 15-8 subclass
bits 7-0 programming interface
SI = device index (0-n)
Return: CF clear if successful
CF set on error
AH = status (00h,86h) (see #00729)
00h successful
BH = bus number
BL = device/function number (bits 7-3 device, bits 2-0 func)
86h device not found
EAX, EBX, ECX, and EDX may be modified
all other flags (except IF) may be modified
Notes: this function may require up to 1024 byte of stack; it will not enable
interrupts if they were disabled before making the call
the meanings of BL and BH on return were exchanged between the initial
drafts of the specification and final implementation
all devices sharing the same Class Code may be enumerated by
incrementing SI from 0 until error 86h is returned
AX = B103h
ECX = class code (see also #F0085,#00878)
bits 31-24 unused
bits 23-16 class
bits 15-8 subclass
bits 7-0 programming interface
SI = device index (0-n)
Return: CF clear if successful
CF set on error
AH = status (00h,86h) (see #00729)
00h successful
BH = bus number
BL = device/function number (bits 7-3 device, bits 2-0 func)
86h device not found
EAX, EBX, ECX, and EDX may be modified
all other flags (except IF) may be modified
Notes: this function may require up to 1024 byte of stack; it will not enable
interrupts if they were disabled before making the call
the meanings of BL and BH on return were exchanged between the initial
drafts of the specification and final implementation
all devices sharing the same Class Code may be enumerated by
incrementing SI from 0 until error 86h is returned
наверное, нужно будет делать драйвер.
Программка для сканирования подключенных устройств.
Всем спасибо, буду разбираться с Борландом... х(
ты можешь написать драйвер, который разрешит использование прерываний, если никто не напишет, как можно вызвать 1Ah из ring 3.
Цитата: xiwnik
Всем спасибо, буду разбираться с Борландом... х(
Мальчик/Девочка (RM/PM) - какая разница.
Вы лучше обозначте то, что вам надо.
Код написан на Борланд С++, на VS C++ не компилируется, хотя я и исправил все, вроде как правильно.
т.е. на экран должно вывести какие устройства подключены к ПК.
Цитата: xiwnik
Сканер PCI шины, есть исходник, рабочий, но он не компилируется...
Код написан на Борланд С++, на VS C++ не компилируется, хотя я и исправил все, вроде как правильно.
т.е. на экран должно вывести какие устройства подключены к ПК.
Код написан на Борланд С++, на VS C++ не компилируется, хотя я и исправил все, вроде как правильно.
т.е. на экран должно вывести какие устройства подключены к ПК.
Это вам надо сделать под какую платформу Windows али DOS?
PS: А работать ваша программа будет только в ДОСе, причем откомпилированная для него же, VS C++ компилирует как бы для Windows.
Тогда чем откомпилировать код, для ДОСа? Подскажите плз.
Цитата: xiwnik
Тогда чем откомпилировать код, для ДОСа? Подскажите плз.
Каким-нибудь Borland C++ 3.1
зачем компилировать под дос, если запускаться будет в винде?
Единственно, не показывает устройства.
Цитата: xiwnik
С компилировалось, запускается и вроде работает. Спасибо!
Единственно, не показывает устройства.
Единственно, не показывает устройства.
Вопрос все тот же, про мальчика с девочкой. Где вы ее запускаете в DOSе или в Windows'е?
mov _ah,ah // если в ah 0 то идем дальше, иначе вывод сообщения PCI Bios disabled
Запускал программу через DOSBox 0.74, результат точно такой же.
Цитата: Ramon
работать ваша программа будет только в ДОСе.
В чистом ДОСе.
PS: Возвращаемся к условию задачи?
Тогда подскажите плз, как мне ее в чистом ДОСе запустить? :)
PS: В итоге, я бы Вам всеже рекомендовал огласить условия задачи и контекст в котором данная задача выполняется.
Запустил из под ДОСа, работает! Спасибо за советы!