Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 746
от 08.07.2004, 09:20
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 5571 Отправлено ответов: 15115 Активность: 271.3 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
bocha Статус: Опытный Общий рейтинг: 137.09 [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 109.48 [Подробней >>] |
Tigran K. Kalaidjian Статус: Профессиональный Общий рейтинг: 194.93 URL: Оптимизация ПК [Подробней >>] |
fC Статус: Профессиональный Общий рейтинг: 132.11 URL: Самоподобие сетевого трафика [Подробней >>] |
flasher Статус: Доверительный Общий рейтинг: 105.46 [Подробней >>] |
Dragoon Статус: Доверительный Общий рейтинг: 106.68 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 116.68 [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 133.79 URL: Super Assembler Software Телефон: НСС +7 831 3107039 [Подробней >>] |
Стас Статус: Опытный Общий рейтинг: 126.89 [Подробней >>] |
Snowm@n Статус: Опытный Общий рейтинг: 110.33 [Подробней >>] |
Foamplast Статус: Профессиональный Общий рейтинг: 139.73 URL: мой личный сайт [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 5537. Hi всем. У меня такой вопрос под DOS. Есть 2D игра, а в этой игре два объекта состоящие только из ли... (ответов: 3)
Вопрос № 5538. Скачал SoftIceNT, установил, жму Ctrl+D, но ничего не происходит. Т.е. SoftIce по-видимому запускает... (ответов: 1)
Вопрос № 5539. Здравствуйте, уважаемые эксперты! Мне 16 лет, учусь программированию уже 3 года, и вот что знаю: я... (ответов: 3)
Вопрос № 5540. Привет Эскпертам! Как узнать последний бит(0 или 1) регистра EAX?... (ответов: 6)
Вопрос № 5542. Привет Всем! Подскажите плиз, как прочитать строку до определённого знака? например: есть строка &qu... (ответов: 4)
Вопрос № 5543. code? i db 256 dup(?) А как можно выделить для переменой i память(в самой программе)? к примеру 512 ... (ответов: 3)
Вопрос № 5544. mov eax, 25 mov ecx,5 div ecx Почему выходит ошибка Integer Overflow? И еще как в памяти записаны чи... (ответов: 4)
Вопрос № 5545. Привет Стас! >DOS? Windows? Другие подробности? Windows, нуно копировать текст до ! знака, ну а пото... (ответов: 1)
Вопросов: 8, ответов: 25
Вопрос № 5537 |
Hi всем. У меня такой вопрос под DOS.
Есть 2D игра, а в этой игре два объекта
состоящие только из линий при встрече
проходят сквозь друг друга, как привидения.
Как определить пересечение двух линий???
Вопрос отправлен: 01.07.2004, 16:25
Отправитель: Vitaliy (Lytonin@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает bocha
Приветствую Вас, Vitaliy!
Открой учебник по матиматике за 7 класс и там посмотри как решается система двух линейных уравнений.
Ответ отправлен: 02.07.2004, 16:18
Отправитель: bocha
Отвечает Dark_Lord
Доброе время суток, Vitaliy!
Тут математика. У каждой прямой есть уравнение, в программе его можно записать как x*A+y*B=C, где A,B,C уникальны для каждой прямой (о том как их высчитать смотри учебник по алгебре!). Если решить систему уравнений из двух уравнений прямых, то получаем точку пересечения (если не паралельны), потом смотришь, находится ли точка пересечения в пределах линии, которая лежити на прямой, которую ты использовал для расчёта.
Ответ отправлен: 01.07.2004, 19:36
Отправитель: Dark_Lord
Отвечает Tigran K. Kalaidjian
Приветствую Вас, Vitaliy!
Я скажу первое, что в голову пришло, но может дать ход мысли:
1. Если пользуетесь отрисовкой линии без готовых процедур, то элементарно проверять цвет точки, которую Вы хотите закрашивать – а может там кто-то поработал.
2. Если с готовыми процедурами, то производить вывод в другую область памяти, нежели используемую область видео (скажем, неиспользуемую страницу видеопамяти), причём закрасить эти 2 объекта в разные цвета, скажем цвет_1 и цвет_2. Отрисовка каждого объекта происходит по отдельности, т.е., скажем, сперва первый, затем второй. Затем вывести всё тоже на другую страницу видеопамяти, но в другой очерёдности, сперва второй, потом первый. В конце концов, сравнить интересующие области картинки: область пересечения на одной странице будет цвета цвет_1, а на другой цвет_2, остальные области будут идентичными по цвету. Теперь мы знаем, где находится искомая область и можем менять картинки на используемой видеостранице.
Вот и всё: размышления из теории множеств =)
2ЭКСПЕРТЫ: я вернулся. Жаль не видно многих знакомых имён...
Ответ отправлен: 01.07.2004, 22:36
Отправитель: Tigran K. Kalaidjian
Вопрос № 5538 |
Скачал SoftIceNT, установил, жму Ctrl+D, но ничего не происходит.
Т.е. SoftIce по-видимому запускается(курсор перестает двигаться), однако само окно не рисуется. При повторном нажатии Ctrl+D SoftIce закрывается (если он вообще открывался). Что делать?
Thanks.
Вопрос отправлен: 03.07.2004, 02:52
Отправитель: RARR
[Следующий вопрос >>] [Список вопросов]
Отвечает fC
Доброе время суток, RARR!
Версия Soft Ice какая? Версия Windows какая?
Ответ отправлен: 03.07.2004, 03:05
Отправитель: fC
Вопрос № 5539 |
Здравствуйте, уважаемые эксперты!
Мне 16 лет, учусь программированию уже 3 года, и вот что знаю:
язык уровень знаний
php среднее
vb хорошо
pascal среднее
asm мало
html среднее
js среднее
c++ мало
Как Вы считаете это нормально за 3 года?
Вопрос отправлен: 03.07.2004, 12:52
Отправитель: highQ
[Следующий вопрос >>] [Список вопросов]
Отвечает flasher
Здравствуйте, highQ!
Мало! :)
html - чё там учить-то, что ты на среднее знаешь :)
лучшеб хорошо изучил асму и си.
Ну а ваще-то ты ещё молод, всё у тя в переди.
Удачи!
Ответ отправлен: 03.07.2004, 15:15
Отправитель: flasher
Отвечает Tigran K. Kalaidjian
Здравствуйте, highQ!
Хорошо твёрдо программировать на одном языке - остальное можно по справочникам. На личном примере - после паскаля и ассемблера можно любой язык освоить за час (только, может быть на с++ больше времени потребуется)
За три года? Хм... Нормально - главное не сроки, а качество программирования.
Мне, кстати, тоже 16 лет.=) Паскаль и Си изучил в 9-м классе, ассемблер - в 10-м. В 11-м не до этого было.
Ответ отправлен: 03.07.2004, 20:44
Отправитель: Tigran K. Kalaidjian
Отвечает Dragoon
Здравствуйте, highQ!
Решай сам.
Я за год (полный год будет в октябре)
php мало
c++ мало
pascal - хорошо
delphi - хорошо
asm - хорошо
html - средне
java - мало
Ответ отправлен: 04.07.2004, 15:30
Отправитель: Dragoon
Вопрос № 5540 |
Привет Эскпертам!
Как узнать последний бит(0 или 1) регистра EAX?
Вопрос отправлен: 03.07.2004, 13:21
Отправитель: hd
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Здравствуйте, hd!
Последний - это какой? Младший или старший?
Если младший, то например, так:
test eax, 1
jz bit0
bit1:
или, если значение в регистре не нужно, то так:
rcr eax, 1
jc bit1
bit0:
Для старшего можно так:
test eax, 80000000h
jz bit0
bit1:
или так:
rcl eax, 1
jc bit1
bit0:
Ответ отправлен: 05.07.2004, 12:40
Отправитель: Ayl
Отвечает Tigran K. Kalaidjian
Доброе время суток, hd!
Последний справа или слева ?
----------------------
and eax, 1 ;оставляем последний бит - остальные срезаем
jz zero
...
nonzero: ;если единица
...
zero: ;если ноль
----------------------
Естественно, если нужно, eax заранее сохраняем.
Ответ отправлен: 03.07.2004, 20:28
Отправитель: Tigran K. Kalaidjian
Отвечает Евгений Иванов
Здравствуйте, hd!
наконец-то вопрос чисто по программированию и по Ассемблеру..
shl eax,1
jc bit_is_set
;-----------
test eax, 8000h
jnz bit_is_set
;-------------
удачи!
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 04.07.2004, 12:27
Отправитель: Евгений Иванов
Отвечает Стас
Доброе время суток, hd!
Еще лучше test eax,1
Test это то же что и and только не влияет на сам регистр, а только на флаги. (Проверить старший бит - test eax,80000000)
Ответ отправлен: 03.07.2004, 21:09
Отправитель: Стас
Отвечает bocha
Доброе время суток, hd!
and eax, 80000000h
jnz куда_надо_если_32_й_бит_eax_единица
Ответ отправлен: 03.07.2004, 14:51
Отправитель: bocha
Отвечает Snowm@n
Приветствую Вас, hd!
and eax,1
Ответ отправлен: 03.07.2004, 18:18
Отправитель: Snowm@n
Вопрос № 5542 |
Привет Всем!
Подскажите плиз, как прочитать строку до определённого знака?
например: есть строка "Flashik!text", нуно читать до "!" и вывести на экран, а именно слово "Flashik".
Посиба заранее!
Вопрос отправлен: 03.07.2004, 16:04
Отправитель: Flashik
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Добрый день, Flashik!
Ну а в чем проблема? Сканируешь строку и сравниваешь:
lea si, stroka
@@rep:
lodsb
cmp al, '!'
jz @@cont
int 29h
jmp short @@rep
@@cont:
...
stroka db 'Flashik!text'
Ответ отправлен: 05.07.2004, 12:43
Отправитель: Ayl
Отвечает Tigran K. Kalaidjian
Добрый день, Flashik!
см. приложение
2ЭКСПЕРТЫ: Я таки поступил на ФизФак МГУ !!!
Приложение:
Ответ отправлен: 04.07.2004, 12:52
Отправитель: Tigran K. Kalaidjian
Отвечает Стас
Приветствую Вас, Flashik!
DOS? Windows? Другие подробности?
Вообщем ищешь "!" scasb меняешь на 00h и выводишь.
Если нельзя изменять - копируешь до найденого "!" в другое место, ставишь там 0 и выводишь.
Ответ отправлен: 03.07.2004, 21:12
Отправитель: Стас
Отвечает Snowm@n
Доброе время суток, Flashik!
i:=0;
while s[i]<>'!' do write(s[i]);
Переделать в ASM дело техники...
Ответ отправлен: 03.07.2004, 17:57
Отправитель: Snowm@n
Вопрос № 5543 |
code?
i db 256 dup(?)
А как можно выделить для переменой i память(в самой программе)? к примеру 512 байт.
Вопрос отправлен: 03.07.2004, 17:37
Отправитель: hd
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Приветствую Вас, hd!
Call GlobalAlloc, GPTR, 512
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 04.07.2004, 12:28
Отправитель: Евгений Иванов
Отвечает Стас
Доброе время суток, hd!
Для DOS: функции 48h,49h,4ah 21 прерывания.
Для windows: GlobalAlloc, LocalAlloc.
Вопрос неоднократно поднимался. См. рассылку.
Ответ отправлен: 03.07.2004, 21:19
Отправитель: Стас
Отвечает Foamplast
Добрый день, hd!
Честно говоря, я вопрос не понял. При Вашем способе записи память выделяется в самой программе.
Догадываюсь: вопрос был "как программно выделить память?"
Ответ:
Для этого необходимо вызвать соответствующие функции операционной системы. Под ОС "Виндовс" это достигается с помощью функций GetProcessHeap(), HeapAlloc(), HeapFree(), HeapReAlloc(). Ещё могут понадобиться HeapCreate() и HeapDestroy().Принципы работы:
- С помощью GetProcessHeap() обретается хэндл кучи процесса. Он используется при вызовах HeapAlloc() и HeapFree().
- С помощью HeapAlloc() память выделяется, с помощью HeapFree() - возвращается.
- Если в выделенный участок были записаны данные, и ожидаются дополнительные данные, а размеров этого участка не хватает - используется HeapReAlloc().
- Если ожидаемый совокупный размер данных больше размеров кучи процесса, можно использовать HeapCreate() и HeapDestroy() для создания кучи и её удаления (в конце работы). Функция HeapCreate() также позволяет создавать растущую кучу, размер которой увеличивается при необходимости.
- Функции HeapAlloc() и HeapReAlloc() возвращают указатели на выделенную память.
Если необходимо выделить 512 байт под переменную i, то делается следующее:UNIX:GetProcessHeap
Jz .errgetheap ; случилась ошибка получения хэндла кучи
Mov [hHeap], Eax
HeapAlloc [hHeap], HEAP_ZERO_MEMORY, 512
Test Eax, Eax
Jz .erralloc ; случилась ошибка выделения памяти
Mov [pointer_to_i], Eax
...
Mov Eax, [pointer_to_i]
Mov Cl, [Eax + 131] ; чтение из 132-го байта
Mov [Eax + 146], Cl ; запись в 147-й байт
...
HeapFree [hHeap], 0, [pointer_to_i]
Test Eax, Eax
Jz .errfree ; случилась ошибка освобождения памяти
Mov [pointer_to_i], 0 ; чтоб знать, что память не выделена (освобождена)
Используются функции malloc(), free() realloc().
Ответ отправлен: 07.07.2004, 16:12
Отправитель: Foamplast
Вопрос № 5544 |
mov eax, 25
mov ecx,5
div ecx
Почему выходит ошибка Integer Overflow? И еще как в памяти записаны числа с запятой?
Вопрос отправлен: 03.07.2004, 19:25
Отправитель: hd
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Добрый день, hd!
забыл
sub edx,edx
* EMan: -=- Любовь существует! =-=
Ответ отправлен: 04.07.2004, 12:28
Отправитель: Евгений Иванов
Отвечает Dark_Lord
Добрый день, hd!
1) Обнули edx перед делением и всё заработает
2) Смотря какие числа с запятой! Числа с плавающей точкой находятся в формате IEEE, а с фиксированной точкой как и обычные целые.
Ответ отправлен: 03.07.2004, 19:48
Отправитель: Dark_Lord
Отвечает Ayl
Доброе время суток, hd!
Потому что команда div ecx подразумевает деление 64-разрядного числа, содержащегося в регистрах edx:eax на 32-разрядный операнд (т.е. регистр ecx). Ты не очистил регистр edx - поэтому получил переполнение.
Ответ отправлен: 05.07.2004, 13:27
Отправитель: Ayl
Отвечает Tigran K. Kalaidjian
Доброе время суток, hd!
2 ответа по очереди:
1. вставьте в начале
xor edx, edx
или замените
mov ecx,5
на
mov cx, 5
Дело в том, что когда вы указываете в качестве параметра ecx, то выполняется вот такая операция
eax = edx:eax / ecx, что может вызвать переполнение.
2. Несколько битов на число A, несколько на B, где (A*2^B) – нужное число с плавающей запятой. Подробнее читайте у Зубкова.
Ответ отправлен: 03.07.2004, 21:13
Отправитель: Tigran K. Kalaidjian
Вопрос № 5545 |
Привет Стас!
>DOS? Windows? Другие подробности?
Windows, нуно копировать текст до ! знака, ну а потом забить нулём и вывести - это не проблема.
Я так понял scasb - ищет букву в троке, но как мне скопировать вес текст до этой буквы?
Посиба заранее!
Вопрос отправлен: 04.07.2004, 09:16
Отправитель: Flashik
[Следующий вопрос >>] [Список вопросов]
Отвечает Стас
Здравствуйте, Flashik!
Не в строке, а в пямяти. DS:DI-начало блока памяти, CX-протяженность, AL-что ищем. CLD ищем вперед, STD ищем назад. Repnz scasb-искать пока не найдем.
Загружай файл в память и сканируй. Если файл большой>65535 байт загружай блоками (т.к. scasb может сканировать на протяжении 65535(регистр CX) байт) или просто менять сегмент(для DOS) или смещение (в DI) (для виндов(если файл лежит в одном большом куске памяти)).
Ответ отправлен: 04.07.2004, 20:53
Отправитель: Стас
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (27) C / C++ (14) Perl (4) Builder / Delphi (19) Pascal (27) Basic / VBA (6) Java / JavaScript (5) PHP (13) Криптография (8) WinAPI (12) Радиоэлектроника (12) |
Пользователю Windows 95/98/Me (41) Windows NT/2000/XP (56) "Железо" (38) Поиск информации (16) |
Администратору Windows NT/2000/XP (33) Linux / Unix (16) |
Юристу Гражданское право (9) Семейное право (7) Трудовое право (8) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Адрес подписки |
Отписаться |
В избранное | ||