Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 306
от 02.07.2002, 00:31
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 599 Отправлено ответов: 1659 Активность: 276.9 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
masquer Статус: Профессиональный Общий рейтинг: 160.49 [Подробней >>] |
baldr Статус: Профессиональный Общий рейтинг: 120.97 URL: Сайт об ОС DOS. Всем, кто любит эту ОС! [Подробней >>] |
Федос Статус: Доверительный Общий рейтинг: 115.7 [Подробней >>] |
Артём Шегеда Статус: Профессиональный Общий рейтинг: 124.94 URL: Пристанище неодинокого программиста [Подробней >>] |
Александр Статус: Опытный Общий рейтинг: 114.16 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 130.91 [Подробней >>] |
Guess Who Статус: Доверительный Общий рейтинг: 105.13 [Подробней >>] |
VicSimon Статус: Опытный Общий рейтинг: 109.78 [Подробней >>] |
Blackeye Статус: Профессиональный Общий рейтинг: 118.8 URL: Delphi, my programms... [Подробней >>] |
Portnov Статус: Опытный Общий рейтинг: 143.22 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 145.12 [Подробней >>] |
Shal Статус: Доверительный Общий рейтинг: 107.1 [Подробней >>] |
kostik Статус: Профессиональный Общий рейтинг: 115.43 URL: Все о программистах и для программистов Телефон: (4212)393-276 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 554. AddOn!!! OpenGL КАК ЭТУ ШТУКУ оптимизировать не выходя за рамки glu32.dll и opengl32.dll - это не во... (ответов: 1)
Вопрос № 555. Здравствуйте многоуважаемые эксперты! Я тут развлекался с головойJ в ожидании ответов и вот история:... (ответов: 1)
Вопрос № 556. Вывод: НЕ КУРИТЕ АНАШУ ПО УТРАМ! ДО СЛЕДУЮЩЕГО УТРА БЕЗ ДЕВКИ...ЛЕДИ СОРРИ...GOLF!!! НЕ УСНЕТЕ ДА И ... (ответов: 2)
Вопрос № 557. Уважаемые эксперты! Подскажите как лучше организовать одинаковую скорость работы проги на разных ком... (ответов: 3)
Вопрос № 558. Здравствуйте эксперты!подскажите кто-нибудь встречался с программой против копирования star force.в ... (ответов: 2)
Вопрос № 559. Здравствуйте, моя проблемка: Никак не хочет работать буф. ввод, т.е. код: --------------------------... (ответов: 6)
Вопрос № 560. Огромное спасибо за ответ Эксперту VicSimon-у, на мой вопрос № 559. Но ничего не изменилось, т.е. мн... (ответов: 3)
Вопрос № 561. Привет masquer! Не воспримай все так близко к сердцу - вопрос был всем, а ответил только ты:) Насчет... (ответов: 1)
Вопрос № 562. Написал я на c++ такого рода выражение r = (r*r)/(2-r); компилятор сделал вот такой код: mov eax,[eb... (ответов: 6)
Вопрос № 563. Привет - я проспался - будет легче:) То что ты ленивый - так меня зовут ЛЕНЬ:) То что ты работать не... (ответов: 1)
Вопрос № 564. Эксперты! Где я могу ПОДРОБНО узнать о строениии и архитектуре 286, 386, 486 процессоров ( с точки з... (ответов: 3)
Вопрос № 565. С какой документации лучше начать изучение ассемблера, какие книги, учебники изучить. Как быстро нау... (ответов: 2)
Вопрос № 566. Здравствуйте эксперты! Помогите пожалуйста разобраться со следующей проблемой: в книжке Зубкова, пар... (ответов: 4)
Вопрос № 567. Здравствуйте, уважаемые эксперты! Я столкнулся с очень странной проблемой во время написания одного ... (ответов: 1)
Вопросов: 14, ответов: 36
Вопрос № 554 |
AddOn!!!
OpenGL
КАК ЭТУ ШТУКУ оптимизировать не выходя за рамки glu32.dll
и opengl32.dll - это не вопрос а скорее довесок(тока smoothing не надо - аппроксимировать мы все мастаки:))
u'r welcome:mark@sns.net.ua
BorIS
P.S. Хотел прогу послать - превышает на ~4000 символов - и ни хрена не выкинешь:( тогда смотрите MASM32EXAMPLE8OPENGLopengl.asm - тока я там во весь экран забахал:) ну и разрешения менять разрешение:) не спрашивал - Вы меня не побъете - я о вашем зрении забочусь, со слабым экраном на крайняк перегрузитесь - а кто крут - то я вист:|
Приложение:
Вопрос отправлен: 27.06.2002, 00:42
Отправитель: BorIS
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Приветствую Вас, BorIS!
Ты вопрос понял, чего ты хочешь? Оптимизировать там можно только процедуру RotateObject, используя SSE, но я лично смысла не вижу, но у тебя же свое мнение, не так ли, куда нам.
Ответ отправлен: 27.06.2002, 07:05
Отправитель: masquer
Вопрос № 555 |
Здравствуйте многоуважаемые эксперты!
Я тут развлекался с головойJ в ожидании ответов и вот история:
У Вас тут один парень писал, что видел как жгут монитор программно и просил рассказать как…
Практически реализованная часть:
1. Переходим из-под винды в DOS device – метод:
Окно Q3Arena – чтобы хавало все GDI ресурсы – как сделать не знаю, но если кто-то делал чем мы хуже (см. предыдущее приложение + отключить Alt-Tab)J
Дальше – убиваем GDI и оставляем окноJ функция 121 в gdi32.dll просит HDC– не ищите в MSDN её по имени(Death кстати следующая 122 Resurrection – правда героев3-4 любят Microsoft-отцыJ) НЕТ ЕЁ НИГДЕ!!!
Все! на большее у меня не хватило смелостиJ
После отключения GDI, вывод на экран производится как в DOS, только не забывайте про защищенный режим!
Плюсы использования этого метода:
1. Возможность установки любого видео режима;
2. Использование быстрых алгоритмов вывода на экран;
3. Работа с палитрой;
4. Возможность использования всех устройств поддерживаемых Windows.
Минус:
1. Невозможность использования стандартного графического интерфейса. (А нужен ли он в играх?)
Содрал честно признаюсьL
Теоретическая часть – просто как 2х2 – это моё…
Я с ДОСОМ пока не дружу – так что подскажите, если ошибусь…
Берем учебник физики за 10 класс(этим рубежом можно ограничиться, но для любопытных далее) – вакуумная лампа (луч с трубки монитора)…
У нее есть такая характеристика как зависимость выходного напряжения от времениJ Мы пытаемся узнать какова эта характеристика у нашего спаливаемого монитора…Есть.
Химия – зависимость времени активного действия вещества люминофора от потока энергии заданной волны(бета – излучение, электроны), когда-то же оно выгорает в нашем случае дифф.ур в частных производных…
Математика – решаем его по времени и получаем функцию…ищем экстремум и расчитываем параметры при которых «накрывается» люминофор…
Программирование…функцию формируем средствами DOS(тут эксперты меня съедят с потрахами) – на выходе шины на видяху, что бы та в свою очередь давала дорогу на монитор… это кажется на сайте Олега в книженции “IBM PC XT/AT”, какого-то аглицкого писателя в переводе на АзБуки…Один проблем: мамка дает только (нашу частоту шины)/(65535) тактов в секунду(если круто все поменятьJ а не 18 как думали многиеJ почитайте внимательно…а может сейчас все по-другому – ну не важно это только претензия на эскизJ Так вот получаете конечно-разностную аппроксимацию по времени и по частоте наруги на лампе ( граничные условия – точка выгорания люминофора заданного цвета, начальные условия – черный экран и установки системы по умолчанию )этой функции – суете её туда - найдете куда - и готово ShellExecute – и у нас выгорают любимые нами цвета R-G-B – можно спалить и Alpha если хорошо приложиться…JПодсказать метод решения могу при желании…
Ладно пошел я спать – бред все это – много упущено, много упрощено, много известно – но надюсь основной ход мыслей Вам понятен, а то мне уже нет…
Не пожелал бы я врагу такой работенки но на лабораторную на 4 часа хватитJСкучно…
U’r welcome:mark@sns.net.ua
BorIS
Вопрос отправлен: 27.06.2002, 04:20
Отправитель: BorIS
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Приветствую Вас, BorIS!
Молодец! Вот попробуй свой метод, потом напишешь. Теоретизировать - много ума здесь не надо, не думаю, что твой метод сработает.
Ответ отправлен: 27.06.2002, 07:07
Отправитель: masquer
Вопрос № 556 |
Вывод: НЕ КУРИТЕ АНАШУ ПО УТРАМ! ДО СЛЕДУЮЩЕГО УТРА БЕЗ ДЕВКИ...ЛЕДИ СОРРИ...GOLF!!! НЕ УСНЕТЕ ДА И ТО СМОТРЯ КАКАЯ ПОПАДЕТСЯ
Вопрос отправлен: 27.06.2002, 04:25
Отправитель: BorIS
[Следующий вопрос >>] [Список вопросов]
Отвечает baldr
Эксперту Федос и остальным:
Если кто хоть раз еще ТАКОЕ отправит в рассылку - я лично обещаю принять меры для того, чтобы Вы это потом запомнили надолго!!!! :((( Если есть какие эмоции - ради бога, выражайте их в подъезде на стене!! Вы Эксперт по Ассемблеру и такого дерьма нам тут НЕ НАДО!
Ответ отправлен: 28.06.2002, 00:36
Отправитель: baldr
Отвечает Федос
Доброе время суток, BorIS!
lf blb ns cj cdtq theyljq/ Cgfvth abujd/
PacLLI0|0PyeLLI - HanuLLIeLLIb.
Ответ отправлен: 27.06.2002, 14:07
Отправитель: Федос
Вопрос № 557 |
Уважаемые эксперты!
Подскажите как лучше организовать одинаковую скорость работы проги на разных компах?
Я использую такой алгоритм:
1. В начале тестирую скорость компа. Определяю MyTimer. Это счетчик, который набегает за секунду.
2. Затем в проге создаю копию этой переменной и использую ее в цикле wait.
Но прога не всегда работает с постоянной скоростью. Вот эта процедура:
Приложение:
Вопрос отправлен: 27.06.2002, 05:13
Отправитель: igorr (flat12@pop.redcom.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Артём Шегеда
Приветствую Вас, igorr!
1. Разные процессоры (Intel, AMD, VIA) оптимизированы под разные задачи, а посему такая проверка быстродействия не коррктна - ведь если в тесте используются mul, а в твоей программе их не будет, то это уже не проверка.
2. Если работаешь под Windows, то никто не гарантирует тебе постоянную скорость выполнения кода.
3. Работай с таймером: по крайней мере, Windows гарантирует его правильную работу - и выполняй задержки функцией 86h int 15h. В крайнем случае, перехвати int 8 и контролируй время там.
Ответ отправлен: 27.06.2002, 12:24
Отправитель: Артём Шегеда
Отвечает masquer
Доброе время суток, igorr!
Проще всего привяжись к событию таймера, так надежнее будет
Ответ отправлен: 27.06.2002, 06:32
Отправитель: masquer
Отвечает baldr
Доброе время суток, igorr!
Однозначно - перехват прерывания 1Ch! Если не хочешь писать тело проги в обработчике - это
если надо будет использовать кучу сервисных прерываний, то пусть он выставляет в какой-нибудь
переменной что-то типа флага или счетчика, а прога в цикле его проверяет и ждет какого-нибудь
значения. Если непонятно, пиши еще - поможем!
Ответ отправлен: 28.06.2002, 00:33
Отправитель: baldr
Вопрос № 558 |
Здравствуйте эксперты!подскажите кто-нибудь встречался с программой против копирования star force.в итернете написано,что она шифрует исполняемые файлы и генерирует свой ключ.который использует в дальнейшем.так вот вопрос.какие именно файлы она шифрует.
Вопрос отправлен: 27.06.2002, 10:04
Отправитель: андрей
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Добрый день, андрей!
Seems like wrong address, pal
Ответ отправлен: 27.06.2002, 11:50
Отправитель: masquer
Отвечает Александр
Здравствуйте, андрей!
Ну ничего не могу посоветовать. Насколько мне известно, то пока её не взломали, поэтому каждую игру зашифрованную StarForce несчастным хакерам приходится взламывать индивидуально. Никаких универсальных взломов замечено не было. А насчёт шифровки файлов - это не самое главное. Самая сложность этой защиты в том, что для выполнения своего основного кода она реализует некую виртуальную машину для своего внутреннего языка. К тому же хакерами пока не выяснены методы идентификации диска и проверки кода на соответствие. Если конечно верить такому источнику, как журнал CHIP+CD. Для того, чтобы запустить переписанную на болванку StarForce игру нужно обязательно crack. Причём его придётся поискать, если это не Казаки. Если тебе интересно в качестве способа защиты собственной программы, то это очень привлекательный вариант на данный момент.
Ответ отправлен: 01.07.2002, 08:24
Отправитель: Александр
Вопрос № 559 |
Здравствуйте, моя проблемка:
Никак не хочет работать буф. ввод, т.е. код:
---------------------------------------
DOSSEG
.model small
.stack 100h
.data
TreeChars db 3 dup (?)
.code
Begin:
mov ax,@data
mov ds,ax
mov bx, offset TreeChars
mov ah,0Ah
int 21h
mov ah,4ch
int 21h
End Begin
---------------------------------------
ратотать "не хочет", если заменю ф-ию 0Ah на 01h - работает, но это посимвольный ввод, а мне нужно ввести число...
Очень прошу помоч...
Вопрос отправлен: 27.06.2002, 10:47
Отправитель: MrGarry (MrGarry@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Добрый день, MrGarry!
Ну так, батенька, вы не правильно задаете буфер для ввода.
Насколько я понял, вам нужны 3 цифры? (Кстати, "три" по английски будет Three, а Tree - это "дерево").
Буфер нужно задать вот так:
ThreeChars db 3, 5 dup (?)
Почеиу 5? Потому что использование функции 0ah предполагает следующее:
ah = 0ah
ds:dx = адрес буфера для ввода с указанием максимального количества вводимых символов (1 - 254).
На выходе буфер выглядит так:
max, len, введенные символы, CR (0dh)
len - количество реально введенных символов (len <= max) без учета символа CR.
Т.е. реально буфер должен иметь размер max + 2.
Ответ отправлен: 27.06.2002, 12:15
Отправитель: Ayl
Отвечает Guess Who
Здравствуйте, MrGarry!
Во-первых: mov dx, offset TreeChars.
Во-вторых: TreeChars db 4,3 dup (?) - буфер должен содержать кол-во вводимых символов.
В-третьих: Three, а не Tree(дерево).
Ответ отправлен: 27.06.2002, 12:06
Отправитель: Guess Who
Отвечает baldr
Здравствуйте, MrGarry!
Нет, не все так просто! Буфер должен содержать первым байтом свою максимально возможную длину,
а второй байт устанавливается в число прочитанных на самом деле символов. Сам введенный текст
помещается начиная с третьего байта буфера. Делай так:
buffer:
buflen db 3
bufent db 0 ;Это - прерывание изменит само
mydata db 3 dup (0)
И загружай в DS:DX сам buffer.
Читать можно будет с mydata.
Ответ отправлен: 28.06.2002, 00:34
Отправитель: baldr
Отвечает VicSimon
Добрый день, MrGarry!
Адрес буфера должен быть в DS:DX, а у тебя в DS:BX.
Ответ отправлен: 27.06.2002, 10:56
Отправитель: VicSimon
Отвечает Blackeye
Доброе время суток, MrGarry!
А ты описание функции читал??? Не в bx нужно адрес строки пихать, а в dx. И еще, 3 байта маловато будет, если только не один символ будешь вводить. Ведь на входе 0 байт содержит в себе макс. длину строки, а на выходе 0,1 байт макс. длину строки и саму длину.
Ответ отправлен: 27.06.2002, 13:13
Отправитель: Blackeye
Отвечает Portnov
Добрый день, MrGarry!
DOS Fn 0ah вводит что-то вроде Pascal-style строки, подробнее - см. TechHelp.
С уважением, Portnov.
Ответ отправлен: 27.06.2002, 14:41
Отправитель: Portnov
Вопрос № 560 |
Огромное спасибо за ответ Эксперту VicSimon-у, на мой вопрос № 559.
Но ничего не изменилось, т.е. мне не чего не ввести с клавиатуры.
VicSimon-у>Адрес буфера должен быть в DS:DX, а у тебя в DS:BX.
Может, чего-то не понимаю? Прошу помоч.
Не работает буф. ввод, т.е. код:
---------------------------------------
DOSSEG
.model small
.stack 100h
.data
TreeChars db 3 dup (?)
.code
Begin:
mov ax,@data
mov ds,ax
mov dx, offset TreeChars ; изменил, но ничего не изменилось
mov ah,0Ah
int 21h
mov ah,4ch
int 21h
End Begin
---------------------------------------
ратотать "не хочет", если заменю ф-ию 0Ah на 01h - работает, но это посимвольный ввод, а мне нужно ввести число...
Очень прошу помоч...
Вопрос отправлен: 27.06.2002, 12:16
Отправитель: MrGarry (MrGarry@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Артём Шегеда
Доброе время суток, MrGarry!
А ты ответ Guess Who читал? Второй пункт ответа у него верен...
Ответ отправлен: 27.06.2002, 12:30
Отправитель: Артём Шегеда
Отвечает Broken Sword
Доброе время суток, MrGarry!
слушай буфер знаешь как должен выглядеть для 0Аh? Первый байт - макс.длина строки, второй - что хочешь (все равно после ввода будет равен реальному кол-ву символов) и затем макс.длина строки dup (?) или че уж там тебе нада, а не какие то db 3 dup (?) (как у тя)
т.е.
ThreeChars db 3,0,3 dup (?)
туда еще и 0Dh ляжет кстати
Ответ отправлен: 27.06.2002, 14:47
Отправитель: Broken Sword
Отвечает Shal
Добрый день, MrGarry!
0ah-это сложный ввод. Используй:
mov ah,9
mov dx,offfset buffer
int 21h.
Ответ отправлен: 27.06.2002, 16:21
Отправитель: Shal
Вопрос № 561 |
Привет masquer!
Не воспримай все так близко к сердцу - вопрос был всем, а ответил только ты:)
Насчет специалиста - я еще только учусь, а если конкретизировать то час ушел на установку Delphi(там то я и нашел этот метод)с 1 диска, 3 CD MSDN2001 и Visual Studio 2 CD(дальше просто VC++6.0->Edit->Find in Files и указываешь путь к поиску), а ругался я так на masm32 , потому что думал на года три мне его с Win32 Programmer Preference и WinSock2.0 для XP хватит с головой - а пришлось час втыкать и использовать нелицензионные продукты:( а вот Death(121) из gdi32.dll, ты с вероятнстью 80% не знал:)
Насчет метода - он универсален - все остальные производные от него - в программировании я мог ошибиться:) впрочем это оговорено, а физика и маметематика 95% гарантия, да и парень говорил что такое видел глазами:) - а критиковать без аргументов, как и теоритизировать от бессоницы я и сам умею...
Ну что... первый вопрос был - есть ли желание работать в команде над CAD или подобие 3DSMAX за просто так - мне делать не хрен все равно...а на диплом покатит:) - а по SSE - я бык - еще день прийдется тратить, а у меня 30-го экзамен, а потом отдых - Инета не будет 2 недели, буду работать с минимумом информации - кстати самый надежный метод:) помнишь invoke DeleteService,hRusFAQ? - короче если у тебя не паранойя дай пожалуйста e-mail, авось и я на что-нить сгожусь:)
Дальше:
U>Приветствую Вас, BorIS!
U>Ты вопрос понял, чего ты хочешь? Оптимизировать там можно U>только процедуру RotateObject, используя SSE, но я лично U>смысла не вижу, но у тебя же свое мнение, не так ли, куда U>нам.
I>из ВАС то -
один ты и остался(молись чтобы люди на работу подтянулись и протрезвели от пива или чего там нонче пьют программисты:),а то так и будешь masquer Батькович(на ВЫ и шепотом - я ведь SSE не знаю:():)А на моё мнение не обижайся, оно у меня до лучших времен МОЁ - диагноз обязывает - параноидальная sheisoffрения, сегодня опять пришлось объяснять что мне лучше, я умный дурак становлюсь:(
Ну что мизер в открытую...без прикупа:)? - попробуем - Инет скоро будет копейки стоит, а "догайся что" БОООЛЛЛЬЬЬШИИИЕЕЕ ДДДЕЕННЬЬГГИИ...у нас академия отличников выпускает, а драйвера под Simens - сетевые процессоры(свой протокол вернее аш три и все это ниже TCP/IP стоит писать не кому) - потому как оличники дипломы пишут на Delphi и масксимум что могут это красиво оформить диплом, а вот подключить dll написанную на c++:)? - у них бедняг даже glut32.h&lib&dll - НЕТ:) - я прозрел - инет есть - кафедра САПР а glut - нет - парадокс, я предложил напсать её на асме - тип испугался, схватил glut и убежал:( Кстати их все равно берут работать - борльше некого:они пишут драйвера наверное методом мозгового штурма и пивного возлияния, или вообще их купят за "тугрики зеленые" у Билла - под Линукс:))
Кстати интересная заморочка - у тебя в анкете написано, что ты с Николаева,а на конкурсе была ПОЛЬША - вот и верь после этого ЛЮДЯМ(???)
U'r welcome:mark@sns.net.ua
P.S. Просьба: пиши пожалуйста, уж если пишешь, ответ 30(включительно) и позже, а то у меня(см.выше) а там серьозная штука теорема Понтягина-Корчаковкого о достаточном условии существования планарного графа( деревья, а там и до хэширования рукой подать:)не фонтан - но брызки есть - методы LU-разложения матрицы ЛАУ:)
Но пасаран - мертвые не здаются!(пошел я спать, а то так не долго и до больнички дописаться:)Да кстати с SSE облом - у меня 686(II) - да и то шина 66 - так что обойдусь MMX и прости за dmFields - описался малость - главное что ты понял..
BorIS
Вопрос отправлен: 27.06.2002, 13:29
Отправитель: BorIS
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Приветствую Вас, BorIS!
Отвечу в рассылке, т.к. не планирую переписку.
1. Я не принимаю близко к сердцу, меня просто, скажем так, несколько раздражает твой стиль написания - обрывками, не хочу я сидеть и склеивать из всего твоего сообщения нужную информацию - пиши четко и внятно.
2. Я, вобщем-то, графикой не очень интересуюсь, по крайней мере сейчас и про эту скрытую функцию я не знал (но приду посмотрю в иде, что там твориться), мне просто показалось подозрительным что такая функция, пусть даже скрытая, существует.
3. Насчет работать в команде - во-первых, я достаточно ленивый, во-вторых графикой не занимаюсь (разве что плагины для фотошопа пишу), в-третьих мне сложно работать с человеком не видя его, непосредственно не общаясь.
4. Тот абзац где написано "masquer Батькович" я вообще не понял - это наезд какой-то хитрый или лирическое отступление :)
5. Насчет ПОЛЬШИ - верь анкете, ее ведь я сам заполнял, а польша произошла, видимо, от того, что у меня мыло на бесплатном сервере pochta.ws и BrokenSword решил, что это Варшава :)))), кстати мое мыло в той же анкете должно быть
6. Пошлю когда пошлю - прочитать то все равно сможешь, а после 30 - продублирую.
Ответ отправлен: 27.06.2002, 14:52
Отправитель: masquer
Вопрос № 562 |
Написал я на c++ такого рода выражение r = (r*r)/(2-r); компилятор сделал вот такой код:
mov eax,[ebp-04h]
imul eax,[ebp-04h]
mov ecx,00000002h
sub ecx,[ebp-04h]
cdq
idiv ecx
mov [ebp-04h],eax
Вроде все понятно, код простой, но, причем тут CDQ? Зачем она тут нужна, ведь нигде в дальнейшем и упоминания о edx нет?
З.Ы: Недо многолсловить о том что это за команда, я и сам знаю :)
Вопрос отправлен: 27.06.2002, 13:31
Отправитель: Andy
[Следующий вопрос >>] [Список вопросов]
Отвечает Артём Шегеда
Доброе время суток, Andy!
А как же деление на двойное слово? Оно требует в качестве делимого edx:eax. Вот edx и подчищается (точнее в него раширяется знак eax).
Другой вопрос: а зачем это нужно - ведь в результате умножения получаем два двойных слова, а в результате деления - двойное слово и остаток. CDQ здесь действительно не нужен...
Ответ отправлен: 27.06.2002, 13:46
Отправитель: Артём Шегеда
Отвечает Ayl
Здравствуйте, Andy!
Ну, дело в том, что переменная r, похоже, имеет размер 32 бита. Поэтому компилятор действует в этих рамках. И хотя после imul у нас в edx:eax находится подготовленное для деления число, он считает нужным преобразовать результат умножения к нужному виду.
А упоминание о edx есть, хотя оно и скрытое. При выполнении команды idiv ecx выполняется деление edx:eax на ecx. Частное помещается в eax (и потом записывается в локальную переменную r), остаток находится в edx и игнорируется.
Ответ отправлен: 27.06.2002, 13:56
Отправитель: Ayl
Отвечает masquer
Доброе время суток, Andy!
Компилятор не знает заранее, не будет ли остатка от деления, поэтому и предохраняется, если этого не сделать, а остаток будет - получишь исключение
Ответ отправлен: 27.06.2002, 14:03
Отправитель: masquer
Отвечает Portnov
Приветствую Вас, Andy!
IDIV здесь делит пару EDX:EAX на ECX, а потому нужно позаботиться о соответствующем содержимом EDX.
С уважением, Portnov.
Ответ отправлен: 27.06.2002, 14:41
Отправитель: Portnov
Отвечает Александр
Приветствую Вас, Andy!
Элементарно, ВАТСОН! Когда ты умножаешь 32-битное число на 32-битное, то в результате может получиться 64-битное. Поэтому когда производится обратная операция деления на 32-битный делитель, то процессор считает, что делимое 64-битное и хранится в паре EDX:EAX. Причём результате выполнения деления попадёт в регистр EAX, а в EDX будет остаток. Так какой нормальный человек на остаток смотрит.
Ответ отправлен: 01.07.2002, 08:24
Отправитель: Александр
Отвечает Blackeye
Приветствую Вас, Andy!
IDIV делит пару EDX:EAX на регистр, или число. В твоем случае на EAX. Поэтому компилятор и расширяет EAX в EDX.
Ответ отправлен: 28.06.2002, 08:54
Отправитель: Blackeye
Вопрос № 563 |
Привет - я проспался - будет легче:)
То что ты ленивый - так меня зовут ЛЕНЬ:)
То что ты работать не можешь, не видя - так люди таким образом системы пишут:)вполне конкурентноспособные:)
Дальше...
Отвечает masquer
Приветствую Вас, BorIS!
Отвечу в рассылке, т.к. не планирую переписку.
1. Я не принимаю близко к сердцу, меня просто, скажем так, несколько раздражает твой стиль написания - обрывками, не хочу я сидеть и склеивать из всего твоего сообщения нужную информацию - пиши четко и внятно.
2. Я, вобщем-то, графикой не очень интересуюсь, по крайней мере сейчас и про эту скрытую функцию я не знал (но приду посмотрю в иде, что там твориться), мне просто показалось подозрительным что такая функция, пусть даже скрытая, существует.
3. Насчет работать в команде - во-первых, я достаточно ленивый, во-вторых графикой не занимаюсь (разве что плагины для фотошопа пишу), в-третьих мне сложно работать с человеком не видя его, непосредственно не общаясь.
1.Раздражительность - признак стресса - отдохни(ну не могу я официозно) да из твоего стиля я извлекаю очень много полезной информации:)
2.Я тебе кусок пошлю 100% отключает gdi только мышь IDC_ARROW - этого я не понял:( Подозрительность - принзнак паранойи, а доверчивость черта Бога - лавируй...А в винде много - непоняток, да возми ниже - masm32 -ml - есть такая директива load all - загружает все( и ситемные) регистры откуда не знаю - так вот masm её не знает, а есть ведь - www.happytown.ru - статья про память - 95% - ты не знал ставки растут:)
3. Мне то нужно только пару-тройку советов в день(на первое время) - чтобы не изобретать самокат.Так вот с идой я не дружу - слишком долго вникать. А так как ты дружишь объясни аборигену - есть окно закрывает весь экран, как сделать так чтобы память на Destop под окном и другие окна в крайнем случае легла на винт в pagefile.sys, а лучше вообще я её мог контролировать - типа модальный по всем показателям буфер видяхи для рисования, я туда пишу, читаю, рисую вообщем, а процессор хлебом не корми дай меня слушать только и не отвлекаться на другие окна. Кроме приоритета реального времени для процесса есть еще какие-нить механизмы? Вообщем как в Q3Arena.Пока все.если опять туманно - пиши уточним.
P.S. На десерт про ВАС:)
Ваш Вопрос № 556
Вывод: НЕ КУРИТЕ АНАШУ ПО УТРАМ! ДО СЛЕДУЮЩЕГО УТРА БЕЗ ДЕВКИ...ЛЕДИ СОРРИ...GOLF!!! НЕ УСНЕТЕ ДА И ТО СМОТРЯ КАКАЯ ПОПАДЕТСЯ
Вопрос отправлен: 27.06.2002, 04:25
Отвечает Федос
Доброе время суток, BorIS!
lf blb ns cj cdtq theyljq/ Cgfvth abujd/
PacLLI0|0PyeLLI - HanuLLIeLLIb.
Эксперт: Федос
Ответ отправлен: 27.06.2002, 14:07
Дата регистрации эксперта: 10.06.2002
Статус эксперта: Доверительный
Получено вопросов: 156
Отправлено ответов: 30
Благодарностей: 0
Критики: 0
Общий рейтинг: 117.94
Россия, Чердаклы
Единственный кроме твоих ответ - у кого что болит тот о том и говорит:) Я после 3 слов переводить не захотел - обидно за чела старался ведь:)
u'r welcome:mark@sns.net.ua
Да кстати в анкете мыла та и не было когда я смотрел, лень смотреть еще раз.
BorIS
Приложение:
Вопрос отправлен: 27.06.2002, 16:16
Отправитель: BorIS
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Доброе время суток, BorIS!
"ставки растут" - а в чем растут, я так понял ты меня на профпригодность проверяешь или как, по LOADALL добавлю что берется все не из ниоткуда, а из таблицы, на которую указывает ES:EDI - понизил ставки? То, что MASM этого незнает и так понятно, что мешает тебе написать LOADALL equ dw 070fh. Насчет захвата ресурсов, точно не скажу, но слышал что в самой OpenGL что-то есть для этого. Код твой позже посмотрю, сейчас некогда. Ладно, записывай мыло: masquer@pochta.ws
Ответ отправлен: 27.06.2002, 19:14
Отправитель: masquer
Вопрос № 564 |
Эксперты!
Где я могу ПОДРОБНО узнать о строениии и архитектуре 286, 386, 486 процессоров ( с точки зрения програмирования на асме), ну например какие команды поддерживает каждый процессор,есть ли сопроцессор, какие тактовые частоты , какие ещё навороты появились в 486.Желательно по мылу или точный линк.
С уважением Vint by Shz.
Вопрос отправлен: 27.06.2002, 19:19
Отправитель: Vint by Shz (vitalii@shadrinsk.zaural.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Доброе время суток, Vint by Shz!
goto developer.intel.com
Ответ отправлен: 27.06.2002, 21:06
Отправитель: masquer
Отвечает baldr
Добрый день, Vint by Shz!
О процах можно узнать полностью - на сайтах производителей. Также покопавшись на,
скажем, emanual.ru или еще таких же сайтах. Если у тебя нет проблем с чтением
технических текстов на буржуинглише - я вообще не понимаю, почему ты это все :)
спрашиваешь, когда есть такой поисковик, как Яндекс (или мой любимый по привычке Рамблер)!
А вообще, есть такая книжка: М.Гук. Процессоры Penium II, Pentium Pro и просто Pentium.
изд-во "Питер". Там все, кажется, с точностью до сигналов на процессоре рассказывается. А
еще была книжка того же автора - "Аппаратные средства IBM PC" - классная штука - как
справочник, там много всего! Он полнее предыдущей.
Кстати, если покупаешь книги по программированию, совет: не бери книги
издательства bhv - там только ламерские вопросы рассматриваются, а по делу нифига нет.
"Питер" и "ДМК" - это серьезные ребята!
Ответ отправлен: 28.06.2002, 00:42
Отправитель: baldr
Отвечает kostik
Приветствую Вас, Vint by Shz!
Прямая дорога тебе на developer.intel.com
Ответ отправлен: 28.06.2002, 01:34
Отправитель: kostik
Вопрос № 565 |
С какой документации лучше начать изучение ассемблера, какие книги, учебники изучить. Как быстро научиться программировать на ассемблере?
Вопрос отправлен: 27.06.2002, 22:14
Отправитель: Romich
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Доброе время суток, Romich!
У меня сейчас где-то лежит Том Сван, единственная книга по асму которую я могу рекомендовать. Многие тут Зубкова предлагают, но я его не видел, ничего не скажу. А самое главное - опыт, пробуй, пиши, все получится.
Ответ отправлен: 27.06.2002, 22:36
Отправитель: masquer
Отвечает Broken Sword
Доброе время суток, Romich!
Ну, пресловутый Зубков С.В. очень помог...
Вообще все началось с лекции в институте
потом пошло все, что попадалось под руку. Любая информация об асме. Отладчик-вот что нужно на первых порах.
Журналы, статьи... инет. Любая информация.
Ответ отправлен: 28.06.2002, 02:31
Отправитель: Broken Sword
Вопрос № 566 |
Здравствуйте эксперты!
Помогите пожалуйста разобраться со следующей проблемой:
в книжке Зубкова, параграф 5.2.2 написано про локальные переменные, не до конца понимаю приведенный пример программы. Я так понимаю, что мы просто выделяем 6 переменных по два байта, к которым мы можем обращаться внутри процедуры по имени, я прав? Не понимаю, я почему программа не работает правильно, почему востанавливается и ip и cs, проверял. Ошибка заключается в том, что похоже, команда ret преобразуется в дальний возврат(0C2H 0006), но у Зубкова написано, что команда ret преобразуется в
зависимости от описания процедуры, а я описываю как ближнюю, даже если пишу retn 6, все равно не туда возвращается. Где глюка? Кстати, если написать db 0c3h,6
возвращается туда, куда надо. Использую TASM 5.0.
ЗЫ: Извините за путанность, но я сам не понимаю, чего не понимаю:), но, тем не менее, хочу объяснений.:) Проверьте пожалуйста и скажите, что вы обо всем этом думаете.
С уважением, ILYA D.
Приложение:
Вопрос отправлен: 27.06.2002, 22:22
Отправитель: ILYA D.
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Доброе время суток, ILYA D.!
Хе-хе, меняй компилятор, у меня под масмом (для виндовс) все прошло нормально
Ответ отправлен: 27.06.2002, 22:48
Отправитель: masquer
Отвечает Broken Sword
Добрый день, ILYA D.!
Насчет db 0C3h,6 - это не то, что ты думаешь ). Это просто
ret
pop es
вот и все (06 - опкод команды pop es, которая в данном примере не выполняется вообще). Для ret-а с параметром (сколько байт "забрать" из стека) существует только две формы: near (C2) и far (CA), все остальное (С3 и CB) - выход без "забирания" из стека лишнего.
Теперь про Зубкова...
Возвращается то оно туда куда нужно (после ret 6 на адрес 0103h), только дело в том, что sp уже не указывает на ноль в стеке (который вначале валялся по FFFEh), и, следовательно по ret-у мы уже выйти никак не можем, только int 20h.
Теперь смотрим... В результате длительного разглядывания и втыкания удалось установить следующее:
Во первых, данный пример многоуважаемый дето явно стянул... Это видно из картинки на след. странице. Видно, что x,y,z попали в стек ДО вызова процедуры, а уже после вызова и push bp туда запихали l,m и n. Кстати, об этом факте НИГДЕ ни до ни после не упоминается. Зубков сам себя (и нас) явно запутывает: то он пишет что "на них можно ссылаться изнутри процедруы, как bp-2,bp-4,bp-6 и т.д.", а то вдруг "режет" переменные регистром bp на две части и обращается как bp+4 и т.д. и bp-2 т.д. (вверх и вниз), чем еще больше все запутывает. Далее, если переменных действительно 6 (как в примере видно по крайней мере в двух местах - на картинке и в самом коде), то ret 6 на самом деле достанет только 3 переменные (одна переменная - два байта), три остануться навечно похоронеными).
Короче он там такого напорол и наворотил, что так прямо сразу и не въедешь... разберусь - отвечу.
в приложении см. пример, сделанный "по-картинке", но в отличии от книжного - рабочий. там вообще надо sub sp,6 (непонятно зачем, обращение то идет по bp) заменить на add bp,6; содержимое dx выполняет роль всех переменных
Приложение:
Ответ отправлен: 27.06.2002, 23:58
Отправитель: Broken Sword
Отвечает Артём Шегеда
Здравствуйте, ILYA D.!
Значит, так...
1. "RET 6" здесь действительно не катит, тоскольку командой "mov sp,bp" мы уже освободили стек от локальных переменных. Потом выполнили "pop bp", что очень даже корректно. В стеке остался только адрес возврата - значит нужно выполнить только "ret".
2. Что касается "RET n", то эта инструкция предназначена не для освобождения стека от локальных переменных, а для освобождения стека от параметров процедуры (аргументов). Это тебя и запутало...
3. Для работы с локальными переменными и аргументами функций желательно использовать директивы ARG и LOCAL. Они очень облегчают работу и помогают избежать неприятных ошибок. Если ещё не скачал доку с моего сайта, то очень рекомендую - http://shegeda.chat.ru/BP_Tasm_Doc.zip
Ответ отправлен: 28.06.2002, 10:52
Отправитель: Артём Шегеда
Отвечает Ayl
Добрый день, ILYA D.!
Ну, тут по-моему, просто ошибка. Судя по всему это пример использования команд enter и leave и демонстрация работы с параметрами процедуры и локальными переменными в процедуре. То, что описано как [bp + nn] - это параметры, которые должны быть переданы в процедуру. Для этого перед call foobar нужно сделать 3 push'а.
А вот то, что обозначено с помощью [bp - nn] - это локальные переменные процедуры.
В начале процедуры сохраняется bp и bp устанавливается на текущую вершину стека. После этого sp уменьшается на размер области, предназначенной для хранения локальных переменных. У нас их 3 размером по слову - соответственно, размер области равен 3*2 = 6.
Почему восстанавливается и cs, и ip? Не могу сказать точно, возможно глюк отладчика. Просто так как параметры в процедуру не переданы, то при увеличении указателя стека на 6 происходит "заворачивание" на начало сегмента. Может, поэтому у TD "крыша съезжает". Я уже с чем-то похожим у него сталкивался.
То что работает db 0c3h (6-ка тут вообще ни к чему) - это понятно. Просто это код команды retn. Параметров не передавали - вот и очищать нечего.
В общем, чтобы прога работала надо сделать одно из двух:
либо передать в процедуру параметры (например, push 1 2 3),
либо заменить команду ret 6 на ret.
Ответ отправлен: 28.06.2002, 11:30
Отправитель: Ayl
Вопрос № 567 |
Здравствуйте, уважаемые эксперты!
Я столкнулся с очень странной проблемой во время написания одного
резидента на ASMDOS. Он должен менять под дос'ом разрешение монитора и цвет фона, а также
выставлять на заданную позицию курсор. Первоначальной задачей стала наладка ввода с клавиатуры
значений, исходя из которых программа должна будет выставить соотв. разрешение. Так вот, вводимые
параметры в двоичном счислении должны иметь 2 разряда (3 для цвета фона), после ввода которых
прога автоматом переходит к след. пункту. Под win98, в эмуле dos'a, все идет замечательно. Но
если перезапустить машинку под dos, то начинается какой-то бред: в один раз вводится 3-5 разряда
К тому же резидент не всегда выгружается из памяти по предусмотренной комбинации клавиш, чего
НИКОГДА не случается в win98. Умираю без ПРАВИЛЬНО работающей программы. О-о-очень прошу...тихо
так... HELP!!!!!!! F1!!!!!!!F1!!!!!!! Просто уже не знаю в чем тут дело. В самом деле, если не
сделаю отчислят..=(. Спасибо за внимание. Дилетант Max.
Приложение:
Вопрос отправлен: 27.06.2002, 23:53
Отправитель: Max
[Следующий вопрос >>] [Список вопросов]
Отвечает Артём Шегеда
Доброе время суток, Max!
Ну, поскольку программа приложена (я надеюсь, не содрана у кого-то), то Вам, студент, можно и ответить что-нибудь...
"Уж сколько раз твердили миру, ..., да видно, всё не в прок, ..."
Директива ASSUME предназначена только для того, чтобы компилятор знал, по какому сегментному регистру следует обращаться к переменным. Если написано:
d1seg segment
var1 db ?
d1seg ends
d2seg segment
var2 db ?
d2seg ends
cseg segment
assume cs:cseg,ds:d1seg,es:d2seg
mov var1,12h
mov var2,23h
mov var3,34h
var3 db ?
cseg ends
то компилятор сгенерирует код так, что к var1 обращение будет по ds, то есть без префикса сегментного регистра (поскольку этот регистр для этой инструкции - по умолчанию), к var2 обращение будет по es, то есть префиксом сегментного регистра SEGES, к var3 обращение будет по cs, то есть префиксом сегментного регистра SEGCS. И компилятору глубоко безразлично, как в данное время установлены эти самые сегментные регистры.
Из всего выше изложенного следует два способа решения задачи.
1. Коль уж ты запушировал ds и es, то будь добр - проинициализируй их значением cs ("mov ax,cs" "mov es,ax" "mov ds,ax")
2. Убари из ASSUME назначение ds. В этом случае все обращения к переменным будут идти по cs. Программа увеличит свой размер, снизится скорость выполнения, и появится возможность для размножения ошибок (например, "mov bx,offset var3" "mov [bx],34h" приведёт к гарантированному сбою, поскольку var3 расположена в cseg, а последняя инструкция обратится по ds, - правильно будет так: "mov cs:[bx],34h")
Ответ отправлен: 28.06.2002, 11:28
Отправитель: Артём Шегеда
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (49) C / C++ (32) Perl (9) Delphi (16) Pascal (27) Basic / VBA (11) Java / JavaScript (6) PHP (7) MySQL / MSSQL (8) |
Пользователю Windows 95/98/Me (46) Windows NT/2000/XP (36) "Железо" (41) Поиск информации (21) |
Администратору Windows NT/2000/XP (19) Linux / Unix (14) |
Юристу Гражданское право (9) Семейное право (4) Трудовое право (6) КоАП (3) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||