Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ORG 100h
- Initialization: ; инициализация
- mov ax, 0001h ; установка видеорежима 40x25, инициализация экрана
- int 10h
- mov ax, 0500h ; выбор видеостраницы: 0
- int 10h
- Main: ; главный цикл
- CoordinateXException: ; обработка исключения х=255,
- cmp [bCoordinateX], 0FFh ; которое получается при декременте х=0
- jnz CoordinateXCalculation ; (движение влево с крайней левой позиции)
- mov ah, [bMaxCoordinateX]
- mov [bCoordinateX], ah
- jmp CoordinateYException
- CoordinateXCalculation: ; вычисление координаты х
- mov al, [bCoordinateX]
- mov ah, 00h
- div [bSizeX] ; 0<x<39
- mov [bCoordinateX], ah
- CoordinateYException: ; обработка исключения у=255,
- cmp [bCoordinateY], 0FFh ; которое получается при декременте 0
- jnz CoordinateYCalculation ; (движение вверх с крайней верхней позиции)
- mov ah, [bMaxCoordinateY]
- mov [bCoordinateY], ah
- jmp Deleting
- CoordinateYCalculation: ; вычисление координаты у
- mov al, [bCoordinateY] ; 0<y<24
- mov ah, 00h
- div [bSizeY]
- mov [bCoordinateY], ah
- Deleting: ; затирание предыдущей позиции
- mov bh, 00h ; установка курсора на координаты
- mov dh, [bCurrentCoordinateY]
- mov dl, [bCurrentCoordinateX]
- mov ah, 02h
- int 10h
- mov bh, 00h ; вывод пустого символа или следа
- mov al, [bDeleteCharacter]
- mov ah, 09h
- mov bl, [bDeleteAttribute]
- mov cx, 01h
- int 10h
- Draw: ; отрисовка
- mov bh, 00h ; установка курсора на координаты
- mov dh, [bCoordinateY]
- mov dl, [bCoordinateX]
- mov ah, 02h
- int 10h
- mov bh, 00h ; вывод символа
- mov al, [bCharacter]
- mov ah, 09h
- mov bl, [bAttribute]
- mov cx, 01h
- int 10h
- call Invisible ; спрятать курсор, чтоб не мельтешил
- PositionSaving: ; сохранение предыдущей позиции
- mov ah, [bCoordinateX] ; в отдельные переменные
- mov [bCurrentCoordinateX], ah
- mov ah, [bCoordinateY]
- mov [bCurrentCoordinateY], ah
- KeyboardCheck:
- mov ah, 00h ; ожидание ввод с клавиатуры
- int 16h
- cmp ax, 011Bh ; Esc?
- jz Exit
- cmp ax, 4B00h ; стрелка влево?
- jz Left
- cmp ax, 4D00h ; стрелка вправо?
- jz Right
- cmp ax, 4800h ; стрелка вверх?
- jz Up
- cmp ax, 5000h ; стрелка вниз?
- jz Down
- jmp Main ; возврат в начало!
- Invisible:
- mov ah, 02h ; перемещение курсор на 26-ю строку (из 25, нумерация с нуля)
- mov bh, 00h
- mov dx, 1900h
- int 10h
- ret
- Exit: ; выход
- int 20h
- Left: ; влево
- dec [bCoordinateX] ; уменьшение координаты х
- jmp Main
- Right: ; вправо
- inc [bCoordinateX] ; увеличение х
- jmp Main
- Up: ; вверх
- dec [bCoordinateY] ; уменьшение у
- jmp Main
- Down: ; вниз
- inc [bCoordinateY] ; увеличение у
- jmp Main
- Variables:
- bCurrentCoordinateX db 00h
- bCurrentCoordinateY db 00h
- bCoordinateX db 00h
- bCoordinateY db 00h
- bSizeX db 40d
- bSizeY db 25d
- bMaxCoordinateX db 39d
- bMaxCoordinateY db 24d
- bCharacter db 40h
- bAttribute db 02h
- bDeleteCharacter db 00h
- bDeleteAttribute db 00h
Advertisement
Add Comment
Please, Sign In to add comment