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

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.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
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
Отписаться
Убрать рекламу

В избранное