Задача по циклическому перемещению символа "*" - Assembler
Формулировка задачи:
составить программу для циклического перемещения символа "*" из позиции (24,24) в заданную с интервалом 0.5 секунды и обратно. координаты заданной позиции ввести с клавиатуры. это суть задачи. у меня есть задача такая же, но по перемещению курсора. ума не приложу, что же тут нужно изменить, чтобы "*" место курсора перемещало. помогите, пожалуйста.
.286 .model small .stack 20h .data txt3 db 13,10, 'Vvedite x koordinaty:',13,10,'$' txt4 db 13,10, 'Vvedite y koordinaty:',13,10,'$' msg label byte maxnum db 6 reallen db ? numfld db 5 dup (30H) mult10 dw 0 a db 0 dlina dw 0 chastota dw 0 x db 0 y db 0 .code CODSEG SEGMENT ASSUME CS:CODSEG asbin_db proc mov mult10,0001 mov a,0 mov cx,10 lea si,numfld-1 mov bl,reallen sub bh,bh label_2: mov al,[si+bx] and ax,000fH ;выделение младшей тетрады mul mult10 ;умножение цифры на 10 в степени n add a,al ; прибавление промежуточного результата mov ax,mult10 mul cx mov mult10,ax ;новое значение переменной dec bx jnz label_2 ret asbin_db endp zaderzhka proc mov bx,1000 ; пауза 1 cек ll3: mov cx,3000 ll4: loop ll4 dec bx jnz ll3 ret zaderzhka endp START: mov ax,@data mov ds,ax ;Ввод х коорднаты mov ah,9 lea dx, txt3 int 21H mov ah,0AH lea dx,msg int 21H call asbin_db ;Вызов процедуры преобразования символа в число mov bl,a mov x,bl ;Ввод y координаты mov ah,9 lea dx, txt4 int 21H mov ah,0AH lea dx,msg int 21H call asbin_db ;Вызов процедуры преобразования символа в число mov bl,a mov y,bl ;Очистка экрана mov ah,0 mov al,2 int 10h labst: ;Чтение координат курсора mov ah,42 int 10h xor bh,bh ;Установка позиции курсора mov dh,24 mov dl,24 mov ah,02h int 10h call zaderzhka ;Установка позиции курсора mov dh,x mov dl,y mov ah,02h int 10h call zaderzhka mov dl,0ffh mov ah, 06h int 21h cmp al,27d ; выходить по Esc je EXIT jmp labst EXIT: xor dx, dx mov ax, 4c00h int 21h CODSEG ends end START
Решение задачи: «Задача по циклическому перемещению символа "*"»
textual
Листинг программы
.286 .model small .stack 20h .data txt3 db 13,10, 'Vvedite x koordinaty:',13,10,'$' txt4 db 13,10, 'Vvedite y koordinaty:',13,10,'$' msg label byte maxnum db 6 reallen db ? numfld db 5 dup (30H) mult10 dw 0 a db 0 dlina dw 0 chastota dw 0 x db 0 y db 0 .code CODSEG SEGMENT ASSUME CS:CODSEG asbin_db proc mov mult10,0001 mov a,0 mov cx,10 lea si,numfld-1 mov bl,reallen sub bh,bh label_2: mov al,[si+bx] and ax,000fH ;выделение младшей тетрады mul mult10 ;умножение цифры на 10 в степени n add a,al ; прибавление промежуточного результата mov ax,mult10 mul cx mov mult10,ax ;новое значение переменной dec bx jnz label_2 ret asbin_db endp zaderzhka proc mov bx,1000 ; пауза 1 cек ll3: mov cx,3000 ll4: loop ll4 dec bx jnz ll3 ret zaderzhka endp START: mov ax,@data mov ds,ax ;Ввод х коорднаты mov ah,9 lea dx, txt3 int 21H mov ah,0AH lea dx,msg int 21H call asbin_db ;Вызов процедуры преобразования символа в число mov bl,a mov x,bl ;Ввод y координаты mov ah,9 lea dx, txt4 int 21H mov ah,0AH lea dx,msg int 21H call asbin_db ;Вызов процедуры преобразования символа в число mov bl,a mov y,bl ;Очистка экрана mov ah,0 mov al,2 int 10h labst: ;Чтение координат курсора mov ah,03 int 10h xor bh,bh ;Установка позиции курсора mov dh,24 mov dl,24 mov ah,02h int 10h mov al,"*" mov cx, 10 mov ah, 0eh int 10h mov al," " mov cx, 10 mov ah, 0eh int 10h call zaderzhka ;Установка позиции курсора mov dh,x mov dl,y mov ah,02h int 10h mov al,"*" mov cx, 10 mov ah, 0eh int 10h mov al," " mov cx, 10 mov ah, 0eh int 10h call zaderzhka mov dl,0ffh mov ah, 06h int 21h cmp al,27d ; выходить по Esc je EXIT jmp labst EXIT: xor dx, dx mov ax, 4c00h int 21h CODSEG ends end START
Объяснение кода листинга программы
- Переменная
txt3
содержит строкуVvedite x koordinaty:
,13,10,$
. - Переменная
txt4
содержит строкуVvedite y koordinaty:
,13,10,$
. - Переменная
msg
используется как метка для вывода сообщений. - Переменная
maxnum
содержит число 6. - Переменная
reallen
используется для хранения значения, введенного пользователем. - Переменная
numfld
содержит массив из 5 элементов, каждый из которых является числом 30H. - Переменная
mult10
используется для хранения значения, полученного в результате умножения цифры на 10 в степени n. - Переменная
a
используется как промежуточный результат при преобразовании символа в число. - Переменная
dlina
содержит длину введенной строки. - Переменная
chastota
используется для хранения количества цифр в числе, полученном после преобразования символа. - Переменные
x
иy
используются для хранения координат курсора. - Процедура
asbin_db
используется для преобразования символа в число. - Процедура
zaderzhka
используется для задержки выполнения программы на 1 секунду. - Команда
mov ah,03
используется для чтения координат курсора. - Команда
xor bh,bh
используется для установки младшего бита в 0, что означает чтение значений из регистра BL. - Команда
mov dh,24
используется для установки старших 8 бит регистра DH в значение 24. - Команда
mov dl,24
используется для установки младших 8 бит регистра DL в значение 24. - Команда
mov ah,02h
используется для установки регистра AH в значение 02h, что означает перемещение курсора. - Команда
int 10h
используется для выполнения операции интерактивного ввода/вывода. - Команда
mov al,
перемещает символ
` в регистр AL.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д