Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 325
от 23.07.2002, 20:40
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 809 Отправлено ответов: 2300 Активность: 284.3 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Александр Статус: Профессиональный Общий рейтинг: 117.56 [Подробней >>] |
ASMодей Статус: Доверительный Общий рейтинг: 131.57 [Подробней >>] |
Portnov Статус: Опытный Общий рейтинг: 121.71 [Подробней >>] |
Beeblebrox Статус: Профессиональный Общий рейтинг: 120.02 URL: Beeblebrox / TMA HomePage [Подробней >>] |
Gibbel Статус: Опытный Общий рейтинг: 109.5 URL: Страничка обо мне и моих друзьях [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 160.69 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 140.02 [Подробней >>] |
Kalashnikoff Статус: Профессиональный Общий рейтинг: 101.72 URL: Информационный ресурс [Подробней >>] |
Топор Статус: Профессиональный Общий рейтинг: 118.71 URL: Хорошая Русская Металлическая команда Телефон: (8462)500298 [Подробней >>] |
kvINT Статус: Опытный Общий рейтинг: 112.51 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 125.54 [Подробней >>] |
Sensey Статус: Профессиональный Общий рейтинг: 136.3 Телефон: +38 (0572) 41-76-04 дом. [Подробней >>] |
Sinner Статус: Начальный Общий рейтинг: 114.89 [Подробней >>] |
Pablo Статус: Доверительный Общий рейтинг: 109.8 [Подробней >>] |
Shal Статус: Доверительный Общий рейтинг: 106.95 [Подробней >>] |
Igoryk Статус: Доверительный Общий рейтинг: 107.61 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 769. Здравствуйте господа эксперты. Как в отладчике или дизассемблере (SoftIce,W32dsm89,IDA) вычислить см... (ответов: 6)
Вопрос № 770. Спасибо за ответ, Broken Sword, теперь все работает. Хотелось бы узнать, что это за мануал такой? У ... (ответов: 1)
Вопрос № 771. А что никак форму переделать под другие бровсеры?!... (ответов: 2)
Вопрос № 772. Мое имя Доктор Зю. Мне 21 год, я холост и сижу на расылке уже второй месяц. Мне посоветовал Вашу рас... (ответов: 6)
Вопрос № 773. Здравствуйте эксперты!Конечно Глупый вопрос(месяц изучаю ассемблер и хочу узнать как можно больше)но... (ответов: 6)
Вопрос № 774. Бодрое время суток! Подскажите ушастому ламеру про режимы контроллера прерываний. Где об этом хотя б... (ответов: 2)
Вопрос № 775. Уважаемые эксперты, подскажите как програмно разорвать связь с Интернетом. Заранее спасибо.... (ответов: 2)
Вопрос № 776. Здраствуйте господа эксперты Сразу вопрос: Как в режиме 640х480х16 (12h)вывести спрайт чтоб было быс... (ответов: 3)
Вопрос № 777. Уважаемые эксперты! Поясните разницу, если она есть: mov ax,es:[Perem1] и mov ax,es:Perem1 и, соотв... (ответов: 7)
Вопрос № 778. Уважаемые эксперты! В упражнении учебника Юрова есть такой фрагмент: db 0eah ;машинный код к... (ответов: 6)
Вопрос № 779. Здравствуйте эксперты! Сколько вы рекомендуете отводить места под стек в программах, которые не испо... (ответов: 6)
Вопрос № 780. Привет экспертам! Может у кого-нибудь описание по установке видеорежимов VGA не через BIOS, а напрям... (ответов: 2)
Вопросов: 12, ответов: 49
Вопрос № 769 |
Здравствуйте господа эксперты.
Как в отладчике или дизассемблере (SoftIce,W32dsm89,IDA) вычислить смещение какойнить команды от начала exe. файла, так, чтобы потом найти её в Нех-редакторе.
Например W32dsm89 показывает в строке состояния, оффсет текущей команды, но не в одном Нех-редакторе этот оффсет не совпадает. (я НЕ путаю оффсет по НЕХ и по DEC).
И еще, можно ли в Нех-редакторе убрать вызов какойнить функции, например "call MessageBoxA".
Сколько байт занимает команда "call"? Насколько мне известно, API_функции после своей работы сами очищают стек от принадлежащих им параметров. Нужно ли мне после вырезания соманды "call" что либо делать со стеком? Я вообще работает эта технология убирания всяких окон из программы. если я сотру вызов "call" в Нех-редакторе, то, что мне залепить на его место? Просто какуюнить бездействующею команду? Размер я так понимаю должен совподать?
Заранее благодарен.
Вопрос отправлен: 18.07.2002, 21:09
Отправитель: Сергей (cppdummy@narod.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Александр
Приветствую Вас, Сергей!
Ответ отправлен: 20.07.2002, 09:38
Отправитель: Александр
Отвечает ASMодей
Добрый день, Сергей!
Команда CALL может в зависимости от ситуации занимать
от 3 до 8 байт (вместе с операндами). Вырезать команду
CALL можно запросто - достаточно заменить все ее байты
на байты 90h (команда NOP). Количество заменяемых байт
можно посмотреть в отладчике (обычно они находятся слева
от самой команды) или вычислить как <смещение следующей
команды> - <смещение удаляемой команды>.
Функции WinAPI используют соглашение вызова называемое
STDCALL, то есть перед вызовом функции параметры помещаются
в стек в обратном порядке и стек очищается внутри
функции. Так что если удалять вызов функции API, нужно
также удалять команды, помещающие параметры в стек или
вместо команды CALL написать команду ADD ESP,N
где N - количество байт отводимых под параметры (можно
подсчитать исходя из описания функции).
Ответ отправлен: 19.07.2002, 09:02
Отправитель: ASMодей
Отвечает Portnov
Доброе время суток, Сергей!
Насчет несовпадения смещений - тут, скорее всего, проблема в том, что дизассемблер считает их от начала сегмента (для Win32- от начала исполнимого кода), а Hex-редактор - от начала файла. Возможные решения:
1)настроить дизассемблер - не знаю, возможно ли это для каждого конкретного дизассемблера;
2)для Win32 - узнать размер заголовка и учитывать его, когда ищите в Hex-редакторе, во многих редакторах есть ф-ция считания смещений с произвольного места.
Насчет вызовов ф-ций API. Все про инструкцию Call - см. Opcodes.hlp, входит в MASM32, или можно в Инете отдельно найти. Со стеком ничего делать не надо. Для удаления инструкций самый простой вариант - забить Nop-ами (опкод 90h). Т.е. было, скажем, "B80A 00A2", (предположим, это опкоды какой-дибо инструкции), а надо на этом месте сделать "9090 9090".
С уважением, Portnov.
Ответ отправлен: 19.07.2002, 18:01
Отправитель: Portnov
Отвечает Beeblebrox
Приветствую Вас, Сергей!
1. Это нужно делать в hiew, а не в отладчике. F5, смещение. Потренируйся писать точку перед смещением или не писать, поймешь разницу
2. Если ломаешь программу, call не нужно забивать, а нужно обходить вокруг. Я еще ни разу не встретил такой код, чтобы в непосредственной близости от ненужного call нельзя было заменить условный переход на безусловный заменой всего одного байта :)
Ответ отправлен: 19.07.2002, 10:18
Отправитель: Beeblebrox
Отвечает Gibbel
Здравствуйте, Сергей!
1. Offset вычисляешь так: В дизассемблере узнаешь адрес начала секции (в твоем случае .code) в памяти. Потом в заголовке PE находишь начало этой же секции в файле. Ну и при помощи несложных математических вычислений получаешь нужный тебе адрес.
2. Я обычно команды, которые мне надо удалить заменяю на соответствующее количество nop.
3. Если после call стек очищает вызывающая функция - то ни о чем вообще заботиться не надо, просто заменяешь call на nopы. Если же стек очищает вызываемая функция, то тебе необходимо еще и позаботиться о его очистке самостоятельно (например, убрать pushы, сохраняющие параметры функции).
Ответ отправлен: 19.07.2002, 10:31
Отправитель: Gibbel
Отвечает masquer
Доброе время суток, Сергей!
Попробую популярно объяснить, допустим команда находится по адресу 00402FB8. По смещению 34h от начала PE заголовка наодится двойное слово - ImageBase, обычно равен 00400000h. Отнимай из твоего адреса ImageBase и получишь смещение в файле. Но такая техника работает далеко не всегда - например релокейшен, ImageBase является не железным адресом посадки в память а рекомендуемым, но если не хватает памяти, то загрузчик может разместить программу по другому адресу, к тому же программа может быть просто запакована.
Убрать вызов можно, но тебе прийдется поубирать команды push перед вызовом, сколько - зависит от функции. Call может занимать разное колическтво байт - зависит от вызова - ближний, дальний.
Ответ отправлен: 18.07.2002, 21:49
Отправитель: masquer
Вопрос № 770 |
Спасибо за ответ, Broken Sword, теперь все работает.
Хотелось бы узнать, что это за мануал такой? У меня есть
полное описание микропроцессоров i386 и выше, но там
нет никакого описания по переключению между режимами CPU.
Если не трудно, кинь адресок, откуда его можно скачать.
Вопрос отправлен: 18.07.2002, 22:18
Отправитель: Eugene (eugorov@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Broken Sword
Здравствуйте, Eugene!
это из печатного мануала о котором я раньше много писАл (Intel Developers Manual)...
теперь его не достать... есть у меня еще то же самое в pdf-е, но весит под 10 тонн.
Ответ отправлен: 19.07.2002, 09:55
Отправитель: Broken Sword
Вопрос № 771 |
А что никак форму переделать под другие бровсеры?!
Вопрос отправлен: 18.07.2002, 22:46
Отправитель: Pablo
[Следующий вопрос >>] [Список вопросов]
Отвечает Kalashnikoff
Добрый день, Pablo!
Нет. Если сам браузер урезает код, то я ничего поделать не могу.
Ответ отправлен: 18.07.2002, 23:04
Отправитель: Kalashnikoff
Отвечает Александр
Здравствуйте, Pablo!
Тут может скоро вообще отправка по почте будет. А под другие броузеры тоже можно переделать. Хотя как я тебе уже написал - у меня из Mozilla отправил без проблем.
Ответ отправлен: 22.07.2002, 07:16
Отправитель: Александр
Вопрос № 772 |
Мое имя Доктор Зю. Мне 21 год, я холост и сижу на расылке уже второй месяц.
Мне посоветовал Вашу рассылку один хороший друг.
Меня она конкретно цепляет, настолько, что я хочу воткнуца в нее в качестве эксперта.
Обломно, но я не умею ломать программ и у меня нет софт-айса. Но я знаю,
как вывести число на экран и как его прошвырнуть из десятичной
системы в восьмиричную!
Кроме этого я пью пиво, вино, водку, курю анашу и не
отрицаю отношений между мужчиной и женщиной. Я не прихотлив, но
не помню ни одного из прерываний ДОСА, но у меня есть tasm32 и
я пишу под винды, и у меня есть друг, который написал 3д движок.
Кроме того, у меня ответные знания ассемблера! Я баловался им еще когда
ходил пешком под стол, но тогда это было "DI HALT" (это для Z-80, оп код
243, 118, если кого интересует - эти числа мне и сейчас снятся).
Я в свое время (93 год) (да, да - в 12 лет) писал крутейшие программы для SPECCY
(YEAH!), я придумал для ZX-SPECTRUM воспроизведение видео в реалтайм с подгрузкой с
дисковода (YEAH!) и большой скролл в мультиколоре (а кто-нибудь еще помнит, что это?).
Я ходил с клеймом спектрумиста много лет подряд,
но потом я потух. Сила покинула меня. Идеи megademo больше не будили меня среди ночи.
Я вырос и потерял девственность программиста. Меня совратили IBM и 8086 с командами умножения
и деления (на Z-80 я писал это сам). Я потерял веру в ассемблер и начал изучать С.
Через некоторое время я умер. Как говорят, Die young - live free.
Но два месяца назад я почувствовал присутствие Силы снова. Я реинкорнировал и вошел в
клуб РусФаку. Я понял, что я не выучил С и забыл весь ассемблер, и поэтому программирую
на Delphi. У меня открылось Новое Восприятие мира, я почувствовал, что здесь нужна Моя помощь.
Я готов воткнуца в рассылку прямо сейчас и излечить всех пациентов РусФаку.
Но у меня мало интернета, у меня очень мало интернета. Я не знаю объемы входящего трафика эксперта,
ведь, наверное, у большинства из Вас выделенная линия ISDN или ADSL.
Я прошу мне помочь и рассказать, какая судьба у экспертов RusFaq/ассемблер.
И куда приходят вопросы - на почтовый адрес или надо всегда он-лайн их качать, а отвечать как -
он-лайн, а как смотреть, кто до меня ответил?
Я купил бубен, но не уверен, все ли готово во мне для ритуала вступление в Вашу секту.
Помогите мне добрым байтом и да прибудет с Вами Сила!
Doc Z из маленького провинциального городка на краю Большой Вселенной. Dizzy!
Вопрос отправлен: 19.07.2002, 00:03
Отправитель: Doc Z
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Добрый день, Doc Z!
Не имя красит человека.
Цитата:"Кроме этого я пью пиво, вино, водку, курю анашу и не
отрицаю отношений между мужчиной и женщиной." - для 21 года - очень серьезные достижения.
ISDN или DSL??? ну можно и так, если 100 кил для диалапа много.
В чем помочь то? Ответы на мыло приходят.
Ответ отправлен: 19.07.2002, 09:08
Отправитель: masquer
Отвечает Gibbel
Добрый день, Doc Z!
Хех... Ты почти пересказал мою биографию. Разве что, с небольшими неточностями.
Итак, мой ник - Gibbel. (На speccy был другой). Мне 22.
Пью уже не столько как раньше, в основном по пиву... Да и анашу не курю... Прерывания доси тоже помню слабо, но оно и понятно - последний год занимался исключительно виндами...
Ассемблер начал так же учить с Spectruma - шикараная тачка для обучения, на мой взгляд. Слава Синклеру!!! ;-) Правда, там был несколько иной изврат. Самая смачная работа того времени - полноэкранный Multicolor Editor, который поддерживал все существовавшие тогда варианты multicolorа, вплоть до одного цвета на точку. Было еще много чего. Хех... Да... Хорошые были времена. Тогда сидя за машиной можно было чувствовать себя богом. Однако, все изменилось со временем... Спектрум стал уже многим неинтересен, да и денег надо было зарабатывать по-немногу... Вот я и начал изучать писюк. С этог начался ад. В те времена толковой инфы найти было невозможно, да и про инет знали единицы. В фиду я тоже не мог попасть - телефона то дома не было. Вот и приходилось вертеться - там урвал файлик с описанием доса, здесь - компилятор какой-нить удобненький... Ну ничего, разобрался по-немногу. Со временем поступил в институт, выучил сишку... Потом фортран, паскаль, C++, Java, .... Ну, в общем, получилось то, что я есть сейчас... ;-) Теперь работаю программером, На работе инет халявный, вот и сижу в некоторых рассылках и форумах...
Ну а теперь о вопросах - они приходят на мыло. Я всегда онлайн... А смотреть, кто ответил до тебя очень легко - в конце вопроса есть ссылочка [Подробней >>].
Кстати, о глюках формы - с глюкой пробела я избавляюсь удерживанием клавиши Ctrl во время нажатия пробела. Помогает.
Ответ отправлен: 19.07.2002, 10:54
Отправитель: Gibbel
Отвечает Топор
Здоров будь, Doc Z!
Думаю, все будут рады видеть тебя в нашей тоталитарной секте и приобщить к тайнам асмотизации населения посредством всеразличных способов зомбирования, так что бить в бубен начинай уже сейчас. С Интернетом у нас - это уж кому как повезло, у меня, например, халява на работе. В общем случае тебе необходим как минимум почтовый ящик на каком-нибудь из бесплатных сервисов типа Mail, Rambler ет сетера. Смысл в том, что желательно открывать его не в почтовиках, а в IE как страницу, дабы нармально работала форма отправки ответа. Как зарегистриться, ты знаешь. Всякие статусы присваиваются по количеству ответов на вопросы. Раньше была ещё система оценки ответа, когда пациент мог таким образом либо добавить тебе баллы, либо наоборот убавить и вообще аннулировать вопрос к чертям, но сейчас это отменено. За ответы, как я уже упомянул, начисляются баллы, назначение которых многим здесь до сих пор до конца не понятно.
Удачи!
Ответ отправлен: 21.07.2002, 11:07
Отправитель: Топор
Отвечает kvINT
Добрый день, Doc Z!
Вопросов не так уж и много - от 5 до 20 в день - 1-2 минуты качаются (у меня обычный модем). Приходят на почтовый ящик. Отвечать можешь в любое удобное для тебя время. Тогда же можешь и посмотреть, кто до тебя ответил, но это не обязательно.
Ответ отправлен: 21.07.2002, 22:06
Отправитель: kvINT
Отвечает Broken Sword
Доброе время суток, Doc Z!
где и почем брал? :)
Ответ отправлен: 19.07.2002, 00:32
Отправитель: Broken Sword
Отвечает Portnov
Доброе время суток, Doc Z!
Sorry, не совсем ответ, сильно смахивает на рекламу.
У меня диалап.
Всем, кто интересуется ZX Spectrum! У меня был дядя, который занимался компьютерами. У него был Спектрум. Дядя умер, комп продали, а много доки всякой осталось. Я к тому, что может кто-нить согласится у меня это купить? По низким ценам. По всем вопросам Mailto:portnov@mdv.ru.
С уважением, Portnov.
Ответ отправлен: 19.07.2002, 18:10
Отправитель: Portnov
Вопрос № 773 |
Здравствуйте эксперты!Конечно Глупый вопрос(месяц изучаю ассемблер и хочу узнать как можно больше)но всё же:
Можно ли создать программу вот так
C:xxx>copy con file.com
(машинные коды в двоичной системе исчесления)
^Z
Если знать машинный код нужного оператора.
Если да приведите пример такого написания программы (вот этой)
Приложение:
Вопрос отправлен: 19.07.2002, 02:17
Отправитель: R@ptor
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Добрый день, R@ptor!
Можно - скомпилируй и коды смотри.
Ответ отправлен: 19.07.2002, 09:08
Отправитель: masquer
Отвечает Beeblebrox
Здравствуйте, R@ptor!
Можно, если в тексте программы ни разу не встречается байт 1Ah (Ctrl-Z)
Например, программа из одной команды retn набивается так:
C:xxx>copy con file.com
Alt+numpad(195), отпустить Alt
^Z
Но это извращение, куда проще писать в hiew
Ответ отправлен: 19.07.2002, 10:25
Отправитель: Beeblebrox
Отвечает Ayl
Доброе время суток, R@ptor!
1. Вопрос - а нафига это надо?
2. Ответ - можно. Если только в качестве кода не встречается символ ^Z (ASCII 26).
Для приведенной программы надо набирать так (см.приложение).
Итого - размер 12 байт...
Приложение:
Ответ отправлен: 19.07.2002, 10:59
Отправитель: Ayl
Отвечает Александр
Доброе время суток, R@ptor!
Для того чтобы ввести символ, которого нет на клавиатуре надо нажать клавишу Alt и не отпуская её набрать на правой цифровой клавиатуре десятичный код символа. Когда отпустишь Alt ты увидишь тот символ, что соответствует этому коду. Единственный код, который на клавиатуре невозможно набрать - это 0. Так что если в твоей программе нет нулевых байтов, то это действительно возможно. А в той, которая в приложении действительно их нет. Вот рецепт для набора этой программы:
Alt + 180
Tab
Alt + 186
Tab
Alt + 01
Alt + 205
!
Alt + 205
Пробел
@!$
P.S. В состав всех версий дос входит простенький отладчик debug.exe Ты можешь запустить его и вручную ввести программу или использовать готовый текстовый файл, который бы точно повторял все твои действия внутри него во время набора программы.
Ответ отправлен: 20.07.2002, 09:38
Отправитель: Александр
Отвечает ASMодей
Здравствуйте, R@ptor!
Конечно можно! Например так (цифры нужно набирать на
"серой" части клавиатуры, то есть той которая справа):
> copy con file.com
ALT+180
ALT+009
ALT+186
ALT+009
ALT+001
ALT+205
ALT+033
ALT+205
ALT+032
ALT+064
ALT+033
ALT+036
^Z
Ответ отправлен: 19.07.2002, 12:39
Отправитель: ASMодей
Отвечает Sensey
Добрый день, R@ptor!
:)))
А вопросы отправлять
copy con com1
А документы печатать
copy con lpt1
А вообще не в двоичной, а в символьной...
Не получится. Код 26 (^Z) - тоже должен где-то быть...
Ответ отправлен: 22.07.2002, 12:01
Отправитель: Sensey
Вопрос № 774 |
Бодрое время суток!
Подскажите ушастому ламеру про режимы контроллера прерываний. Где об этом хотя бы прочитать можно? Третий день найти не могу. Спасибо
Вопрос отправлен: 19.07.2002, 02:59
Отправитель: lelik
[Следующий вопрос >>] [Список вопросов]
Отвечает Топор
Приветствую Вас, lelik!
В. Юров. Ассемблер - Учебник.
Ответ отправлен: 21.07.2002, 10:40
Отправитель: Топор
Отвечает Ayl
Доброе время суток, lelik!
Ну, попробуй посмотреть Tech Help.
Можно в Интеловский мануалах (должно быть, сам не смотрел).
У Джордейна что-то есть...
Для чего тебе это нужно? Может, вопрос какой задашь - глядишь, кто и ответит?..
Ответ отправлен: 19.07.2002, 12:39
Отправитель: Ayl
Вопрос № 775 |
Уважаемые эксперты, подскажите как програмно разорвать связь с Интернетом. Заранее спасибо.
Вопрос отправлен: 19.07.2002, 08:29
Отправитель: Юрий
[Следующий вопрос >>] [Список вопросов]
Отвечает Gibbel
Добрый день, Юрий!
Из Platform SDK:
InternetHangUp Function
--------------------------------------------------------------------------------
Instructs the modem to disconnect from the Internet.
Syntax
DWORD InternetHangUp( DWORD dwConnection,
DWORD dwReserved
);
Parameters
dwConnection
[in] Unsigned long integer value that contains the number assigned to the connection to be disconnected.
dwReserved
[in] Reserved. Must be set to 0.
Return Value
Returns ERROR_SUCCESS if successful, or an error value otherwise.
Function Information
Stock Implementation wininet.dll
Custom Implementation No
Header Wininet.h
Import library Wininet.lib
Minimum availability Internet Explorer 4.0
Minimum operating systems Windows NT 4.0, Windows 95
Ответ отправлен: 19.07.2002, 11:00
Отправитель: Gibbel
Отвечает masquer
Добрый день, Юрий!
RasHangUp
Ответ отправлен: 19.07.2002, 09:47
Отправитель: masquer
Вопрос № 776 |
Здраствуйте господа эксперты
Сразу вопрос:
Как в режиме 640х480х16 (12h)вывести спрайт чтоб было быстро
точку вывести могу а вот как спрайт вывести сообразить не получается
Вопрос отправлен: 19.07.2002, 11:49
Отправитель: bir
[Следующий вопрос >>] [Список вопросов]
Отвечает ASMодей
Добрый день, bir!
Спрайт можно выводить и по точкам, но через INT 10h быстро
не получится, поэтому нужно работать напрямую с видеокартой
через порты.
Ответ отправлен: 21.07.2002, 20:29
Отправитель: ASMодей
Отвечает Ayl
Здравствуйте, bir!
Что б быстро... Хм...
Вообще-то могу порекомендовать книжку Майкла Абраша "Таинства программирования графики". Вот там очень хорошо написано и про то, что такое быстро, и про то, как этого добиться.
Самый быстрый вывод получится в случае, если сам спрайт будет иметь размер, кратный 8-ми точками по горизонтали и выводится будет в позиции, имеющие X-координату, кратную 8-ми.
Тогда можно будет использовать св-во EGA/VGA адаптеров маскирования определенных битов при записи.
Кода под рукой нет, может, еще кто из экспертов что-нибудь напишет.
Ответ отправлен: 19.07.2002, 12:22
Отправитель: Ayl
Отвечает Beeblebrox
Здравствуйте, bir!
Что из себя представляет твой спрайт, много ли в нем цветов, каков его размер в пикселях, в какие координаты экрана он может выводиться (с дискретностью в одну точку или в четыре)?
Исходя из этой информации выбираем один из двух режимов записи.
Ответ отправлен: 19.07.2002, 13:16
Отправитель: Beeblebrox
Вопрос № 777 |
Уважаемые эксперты!
Поясните разницу, если она есть:
mov ax,es:[Perem1]
и
mov ax,es:Perem1
и, соответственно, для "обратной" операции:
mov es:[Perem1],ax
и
mov es:Perem1,ax
Вопрос отправлен: 19.07.2002, 12:03
Отправитель: АлекСандр (abeh@kfk.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Александр
Приветствую Вас, АлекСандр!
По крайней мере для TASM это разницы не имеет. В данном случае имеет смысл вторая запись. Т.е. процессор записывает в регистр слово адресуемое длинным указателем. Причём формируется он так - сегментный регистр указывает на нужный сегмент, а для формирования смещения используется смещение указанной переменной, относительно того сегмента в котором она определена.
Ответ отправлен: 20.07.2002, 09:39
Отправитель: Александр
Отвечает Ayl
Добрый день, АлекСандр!
В режиме MASM вроде как разницы нет. В режиме IDEAL вторая форма, по-моему, запрещена.
На самом деле, лично на мой вкус, первая форма (кот. со скобками) более понятна и удобнее.
Ответ отправлен: 19.07.2002, 12:17
Отправитель: Ayl
Отвечает Sinner
Доброе время суток, АлекСандр!
Насколько я знаю, в данном случае разницы нет. Но если указывается смещение относительно объявленной переменной, то надо писать, например:
mov ax,es:[Perem1+2]
Ответ отправлен: 22.07.2002, 03:22
Отправитель: Sinner
Отвечает masquer
Здравствуйте, АлекСандр!
Смысл один и тот же - разница в синтаксисе, кому как понятнее
Ответ отправлен: 19.07.2002, 12:42
Отправитель: masquer
Отвечает Beeblebrox
Приветствую Вас, АлекСандр!
Одно - режим ассемблера Ideal, а другое - Masm
Генерируемый код одинаковый.
Ответ отправлен: 19.07.2002, 13:24
Отправитель: Beeblebrox
Отвечает Pablo
Доброе время суток, АлекСандр!
Комплятор распознает их как они и теже команды. А отличаются они только написанием и исполтьзуют их кто как привык. Я, например, использую первый стиль написания.
Если вдруг захочешь получить адрес перененной, то делай одним из 2-х способов:
1. lea ax, es:Perem1
2. mov ax, offset es:Perem1
Ответ отправлен: 19.07.2002, 16:28
Отправитель: Pablo
Отвечает Shal
Здравствуйте, АлекСандр!
Разница есть конечно же. []- то же оператор в асме.
mov al,[si] означает, что в al помещаем содержимое ячейки памяти, адрес которой находится в si. Вот.
Ответ отправлен: 19.07.2002, 20:10
Отправитель: Shal
Вопрос № 778 |
Уважаемые эксперты!
В упражнении учебника Юрова есть такой фрагмент:
db 0eah ;машинный код команды jmp
dw offset protect ;смещение метки перехода в сегменте команд
dw 30h ;селектор сегмента кода в GDT
protect: ;загрузить селекторы для остальных дескрипторов
mov ax,18h
...
Вопрос - почему используется такая форма задания команды jmp? В другом месте аналогично
db 0eah
dw offset r_mode
dw CODE
Это используется при переходе из реального режима в защищенный и обратно.
И еще. Перед выходом из обработчиков прерываний задается:
...
db 66h
iret
endp
Какая команда защифрованна в данном случае (db 66h)
Вопрос отправлен: 19.07.2002, 12:44
Отправитель: АлекСандр (abeh@kfk.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает ASMодей
Приветствую Вас, АлекСандр!
Дело в том, что ассемблер предназначен для работы в
реальном режиме процессора и поэтому при использовании
команды дальнего перехода в качестве селектора он подставит
сегментный адрес, а конкретно указать адрес перехода в
команде JMP, насколько я знаю нельзя, поэтому приходится
все делать ручками ;).
Что касается второго вопроса, то код 66h используется для
изменения разрядности команды, то есть, если этот код стоит
перед командой IRET, то получается команда IRETD и
наоборот.
Ответ отправлен: 21.07.2002, 20:31
Отправитель: ASMодей
Отвечает Топор
Здравствуйте, АлекСандр!
В данном случае дальний джамп прописывается побайтно, потому что его обычное написание не будет правильно понято транслятором. Цель - сделать в 16-разрядном сегменте 32-разрядную метку перехода в другой сегмент. Кстати, перед этими джампами у Зубкова тоже стоит 66h - это префикс изменения разрядности операнда, ведь переходим из 16ти в 32-разрядный режим адресации и наоборот.
Ответ отправлен: 21.07.2002, 10:29
Отправитель: Топор
Отвечает Igoryk
Здравствуйте, АлекСандр!
Если это точно однобайтная команда то это - add [bx][si], al
Ответ отправлен: 19.07.2002, 17:38
Отправитель: Igoryk
Отвечает Pablo
Доброе время суток, АлекСандр!
Код 66h он насколько я помню используется для изменение разрядности регистров общего назначения, то есть для модели flat жто преобразование из 32-битной формы в 16-битную, а для tiny и small наоборот, и хотя я в какой то программе под реальный режим видел проебразование 16->32, но чтото у меня прога отказалась компилироваться с использованием 32-битных регистров!
По поводу jmp насколько я понимаю это команда безусловного переходя по прямому адресу, то есть обычно компилятор использует jmp, который в качестве операнда использует смещение адреса для перехода от следующего за командой адреса.
Например:
jmp a1:
nop
a1:
xor al, al
будет выглядеть так:
00 jmp +1
02 nop
03 xor al, al
Ответ отправлен: 19.07.2002, 16:28
Отправитель: Pablo
Отвечает Broken Sword
Здравствуйте, АлекСандр!
Попробуй предложи свой вариант и увидишь почему пишут именно через db 0EAh.
66h - для 32-х разр. операций. В данном случае iret достанет из стека 32 битн. флаги, 32 битн. смещение и селектор
Ответ отправлен: 19.07.2002, 22:32
Отправитель: Broken Sword
Отвечает Александр
Доброе время суток, АлекСандр!
Самое простое это объяснить, что такое db 66h. Это префикс, изменяющий размер операнда. Если сегмент 16-разрядный, то операнд становится 32-разрядным, а если 32-разрядный, то 16-разрядным. Префикс db 67h аналогичным образом изменяет разрядность адресации. Почему надо искусственно конструировать команду длинного перехода я не смог найти.
Ответ отправлен: 22.07.2002, 07:16
Отправитель: Александр
Вопрос № 779 |
Здравствуйте эксперты!
Сколько вы рекомендуете отводить места под стек в программах, которые не используют его, а использует его только ДОС и почему?
----------------------
Обращаюсь к Олегу!
Сделай поле "тема" в форме задания вопроса, так проще и удобней искать вопрос да и вообще...:))
----------------------
зы
Удачи!
Вопрос отправлен: 19.07.2002, 16:47
Отправитель: kuper
[Следующий вопрос >>] [Список вопросов]
Отвечает Pablo
Приветствую Вас, kuper!
Ну я в своих программах под Дос использовал минимум 100h стека, вроде не глючили!)))
Ответ отправлен: 19.07.2002, 17:04
Отправитель: Pablo
Отвечает ASMодей
Приветствую Вас, kuper!
Если программа не использует стек, значит в ней нет ни
одной команды CALL, INT, PUSH или POP. Если это так,
то стек программе действительно не нужен, однако нужно
помнить, что во время выполнения программы может произойти
аппаратное прерывание (например от таймера) и понадобится
стек для сохранения адреса возврата в программу.
Поэтому, если стек не задан, DOS устанавливает указатель
стека на конец сегмента кода и программа может благополучно
его использовать (до тех пор пока он не переполнится).
Что касается размера, то его можно посчитать.
Каждый вызов прерывания (аппаратного и программного)
занимает в стеке 6 байт. Если предположить, что одновременно
может быть вызвано не более 2 прерываний, то и размер
стека должен быть не менее 12 байт.
Реально у меня программа работала со стеком размером
даже в 2 байта.
Ответ отправлен: 21.07.2002, 20:32
Отправитель: ASMодей
Отвечает Ayl
Доброе время суток, kuper!
Для COM-программ я вообще на стек внимания не обращаю - программки обычно бывают маленькие, поэтому почти 64К для стека более чем достаточно... :-)
Хуже, если идет работа с неявными буферами (например, для работы с файлами) - вот там можно и подумать.
Для остальных моделей памяти... Ну, для сохранения состояния программы хватит (16-разрядные регистры) - CS, IP и FLAGS (3 слова) + 8 РОНов (по слову каждый) + DS, ES и SS (еще 3 слова). Итого - 6 + 8*2 + 6 = 28 байт. Поэтому стека в 1К вполне достаточно :-)
Ответ отправлен: 19.07.2002, 17:06
Отправитель: Ayl
Отвечает Александр
Добрый день, kuper!
Все нормальные люди делают стек в 256 байт, а маньяки перестраховщики - 4096 байт. Значения получаются эмпирическим методом, научным тыком то есть. Хотя я и не Олег, но про поле тема я тебе скажу. Ты когда-нибудь читал архив большого форума? Так там половина сообщений вообще пустые, без содержания. Всё в поле тема забивается. При некоторой сноровке твой вопрос, например, вполне можно сжать до 80 символов ;-)
Ответ отправлен: 22.07.2002, 07:15
Отправитель: Александр
Отвечает Sensey
Добрый день, kuper!
128-256 байт
Под прерывания ДОСа
Ответ отправлен: 22.07.2002, 12:05
Отправитель: Sensey
Отвечает Portnov
Здравствуйте, kuper!
Во всех источниках рекомекндуется делать 32 слова, не меньше. Тут ведь как? Работает ваша прога, тут вдруг юзер нажимает клавишу, вызывается соотв. обработчик прерываний, он что-то делает, в т.ч., вероятно, какие-нибудь push/pop, вызывает процедуры, а все это - юзание стека. Да и без клавиш, одного прерывания от таймера хватит.
С уважением, Portnov.
Ответ отправлен: 22.07.2002, 12:23
Отправитель: Portnov
Вопрос № 780 |
Привет экспертам!
Может у кого-нибудь описание по установке видеорежимов VGA не через BIOS, а напрямую через порты.
Вопрос отправлен: 19.07.2002, 17:15
Отправитель: Алексей (kulachatov@edu.overta.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Beeblebrox
Здравствуйте, Алексей!
Шаблонный режим делай через Биос, а изменяй только некоторые параметры
Ответ отправлен: 19.07.2002, 17:49
Отправитель: Beeblebrox
Отвечает Sinner
Доброе время суток, Алексей!
Описание есть. Высылаю...
Ответ отправлен: 22.07.2002, 05:52
Отправитель: Sinner
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (42) C / C++ (32) Perl (9) Delphi (17) Pascal (31) Basic / VBA (12) Java / JavaScript (8) PHP (6) MySQL / MSSQL (10) |
Пользователю Windows 95/98/Me (43) Windows NT/2000/XP (34) "Железо" (35) Поиск информации (17) |
Администратору Windows NT/2000/XP (18) Linux / Unix (16) |
Юристу Гражданское право (7) Семейное право (3) Трудовое право (7) КоАП (2) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||