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

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


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

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

Выпуск N 069

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

Дата выхода: 2001-08-24


Вопрос №618

Уважаемые эксперты, здравствуйте!

Помогите чайнику, возник литл проблем такого рода: качнул по нету архив выпусков FAQ и напоролся на специфическое содержание архива.
До распаковки в архиве сидит файл si325.pdf, определенный виндузой как графический файл (ACDSee). При распаковке признается уже как текстовый (лэйба не знакома). Пока открыть известными способами не смог.
Может проблема в Rar'e (условная бесплатность кончилась) или наши сетевики пошутили (ситуация с архивами повторяется не первый раз)?
Заранее благодарен.
Александр.

Ответ

Здравствуйте, Александр!
pdf открывается Adobe Acrobat Reader'ом. И никакие текстовые или графические приложения его не откроют (я, во всяком случае, не встречал)


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

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

Вопрос №621

Я разбираю программу из 15-го выпуска и не могу понять следующую команду:
xor cs:Num_status,1
Причем тут 'cs:'?

Ответ

Здравствуйте, Wolf!
Дело в том, что при входе в прерывание, ds(к нему идет обращение по умолчанию) может содержать любое значение. Нам же нужно получить доступ к нашему сохраненному сегменту(там находится Num_status), а его значение будет содержаться в cs.

С уважением, Basfer.


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

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

Вопрос №610

Уважаемые эксперты! :-)

После изучения 010 рассылки у меня возник такой вопрос:
ЧТО делает 35h-ая функция?
Если она действительно возвращает значение вектора
прерывания,указанного в AL :-) , тогда почему :
1)в 0000:[AL*4] абсолютно не тот адрес
2)и вот этот кусок программы не выводит My_String

mov ah,35h
mov al,21h
int 21h
mov ah,9
mov dx,offset My_String
call es:bx

Заранее спасибо!

Ответ

Здравствуйте, elron!
1. В действительности для 21h прерывания функция возвращает адрес некоего обработчика, который совершает подготовку перед выполнением прерывания, затем выполняет прерывание(причем его вектор соответствует адресу в 0000:4*al), а затем выполняет некоторые действия после выполнения этого прерывания. Однако действует это толбко для 21h прерывания. В остальных случаях, по-моему, она возвращает исходный вектор.
2. См. программу.

С уважением, Basfer.

Приложение:


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

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

Вопрос №621

Я разбираю программу из 15-го выпуска и не могу понять следующую команду:
xor cs:Num_status,1
Причем тут 'cs:'?

Ответ

Здравствуйте, Wolf!
НАДО БЫЛО ЛУЧШЕ ЧИТАТЬ ПРЕДЫДУЩИЕ ВЫПУСКИ!!!!!!!!!
cs - сегментный регистр
Num_status - адрес в памяти
cs:Num_status - смещение в памяти указывающее на начало переменной Num_status
Чтобы стало совсем понятно почотай про сегментацию - сегментный регистры и способы сегментации!


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

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

Вопрос №624

УВАЖАЕМЫЕ ЭКСПЕРТЫ!
Помогите, пожалуйста. Понимаю, вопрос не в тему,но крайне важный для меня. Я случайно удалил каталог своей
научной проги, над которой, страшно сказать, работал не один год.
КАК ЕГО ВОССТАНОВИТЬ???
Где скачать программу, и какую? Если кто знает, помогите,
и если можно, изложите подробнее.
Заранее благодарен, Николай.

Ответ

Здравствуйте, Николай!
Попробуйте использовать Norton Disk Doctor aka NDD (входит в Norton Utilites). Это поможет только в том случае если на диск после удаления ничего не записывалось и то с вероятностью 50/50.


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

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

Вопрос №618

Уважаемые эксперты, здравствуйте!

Помогите чайнику, возник литл проблем такого рода: качнул по нету архив выпусков FAQ и напоролся на специфическое содержание архива.
До распаковки в архиве сидит файл si325.pdf, определенный виндузой как графический файл (ACDSee). При распаковке признается уже как текстовый (лэйба не знакома). Пока открыть известными способами не смог.
Может проблема в Rar'e (условная бесплатность кончилась) или наши сетевики пошутили (ситуация с архивами повторяется не первый раз)?
Заранее благодарен.
Александр.

Ответ

Здравствуйте, Александр!
PDF-файлы надо открывать с помощью Adobe Acrobat Reader!


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

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

Вопрос №620

