![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Nos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 29.3.2004 Репутация: нет Всего: нет |
Спасибо за содействие и извиняюсь за назойливость, но
void main() { unsigned short Segment,Offset; _asm{ mov ax, 0x35 int 0x21 mov Segment, es mov Offset, bx } } (цытирую Вас из темы C&Assembler) ...так во: компилятор выдаёт что "Offset is declared, but never used" чтоб это могло значить? Я работаю в Borland 5.02 |
|||
|
||||
| DenDen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 25.3.2004 Репутация: нет Всего: нет |
А я говорил,ГОВОРИЛ...(истерический смех, всхлипывания, приезд санитаров)
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Увидел название темы и, мягко говоря, офигел. Как бы нам за такие дела от модератора не досталось...
Значится, в 5.02 я проверить не могу, т.к. у меня там какие-то проблемы с ассемблером. Проверил в версии 3.1. Выдало на строке mov Offset,bx ошибку Expression syntax. Заменил Offset на Offs и всё заработало Видать не ндравиться компилятору такое имя переменной. З.Ы. Оно-то заработало, только у меня в WinXP выдаёт: "Процессор NTVDM обнаружил недопустимую операцию". Это сообщение отредактировал(а) Дрон - 7.4.2004, 18:35 -------------------- Да. Именно так. |
|||
|
||||
| DenDen |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 84 Регистрация: 25.3.2004 Репутация: нет Всего: нет |
Кстати, а компилер по шапке не надает, что ты в байт слово записываешь?
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
DenDen
Надаёт, конечно! Только short -- это вообще-то 16 бит, т.е. это и есть слово. А ты всё хочешь у меня обшибку найти? -------------------- Да. Именно так. |
|||
|
||||
| Nos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 29.3.2004 Репутация: нет Всего: нет |
Я надеюсь модератор нас простит... это во-первых.
Во-вторых: я эту Б... таки заставил засунуть свои ошибки себе в Ж... поменяв имена переменных (до перепрочтения форума), но за то что Вы не забили на эту пакость опять таки - спасибо! Ну и в третих: (тут нужно немного истории) в целях, так сказать образования, заставили меня из таблицы параметров харда (HDTP) узнать его ёмкость... Вроде не сложно: цылиндры, сектора, головки... перемножили - получили, НО... пишу я гибрит Си а Ассемблера, с прерываниями работаю на Ассме, на нём же присваиваю содержимое регистров каким-то переменным... перемножаю я эти переменные и вывожу на экран в Си... и вот тут начинается кака - какие-то бешенные значения вылазят, особенно кол-во головок... Так вот, вопрос: в какой системе счисления записана инфа в регистрах, как правильно её перемножить силами Си, и соответсвенно коректно выдать на экран? Прога выглядит так: #include <iostream.h> void main() { unsigned int cyl; unsigned int head; unsigned int sec; unsigned int tot; asm mov ax, 0x3541; asm int 0x21; asm mov ax, es:[bx+0]; asm mov cyl, ax; asm mov ax, es:[bx+0x2]; asm mov head, ax; asm mov ax, es:[bx+0xE]; asm mov sec, ax; tot=cyl*sec*head*512; cout << "Cylinders = "<< cyl; cout << "Heads = " << head; cout << "Sectors = " << sec; cout << "Total = " << tot; } писал на Билдере 3.1 Будте добры любезны! |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Боюсь, что тут я ничего не помогу -- не знаю я функций DOS совсем
Могу только подсказать, что в строке: tot=cyl*sec*head*512; у тебя скорее всего получится чушь, т.к. результат умножений не уложится в 16-битный int, так что лучше объяви эту переменную (в смысле tot) как unsigned long. В остальном же я ошибок не вижу... -------------------- Да. Именно так. |
|||
|
||||
| Anklav |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 9.12.2003 Где: Менск Репутация: нет Всего: 1 |
Я могу ошибаться, но помоему размер диска для DOS - не больше 8,4Гб. А т. к. 21h - это DOS прирывание, то и получается что-то непонятное |
|||
|
||||
| Nos |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 29.3.2004 Репутация: нет Всего: нет |
Оно-то ограничено, вот только я 35-й функцией обращаюсь к 41-у прерыванию (или что-то в этом роде)... короче суть в том, что я получаю доступ к таблице HDTP, которую формирует сам контролер, а ему до ком-порта ограничения... (я так думаю)
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |