![]() |
1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!
![]() |
Rocket |
![]()
Сообщение
#1
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 306 Пол: Мужской Реальное имя: Евгений Репутация: ![]() ![]() ![]() |
Доброго времени суток, уважаемые форумчане!
![]() Мне очень эта программа напоминает металлоискатель : ) Пока что я сделал только перемещение символа "*" с помощью букв w,s,a,d.
data segment
old_cs dw ?
old_ip dw ?
symbol db ?
Pressed db 1
x db ?
y db ?
sgn db '*'
atr db 10
data ends
code segment
assume cs: code, ds: data
new_1c proc far
push ax
push bx
push ds
push es
mov ax, data
mov ds, ax
mov ax, 40h
mov es, ax
mov ax, es:[1Ch]
mov bx, es:[1Ah]
cmp bx, ax
jne get_char
jmp go_out
get_char:
mov al, es:[bx]
mov es:[1Ch], bx
mov symbol, al
inc Pressed
go_out:
pop es
pop ds
pop bx
pop ax
iret
new_1c endp
start:
mov ax, data
mov ds, ax
mov ah, 35h
mov al, 1Ch
int 21h
mov old_ip, bx
mov old_cs, es
push ds
mov dx, offset new_1c
mov ax, seg new_1c
mov ds, ax
mov ah, 25h
mov al, 1Ch
int 21h
pop ds
mov ax, data
mov es, ax
mov x,14
mov y,40
main_loop:
cmp Pressed, 0
je m1
mov Pressed, 0
cmp symbol, 30h
je q
xor ax, ax
mov al, symbol
m1: cmp al, 'w'
jne m2
dec x
jmp met
m2: cmp al, 's'
jne m3
inc x
jmp met
m3: cmp al, 'a'
jne m4
dec y
jmp met
m4: cmp al, 'd'
jne main_loop
inc y
met: xor bh, bh
mov ah, 13h
mov al, 0d
mov dh, x
mov dl, y
lea bp, sgn
mov cx, 1
mov bl, atr
int 10h
jmp main_loop
q:
push ds
mov dx, old_ip
mov ax, old_cs
mov ds, ax
mov ah, 25h
mov al, 1Ch
int 21h
pop ds
mov ax, 4C00h
int 21h
code ends
end start
Не могу понять, почему "вверх" не срабатывает с первого раза? приходится повторно нажимать "w", в результате мы поднимаеся не на одну позицию, а на две... И как сделать какую-нибудь очистку экрана? чтоб очищать консоль и на экран выводился только один символ "*" . |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 8:28 |