Здравствуйте уважаемые Эксперты !
Во-первых, хочу поблагодарить за уже оказанную помощь в освоении ассемблера. Дела пошли на лад. Ну а во-вторых - еще один вопросик появился, может поможете? Итак:

var dd 0h

mov ax,0FFFFh ;берем 65535
mov bx,5h ;допустим 5...
add ax,bx ;тут переполнение, насчет флагов в курсе
но не проверяем - и так ясно
mov word ptr var,ax
mov word ptr var+2,1h

в var получается 10004h что соответствует 65540. но кажется мне что это не самое лучшее решение. поделитесь пожалуйста своими вариантами. Заранее благодарен.

Ответ

Здравствуйте, Диман!
Ты прав это не самое лучшее решение, так как есть такая команда ADC, которая при переполнении прибавляет единицу, короче смотри:
mov ax,0ffffh
mov bx,5
xor cx,cx
add ax,bx
adc cx,0
Теперь CX:AX = 0001 0004h.


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

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

Вопрос №612

Уважаемые эксперты и все остальные!!!
Меня интересует, есть ли среди вас кто-либо, кто прочитал все выпуски рассылки(не фак) и все понял, разобрался и:
НАПИСАЛ ОБОЛОЧКУ И СВОЙ ВИРУС И РЕЗИДЕНТ!!!
Мне кажется автор "немного" распыляется - три разные по функциональному назначению проги(ну ну есть конечно сходства...) И мне, например, довольно тяжело переключаться с одной на другую(я изучаю 3 недели).
И самое главное!!!
Эксперты!!! давайте (кажется и другие будут не против)нам "ламерам" задания - сначала простенькие. Если будут совсем простые - мы вам напишем. Ато у меня, например фантазии не хватает придумать -что бы такое сделать, чтобы и интересно и полезно!!!!!!
С уважением.....

Ответ

Здравствуйте, Дмитрий!

По поводу заданий... неужели у вас нет своих мыслей???
помню когда изучал ассемблер сам (нас было несколько друзей) придумывали всякую фигню разную... :))

Помню - оптимизатор текстовых файлов... байт 120 где-то занимал... пробелы в табы конвертил и конечные пробелы и табы обрезал... :)

Помню еще сам писал чат для ipx... 1400 байт... :))

А помню еще хотел 2,5D action сделать, но дальше простенького движка не пошел... 17 кил, из них 14 - тригонометрические таблицы. :)) прикольно. :))

Выдвигайте свои идеи... идей же много... а мы, как эксперты - поможем.


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 71

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

Вопрос №620

Здравствуйте уважаемые Эксперты !
Во-первых, хочу поблагодарить за уже оказанную помощь в освоении ассемблера. Дела пошли на лад. Ну а во-вторых - еще один вопросик появился, может поможете? Итак:

var dd 0h

mov ax,0FFFFh ;берем 65535
mov bx,5h ;допустим 5...
add ax,bx ;тут переполнение, насчет флагов в курсе
но не проверяем - и так ясно
mov word ptr var,ax
mov word ptr var+2,1h

в var получается 10004h что соответствует 65540. но кажется мне что это не самое лучшее решение. поделитесь пожалуйста своими вариантами. Заранее благодарен.

Ответ

Здравствуйте, Диман!

Если тебе надо учесть переполнение, ты можешь использовать команду adc... типа вот так:

mov ax, 0xffff
mov dx, 0
mov bx, 5
add ax, bx
adc dx, 0

mov Var, ax
mov Var+2, dx

Это будет корректно работать с любыми значениями.


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 72

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

Вопрос №621

Я разбираю программу из 15-го выпуска и не могу понять следующую команду:
xor cs:Num_status,1
Причем тут 'cs:'?

Ответ

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

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


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 73

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

Вопрос №623

В книге М. Гука "Аппаратные средства IBM PC" я прочитал об ошибке процессоров Pentium при обработке кода F0 0F C7 C8. Это код приводил Pentium к зависанию (т.к. пытался сравнить 32-битный операнд с 64-битным). Там же говорилось, что в Pentium Pro и Pentium II этой ошибки нет. Я запустил этот код у себя на Celeron Mendocino - под Windows и DOS. Windows ругнулся и закрыл приложение, а DOS завис! Спрашивается почему? Ведь Celeron - модификация Pentium II. И какое имеет значение, под какой операционной системой запускается код, ведь ошибка процесора или есть или нет.

