Циклическое перемещение курсора - Assembler
Формулировка задачи:
Задание:
Составить программу для циклического перемещения курсора из позиции (14, 04) в заданную с интервалом 2.5 сек. и обратно.
Координаты заданной позиции X и Y ввести с клавиатуры в виде двухзначных чисел.
Перемещение сопровождать звуковым сигналом ; прерывание программы - "Esc"
Язык программирования -- ассемблер в среде Tasm
Прошу хоть какой-то помощи, т.к. сам в ассемблере "ни в зуб ногой"
.Решение задачи: «Циклическое перемещение курсора»
textual
Листинг программы
.model small .stack 100h .data ;переменные counter dw 0 ; число вызовов прерывания Pos dw 0 Xfix db 14 Yfix db 4 X db 70 Y db 21 Time2_5sec equ 27 kbESC equ 1Bh .code ; Обработчик прерывания 1Ch (пользовательский обработчик IRQ0) int1Ch_handler proc far push ds push ax push bx push dx mov ax, @data mov ds, ax dec word ptr counter ; увеличить счетчик накоплений jnz @@ToOldInt mov counter,Time2_5sec xor [Pos], 1 mov bx, [Pos] add bx, bx mov ah, 02h mov dl, Xfix[bx];столбец (от 0) mov dh, Yfix[bx];строка (от 0) mov bh, 0 ;видеостраница int 10h @@ToOldInt: pop dx pop bx pop ax pop ds db 0EAh ; команда jmp far old_int1Ch dd 0 ; адрес старого обработчика int1Ch_handler endp main proc mov ax, @data mov ds, ax ;установка обработчика прерывания mov ax, 351Ch ; AH = 35h, AL = номер прерывания int 21h ; получить адрес обработчика mov word ptr cs:old_int1Ch, bx ; и записать его в old_int1Chh mov word ptr cs:old_int1Ch+2, es push ds mov ax, cs mov ds, ax mov ax, 251Ch ; AH = 25h, AL = номер прерывания mov dx, offset cs:int1Ch_handler ; DS:DX - адрес обработчика int 21h ; установить обработчик pop ds mov counter, Time2_5sec mov ah, 02h mov bh, 0 ;видеостраница mov dl, [Xfix] ;столбец (от 0) mov dh, [Yfix] ;строка (от 0) int 10h @@CmdLoop: mov ah, 00h int 16h cmp al, kbESC jnz @@CmdLoop ;установка обработчика прерывания push ds mov ax, 251Ch ; AH = 25h, AL = номер прерывания lds dx, cs:old_int1Ch ; DS:DX - адрес обработчика int 21h ; установить обработчик pop ds mov ax, 4C00h int 21h main endp end main
Объяснение кода листинга программы
- Установка начального значения счётчика
- Обработчик прерывания 1Ch (пользовательский обработчик IRQ0)
- Установка обработчика прерывания
- Запуск цикла перемещения курсора
- Остановка цикла перемещения курсора
- Установка обработчика прерывания
- Код, выполняющийся в бесконечном цикле (пока не будет нажата клавиша ESC)
- Код, выполняющийся после нажатия клавиши ESC
- Код, выполняющийся при завершении программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д