Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 3
1
TASM

Space Invaders

03.04.2019, 21:54. Просмотров 1158. Ответов 5


По заданию нужно написать space invaders( игру) на тасме.
Сделано почти все, осталось лишь самое не понятное на данный момент.

Нужно сделать так, чтобы выводилось рандомное количество врагов на рандомных позициях.
Препод сказал, что в ассемблере есть какой-то способ реализации рандома чуть ли не в одну команду, но найти даже что-то похоже не удалось.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
CSEG segment
assume cs:CSEG, ds:CSEG, es:CSEG, ss:CSEG
org 100h
lp:  mov ax,0b800h
    mov es,ax
    mov di,0
    mov cx ,2000
l1:
    mov es:[di],1f00h
    add di ,2
    loop l1
    mov di ,3920
    mov byte ptr es:[80],209
    mov byte ptr es:[46],209
    mov byte ptr es:[96],209
l2:
    mov byte ptr es:[di-2],205
    mov byte ptr es:[di],207
    mov byte ptr es:[di+2],205
    mov byte ptr es:[di-4],0
    mov byte ptr es:[di+4],0
    
l3:
    mov cx,0ffffh
l8:
    loop l8
    mov si,0
    mov cx,1920
l4:
    cmp byte ptr es:[si],7
    jne l6
    cmp si,160
    jb l5
    mov byte ptr es:[si-160],7
l5:
    mov byte ptr es:[si],0
    jmp l9
l6:
    cmp byte ptr es:[si],209
    jne l9
    cmp counter ,10
    jne l9
    cmp counter+1,0
    jne l9
    mov byte ptr es:[si+160],209
    mov byte ptr es:[si],0
    mov counter+1,1
l9:
    add si,2
    loop l4
    mov counter+1,0
    dec counter 
    jnz l10
    mov counter, 10
    
 
l10:    in al,60h
    mov ah,al
    mov al,42h
    out 60h,al
    
    cmp ah, 1   
    je exit
    cmp ah, 75  
    je left
    cmp ah, 77
    je right 
    cmp ah, 39h
    je shoot
l16:    jmp l3
 
exit:   
    int 20h
left:
    cmp di,3842
    je l16
    sub di,2
    jmp l2
right:
    cmp di,3996
    je l16
    add di,2
    jmp l2
shoot:
    mov byte ptr es:[di-160],7
    jmp l3
counter db 10,0
CSEG ends
end lp
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2019, 21:54
Ответы с готовыми решениями:

Маппирование памяти из user space в system space
В драйвер передается указатель из приложения, который указывает на область памяти в приложении....

Доступ к PCI Configuration Space
Мне необходим доступ к PCI Configuration Space некоторого PCI устройства. Есть функции...

Kernel space и виртуальная таблица процесса
Приветствую, к примеру имеется dll файл который будет проецироваться в kernel space. Вопрос такой,...

Реализация боев в Space Invaders
Здравствуйте. Мне нужно написать игру на Паскале наподобие Space Invaders, где несколько уровней....

5
Модератор
Эксперт по электронике
7485 / 3685 / 1445
Регистрация: 01.02.2015
Сообщений: 11,461
Записей в блоге: 2
03.04.2019, 22:27 2
ГСПЧ с использованием XORshift
Генератор последовательности из 4 случайных цифр
И где-то была тема о минимальных ГПСЧ - сейчас сразу не найду.

Но это не одна инструкция.
0
1769 / 747 / 153
Регистрация: 03.06.2009
Сообщений: 5,279
04.04.2019, 10:03 3
https://ru.wikipedia.org/wiki/... 0%BE%D0%B4

Не в одну строчку, а в несколько получится, нужно только с си в асм перевести. Ну и seed первый раз заполнять значением таймера.
1
murderer
04.04.2019, 13:51
  #4

Не по теме:

Оно даже работает!

Это как я понял задежка

Assembler
1
2
3
    mov cx,0ffffh
l8:
    loop l8
Можно весь игровой цикл запихать в обработчик прерывания 1Ch, тогда задержка будет не нужна и скорость будет одинакова на всех компьютерах.

0
4076 / 1791 / 210
Регистрация: 06.10.2010
Сообщений: 4,001
05.04.2019, 03:46 5
Рандомно падающие буквы
1
3175 / 1751 / 468
Регистрация: 28.02.2015
Сообщений: 3,561
05.04.2019, 14:13 6
Цитата Сообщение от Karmatea Посмотреть сообщение
Препод сказал, что в ассемблере есть какой-то способ реализации рандома чуть ли не в одну команду,



Команда есть: RDRAND. Вот только там Ivy Bridge+ нужен.

В любом случае читайте Очень маленький Random

Не по теме:

Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
И где-то была тема о минимальных ГПСЧ
Вот она

1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2019, 14:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Space Invaders async/await
Виновник торжества: public class Restart : MonoBehaviour { private Text restart; int...

Передвижение врага в Space Invaders
Возникла проблема при написании игры с помощью PyGame, подскажите пожалуйста, каким образом можно...

Некое подобие Space Invaders
Здравствуйте уважаемые программисты, пишу к вам с просьбой, не могу разобраться почему мой...

Классическая Space Invaders, "выпадение" кораблей из нижнего ряда
Подскажите, пожалуйста, как сделать, чтобы из нижнего ряда передвигающейся матрицы врагов с...

Out of stack space
Добрый день. Разбираюсь с формами VBA, написал следующий код. Он выводит квадратный объект...

OutOfMEmoryError PerGen space
Здравствуйте. Такая проблема. Есть код public class PermGenSpace { public static void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.