IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Игровая программа, таймер и генерация звука
сообщение
Сообщение #21


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 22.05.2009 17:23) *

Очень просто... Вот тут есть пример практически того, что тебе надо:
Accelerating the Clock


Спасибо, буду разбираться!

volvo, Вы не могли бы посмотреть мой вопрос о random'е в этой теме за 15.05.2009 16:49 ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Гость






Почему я? Кто привел тебе этот код, тот пускай и смотрит, почему код не работает. Все на самом деле гораздо проще делается. Я тебе уже привел ссылку на работающий код. Если тот код тебе не нравится - то (с учетом того, что координаты у тебя все равно однобайтовые, в пределах от 0 до 80) можешь попробовать вот эту процедуру:
RS dw 0
range db 80

random proc
mov ax, RS
mov dx, 8405h
mul dx
inc ax
mov dx, ax
mov RS, ax
mov cl, range
sub cl, 2
inc cx
xor dx, dx
div cx
mov ax, dx ; в AX - случайное число...
ret
random endp
Получи в одной программе несколько чисел:
	call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h
, и убедись, что они все разные, и ни одно не превышает 80. Но вот при разных запусках все последовательности будут одинаковыми, потому что RS не изменяется, он при старте программы всегда один и тот же. Чтобы получить разные последовательности - занеси в RS при старте значение системного таймера...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 22.05.2009 18:54) *
Чтобы получить разные последовательности - занеси в RS при старте значение системного таймера...


Заношу в RS секунды и милисекунды системного времени:

data segment

RS dw ?
range db 80
CR db 13,10,"$"
data ends

code segment
assume cs: code, ds: data

writeDEC proc

push ax
push bx
push cx
push dx

xor cx, cx
mov bx, 10

next_digit:
xor dx, dx
div bx
push dx
inc cx
or ax, ax
jnz next_digit

next_char:
pop ax
add al, '0'
mov dx, ax
mov ah, 02h
int 21h
loop next_char

pop dx
pop cx
pop bx
pop ax
ret
writeDEC endp

GetTime proc

push ax
push cx
push dx

xor ax,ax
xor cx,cx
xor dx,dx

mov ah, 2ch
int 21h

mov al, dh
mov ah, dl
mov RS, ax
pop dx
pop cx
pop ax
ret
GetTime endp

random proc

push ax
push bx
push cx
push dx



mov ax, RS
mov dx, 8405h
mul dx
inc ax
mov dx, ax
mov RS, ax
mov cl, range
sub cl, 2
inc cx
xor dx, dx
div cx
mov ax, dx ; в AX - случайное число...



pop dx
pop cx
pop bx
pop ax

ret
random endp

start:
mov ax, data
mov ds, ax

call GetTime
mov ax, RS
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

mov ax, 4C00h
int 21h
code ends
end start


Теперь всё время печатается 36 четыре раза. Хотя RS разное каждый раз. Такой же результат был и сначала. Что сейчас не так?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Гость






Цитата
Такой же результат был и сначала.
То есть, у тебя не отрабатывает вот это (переименовать в *.ASM):
Прикрепленный файл  rand2.pas ( 1.03 килобайт ) Кол-во скачиваний: 616

вот с таким результатом:
Прикрепленное изображение
? blink.gif Ну, тогда я не знаю, что у тебя творится...

Добавлено через 17 мин.
P.S. Соответственно,
Прикрепленный файл  rand3.pas ( 1.09 килобайт ) Кол-во скачиваний: 694

выдает
F:\Asm30>rand3
48
33
54
15

F:\Asm30>rand3
54
15
28
61

F:\Asm30>rand3
43
40
57
78
Поверишь, или еще один скриншот сделать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #25


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 22.05.2009 20:05) *
То есть, у тебя не отрабатывает вот это

Спасибо! Всё и у меня заработало smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #26


Знаток
****

Группа: Пользователи
Сообщений: 306
Пол: Мужской
Реальное имя: Евгений

Репутация: -  0  +


Цитата(volvo @ 22.05.2009 18:54) *

Почему я? Кто привел тебе этот код, тот пускай и смотрит, почему код не работает. Все на самом деле гораздо проще делается. Я тебе уже привел ссылку на работающий код. Если тот код тебе не нравится - то (с учетом того, что координаты у тебя все равно однобайтовые, в пределах от 0 до 80) можешь попробовать вот эту процедуру:
RS dw 0
range db 80

random proc
mov ax, RS
mov dx, 8405h
mul dx
inc ax
mov dx, ax
mov RS, ax
mov cl, range
sub cl, 2
inc cx
xor dx, dx
div cx
mov ax, dx ; в AX - случайное число...
ret
random endp
Получи в одной программе несколько чисел:
	call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h

call random
xor ah, ah
call writeDEC
lea dx, CR
mov ah, 9
int 21h
, и убедись, что они все разные, и ни одно не превышает 80. Но вот при разных запусках все последовательности будут одинаковыми, потому что RS не изменяется, он при старте программы всегда один и тот же. Чтобы получить разные последовательности - занеси в RS при старте значение системного таймера...


volvo, случайное число помещается в ax, то есть word, а как к byte'ам привести? я что-то запамятовал
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Гость






Цитата
случайное число помещается в ax, то есть word, а как к byte'ам привести?
AL взять и использовать, вот и байт тебе...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #28


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(volvo @ 22.05.2009 18:54) *

Почему я? Кто привел тебе этот код, тот пускай и смотрит, почему код не работает.


Не знаю, у меня всё работает. Возможно, при переводе из Паскаля в Асм есть ещё какие-то тонкости.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 21:51
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name