С Новым годом! Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/22: Рейтинг темы: голосов - 22, средняя оценка - 4.82
13 / 13 / 5
Регистрация: 03.06.2010
Сообщений: 84
1

По экрану (хаотично!) летают два шарика (нули), зеркально отражаясь от его границ. К границе шарики подлетают под углом 45 градусов.

24.11.2011, 21:49. Показов 4104. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Еще одна задачка, помогите разобраться..

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
;По экрану (хаотично!) летают два шарика (нули), зеркально отражаясь от его границ. К границе шарики подлетают под углом 45 градусов. 
;Нажатие клавиши SPACE останавливает движение шариков, а последующее нажатие любой другой клавиши снова его возобновляет. 
;Выход из программы по нажатию клавиши ESC или при столкновении шариков.
 
          
model small
 
stack 100h
 
dataseg
    char    db     'O'
        char1   db  'O' 
    posx    db  40 
    posy    db  10 
    posx1   db  34 
    posy1   db  13 
 
 
codeseg
 
...
 
_loop:        m1:   call char_out_1; выводим символ на экран
                    cmp posy, 21
                    ja  razv1
                    inc posy
                    inc posx
                    
                    jne m1
                    
            razv1:  cmp posx, 55
                    je razv2
                    dec posy
                    inc posx 
                    jne m1
                    
            razv2:  
                    jne m1   
 
...
 
char_out_1 proc near        ; вывод первого шарика
    mov ah, 02h     ; в указанной позиции
    mov dh, posy
    mov dl, posx
    int 10h
 
    mov ah, 09h
    mov bl, 07h
    mov al, char
    mov cx, 1
    int 10h
 
    ret
    
    
char_out_1 endp
 
...
 
// описываем 2ю процедуру char_out_2 proc near(здесь не совсем понял с регистрами)
 
 
end
Общий цикл задал, не могу разобраться с условиями, здесь по идее условие в условии должно быть. И так проверку на каждую границу экрана.

Как задать задержку, чтоб шарики не летали по экрану как угорелые?

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

Добавлено через 11 минут
С циклом задержки разобрался
Assembler
1
2
3
4
5
6
7
mov bx,00f9fh; Цикл задержки, вроде
m100:
mov cx,0ffffh
m200:
loop m200
dec bx
jnz m100
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.11.2011, 21:49
Ответы с готовыми решениями:

Анимация (в пикчербоксе летают два шарика и при соприкосновении отталкиваются)
Пытаюсь сделать анимацию, где в пикчербоксе летают два шарика и при соприкосновении отталктваются ...

Рассчитать траекторию падения шарика под углом к горизонту
составить падение шарика под углом

Градиент под углом ~40 градусов
Доброго времени суток. Как можно реализовать градиент (угол ~40 градусов) как на картинке?

Движение под углом 45 градусов
Вобщем что то у меня тут не получаеться вывести чтобы нормально двигался шарик под углом,...

10
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
25.11.2011, 03:51 2
Цитата Сообщение от Alest
45 градусов категорически отказывается
Исходи из того, что матрица знакоместа - 8х16, т.е. по х надо бы прибавлять 2.

Добавлено через 5 часов 37 минут
Alest, вобщем, развлекайся:писано грязно, но работает
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
;include 'macro\masm.inc'
struc BALL x, y, ch, atr, dx, dy, ox, oy
{
.db  x     ; 0
.db  y     ; 1
.ch db  ch    ; 2
.atr    db  atr   ; 3
.dx db  dx    ; 4
.dy db  dy    ; 5
.ox db  ox    ; 6
.oy db  oy    ; 7
}
    org 100h
    push    cs
    pop ds
        ; очистка экрана
        call clear_scr
 
        ; главный цикл
_loop:  ;call char_out; выводим символ на экран
 
        mov     ah, 1       ; считываем код нажатой клавиши
        int     16h
        jz  draw
        cmp     ah, 1
        jz  exit       ; если это <ESC>
draw:   
    mov si, ballG
    call    ball
    call    delay
    mov si, ballR
    call    ball
    call    delay
    mov si, ballB
    call    ball
    call    delay
    mov si, ballY
    call    ball
    call    delay
    jmp _loop
 
 
