Поиск:

Ответ в темуСоздание новой темы Создание опроса
> аналог паскалевского random 
:(
    Опции темы
archs
  Дата 19.5.2002, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.5.2002

Репутация: нет
Всего: нет



Привет Народ :)

Подскажите пожалуйста какая функция какого досового прерывания генерит произвольное число (если такая возможность имеется)

Пасибки :)
PM MAIL   Вверх
Chingachguk
Дата 19.5.2002, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 18



Нет такой функции в дос ! ;)

Есть функция int 21h:

 mov  ah,02ch            ; Read current time
 int  21h                ; CALL DOS
 ; cx:dx - текущее время, dl = 1/100 part of sec

Можно примерно использовать число сотых секунды, возвращаемое ей.

Можно также читать слово в памяти по определенном адресу в памяти:

 push ds
 push 0040h
 pop  ds
 mov  ax,word ptr ds:[006ch] ; Read current BIOS ticks (в ax)
 pop  ds
 mov Seed,ax ; Запомнить его

Это ДВОЙНОЕ слово(тут читалась его младшая часть) постоянно изменяется BIOS - таймером с высокой частотой(порядка 18,2 раза в секунду).

Обычно генератор случайных чисел состоит из его инициализации достаточно случайным числом(в паскале это делает ф-ция randomize) - для того, чтобы первый вызов всегда возвращал РАЗНЫЕ значения, и, собственно, дальнейших вызовов. Вот пример кода простого генератора(это процедуры для формата tiny - *.COM):

Random proc near
; Получить случаное число в интервале 0..MaxRandom (в стеке)
; Результат вернуть в регистре ax
       push bp
       mov  bp,sp
       pusha
       mov  ax,Seed
       mov  cx,8
@NewBit:mov  bx,ax
       and  bx,002dh
       xor  bh,bl
       clc
       jpe  @shift
       stc
@shift: rcr  ax,1
       loop @NewBit
       mov  Seed,ax
       mov  ah,0
       xor  dx,dx
       mov  bx,[bp+4]          ; bx = Максимально допустимое число
       add  bl,1
       adc  bh,0
       div  bx
       mov  [bp+4],dx
       popa
       mov  ax,[bp+4]          ; Результат вернем в виде слова
       pop  bp
       ret  2
Random endp
Randomize proc near
;       pusha
;       mov  ah,02ch            ; Read current time
;       int  21h                ; CALL DOS
;       mov  word ptr Seed,dx
;       popa
;       retn

       push ds
       push 0040h
       pop  ds
       push word ptr ds:[006ch] ; Read current BIOS ticks
       pop  word ptr ss:Seed
       pop  ds
       retn
Randomize endp

Вот так ;)


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
archs
Дата 20.5.2002, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.5.2002

Репутация: нет
Всего: нет



Чингачгук :)
Благодарю!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm: Общие вопросы"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1960 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.