Ответ

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

Есть еще такая вещь - как неправильная инструкция, которая обычно приводит к исключению в работе.

Суть в том что такой команды нет! на пентиуме она обрабатывалась и приводила к зависанию процессора, (кстати о каком 64-битном операнде речь??? это же не P4!!!) на последующих моделях - просто ошибка.

Почему в досе виснет - не могу точно сказать...


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 74

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

Вопрос №623

В книге М. Гука "Аппаратные средства IBM PC" я прочитал об ошибке процессоров Pentium при обработке кода F0 0F C7 C8. Это код приводил Pentium к зависанию (т.к. пытался сравнить 32-битный операнд с 64-битным). Там же говорилось, что в Pentium Pro и Pentium II этой ошибки нет. Я запустил этот код у себя на Celeron Mendocino - под Windows и DOS. Windows ругнулся и закрыл приложение, а DOS завис! Спрашивается почему? Ведь Celeron - модификация Pentium II. И какое имеет значение, под какой операционной системой запускается код, ведь ошибка процесора или есть или нет.

Ответ

Здравствуйте, Wolf!
Отладчик переводит код F0 0F C7 C8 в lock cmpxchg8b qword ptrax, а на самом деле должно быть, что-то вроде lock cmpxchg8b qword ptr [XXX],
тогда если переменная по смещению XXX qword, то всё в порядке, но все же я попробовал и скомпилировал твой код(хоть в принципи такой команды нет), и под Windows произошла ошибка, а дос действительно завис(или перешёл в бесконечный цикл), но скорей всего, просто в нем такая ошибка не обрабатывается и процессор не причем, всё можно "свалить" на дос, я уверен, что и на третьем пне дос повиснет при выполнении этой команды!

Да, и ещё ...Уважаемый эксперт Basfer по-моему ты всё же не прав, т.к.
адрес любого обработчика прерывания вычисляется по формуле 0000:4*ah, при чем в ah - номер прерывания, хоть 21h, хоть 22h, хоть 10h и т.д., и функция 35h использует именно этот метод!


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

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

Вопрос №614

Уважаемые эксперты, я к сожалению не получил отклик на свой вопрос. И решил спросить заново. Но пожалуйста, не игнорируйте меня! Так как это важно для меня.
Мне через месяц надо сдавать свою прогу. Она что-то вроде презентации. Так вот она уже готова. Но не хватает только озвучки. Прогу писал на Паскале в Protected Mode.
Собственно что мне нужно от вас - так это помощь в написании процедуры обработки и проигрывания муз.файлов. (типа *.mod , *.xm , *.s3m)
Или помогите примерами, если такие у вас припасены.
Сам я такие проги видел но они все были написаны для реального режима и использовали прерывания.

Жду с нетерпением вашего ответа.
Zipper.

Ответ

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

Погляди инфу на http://www.rusdoc.ru
Или вот новый сайт нашел, интересный кажеться...
http://src.fitkursk.ru

полазь, может что и отыщешь...


Отправил эксперт: Dron (http://spawnhole.narod.ru/asmos/asmos.html - Операционная система с нуля!)
Эксперт отправил ответов (всего): 75

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

Вопрос №624

УВАЖАЕМЫЕ ЭКСПЕРТЫ!
Помогите, пожалуйста. Понимаю, вопрос не в тему,но крайне важный для меня. Я случайно удалил каталог своей
научной проги, над которой, страшно сказать, работал не один год.
КАК ЕГО ВОССТАНОВИТЬ???
Где скачать программу, и какую? Если кто знает, помогите,
и если можно, изложите подробнее.
Заранее благодарен, Николай.

Ответ

Здравствуйте, Николай!
Зачем дел жмешь кады ненужно???
Короче, када удаляешь файло на самом деле он не удаляеться, а
та область диска где был файл помечаеться как неипользуемая(т.е
как пустая), запускай диск едитор и юзай свой хард.
Если лень руками ваять, тогда юзай поиковики, в инете валом усяких тулзов.


Отправил эксперт: змей
Эксперт отправил ответов (всего): 4

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

Вопрос №616

Здравствуйте!
я зделал эту prog. в Delphi 5.0
а в SoftIce не могу наитй место где проверяет (if i=0 ....)
Please help me.

Ответ

Здравствуйте, denis!
Де исходник????
Пришли исходник посморим:)))


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

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

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

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

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

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

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


Ваше имя *:

Ваш 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

В избранное