exit:   call clear_scr
        mov ah, 4ch
        int 21h
 
 
clear_scr: ; proc       ; функция очистки экрана
        mov ax, 0600h
        mov bh, 07h
        mov cx, 0000h
        mov dx, 184fh
        int 10h
        ret
;clear_scr       endp
 
char_out:; proc
draw1:  ; proc near
        mov ah, 02h             ; в указанной позиции
        mov dh, [si+6]  ; ox
        mov dl, [si+7]       ; oy
        mov bh, 0
        int 10h
    mov ax, 0A20h
    xor bx,bx
    mov cx,1
    int 10h
                      ; вывод текущего символа
        mov ah, 02h             ; в указанной позиции
        mov dh, [si]    ; .x
        mov dl, [si+1]       ; .y
        mov bh, 0
        int 10h
 
        mov     ah, 09h
        mov al, [si+2]          ; chr
        mov bl, [si+3]      ; atr
        mov bh, 0
        mov cx, 1
        int 10h
        ret
;char_out endp
 
; проверки на допустимость и изменения координат символа
ball:
    mov al,[si]     ; y
    mov [si+6],al   ; oy
    add al, [si+4]  ; dy
    jz  @b0
    cmp al, 25
    jb  @b1
@b0:    neg byte [si+4] ; dy
@b1:    mov [si], al        ; y
;
    mov al,[si+1]   ; x
    mov [si+7],al       ; ox
    add al, [si+5]      ; dx
    jz  @b2
    cmp al, 80
    jb  @b3
@b2:    neg byte [si+5] ; dx
@b3:    mov [si+1], al      ; x
    call    draw1
    ret
 
delay:  pusha
    mov dx,378h     ; это LPT0:
    mov ecx, 0FFFh ; подбери сам
@_loop: in  al,dx
    loop    @_loop
    popa
    ret
 
ballR   BALL     0,  0, '*', 4, 1, 2, 0, 0
ballG   BALL    10, 14, '*', 2, -1,-2, 0, 0
ballB   BALL    10, 70, '*', 1, -1,2, 0, 0
ballY   BALL    20, 40, '*', 0Eh, 1,-2,0, 0
 
;end    start
1
Ушел с форума
Автор FAQ
16342 / 7661 / 1076
Регистрация: 11.11.2010
Сообщений: 13,710
25.11.2011, 08:51 3
Alest, создай анимированный gif-файл с хаотично летающими двумя шарами отскакивающие от границ рисунка (лучше в 3D) Преподаватель всё равно не поймет, рисунок это или программа
1
Ушел с форума
Автор FAQ
16342 / 7661 / 1076
Регистрация: 11.11.2010
Сообщений: 13,710
25.11.2011, 09:56 4
лови! Написано под WinXP под Vista и семеркой работать не будет!
Вложения
Тип файла: zip temp.zip (11.8 Кб, 42 просмотров)
1
13 / 13 / 5
Регистрация: 03.06.2010
Сообщений: 84
25.11.2011, 13:38  [ТС] 5
Цитата Сообщение от Mikl___ Посмотреть сообщение
Alest, создай анимированный gif-файл с хаотично летающими двумя шарами отскакивающие от границ рисунка (лучше в 3D) Преподаватель всё равно не поймет, рисунок это или программа
у нас так и делают)
Такой способ никакой возможности не оставляет разобраться в коде..

Добавлено через 30 минут
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Добавлено через 5 часов 37 минут
Alest, вобщем, развлекайся:писано грязно, но работает
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
;include 'macro\masm.inc'
struc BALL x, y, ch, atr, dx, dy, ox, oy
{
.db  x     ; 0
.db  y     ; 1
.ch db  ch    ; 2
.atr    db  atr   ; 3
.dx db  dx    ; 4
.dy db  dy    ; 5
.ox db  ox    ; 6
.oy db  oy    ; 7
}
    org 100h
    push    cs
    pop ds
        ; очистка экрана
        call clear_scr
 
        ; главный цикл
