Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 395
от 19.10.2002, 13:20
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 1558 Отправлено ответов: 4843 Активность: 310.8 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Maverick Статус: Доверительный Общий рейтинг: 142.55 [Подробней >>] |
Bob Johnson Статус: Профессиональный Общий рейтинг: 153.33 [Подробней >>] |
Biv Статус: Опытный Общий рейтинг: 117.05 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 118.08 [Подробней >>] |
Portnov Статус: Профессиональный Общий рейтинг: 119.07 URL: Мой сайтик... [Подробней >>] |
masquer Статус: Профессиональный Общий рейтинг: 155.45 [Подробней >>] |
Sensey Статус: Профессиональный Общий рейтинг: 124.96 URL: Страничка рассылки по Паскаля... Телефон: +38 (0572) 41-76-04 дом. [Подробней >>] |
igorash Статус: Профессиональный Общий рейтинг: 118.45 [Подробней >>] |
baldr Статус: Профессиональный Общий рейтинг: 115.65 URL: Сайт об ОС DOS. Всем, кто любит эту ОС! [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 130.15 [Подробней >>] |
St Статус: Доверительный Общий рейтинг: 116.26 [Подробней >>] |
Eugene Статус: Доверительный Общий рейтинг: 116.52 [Подробней >>] |
VicSimon Статус: Доверительный Общий рейтинг: 103.66 [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 121.78 [Подробней >>] |
oleg Статус: Доверительный Общий рейтинг: 148.93 [Подробней >>] |
DiGiT[old] Статус: Опытный Общий рейтинг: 109.76 [Подробней >>] |
Broken Sword Статус: Профессиональный Общий рейтинг: 131.81 URL: моя рассылка по Protected Mode [Подробней >>] |
Gibbel Статус: Профессиональный Общий рейтинг: 108.36 URL: Страничка обо мне и моих друзьях [Подробней >>] |
Beeblebrox Статус: Профессиональный Общий рейтинг: 113.75 URL: Beeblebrox / TMA HomePage [Подробней >>] |
Pablo Статус: Профессиональный Общий рейтинг: 128.98 URL: Моя страничка [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 1492. Извините но ошибся языком.... (ответов: 2)
Вопрос № 1493. Добрый день Господа Эксперты! Благодарю за предыдущую помощь. Эта часть проги: procedure TMyAppl.Pr... (ответов: 3)
Вопрос № 1494. Всем привет! Я в тупике. Пишу Lines на асме под винду. Есть тектовый вариант алгоритма проверки прох... (ответов: 2)
Вопрос № 1495. Здрасте! Скиньте мне на мыло полное описание команд сайса на русском. Буду очень рад!... (ответов: 2)
Вопрос № 1496. Скажите название программ которые следят за нажатием клавиш и не появляются в контрл+алт+дел.... (ответов: 4)
Вопрос № 1497. Привет всем. Подскажите пожалуйста, как можно реализовать алгоритм генератора случайных чисел на язы... (ответов: 6)
Вопрос № 1498. Здравствуйте. При ассемблировании (masm32) получаю сообщение: error A2022: instruction operands mu... (ответов: 10)
Вопрос № 1499. Tovarishi experti! Pomogite! Beda! Prishlite please winsock.inc,winsock32.inc (ili 4to-to vrode) Gla... (ответов: 5)
Вопрос № 1500. Ещё раз привет. Извините меня, за некоторую назойливость. Но я не очень хорошо знаю ассемблер, поэто... (ответов: 3)
Вопрос № 1501. Подскажите, если можете! Я читал в давней рассылке, что можно в ДОСе перехватывать 21h прерывания. Н... (ответов: 8)
Вопрос № 1502. Как организовать вывод напрямую в видеопамять в текстовом режиме под WinXP по такому же типу как в D... (ответов: 3)
Вопрос № 1503. А как можно создать .com файл при помощи masm32? Да, я знаю, он не особо нужен, это пережиток DOS, н... (ответов: 5)
Вопрос № 1504. Здравствуйте товарищи! Вопрос ламерский конечно, но я начинающий. Вобщем мне надо высветить на экара... (ответов: 9)
Вопрос № 1505. Доброе время суток! У меня установлен Win98, под ним - MSDN. Недавно я поставил себе XP и хочу, чтоб... (ответов: 2)
Вопрос № 1506. Здравствуйте! Вернусь к вопросу который я задавал по поводу распределения памяти (int 21h 48h): как ... (ответов: 5)
Вопрос № 1507. Здравствуйте Ayl. Следуя Вашей инструкции записал правильный текст - см. приложение. Ассемблирование... (ответов: 1)
Вопрос № 1509. Blagodarnosti Mavericku,Olegu,BobJonsonu, Maskeru,St,i vsem ostalinim. ... (ответов: 2)
Вопрос № 1510. Вопрос о физической адресации памяти. С первыми 640 К всё понятно - они занимают физические адреса о... (ответов: 2)
Вопрос № 1511. Здраствуйте помогите мне нужно позарез,такое вот дело, прогу надо написать чтоб решать формулы,приза... (ответов: 2)
Вопросов: 19, ответов: 76
Вопрос № 1492 |
Извините но ошибся языком.
Вопрос отправлен: 14.10.2002, 14:47
Отправитель: Fess (fess_r@kuzbass.stack.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Здравствуйте, Fess!
А зачем же тогда нажимаешь отправить?
Ответ отправлен: 14.10.2002, 17:02
Отправитель: Maverick
Отвечает Bob Johnson
Доброе время суток, Fess!
Ничего, мы привыкли.
Ответ отправлен: 14.10.2002, 23:44
Отправитель: Bob Johnson
Вопрос № 1493 |
Добрый день Господа Эксперты!
Благодарю за предыдущую помощь. Эта часть проги:
procedure TMyAppl.PrintKnigiList;
var
f:text;
P:PKnigi;
KL:PCol;
procedure PrintKnigi(P:PKnigi);far;
var
f:text;
begin
with P^ do
writeln(f,Avtor^+' '+Name^+' '+Janr^+' '+Izdat^+' '+God^);
end;
begin
{$I-}
assign(f,'knigi.txt');
reset(f);
KL^.ForEach(@PrintKnigi);
close(f);
{$I+}
end;
В строке "writeln(f,Avtor^+' '+Name^+' '+Janr^+' '+Izdat^+' '+God^);" выдается ошибка что файл не открыт на запись. Не подскажете как ее решить.
Вопрос отправлен: 14.10.2002, 14:45
Отправитель: Fess (fess_r@kuzbass.stack.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Добрый день, Fess!
Ого, ты и второй раз ошибся.
Это вроде паскаль.
Нефиг пьяному к компу подходить :)
Ответ отправлен: 14.10.2002, 17:02
Отправитель: Maverick
Отвечает Bob Johnson
Добрый день, Fess!
Вполне логично, т.к. Reset открывает файл для чтения. Используй ReWrite или Append.
А на чем пишешь - Паскаль или Дельфи?
Ответ отправлен: 14.10.2002, 23:44
Отправитель: Bob Johnson
Отвечает Biv
Приветствую Вас, Fess!
Во первых с такими вопросами не сюда.
Во вторых, если ты создаешь файл в своей программе, то создавай его с параметрами чтения-записи, если открываешь существующий, то в досе, в ручную, убери "только чтение".
Ответ отправлен: 15.10.2002, 00:06
Отправитель: Biv
Вопрос № 1494 |
Всем привет!
Я в тупике. Пишу Lines на асме под винду. Есть тектовый вариант алгоритма проверки проходимости клеток, но или я чайник, или одно из двух. Волнойвой алгоритм, значит, понял только то, что надо просомтреть соседей на проходимость/непроходимость клетки, записать туда что-то, потом просмотреть соседей каждой из этих и т.д. Ну что дальше делать стими числами...? Если можно, потолковее, наверняка кто-то подобное делал. Удобнее даже через личный адрес, так быстрее. Помогите.
Вопрос отправлен: 14.10.2002, 14:58
Отправитель: -=TT=- (KunaevNA@PosolskyDom.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Доброе время суток, -=TT=-!
Да, есть такая штука. В общем, смотри. В начальную точку ставишь, допустим, 1. Далее смотришь соседей. Если клетка проходима, записываешь туда 2, иначе 0. Для всех клеток, где записана 2, проверяешь соседей. Если проходима - пишешь 3, иначе 0. И т.д. Т.е. на каждом шаге записываешь в проверяемые клетки число (номер_шага + 1), если клетка проходима, или 0, если непроходима. При достижении точки назначения идешь в обратном порядке по уменьшению чисел на каждом шаге. В случае, если на очередном шаге ни в одну клетку не поставлено ненулевое число - значит, пути нет.
После определения пути очищаешь все клетки.
Для реализации, я думаю, хорошо завести доп. поле для каждой клетки для пометки пути. А алгоритм должен легко реализоваться через рекурсию...
Ответ отправлен: 14.10.2002, 15:30
Отправитель: Ayl
Отвечает Bob Johnson
Добрый день, -=TT=-!
Волновой алгоритм делается так. Создаешь в своей программе очередь данных из структуры {x, y, n} (пишешь в конец, читаешь из начала, прочитанные элементы остаются). Берешь начальную точку и помещаешь ее координаты в очередь {x, y, n = -1) - это будет первый элемент. Далее - алгоритм:
1. Вытаскиваешь из очереди элемент (координаты точки). Если это координаты конечной точки - иди к п. 4. Если очередь пуста - значить такого пути нет.
2. Смотришь, куда можно попасть из данной точки и добавляешь координаты новых точек в очередь (если только их еще там нет - не дублируй) - {x, y, n = номеру элемента очереди, который ты вытащил на п. 1).
3. Идешь к п. 1
4. По n текущей точки определяешь, откуда "ты пришел" - т.е. номер элемента в очереди, из которого ты попал в текущую точку. По n этого элемента - определяешь, откуда ты попал туда и т.д. Т.е. таким образом получаешь свой путь в обратном порядке.
Ответ отправлен: 14.10.2002, 23:44
Отправитель: Bob Johnson
Вопрос № 1495 |
Здрасте!
Скиньте мне на мыло полное описание команд сайса на русском.
Буду очень рад!
Вопрос отправлен: 14.10.2002, 15:23
Отправитель: Sonik (kiselev@inbox.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Portnov
Доброе время суток, Sonik!
Держите... Правда, не уверен, что совсем полное.
Ответ отправлен: 14.10.2002, 17:06
Отправитель: Portnov
Отвечает Maverick
Доброе время суток, Sonik!
Держи.
Ответ отправлен: 14.10.2002, 17:05
Отправитель: Maverick
Вопрос № 1496 |
Скажите название программ которые следят за нажатием клавиш и не появляются в контрл+алт+дел.
Вопрос отправлен: 14.10.2002, 16:17
Отправитель: Jax
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Добрый день, Jax!
Конкретнее задавать вопрос надо.
Тебе что надо, название группы программ?
Так это резиденты, просто там програмно реализована маскировка.
Или что это за программы? Это клавиатурные шпионы.
А может конкретные названия? HookDump :)))
Ответ отправлен: 14.10.2002, 17:35
Отправитель: Maverick
Отвечает Bob Johnson
Доброе время суток, Jax!
Например, HookDump.
Если ты пишешь свою прогу и хочешь, чтобы она не появлялась по Ctrl-Alt-Del, использую функцию RegisterServeiceProcess - поиши ее поиском (именно поиском!) в MSDN.
Ответ отправлен: 14.10.2002, 23:44
Отправитель: Bob Johnson
Отвечает masquer
Доброе время суток, Jax!
Чего???
Мне проще написать такую программу, чем следить за названиями. Программы используют hooks и могут называться - keyloggers
Ответ отправлен: 14.10.2002, 16:39
Отправитель: masquer
Отвечает Biv
Приветствую Вас, Jax!
Извини за грубость, но ты сам понял что спросил, но я все равно попробую догадаться. Собирательное название таких фенек - хуки (or hooks if you want it in english).
Ответ отправлен: 15.10.2002, 00:10
Отправитель: Biv
Вопрос № 1497 |
Привет всем.
Подскажите пожалуйста, как можно реализовать алгоритм генератора случайных чисел на языке ассемблер.
С учётом того, что диапазон выбора должен быть произвольным.
Например от 134 до 356 или от -6 до 13.
Вопрос отправлен: 14.10.2002, 16:27
Отправитель: Sean
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Здравствуйте, Sean!
Обычно генераторы случайных чисел дают либо числа в интервале от 0 до 1 (нецелые), либо в интервале от 0 до 32767 или 2^31 (целые).
В первом случае тебе просто необходимо вычислить два числа (пусть min и max - диапазон требуемых чисел, rnd01 - функция rnd, возвращающая числа от 0 до 1):
b = min
a = (max - min)
rnd = rnd01*a + b
А алгоритм можно взять такой:
rnd' = {11*rnd + pi}
rnd' = {exp (rnd + pi)}
rnd' = arccos (cos (rnd + 10^9))/pi
где rnd' - новое значение rnd,
rnd - предыдущее значение rnd,
{} - операция нахождения дробной части числа
pi - число pi = 3.1415926...
Ответ отправлен: 14.10.2002, 23:44
Отправитель: Bob Johnson
Отвечает Maverick
Приветствую Вас, Sean!
Проще сделать псевдогенератор.
Брать значения таймера.
Ответ отправлен: 14.10.2002, 17:35
Отправитель: Maverick
Отвечает masquer
Приветствую Вас, Sean!
Проще всего привязаться к таймеру, несколько преобразований, ограничить область и все. Для более "случайных" чисел существуют достаточно сложные формулы для расчета, когда-то смотрел, сейчас не вспомню...
Ответ отправлен: 14.10.2002, 16:42
Отправитель: masquer
Отвечает Sensey
Здравствуйте, Sean!
Ну например(простейший)
Начальные константы
r1 dw 45752
r2 dw 54300
r3 dw 12300
GenRandom:
mov ax,r1
add ax,r2
mov r1,ax
add ax,r3
mov r2,ax
rcl ax,1
xor ax,8000h
mov r3,ax
;В АХ случайное число
А дальше приводишь делением в нужный тебе диапазон...
Ответ отправлен: 14.10.2002, 16:52
Отправитель: Sensey
Отвечает igorash
Приветствую Вас, Sean!
1. делай от 0 до 222, потом просто прибавь 134
2. от 0 до 19, потом отними 6
Ответ отправлен: 14.10.2002, 16:34
Отправитель: igorash
Отвечает Biv
Приветствую Вас, Sean!
в принципе никаких хитрых генераторов тебе не надо. Смотри сюда. Например тебе надо получить случайное число в отрезке от a до b. Делаем так: умножаем случайное число RAND(нормированное) на b-a. Получили случайное число на отрезке
от нуля до a-b. Далее сдвигаем отрезок [0, b-a] на а вправо и получаем отрезок [a, b]. А не этого ли нам надо было. Ну а что касается самого генератора то смотри ниже.
IN AL,40h
MOV CH,AL
IN AL,40h
MOV CL,AL
IN AL,40h
MOV AH,AL
IN AL,40h
MUL CX
Результат получится неплохой.
Ответ отправлен: 15.10.2002, 00:06
Отправитель: Biv
Вопрос № 1498 |
Здравствуйте.
При ассемблировании (masm32) получаю сообщение:
error A2022: instruction operands must be the same size
- это на строку
Message db 'TEXT_XXXXX'
Где определяется same size ?
Спасибо.
Приложение:
Вопрос отправлен: 14.10.2002, 16:50
Отправитель: Bayram Annanurov
[Следующий вопрос >>] [Список вопросов]
Отвечает masquer
Доброе время суток, Bayram Annanurov!
Опять двадцадь пять!!!
Во вторых у тебя здесь ошибка: mov dx,offset Message - ну так естественно - все офсеты 32-битные
А во первых собирать программу для ДОС компоновщиком для Виндов - сам понимаешь...
Используй либо компилятор соответствующий, либо пиши программы под Винды
Ответ отправлен: 14.10.2002, 17:18
Отправитель: masquer
Отвечает Maverick
Приветствую Вас, Bayram Annanurov!
Вместо строчки mov dx,offset Message
Напиши mov edx,offset Message
Ты просто пытаешся засунуть в 16битный регистр 32битное значение.
Или можешь диррективу .386 на .286 заменить.
Ну и еще ошибка в догонку:Message db 'TEXT_XXXXX'
а надо Message db 'TEXT_XXXXX$'
Ответ отправлен: 14.10.2002, 17:35
Отправитель: Maverick
Отвечает Ayl
Приветствую Вас, Bayram Annanurov!
Сначала об ошибке. При использовании модели flat подразумеваются 32-х разрядные смещения. Соответственно, конструкция offset Message имеет размер 32 бита и "запихнуть" их в 16-тиразрядный регистр не удастся.
Теперь поговорим о программе.
1. Зачем .386? Где-то используются специальные возможности этого процессора? Программа прекрасно будет работать и на 8086/8088. Так что первую строчку смело убираем.
2. .model flat, stdcall. А это зачем? Программа под Windows? Нет, т.к. используются прерывания DOS. Соответственно, нужно использовать модель памяти под DOS, лучше всего TINY для создания COM-файла. Пишем:
.Model TINY
3. .code
start:
Опа! Написали TINY, а указатель команд не переставили. COM-программа всегда начинается со смещения 100h. Соответственно, пишем либо ORG 100h, либо .StartUp - в последнем случае автоматически будет указано нужное смещение и проставлена метка начала программы.
4. int 20h для выхода из программы. Можно, конечно, и так, но лучше просто ret - при этом все равно будет выполнена команда int 20h, но код на 1 байт меньше. А если следовать руководству по написанию программ для DOS, то вообще надо использовать следующие команды для выхода:
mov ax, 4c00h
int 21h
5. Message db 'TEXT_XXXXX'. И это строчка для вывода? Не пойдет! Для 9-й функции 21-го прерывания строка для вывода должна заканчиваться символом '$'!
6. ret. Какой ret? Откуда? В это место мы уже никогда не попадем! Убираем
В результате см. Приложение.
Приложение:
Ответ отправлен: 14.10.2002, 17:40
Отправитель: Ayl
Отвечает baldr
Доброе время суток, Bayram Annanurov!
Даа.. Ну и наворочено у тебя! :-//
Во-первых, int 20h и ret - ret не надо, int 20h выполнится, а ret уже нет!
При использовании int 21h (9 функция), надо в конце ставить символ '$' - чтоб dos видел, где конец строки...
Зря ты используешь model flat! Лучше делай model tiny для com-программы!
Потом, не знаю как в masm, возможно, строку надо заключать в двойные кавычки? В tasm все равно...
Ответ отправлен: 14.10.2002, 17:29
Отправитель: baldr
Отвечает Bob Johnson
Доброе время суток, Bayram Annanurov!
Естественно, у тебя же модель - Flat, т.е. 32-разрядная, там и все offset 32-разрядные... И ошибка вылазит в строке № 8 (т.е. mov dx, offset Message). Надо либо mov edx, offset Message писать, либо не model small (model flat, stdcall - это под видны прога в чистом виде! а там тебе прерывания не придется использовать...)
Ответ отправлен: 14.10.2002, 23:45
Отправитель: Bob Johnson
Отвечает Dark_Lord
Здравствуйте, Bayram Annanurov!
Я так понимаю, действие происходит в дос! А параметр
".model flat" означает, что программа под Windows!!! А в Windows все смещения 32-битные, поэтому при попытке положить 32-битное смещение в dx, выдаётся ошибка! Исполбзуйте модель "tiny" или "small"!
Ответ отправлен: 15.10.2002, 20:50
Отправитель: Dark_Lord
Отвечает St
Привет, Bayram Annanurov!
Ваша ошибка в том, что вы пытаетесь писать 16-битную программу, но шаблон вашего файла явно предназначен для 32-битной (причем Windows) программы (.model flat , stdcall). Для 16-битной программы нельзя использовать model flat.
St
Ответ отправлен: 14.10.2002, 17:46
Отправитель: St
Отвечает Eugene
Доброе время суток, Bayram Annanurov!
; .386
мне кажется, что ваша программа пойдёт и на 8086 процессоре,
поэтому в .386 не вижу смысла
; .model flat , stdcall
неправильная модель, это модель программы под виндовс, а не
та, что нам нужно
; ; .data
; .code
; start:
не объявлено ORG 100h, в любой книжке по ассемблеру написано
для чего это наде делать, поэтому объяснять не буду
; mov ah,9
; mov dx,offset Message
; int 21h
; int 20h
; Message db 'TEXT_XXXXX'
т.к. мы пользуем 9-й сервис доса, в конце строки надо указать спец. символ $
; ret
это что такое ?
; end start
Приложение:
Ответ отправлен: 14.10.2002, 17:22
Отправитель: Eugene
Отвечает VicSimon
Здравствуйте, Bayram Annanurov!
Ругается не на строку
Message db 'TEXT_XXXXX'!
Ошибка здесь: mov dx, offset Message.
Так как в начале стоит директива .model flat, stdcall, ВСЕ смещения подразумеваются 32-разрядными! То есть, правильным (с точки зрения ассемблера) будет: mov Edx, offset Message.
Но, так как в досе (для которого написана программа) плоская модель памяти не поддерживается, необходимо 2-ю строку исходника заменить. Например, на .model tiny.
Ответ отправлен: 15.10.2002, 06:19
Отправитель: VicSimon
Отвечает ASMодей
Приветствую Вас, Bayram Annanurov!
У тебя получился 32-битный сегмент, а в таких сегментах
и смещения 32-битные, и ты пытаешься запихнуть это смещение
в 16-битный регистр. Так что MASM ругается по делу.
Ответ отправлен: 15.10.2002, 08:26
Отправитель: ASMодей
Вопрос № 1499 |
Tovarishi experti!
Pomogite!
Beda!
Prishlite please winsock.inc,winsock32.inc (ili 4to-to vrode)
Glavnoe 4to-bi bili constanti dlia raboti s SOCKETAMI:
takie konstanti kak PF_INET i vse ostalinie.Oni kajisi
naxodiatsea v winsock32.inc. V win32api.inc ix netu!
Maverik! v win.inc ix toje nema :( tem ne menee - spasiba.
O4eni proshu! Prishlite !
A to vesi masm ka4ati u menea 2-3 chasa zaimet.
Spasibo.
Приложение:
Вопрос отправлен: 14.10.2002, 17:11
Отправитель: Jeka (na_obed@pisem.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает St
Привет, Jeka!
Посылаю Windows.inc по вашему адресу.
Я в таких случаях беру h-файлы из C/C++ и переделываю в inc-файлы (чаще всего выдираю только нужные куски).
St
Ответ отправлен: 14.10.2002, 18:21
Отправитель: St
Отвечает masquer
Приветствую Вас, Jeka!
http://lvbnhbq.fromru.com/include.rar
PF_INET in windows.inc
Ответ отправлен: 14.10.2002, 18:25
Отправитель: masquer
Отвечает Bob Johnson
Добрый день, Jeka!
Вот присылаю, то что у меня есть (под тасм, делал сам).
Приложение:
Ответ отправлен: 14.10.2002, 23:45
Отправитель: Bob Johnson
Отвечает oleg
Доброе время суток, Jeka!
poichi na www.filesearch.ru.
zapros: winsock.inc,
ili na ftp.microsoft.com/bussys/WinSock/spec11
Ответ отправлен: 14.10.2002, 18:00
Отправитель: oleg
Отвечает Maverick
Доброе время суток, Jeka!
Ну я уже говорил, что прежде чем просить, надо поискать на:
http://www.filesearch.ru/
Я туды зашел и сразу нашел 6 ссылок.
Высылаю winsock.inc
Надеюсь то, что надо?
Ответ отправлен: 14.10.2002, 17:52
Отправитель: Maverick
Вопрос № 1500 |
Ещё раз привет.
Извините меня, за некоторую назойливость.
Но я не очень хорошо знаю ассемблер, поэтому нельзя ли уточнить возможность генерировать случайные числа в выбранном диапазоне с помощью таймера?
Вопрос отправлен: 14.10.2002, 21:42
Отправитель: Sean
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Здравствуйте, Sean!
Вот программка:
CSEG segment
assume CS:CSEG, DS:CSEG, ES:CSEG, SS:CSEG
org 100h
Start:
mov ah,0
int 1ah ;считаем значение таймера
mov ax,dx
and ax,1fffh
mov dl,52
div dl ;разделим младшую часть счетчика на 52
int 20h ; game over
CSEG ends
end Start
В регистре ah будет содержаться число 0-51
Не забудь, что это псевдогенератор!!!
Ответ отправлен: 16.10.2002, 12:20
Отправитель: Maverick
Отвечает DiGiT[old]
Приветствую Вас, Sean!
Процесс генерирования случайных чисел не такой простой. Тем более что не любую последовательность чисел нельзя назвать случайной. Насколько я понимаю тебе нужны равномерно- распределенные случайные числа. Например кнут предлагаент генерировать случайные числа следующим образом
X(n)= (a*X(n-1)+ c) mod b; Где a, b, c нужно подобрать.
Наши учебные книги дают следущий способ: X(n)= {M*X(n-1)}
где {}- дробная часть от числа, а M некое большое число.
Если ты уже испугался, то можешь просто составить таблицу случайных чисел и ей пользоваться. А таймер тебе можеть дать лишь наугад выбранный начальный элемент последовательности.
Ответ отправлен: 15.10.2002, 07:48
Отправитель: DiGiT[old]
Отвечает Bob Johnson
Приветствую Вас, Sean!
Лучше всего таймер использовать только для начальной инициализации генератора случайных чисел - его значение можно немного изменив брать за первое случайное число. А дальше - по алгоритму.
Ответ отправлен: 14.10.2002, 23:45
Отправитель: Bob Johnson
Вопрос № 1501 |
Подскажите, если можете!
Я читал в давней рассылке, что можно в ДОСе перехватывать 21h прерывания. Но работает ли это в Win32? Например, как перехватить момент, когда имеет место 21h прерывание, чтобы прочитать адрес строки и делать с ним чего фантазия позволяет?
Вопрос отправлен: 14.10.2002, 22:45
Отправитель: Алексей (ral@list.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает igorash
Добрый день, Алексей!
точно так же, вот тольок даст тебе это что-то - вопрос спорный :))
Ответ отправлен: 14.10.2002, 22:54
Отправитель: igorash
Отвечает Dark_Lord
Приветствую Вас, Алексей!
В windows абсолютно другое строение системы, и прерывания там не доступны пользователю, однако, там есть другие способы перехватки!
Ответ отправлен: 15.10.2002, 20:52
Отправитель: Dark_Lord
Отвечает Bob Johnson
Доброе время суток, Алексей!
Это будет работать только для той виртуальной машины, в которой ты это сделаешь. Иначе - вот запустил ты нортон, в нем свою прогу (которая перехватывает) - все, что ты после этого запустишь в этом нортоне будет работать с твоей прогой.
А вот теперь ты запустил другой нортон, и в нем твоей программы нет...
Ответ отправлен: 17.10.2002, 16:39
Отправитель: Bob Johnson
Отвечает Maverick
Добрый день, Алексей!
Ну винда же эмулирует дос, значит можно.
А как? Просто тебе нужен свой обработчик, который ты повешаешь на 21 прерывание. Потом сравнишь какую функцию вызывают и делай что хочешь, хоть винт форматируй :)
Ответ отправлен: 15.10.2002, 00:12
Отправитель: Maverick
Отвечает Broken Sword
Доброе время суток, Алексей!
работает, перехватить точно так же, как в ДОС-е. Читай про V86-режим работы процессора
Ответ отправлен: 15.10.2002, 00:39
Отправитель: Broken Sword
Отвечает ASMодей
Добрый день, Алексей!
В Win32 прерывание 21h не работает.
Вместо него используются функции API.
Ответ отправлен: 15.10.2002, 08:26
Отправитель: ASMодей
Отвечает Gibbel
Доброе время суток, Алексей!
В виндах можно перехватить ДОС-прерывание, но только в текущей ДОС-сессии...
Ответ отправлен: 15.10.2002, 10:47
Отправитель: Gibbel
Отвечает Ayl
Здравствуйте, Алексей!
Если приложение виндовое, то 21-е прерывание тебе не поможет. Тут надо делать обработку событий винды. А если досовское приложение, то можешь перехватить тем же способом. Но работать будет только в текущей DOS-сессии.
Ответ отправлен: 15.10.2002, 11:36
Отправитель: Ayl
Вопрос № 1502 |
Как организовать вывод напрямую в видеопамять в текстовом режиме под WinXP по такому же типу как в Dos/Win9x/Win2000
Вопрос отправлен: 14.10.2002, 23:33
Отправитель: DVD
[Следующий вопрос >>] [Список вопросов]
Отвечает Dark_Lord
Доброе время суток, DVD!
Так! Прямой вывод в видеопамять работает только в досе, в Windows это бесполезно!!!!
Ответ отправлен: 15.10.2002, 20:53
Отправитель: Dark_Lord
Отвечает Bob Johnson
Добрый день, DVD!
Для этого переключи видеорежим на текстовый:
mov ax, 3
int 10h
и можно писать....
P.S. Я наконец-то поставил себе ХР...
Приложение:
Ответ отправлен: 17.10.2002, 16:39
Отправитель: Bob Johnson
Отвечает Broken Sword
Здравствуйте, DVD!
Точно так же. Я тоже долго парился, пока страницу видеопамяти не поменял... (там нада ставить первую страницу помоему)
Ответ отправлен: 15.10.2002, 00:39
Отправитель: Broken Sword
Вопрос № 1503 |
А как можно создать .com файл при помощи masm32? Да, я знаю, он не особо нужен, это пережиток DOS, но все-таки?
Вопрос отправлен: 14.10.2002, 23:38
Отправитель: axydas
[Следующий вопрос >>] [Список вопросов]
Отвечает Dark_Lord
Приветствую Вас, axydas!
.model tiny
Ответ отправлен: 15.10.2002, 20:53
Отправитель: Dark_Lord
Отвечает baldr
Доброе время суток, axydas!
Зря тут тебе говорят, что никак...
Можно. Просто используй директиву .model tiny и, кажется, все... Ну, и, конечно, не используй больше одного сегмента, включая и стек...
Ответ отправлен: 15.10.2002, 16:09
Отправитель: baldr
Отвечает ASMодей
Здравствуйте, axydas!
Можно, и очень просто:
ml.exe /AT file.asm
Ответ отправлен: 15.10.2002, 08:27
Отправитель: ASMодей
Отвечает Eugene
Приветствую Вас, axydas!
Не знаю как в MASM, а в TASM значения особого нету чем компилировать - tasm.exe или tasm32.exe, там только нужно менять tlink.exe и tlink32.exe. Может быть в MASM'e то же самое. Попробуй скомпилировать с теми же ключами. А вообще странно даже, что такой вопрос вообще появился - просто запусти masm32.exe с ключом /?, и у тебя на экране появится довольно подробное описание ключей.
Ответ отправлен: 15.10.2002, 09:14
Отправитель: Eugene
Отвечает Gibbel
Доброе время суток, axydas!
MASM32 предназначен для создания 32-битных программ, .com - 16-битный файл ДОС. Соответственно, никак.
Ответ отправлен: 15.10.2002, 11:36
Отправитель: Gibbel
Вопрос № 1504 |
Здравствуйте товарищи!
Вопрос ламерский конечно, но я начинающий.
Вобщем мне надо высветить на экаран цифру которая находится в памяти. Вывестив консоль. А я прерывания копал - они все интерпретируют цифры как ascii коды, а мне нужно прямо так высветить.
Тоесть у меня прога генерирует числа. Вот сгенерировалось 40h допустим. Ну и мне нужно это вывести в консоль, предпосчтительней в десятичной ситеме но совсем не обязательно. А всы прерывания ждут акси кодов.. и стессено высвечивают мнебуковки всякие красивые вместо циферок моих.
Чаво делать? И как с этим бороться?
Приложение:
Вопрос отправлен: 14.10.2002, 23:46
Отправитель: Самохвалов Эдвард (zeleniy_kot@yahoo.com)
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Здравствуйте, Самохвалов Эдвард!
Вот рабочий код программы, которая преобразует содержимое al в ascii коды и выводит в шестнадцатиричном виде.
Т.е. если у тебя al=0fh,
то и выведется 0fh
Просто воткни в свой код.
Приложение:
Ответ отправлен: 16.10.2002, 14:44
Отправитель: Maverick
Отвечает Bob Johnson
Приветствую Вас, Самохвалов Эдвард!
Много много раз была сдесь процедура перевода числа в строку. Ну да ладно...
Приложение:
Ответ отправлен: 17.10.2002, 16:40
Отправитель: Bob Johnson
Отвечает Biv
Здравствуйте, Самохвалов Эдвард!
Смотри в приложении функции для вывода на экран
Приложение:
Ответ отправлен: 15.10.2002, 00:14
Отправитель: Biv
Отвечает Broken Sword
Здравствуйте, Самохвалов Эдвард!
Что делать, что делать... Переводить в ASCII. Вот алгоритм Элиссона (самый коротки в мире) по переводу HEX-числа из AL в ASCII код:
cmp al,0Ah ; 2
sbb al,69h ; 2
das ; 1
Итого: 5 байт
Ответ отправлен: 15.10.2002, 00:39
Отправитель: Broken Sword
Отвечает ASMодей
Здравствуйте, Самохвалов Эдвард!
Если ты писал программы на C, то наверняка встречался
с функцией itoa. Она преобразовывала целое число в строку.
Так вот и на ассемблере тебе нужна аналогичная функция.
Можешь написать ее сам или взять из какой-нибудь библиотеки.
Ответ отправлен: 15.10.2002, 08:28
Отправитель: ASMодей
Отвечает Beeblebrox
Доброе время суток, Самохвалов Эдвард!
В приложении пример проги, вычисляющей числа Фибоначчи и выводящей их на экран
Приложение:
Ответ отправлен: 15.10.2002, 10:00
Отправитель: Beeblebrox
Отвечает Eugene
Приветствую Вас, Самохвалов Эдвард!
Я наверно отвечу самый последний, но лучше поздно, чем никогда.
Ты видимо хотел сделать .com программу, тогда непонятно зачем объявления сегментов стека и данных.
P.S.Так как отвечаю самый последний - могу предположить, что тебя уже закидали оптимизированными прожками по 10 байт.
Приложение:
Ответ отправлен: 15.10.2002, 10:18
Отправитель: Eugene
Отвечает Gibbel
Приветствую Вас, Самохвалов Эдвард!
Вот небольшая функция, правда она для 32-битного режима, но, я думаю, для тебя не составит трудности переделать ее для 16-битного. Функция выводит в буфер, адресуемый szid ascii-строку, соответствующую шестнадцатиричному значению, передаваемому в value.
З.Ы.Программа подлежит оптимизации.
Приложение:
Ответ отправлен: 15.10.2002, 11:35
Отправитель: Gibbel
Отвечает St
Привет, Самохвалов Эдвард!
По-видимому вам нужна такая процедура
St
Приложение:
Ответ отправлен: 15.10.2002, 13:32
Отправитель: St
Вопрос № 1505 |
Доброе время суток!
У меня установлен Win98, под ним - MSDN. Недавно я поставил себе XP
и хочу, чтобы он использовал уже установленный MSDN (для экономии места).
Как это можно настроить? И как можно потом привязать его к Visual Studio?
Вопрос отправлен: 14.10.2002, 23:46
Отправитель: Bob Johnson (Bobjohn@newmail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Gibbel
Доброе время суток, Bob Johnson!
Я просто поставил из XP поставил поверх все используемые мной программы(в числе которых и MSDN и Visual Studio), и никаких проблем ни в 98х, ни в XP не заметил.
Ответ отправлен: 15.10.2002, 10:50
Отправитель: Gibbel
Отвечает Pablo
Доброе время суток, Bob Johnson!
Вообще в Билдере например есть такая штука как OpenHelp в нем с помощью этой проги модно насторить хелп где бы он ни находился на винте, ну навернятка либо такая же либо похожая прога есть в пакеле с мелкософтовскими утилитами.
Ответ отправлен: 17.10.2002, 16:48
Отправитель: Pablo
Вопрос № 1506 |
Здравствуйте!
Вернусь к вопросу который я задавал по поводу распределения памяти (int 21h 48h):
как вы и говорили (молодцы) там надо вначале вызвать 4Ah, для сжатия блока памяти ваделенной для проги, с параметрами:
ES - сегмент распределенного блока памяти
BX - желаемый размер блока памяти
Как я понимаю в ES надо положить адрес PSP (ну он там и лежит в начале выполнения проги), а в BX - размер проги.
Так вот возникает вопрос как с наименьшими затратами посчитать размер проги в формате exe. Мне в голову пришло только два варианта (не считая подсчет пальчиками):
Пример проги:
.Model Tiny
.Stack 100h
.Data
FileSizeInMemory = CodeSize + DataSize + 100h/0fh + 100h/0fh + 1
; первый 100h - стек, второй - PSP
asd dw ?
.
.
.
zxc db ?
DataSize = ($ - offset asd )/16
.Code
Start:
.
.
.
.
CodeSize = ($ - offset Start)/16
END Start
и еще:
при загрузке
ss+(sp/0fh) - es
По идее первый лучше, так как считается при компиляции. Может подскажите что-то лучшее или укажите на ошибки. А то у меня все как-то глючит.
Вопрос отправлен: 15.10.2002, 05:48
Отправитель: Илья (b.i@date.by)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, Илья!
Самый простой - создать в конце проги пустой сегмент и определять размер проги как разность между этим сегментом и началом проги (т.е. первым сегментом). Только надо, чтобы сегменты были в программе в порядке код-данные-стек (кажется).
Ответ отправлен: 17.10.2002, 16:40
Отправитель: Bob Johnson
Отвечает ASMодей
Доброе время суток, Илья!
Где-то читал, что можно сделать примерно так:
...
твоя программа
...
ZZZZZ segment
l1 label
ZZZZZ ends
Сегмент с таким именем при компиляции окажется последним,
так что можно использовать его адрес (mov ax,seg ZZZZZ).
Ответ отправлен: 15.10.2002, 08:29
Отправитель: ASMодей
Отвечает Eugene
Здравствуйте, Илья!
Я делал так.
В конце программы создавал стек.
В самом конце делал метку, и её считал как конец программы.
Приложение:
Ответ отправлен: 15.10.2002, 10:29
Отправитель: Eugene
Отвечает Ayl
Здравствуйте, Илья!
При указании .Model TINY у тебя вся прога в одном сегменте, так что просто в конце блока данных ставишь метку - и радуешься жизни. И компилишь в COM-файл. Только надо со стеком что-то делать, потому что при загрузке COM'а стек устанавливается как SS=CS, SP=0fffeh. Надо бы переместить SP, а то иначе весь сегмент надо оставлять...
Для EXE-файла создаешь пустой сегмент с именем ZZZZZ (что бы он был последним), потом делаешь так:
mov ax, seg ZZZZZ
mov bx, ds (в начале программы, перед установкой сегмента данных ds = PSP)
sub ax, bx
inc ax
shr ax, 4
inc ax - размер проги в параграфах
Вроде так...
Ответ отправлен: 15.10.2002, 11:49
Отправитель: Ayl
Отвечает St
Привет, Илья!
Я вам уже советовал почитать Джордэйна (http://alex-justasu.narod.ru/131.html). У него всё написано и ничего не надо изобретать (см Приложение).
St
Приложение:
Ответ отправлен: 15.10.2002, 13:39
Отправитель: St
Вопрос № 1507 |
Здравствуйте Ayl.
Следуя Вашей инструкции записал правильный текст - см. приложение. Ассемблирование упрямо сообщает:
asm(12) : warning A4023: with /coff switch, leading underscore required for start address : start
Т.е. здесь какая-то неопределенность с адресом метки start -
если я правильно понимаю. Как бы это выправить?
Спасибо.
Приложение:
Вопрос отправлен: 15.10.2002, 09:15
Отправитель: Bayram Annanurov
[Следующий вопрос >>] [Список вопросов]
Отвечает Ayl
Приветствую Вас, Bayram Annanurov!
Используете MASM? Используете в командной строке опцию /coff? Если да, то уберите ее.
Или просто в коде программы вместо метки start используйте метку _start.
Ответ отправлен: 15.10.2002, 11:58
Отправитель: Ayl
Вопрос № 1509 |
Blagodarnosti Mavericku,Olegu,BobJonsonu,
Maskeru,St,i vsem ostalinim.
Приложение:
Вопрос отправлен: 15.10.2002, 09:46
Отправитель: Jeka (na_obed@pisem.net)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, Jeka!
И не только бокал :-)
Ответ отправлен: 17.10.2002, 16:40
Отправитель: Bob Johnson
Отвечает Ayl
Здравствуйте, Jeka!
Так как разослал на всех, позволю себе дополнить автора:
Чтобы у нас всегда стояли...
Бокалы, полные вина!
И чтобы женщины давали...
Допить вино нам до конца!
:-)
Приложение:
Ответ отправлен: 15.10.2002, 12:02
Отправитель: Ayl
Вопрос № 1510 |
Вопрос о физической адресации памяти. С первыми 640 К всё понятно - они занимают физические адреса от 0 до 9FFFF. Далее идёт область видеопамяти, BIOS'а и т.п. - от A0000 до FFFFF. С 100000 начинается снова ОЗУ. Вопросов возникает два:
- где кончается ОЗУ - по адресу, соответствующему его объёму (напр., для 16 Мбайт - FFFFFF), или по какому-нибудь другому?
- если ОЗУ кончается по адресу, соответствующему объёму, то можно ли получить доступ к тем 384 К, которые "спрятаны" из-за занятости области адресов A0000-FFFFF?
Заранее благодарен.
Вопрос отправлен: 15.10.2002, 12:18
Отправитель: Александр (pateralex@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Здравствуйте, Александр!
Да, можно.
Что мы и делаем, когда выводим символы прямым отображением в видеобуфер.
Ответ отправлен: 16.10.2002, 12:54
Отправитель: Maverick
Отвечает Bob Johnson
Доброе время суток, Александр!
Да, оно кончается по адресу, соответствующему его объему. А доступ к этим 384К можно получить на новых машинах. Здесь все мапится и перемапится и все такое.
А вот на старых компьютерах ты никогда не видел POST:
640К Base Memory
3074K Extended memory
И все. Кажется такое было на 386 - вот там никак нельзя было доступ получить к этой памяти.
Ответ отправлен: 17.10.2002, 16:40
Отправитель: Bob Johnson
Вопрос № 1511 |
Здраствуйте помогите мне нужно позарез,такое вот дело, прогу надо написать чтоб решать формулы,призапуске она должна выдать приглашение какую формулу решать и ждать ввода K1=,К2 или К3= или ESC,и после ждать ввода цифр,и как лучше мне определять чмсла введенные с клавиатуры как "DB","DW" или "DD":
K1=[H]{[(dCr+[H]-[OH]}/(1-d)Cr-[H]+[OH]
K2=[H]{(d-1)Cr+[H]-OH]}/(2-d)Cr-[H]+[OH]
K3=[H]{(d-2)Cr+[H]-[OH])}/(3-dCr-[H]-[OH]
помогите, нужна любая инфа и если можно ответы с более детальным обьяснением(если не лень:))или алгоритм,заранее блогодарень можно и на почту miri72@mail.ru
Вопрос отправлен: 15.10.2002, 13:06
Отправитель: mirik
[Следующий вопрос >>] [Список вопросов]
Отвечает Maverick
Приветствую Вас, mirik!
Ну простейший вариант.
Запросил по какой формуле, потом сравниваешь.
Если ввели k1, то прыгаешь на процедуру k1
если к2, то к2
........
Если что то другое, то спрашиваешь снова.
В процедурах организовываешь переменные.
Потом заполняешь их, "введите значение H:", ну и соответственно пихаешь его в переменную H
Потом подставляешь все в формулу.
Насчет размерности переменной, это смотря какой диапазон чисел нужен для переменной. Если хватит ffh значит обойдешся db, если нет, то делай больше.
Ответ отправлен: 16.10.2002, 12:54
Отправитель: Maverick
Отвечает Bob Johnson
Приветствую Вас, mirik!
Не совсем понял, что нужно...
При вводе чисел с клавиатуры в твою программу они вначале попадут как строки. Тебе нужно их преобразовать в числа. Это достаточно просто - проходишь слева направо, умножаешь сумму на 10 и добавляешь к ней текущую цифру. А как хранить потом эти числа в пямяти (DB, DW или DD) - зависит от их максимальных значений (DB - 255, DW - 65535, DD - около 4 млрд).
Приложение:
Ответ отправлен: 17.10.2002, 16:41
Отправитель: Bob Johnson
Форма отправки вопроса |
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
© 2002 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (44) C / C++ (30) Perl (5) Delphi (21) Pascal (25) Basic / VBA (9) Java / JavaScript (10) PHP (10) MySQL / MSSQL (14) |
Пользователю Windows 95/98/Me (37) Windows NT/2000/XP (26) "Железо" (33) Поиск информации (14) |
Администратору Windows NT/2000/XP (14) Linux / Unix (14) |
Юристу Гражданское право (8) Семейное право (5) Трудовое право (4) КоАП (6) |
Отправить вопрос всем экспертам выбранной рассылки.
© 2002 Россия, Москва. Авторское право: RusFAQ.ru |
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||