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

Ассемблер? Это просто! Учимся программировать (FAQ)


Служба Рассылок Subscribe.Ru проекта Citycat.Ru

Ассемблер? Это просто! Учимся программировать (FAQ)
______________________________________

Выпуск N 037

Вопросы, которые поступили от подписчиков рассылки
"Ассемблер? Это просто! Учимся программировать"

Дата выхода: 2001-07-15


Вопрос №325

Здравствуйте!
Может кто-нибудь располагает доступной литературой о принципах графического вывода на экран в мониторах VGA+.
Уже не очень хочется выводить все в режиме 80х25 строк. Хотя бы иметь представление о режиме 640х480 (16 цветов), который по-умолчанию поддерживает любой видеоадаптер.
Нужна также возможно более полная информация о новых командах процессоров Pentium и о командах математического сопроцессора.
Если кто-нибудь располагает литературой или даст полезную ссылку, то буду очень признателен.
С уважением
Юрий.

Ответ

Здравствуйте, Юрий!
Ну, если хочешь поищи в реале книжку №21 серии БСП - Библиотека системного программиста. А.В. Фролов, Г.В. Фролов "Программирование видеоадаптеров", Москва изд-во "Диалог-Мифи", 1995. У них же была книга "Программирование видеоадаптеров CGA, EGA, VGA", которая бесплатно доступна на их страничке www.frolov.pp.ru
А первую названную книгу можно попытаться купить во всяких интернетовских магазинах - из реальных она давно исчезла, даже в Москве.


Отправил эксперт: Александр
Эксперт отправил ответов (всего): 55

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №297

Я сейчас нахожусь на 8-9 уроке и решил написать програмку, но она почему-то не работает. Я её высылаю и прошу многоуважаемых экспертов росмотреть её и сказать в чём моя ошибка, сам не могу понять. Вкратце о ней (как я хотел бы чтобы она работала): читает файл C:/AUTOEXEC.BAT в буфер (в конец программы), а затем загружает содержимое этого файла в видеобуфер. Вот и всё. Ошибку выдаёт вроде на строку
Mov AX, DS:[DX]. Просьба выслать мне ответ.

Программа:
CSeg Segment
Assume CS:CSeg, DS: CSeg, SS:CSeg
Org 100h
Begin:
Mov AX, 3D02h
Mov DX, Offset FileName
Int 21h
Jc ErrorF
Mov AH, 09h
Mov DX, Offset OKey
Int 21h
Mov Handle, AX
Mov BX, AX
Mov AH, 3Fh
Mov CX, 2000
Mov DX, Offset Finish
Int 21h
Mov AH, 3Eh
Mov BX, Handle
Int 21h
Mov DX, Offset Finish
Mov AX, 0B800h
Mov ES, AX
Mov DI, 0
Mov CX, 2000
L1:
Mov AX, DS:[DX]
Mov ES:[DI], AX
Inc DX
Add DI, 2
Loop L1
EndBegin:
Mov AH, 10h
Int 16h
Int 20h
ErrorF:
Mov AH, 09h
Mov DX, Offset Error_Mes
Int 21h
Jmp EndBegin
Handle dw 0
Error_Mes db 'Cant open',0
FileName db 'c:\autoexec.bat',0,'$'
OKey db 'Ok!$'
Finish equ $
CSeg Ends
End Begin

Ответ

Здравствуйте, StThrash!

Вообще-то, возможность использовать регистры EAX,ECX,EDX для адресации
появилась только в i80386+ :(. Либо пиши ...[EDX], либо меняй DX на
BX/BP/SI/DI/SP (SP не рекомендуется).

PS: Такова суровая правда жизни... ;)


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 23

Экспертная группа: Оптимизация программ

Вопрос №315

привет

можно узнать насчёт softice? под вин милленниум. я
прописываю его в реестр на автозагрузку вместе с виндами, и
вылетает окошко (при загрузке винд) "the enhanced windows
386 is already running". в чём дело? извиняюсь, но больше не
у кого спросить. как заставить его работать?

quaker

Ответ

Здравствуйте, quaker!
SoftIce грузится из autoxexc.bat _до_ виндов.
Соответственно у тебя он сам на себя и натыкается.
Лучше его просто установить, и все.
А потом научится с ним работать.


Отправил эксперт: PavelAT
Эксперт отправил ответов (всего): 8

Экспертная группа: Пользовательская работа с Windows

Вопрос №321

Уважаемый эксперт!
У меня установлены две ОС WinME и Win200Pro после их установки появилось начальное меню загрузки (выбора ОС),вопросс такой - как в это меню добавить пункт для загрузки ДОС. Меню находится в файле Boot.ini(прилагается).

Ответ

Здравствуйте, Владимир!
Вот если кто скажет, как в МЕ загрузится с ДОС в чистом виде, то он и будет ДОС'ом.


Отправил эксперт: PavelAT
Эксперт отправил ответов (всего): 9

Экспертная группа: Пользовательская работа с Windows

Вопрос №324

Здравствуйте!
Я собираюсь покупать новый комп. И вот передо мной встали две проблемы: какой проц взять и какую видюху.
Проц: Либо AMD DURON 800 либо Celeron 500 либо AMD ATHLON 700, что посоветуее господа эксперты, если можно поподробнее.
Видео: Я сам в них мало разбираюсь. Так что посоветуйте, что взять, желательно подешевле, но это не значит похуже и т.п.
Комп нужен для игр+работы в инете+программирования (Delphi,Pascal, Asm)+работа с графикой, звуком (Офисные приложения).

Ответ

Здравствуйте, Сергей!
Ну я бы взял или Дюрон, или Атлон. И разогнал.
Видео - ну типа даже не знаю. Сам думаю.
Для видео - лущше ATI Radeon.
А если совсем не дорого - TNT2 Ultra 32 Mb
Еще не совсем устарела.
Ну для игр - GeForce. Но какой - не скажу. Сам не знаю.
Гдето так.


Отправил эксперт: PavelAT
Эксперт отправил ответов (всего): 10

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №313

Здравствуйте!
Хотелось бы узнать, как мне свернуть окно программы в
область экрана, где находятся часы, раскладка
клавиатуры, Norton Antivirus и т.д.
----------------------
С уважением Алексей

Ответ

Здравствуйте, Алексей!

Используй Shell_NotifyIcon. Называется эта область - трэй (tray).


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 25

Экспертная группа: Общие вопросы по программированию на Ассемблере под Win32

Вопрос №329

Подскажите откуда можно скачать SOFTICE?

Ответ

Здравствуйте, Alex!
Не самая свежая, но вполне рабочая версия (я ей пользуюсь и нормально) лижит на http://www.dore.ru/files/debuggers/index.shtml, и вообще это хороший ресурс.


Отправил эксперт: Vasis
Эксперт отправил ответов (всего): 5

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №333

вот она прога (запрещает удаление файлов с указанного в командной строке диска, например "dp c:") работает (в досе токо). (еще бы, взята из сами знаете какой книги). все ясно и понятно, кроме, разумеется одного:

mov bx,dx ; это понятно
cmp byte ptr ds:[bx+1],':' ; вот что это такое???

я вообще не пойму, чему равен dx должен быть в этом месте во второй проход (в первый понятно - смещение НАШЕГО обработчика 21 прерывания). каким боком dx вообще может както указывать на это двоеточие?
вообще неясно как прога сверяет совпадают диски или нет...

P.S. да и кстати до кучи - or word ptr [bp+6],1
вот это нахрена? зачем что то мутить с флагом переноса?

И на этот раз последнее: почему в виндах ни один резидент (ясно что из тех, которые добавляю я) не висит в памяти (в досе все ОК)?
чтоб сильно не мучались, Зубков, издание второе, стр.256-258

Ответ

Здравствуйте, George Stobbart!

Во-первых, при вызове функции ДОС "Удалить Файл" в регистрах DS:DX
передаётся указатель на строку с именем файла (А вы не знали??
Книгу надо было лучше читать!).

Во-вторых, функции ДОС возвращают CF=0, если нет ошибки, и CF=1,
если произошла ошибка!!!

PS: Смотри стр. 187, функция DOS 41h: Удаление файла!!!

PS: А почему это резидент не висит в памяти в MUSTDIE??? Кто Вам сказал
такую чушь??
Просто Windows работает в защищённом режиме и обрабатывает все прерывания
в обход обработчиков реального режима (прочитайте в той-же книге
про программирование в защищённом режиме и в режиме V86). Поэтому
эта программа там и не работает :(

А если уж Вам так хочется, чтобы программа была в памяти постоянно
и не выгружалась оттуда при закрытии сеанса MS-DOS, пропишите её
в AUTOEXEC.BAT.


Отправил эксперт: Nik
Эксперт отправил ответов (всего): 26

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №331

Где можно скачать справочник по API-функциям для Windows 9x,
упакованом в одном файле типа *.hlp *.pdf *.rar и т.д.
(можно на английском но лучше на русском)

Ответ

Здравствуйте, Ser!
Размер Win32.hlp 8.1mb, А взять его можно например здесь.
Но этот файл можно достать установив любой пакет по програмированию (C, Delphi и т.д.)
Также вот здесь есть online справочник по Win32.


Отправил эксперт: Andy Bitoff (http://bitoff.pisem.net - HomePage)
Эксперт отправил ответов (всего): 7

Экспертная группа: Общие вопросы по программированию на Ассемблере под Win32

Вопрос №244

Привет экспертам!
Написал программу, в которой заменена команда ret на pop ip (решил приколоться).
Прогу прилагаю.
А оказывается ассемблер не знает о существовании этого регистра (или знает?).
Пишет ошибку A2006 - необъявленный идентификатор.
Вопрос:
Если Асм на самом деле не знает о существовании регистра ip, то как его "заставить" узнать о нем? Или это невозможно?
Спасибо.
До скорого общения.
DZ_Zero-Q
dz_zero-q@mail.ru
ЗЫ. Командная строка masm pop_ip,,
link /t pop_ip
Естестна ком формат.
И еще вопросик:
В чем разница между ml.exe и mlx.exe (версия MASM 6.0)

Ответ

Здравствуйте, DZ_Zero-Q
Регистр IP может быть и есть (если он вообще существует физически), но запись в него невозможна. Для его изменения служат разные jmp.


Отправил эксперт: Kulachatov (http://kulachatov.i-am.ru - Коллекция разработок автора)
Эксперт отправил ответов (всего): 4

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №243

Эксперты!
Вопрос1. INT10 ah=0c. Тут ясно, вывод точки, а вот
значеня пиксела AL= , что означают? И какими они могут быть?
Вопрос2. Можно ли подпрограммно высчитать время выполнения
основной исполняемой программы и вывести на экран в секундах?
Спасибо.

Ответ

Здравствуйте, Oleg!
У меня нет дома Интернета, поэтому не могу обратится к имеющимся дома Help'ам. Но могу предполжить, что в AL метод наложения (XOR, OR...)
В MASM справке подробно описаны все прерывания.


Отправил эксперт: Kulachatov (http://kulachatov.i-am.ru - Коллекция разработок автора)
Эксперт отправил ответов (всего): 5

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №255

Здравствуйте эксперты !!!
Хочу спросить, может кто объяснит почему файл содержащий один символ весит 1 БАЙТ, а ведь его ИМЯ, АТРИБУТЫ, ВРЕМЯ СОЗДАНИЯ... тоже где-то храняться, и под них наверное тоже место отводится ?

С Благодарностью
Сергей.

Ответ

Здравствуйте, Serzh!
Вся дополнительная информация о файле находится в каталоге (в котором находится этот файл), который тоже является файлом (кроме корневого) с атрибутом "каталог".


Отправил эксперт: Kulachatov (http://kulachatov.i-am.ru - Коллекция разработок автора)
Эксперт отправил ответов (всего): 7

Экспертная группа: Пользовательская работа c DOS

Вопрос №326

Здравствуйте Эксперты!
Подскажите пожалуйста как вывести на экран содержимое кокого-либо регистра? И как сделать так чтобы выводил в разных системах счисления?

Ответ

Здравствуйте, Sirius!

Речь пойдет о Intel-совместимых платформах.
В теле программы это сделать очень просто. Проще вывести значение параметра в системе до десятичной включительно. В одиннадцатиричной и далее системах - посложней. По другому алгоритму выводятся числа в системах с основанием степени двойки - например, шестнадцатиричная или восьмиричная система - в них можно оперировать группами бит.
Предлагаю варианты кода:

;вывод значения регистра al на экран в десятичной системе
mov al, xx ;al=число (не большее 99 или 63h)
mov bl, 10
div bl ;делим на 10, al=частное, ah=остаток
add ax, 3030h ;корректировка ASCII (30h='0')
push ax ;сохранение ax в стеке
mov ah, 0Eh ;Int 10h, func=0Eh, вывод на экран в режиме телетайпа
int 10h
pop ax ;восстановление регистра ax из стека
mov al, ah
mov ah, 0Eh
int 10h

Для чисел большего значения операцию деления на десять нужно повторить несколько раз. Для этого удобно организовать цикл, с записью каждой цифры в строку в обратном порядке. Эту строку потом можно вывести через, например, StdOut (Int 21h, func=09). Для других систем счисления делить нужно соответственно не на 10, а на другое число.

;вывод значения регистра bx на экран в шестнадцатиричной системе
mov bx, xxxx ;ax=число
mov cl, 4
mov dl, 4 ;счетчик оставшихся цифр
loc_1:
rol bx, cl ;вращение влево (в правых 4 битах получаем значение следующей по старшинству цифры числа)
mov al, bl
and al, 00001111b ;остаются только младшие 4 бита
cmp al, 9 ;корректировка ASCII (30h='0', 37h='A')
jbe loc_2
add al, 7
loc_2:
add al, 30h
mov ah, 0Eh ;Int 10h, func=0Eh, вывод на экран в режиме телетайпа
int 10h
dec dl
jnz loc_1

Т.о. каждый байт числа (в нашем случае регистра) содержит две шестнадцатиричные цифры. Для вывода больших чисел нужно разбить их на четверки бит, к каждой четверке взависимости от ее значения добавить еще 30h или 37h, и вывести на экран. Этот способ можно применить и для восьмиричной системы, только нужно рассматривать уже не четверки бит, а тройки, и нужно упростить корректировку ASCII (как в первом примере).


Отправил эксперт: Alon
Эксперт отправил ответов (всего): 1

Экспертная группа: Общие вопросы по программированию на Ассемблере под DOS

Вопрос №335

Есть вопрос к уважаемым экспертам.
Имеем два компа. На расстоянии 70-80 метров
друг от друга. Один комп имеет соединение с интернетом,
второй нет. Как лучше их объединить в сеть, и можно ли со второго компа(не имеющего выход в инет) включать первый и соединяться с интернетом.Как это осуществить? Какие
сетевые карты лучше подходят для такого расстояния?
Какой кабель? И.т.д...
Спасибо за подробный(!) ответ.

Ответ

Здравствуйте, Oleg!
Если дальнейшее расширение сети не предпологается, то можно сделать сеть на каоксиальном кабеле, по форме такой же как и телевизионный, но имеет сопротивление 50 Ом, "по научному" такие кабели называются BNC. Можно использовать и витую пару UTP, однако для использования ее без хаба разводку надо немного поменять, такой информации много в сети. Эти кабели боле гибкие. Насчет удаленного включения компа: такое возможно только если это поддерживает сетевуха и BIOS удаленного компа. Расстоянее это не очень большое, поэтому репитеров, которые усиливают сигнал не надо, но лучше не переламовать провода и быть как можно более аккуратным, также на таких расстояниях может увиличиваться "эхо", поэтому лучше прокладывать провод подальше от электромагнитных полей, или лучше изолировать. Сетевуху я бы посоветовал на 100 Mbit, причем и с UTP и с BNC разъемом, желательно 3COM. Если этой информации мало или хочешь узнать еще что-нибудь, пиши на expert01@inbox! .ru


Отправил эксперт: Vasis
Эксперт отправил ответов (всего): 6

Экспертная группа: Модели, виды и типы компьютеров (hard)

Вопрос №336

Добрый день Vasis.
Вдогонку - еще такой вопрос, можно ли в этой сети из 2-х компов, управлять тем компом, что подключен к инету, имеется ввиду запускать программы, получать и отправлять почту, и.т.д. Принимаем, что он включен постоянно.
Как это делается? Я же не вижу на удаленном компе стартменю и десктоп.Я вижу только диски.
Спасибо.

Ответ

Здравствуйте еще раз, Олег!
Есть программы удаленного управления компом (что-то типа троянов), хотя бы BackOffice 2000, правда антивирусы его принимают за троян, но он был разработан для удаленного управдения, есть такие программы и показывающие десктоп, но для запуска программ это не надо, причем, если ты собираешься сидеть с компа без прямого подключения в инет, то есть через другой комп, то просто ставится но комп с инетом прокси сервер, в настройках твоей почтовой программы устанавливается IP адрес компа с инетом и порт, установленный при установке (уже товтология) провси сервера, то есть ты будешь сидеть в сети через свой комп, пример программы: WinProxy, это подходит для начинающих и маленьких сетей, тебе подойдет, но есть и более продвинутые прокси. Пиши если есть вопросы, всегда рад ответить.


Отправил эксперт: Vasis
Эксперт отправил ответов (всего): 7

Экспертная группа: Модели, виды и типы компьютеров (hard)

Подписаться на рассылки

Рассылки Subscribe.Ru
Ассемблер? Это просто! Учимся программировать
Ассемблер? Это просто! Учимся программировать (FAQ)

Форма подачи вопроса

ВНИМАНИЕ!!! Пожалуйста, НЕ высылайте один вопрос сразу нескольким подгруппам! Если Вы сомневаетесь, какой подгруппе следует отправить вопрос, то направляйте его в обычном текстовом виде по адресу Experts@Kalashnikoff.ru. Вопрос будет выслан соответствующей подгруппе с некоторой задержкой (от 1 до 3-х суток).
Дополнения к вопросам, на которые эксперт уже ответил НЕ следует направлять ведущему рассылки (я не успеваю!). Просто скомбинируйте первый вопрос и дополнение к нему, а затем заново отправьте его, используя приведенную ниже форму!

Нажимайте кнопку "Отправить" только ОДИН раз и дождитесь полной загрузки страницы, иначе вопрос будет продублирован!


Ваше имя *:

Ваш e-mail *:

Подгруппы:

Вопрос *:

Прилагаемая программа (если необходимо):


Регистрация в качестве эксперта

Архив выпусков


Ведущий рассылки,

Калашников Олег: Assembler@Kalashnikoff.ru
ICQ No.:
68951340
URL сайта подписчиков: http://www.Kalashnikoff.ru

______________

По вопросам сотрудничества, рекламы и спонсорства обращайтесь:

  1. Публичное размещение материала из рассылки: Cooperation@Kalashnikoff.ru
  2. Реклама на сайте, в книге и рассылках: http://www.Kalashnikoff.ru/Reklama.html, Reklama@Kalashnikoff.ru
  3. Издание книги (спонсорство): Sponsor@Kalashnikoff.ru

Рассылка 'Ассемблер? Это просто! Учимся программировать (FAQ)' Рассылка 'Ассемблер? Это просто! Учимся программировать'


(C) Москва, 2001. Авторское право принадлежит Калашникову О.А. Публичное размещение материала из рассылки, а также его использование полностью или частично в коммерческих или иных подобных целях без письменного согласия автора влечет ответственность за нарушение авторских прав.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться Рейтингуется SpyLog

В избранное