_loop:  ;call char_out; выводим символ на экран
 
        mov     ah, 1       ; считываем код нажатой клавиши
        int     16h
        jz  draw
        cmp     ah, 1
        jz  exit       ; если это <ESC>
draw:   
    mov si, ballG
    call    ball
    call    delay
    mov si, ballR
    call    ball
    call    delay
    mov si, ballB
    call    ball
    call    delay
    mov si, ballY
    call    ball
    call    delay
    jmp _loop
 
 
exit:   call clear_scr
        mov ah, 4ch
        int 21h
 
 
clear_scr: ; proc       ; функция очистки экрана
        mov ax, 0600h
        mov bh, 07h
        mov cx, 0000h
        mov dx, 184fh
        int 10h
        ret
;clear_scr       endp
 
char_out:; proc
draw1:  ; proc near
        mov ah, 02h             ; в указанной позиции
        mov dh, [si+6]  ; ox
        mov dl, [si+7]       ; oy
        mov bh, 0
        int 10h
    mov ax, 0A20h
    xor bx,bx
    mov cx,1
    int 10h
                      ; вывод текущего символа
        mov ah, 02h             ; в указанной позиции
        mov dh, [si]    ; .x
        mov dl, [si+1]       ; .y
        mov bh, 0
        int 10h
 
        mov     ah, 09h
        mov al, [si+2]          ; chr
        mov bl, [si+3]      ; atr
        mov bh, 0
        mov cx, 1
        int 10h
        ret
;char_out endp
 
; проверки на допустимость и изменения координат символа
ball:
    mov al,[si]     ; y
    mov [si+6],al   ; oy
    add al, [si+4]  ; dy
    jz  @b0
    cmp al, 25
    jb  @b1
@b0:    neg byte [si+4] ; dy
@b1:    mov [si], al        ; y
;
    mov al,[si+1]   ; x
    mov [si+7],al       ; ox
    add al, [si+5]      ; dx
    jz  @b2
    cmp al, 80
    jb  @b3
@b2:    neg byte [si+5] ; dx
@b3:    mov [si+1], al      ; x
    call    draw1
    ret
 
delay:  pusha
    mov dx,378h     ; это LPT0:
    mov ecx, 0FFFh ; подбери сам
@_loop: in  al,dx
    loop    @_loop
    popa
    ret
 
ballR   BALL     0,  0, '*', 4, 1, 2, 0, 0
ballG   BALL    10, 14, '*', 2, -1,-2, 0, 0
ballB   BALL    10, 70, '*', 1, -1,2, 0, 0
ballY   BALL    20, 40, '*', 0Eh, 1,-2,0, 0
 
;end    start
Спасибо!!!

ток чет не пойму как её запустить, чтоб под себя подогнать..

C:\ASMTool PE>ML /coff temp.asm
Assembling: temp.asm
error A4910: cannot open file: C:\ASMTool PE\ml.err
temp.asm(2) : error A2008: : struc
temp.asm(3) : error A2045:
temp.asm(4) : error A2008: : x
temp.asm(5) : error A2008: : y
temp.asm(6) : error A2008: : ch
temp.asm(7) : error A2008: : atr
temp.asm(8) : error A2008: : dx
temp.asm(9) : error A2008: : dy
temp.asm(10) : error A2008: : ox
temp.asm(11) : error A2008: : oy
temp.asm(12) : error A2045:
...
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

LINK : fatal error LNK1181: cannot open input file "temp.obj"

Компиляция завершена.... Всего ошибок: 0, Фатальных ошибок: 0
0
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
25.11.2011, 13:42 6
Закомментарить стр.2-10, в стр 95-98 BALL поменять на db
1
13 / 13 / 5
Регистрация: 03.06.2010
Сообщений: 84
25.11.2011, 15:07  [ТС] 7
Мои наработки пока что с одним ноликом
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
model small
 
stack 100h
 
dataseg
    char    db               'O'
                    char1   db  'O' 
    posx    db  4 ;горизонтальная координата
    posy    db  2 ;вертикальная координата
    posx1   db  1 ;горизонтальная координата
    posy1   db  1 ;вертикальная координата
 
