Задача по циклическому перемещению символа "*" - 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

Объяснение кода листинга программы

  1. Переменная txt3 содержит строку Vvedite x koordinaty:,13,10,$.
  2. Переменная txt4 содержит строку Vvedite y koordinaty:,13,10,$.
  3. Переменная msg используется как метка для вывода сообщений.
  4. Переменная maxnum содержит число 6.
  5. Переменная reallen используется для хранения значения, введенного пользователем.
  6. Переменная numfld содержит массив из 5 элементов, каждый из которых является числом 30H.
  7. Переменная mult10 используется для хранения значения, полученного в результате умножения цифры на 10 в степени n.
  8. Переменная a используется как промежуточный результат при преобразовании символа в число.
  9. Переменная dlina содержит длину введенной строки.
  10. Переменная chastota используется для хранения количества цифр в числе, полученном после преобразования символа.
  11. Переменные x и y используются для хранения координат курсора.
  12. Процедура asbin_db используется для преобразования символа в число.
  13. Процедура zaderzhka используется для задержки выполнения программы на 1 секунду.
  14. Команда mov ah,03 используется для чтения координат курсора.
  15. Команда xor bh,bh используется для установки младшего бита в 0, что означает чтение значений из регистра BL.
  16. Команда mov dh,24 используется для установки старших 8 бит регистра DH в значение 24.
  17. Команда mov dl,24 используется для установки младших 8 бит регистра DL в значение 24.
  18. Команда mov ah,02h используется для установки регистра AH в значение 02h, что означает перемещение курсора.
  19. Команда int 10h используется для выполнения операции интерактивного ввода/вывода.
  20. Команда mov al,перемещает символ` в регистр AL.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы