Я пытаюсь сделать программу на языке ассемблера, в которой я хочу переместить текст или символ на экране, как заставка, то есть сначала он должен двигаться как в прямом, так и в нижнем направление. Когда он достигает нижней границы экрана, он должен начать движение вперед и вверх и наоборот.Перемещение текстовой программы в языке ассемблера
Я пробовал себя, и я смог одновременно перемещать символ вперед и вниз. Когда персонаж попадает на нижний предел экрана, я хочу, чтобы он двигался в направлении вверх и вперед, но я не могу понять, как это сделать.
Я использую EMU8086 ассемблер
.model small
.data
st1 db "O",13,10,'$'
.code
main proc
mov AX,@data
mov DS,AX
mov BL,0
label1:
mov AH,2H
mov BH,0 ;goto-XY
mov DH,BL
mov DL,BL
INT 10H
mov AH,9H
mov DX,offset st1 ;print
INT 21H
mov AH, 6H
mov AL, 0
mov BH, 7 ;clear screen
mov CX, 0
mov DL, 79
mov DH, 24
int 10H
ADD BL,1
cmp DH,23 ;conditional jump
jz label2
loop label1
label2:
; mov AH,2H
; mov BH,0 ;goto-XY
; mov DH,BL
; mov DL,BL
; INT 10H
mov AH,9H
mov DX,offset st1 ;print
INT 21H
mov AH, 6H
mov AL, 0
mov BH, 7 ;clear screen
mov CX, 0
mov DL, 79
mov DH, 24
int 10H
SUB BL,1
loop label2
mov AH,4CH
INT 21H
end main
В конце каждой итерации первого контура, я проверка, если «DH» = 23, так как нижний предел оси у моего экрана 23. Если нижняя предел экрана достигнут, он должен перейти к 'label2', но он не перескакивает на 'label2', что очевидно из-за того, что я не правильно использую оператор cmp. Может ли кто-нибудь помочь мне решить эту проблему?
Главное, что я хочу помочь, - какое условие я должен проверить в 'label1', чтобы перейти к 'label2'.
PS. Просто новичок на ассемблере, поэтому, если вы предлагаете решение, пожалуйста, держите его простым и понятным. Вот что я пробовал до сих пор.
Какую версию сборки вы используете? –
Я не уверен, что вы подразумеваете под версией сборки. Можете ли вы уточнить? – Yousaf
Существует множество различных версий языка ассемблера в зависимости от вашей архитектуры. Один из самых популярных ассемблеров в nasm. –