codeseg
 
    startupcode
 
    ; очистка экрана
    call clear_scr
 
    ; главный цикл
_loop:        m1:   call char_out_1; выводим символ на экран
                   cmp posy, 24              
                    je  razv1  
             m2:    mov ah,posy1                  ;
                    add posy, ah
                    mov ah, 1
                    add posx, ah
                 ;   int 21h
               
                    jne m1
                    
            razv1:  cmp posy, 1        ;отражает
                    je razv2
                    mov posy1,-1 
                    jne m2
                    
            razv2:  cmp posx, 60
                    je razv2
 
    mov ah, 0   ; считываем код нажатой клавиши
    int 16h
    cmp al, ' ' ; если это символ
;   je space
    cmp al, 09
    jne _loop       ; если это Tab
    jmp exit
 
 
exit:   call clear_scr
    mov ah, 4ch
    int 21h
 
    
clear_scr   proc near   ; функция очистки экрана
    mov ax, 0600h
    mov cx, 0000h
    mov dx, 184fh
    int 10h
clear_scr   endp
 
 
char_out_1 proc near        ; вывод первого шарика
    mov ah, 02h     ; в указанной позиции
    mov dh, posy
    mov dl, posx
    int 10h
 
    mov ah, 09h
    mov bl, 07h
    mov al, char
    mov cx, 1
    int 10h
    
    ; Цикл задержки
;                 mov bx,00078h        ;00f9fh
;                 m100:
;                 mov cx,0dfffh              ;0ffffh
;                 m200:
;                 loop m200
;                 dec bx
;                 jnz m100   
    ret
    
    
char_out_1 endp
 
end
Добавлено через 7 минут
Цитата Сообщение от Charles Kludge Посмотреть сообщение
Закомментарить стр.2-10, в стр 95-98 BALL поменять на db
запустилась, спасибо!!!)

Добавлено через 1 час 1 минуту
Charles Kludge:
проверку на доступность и изменение координат так и не понял..)) чтож, буду открывать книжку и разбираться)
возможно мыслю более объективно, после изучения языков высокого уровня.

Добавлено через 2 минуты
Осталось обработать пробел(при нажатии прерывать цикл, при повторном нажатии возобновлять). и приступать к следующей задаче)
0
10 / 10 / 0
Регистрация: 22.11.2011
Сообщений: 85
Записей в блоге: 1
29.05.2013, 20:58 8
Alest, если не трудно - можете выкинуть финальный вариант вашей рабочей программы? Очень надо
0
73 / 74 / 4
Регистрация: 25.09.2012
Сообщений: 211
29.05.2013, 21:19 9
NikoX_93, Если учесть, что ТС заходил на форум примерно год назад, то финальный вариант программы он вряд ли здесь выложит.
0
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
30.05.2013, 06:06 10
NikoX_93, а в чём проблема-то?
0
1127 / 261 / 9
Регистрация: 11.06.2010
Сообщений: 1,049
30.05.2013, 11:42 11
Charles Kludge, наверное, в том, что он не может, как ТС, открыть книжку и разобраться xD
0
30.05.2013, 11:42
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.05.2013, 11:42
Помогаю со студенческими работами здесь

Вектор под углом 90 градусов
Как можно провести вектор Ed* что бы как на рисунке был угол между А и вектором Ed* угол 90...

Построить синусоиду под углом к OX в 45 градусов
Здравствуйте, есть интересная задача (по крайней мере для меня). Итак, нужно построить синусоиду...

Рисование линий под углом в 45 градусов
Всё перерыл нигде нет этого а надо очень(((( помогите пожалуйста Необходимо написать программу...

Передвижение объекта под углом 45 градусов
Здравствуйте, подскажите как сделать передвижение объекта(Shape1) если нажать две кнопки(вверх,...

вывести содержимое формы под углом 90 градусов
имеется функция SDK которой передается хэндл окна, а она на нем рисует видеопоток с IP-камеры. в...

Вращение вокруг точки под углом 45 градусов
Нужно реализовать вращение под углом 45 к двум осям (У и Х) Пробовал так: position =...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru