Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 98
от 30.03.2005, 12:50

Администратор:Калашников О.А.
В номере:Вопросов: 3, Ответов: 8


Вопрос № 18686: Здрасти! Хочу вывести строку путем прямого отображения в видеобуфер Не понимаю как это сделать. В коде указал смещение строки, которую нужно вывести(DS:SI) В DX координаты. Я так понял что здесь указывается расположение куда надо выве...
Вопрос № 18702: <b>Здравствуйте!</b> Тут возник такой вопрос: Как я могу определить наличие FDD дисковода в компьютере (именно самой железки, а не контроллера в материнской плате) (В Вин2000 через API или через порты вв/выв дисковода), когда в не...
Вопрос № 18708: push cs ; перехватил прерывание 10h(в другом коде), и на его адрес поставил этот код(резид.часть) pop ds ; так вот при выводе строки ерунда выводится, убираешь эти строки(cs=ds) - нормально выводит ... ; похоже комп кинулся в ds, а там с...

Вопрос № 18686
Здрасти!
Хочу вывести строку путем прямого отображения в видеобуфер
Не понимаю как это сделать.
В коде указал смещение строки, которую нужно вывести(DS:SI)
В DX координаты. Я так понял что здесь указывается расположение куда надо вывести строку?
AH - атрибут строки. Цвет что ли?
Затем в AX заношу первый символ строки из DS:SI
И в сегмент видеостраницы ES:DI
И так до последнего символа, пока не встретится нуль.
Что не хватает?
Спасибо.

Приложение:

Отправлен: 24.03.2005, 11:43
Вопрос задал: Guran (статус: Посетитель)
Всего ответов отправлено: 4

Отвечает: Voituk Alexander
Здравствуйте, Guran!
Да все работает. Только в dx - это хрен знает что. Ведь ты сохраняешь по адресу DS:DI и DX совершенно не учавсвует в выводе. Как раз за положение строки на экране отвечает DI. Но значение задается не в виде координат, а его нужно рассчитывать, учитывая,что в строке 80 символов.
Кроме того ты забыл поставить 0 в конце строки
String db 'string,0' - это не правильно
String db 'string',0 - это правильно. Иначе на экран выводится всякий мусор из памяти, пока не встретиться 0.
Ответ отправил: Voituk Alexander (статус: 5-ый класс)
Отправлен: 24.03.2005, 12:03
Оценка за ответ: 4

Отвечает: Евгений Иванов
Здравствуйте, Guran!
не хватает установка видеорежима.
mov ax,3
int 16
Удачи!
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 24.03.2005, 12:11

Отвечает: Boriss
Здравствуйте, Guran!
Таки '0' = 48!!!
Нужно:
String db 'string',0
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 24.03.2005, 12:16
Оценка за ответ: 4

Отвечает: DSota
Здравствуйте, Guran!
1. "Упакованные" координаты указываются в DI, а dx - тут вообще не используеться...
2. Ah - атрибут, то есть "упакованные" цвет фона и цвет символов
3. Не хватает инициализации DS (она же должна указывать на строку)
Если пускать под ВиндовсХР, не хватает настройки видеостраницы...
Кавычка в слове String стоит не на месте...

Приложение:

Ответ отправил: DSota (статус: Студент)
Отправлен: 24.03.2005, 12:28
Оценка за ответ: 5


Вопрос № 18702
Здравствуйте!
Тут возник такой вопрос:
Как я могу определить наличие FDD дисковода в компьютере
(именно самой железки, а не контроллера в материнской плате)
(В Вин2000 через API или через порты вв/выв дисковода),
когда в него не вставлена дискета?
Заранее спасибо за ответ.
Отправлен: 24.03.2005, 16:56
Вопрос задал: DSota (статус: Студент)
Всего ответов отправлено: 1

Отвечает: Илюхин Павел Евгеньевич
Здравствуйте, DSota!
Используйте API GetDriveType:
UINT GetDriveType(
LPCTSTR lpRootPathName // address of root path
);
Value Meaning
0 The drive type cannot be determined.
1 The root directory does not exist.
DRIVE_REMOVABLE The drive can be removed from the drive.
DRIVE_FIXED The disk cannot be removed from the drive.
DRIVE_REMOTE The drive is a remote (network) drive.
DRIVE_CDROM The drive is a CD-ROM drive.
DRIVE_RAMDISK The drive is a RAM disk.
Это из MSDN. А на asme:
;....
LetterA db "A:", 0
...
invoke GetDriveType, addr LetterA
cmp eax, DRIVE_REMOVABLE
je FloppyOn
; Флоппика нет...
FloppyOn:
; Флоппик есть
*******************
Соответсвенно, можно проверить и B: дисковод на присутсивие
Ответ отправил: Илюхин Павел Евгеньевич (статус: 1-ый класс)
Отправлен: 24.03.2005, 23:32
Оценка за ответ: 3
Комментарий оценки:
Именно GetDriveType("A:") говорит только тип устройства, а ничего не проверяет. Попробуй отсоединить шлейф дисковода - включить питание - БИОС скажет, что дисковода нет, а виндовс все равно покажет тип :(((...
Но все равно спасибо!


Вопрос № 18708
push cs ; перехватил прерывание 10h(в другом коде), и на его адрес поставил этот код(резид.часть)
pop ds ; так вот при выводе строки ерунда выводится, убираешь эти строки(cs=ds) - нормально выводит ...
; похоже комп кинулся в ds, а там совсем другая петрушка из cs... ?

Приложение:

Отправлен: 24.03.2005, 19:19
Вопрос задал: Guran (статус: Посетитель)
Всего ответов отправлено: 3

Отвечает: mvp
Здравствуйте, Guran!
Если я правильно понял, то это резидентная часть обработчика, но как вы её тестировали?
А если это обработчик, то вы просто портите содержимое стека обработчика не сохранив предварительно регистры и выходите через int 20h, не восстановив прежний обработчик. Если же это просто пример кода, то зря ругаете push cs pop ds, т. к. вы привели код *.COM, а COM программе, в начале, cs = ds = es. Уточните вопрос
Ответ отправил: mvp (статус: 1-ый класс)
Отправлен: 24.03.2005, 21:20

Отвечает: Евгений Иванов
Здравствуйте, Guran!
стопорится? ;)
если ты применяешь mov al,[si], то необходимо самому изменять адрес, то есть INC SI делай.
удачи!
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 25.03.2005, 00:47

Отвечает: DSota
Здравствуйте, Guran!
1. ds=cs нужно обязательно, похоже не в этих местах дело, а в структуре самого резидента.
2. lodsb эквивалентно mov al,[ds:si];inc si; если поменять, то нужно добавлять "inc si"/
Ответ отправил: DSota (статус: Студент)
Отправлен: 25.03.2005, 08:06


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное