Экран прокрутки с использованием строковых инструкций на ассемблере 8086
У меня была задача прокрутить экран, используя строковые инструкции. Мой код работает не очень хорошо, и я не могу понять проблему. Код выводит AY на экран, а затем он должен прокрутить первую строку до второй и т. Д., Но он скорее копирует первую строку и т. Д.
org 100h
.DATA
ARRAY1 DW 80 DUP(0)
.CODE
MOV CX,25
MOV AX,0XB800
MOV ES,AX
MOV DI,0
MOV AH,0X07
MOV AL,41H
L:
MOV BX,CX
MOV CX,80
REP STOSW
INC AL
MOV AX,DS
MOV ES,AX
LEA DI,ARRAY1
MOV AX,0XB800
MOV DS,AX
MOV CX,80
CLD
REP MOVSW
MOV CX,25
MOV DI,160
MOV SI,0
K:
MOV BX,CX
MOV AX,0XB800
MOV ES,AX
MOV CX,80
CLD
REP MOVSW
ADD DI,160
CMP DI,3840
JE EXIT
ADD SI,160
JMP K
EXIT: ret
1 ответ
У вас есть 2 проблемы в вашем коде:
Вы забыли написать
mov si,0
в той части, которая копирует с экрана в буфер Array1.Вы должны начать в нижней части экрана, чтобы прокрутить, как вы указали (@Jester уже указал на это). Этот простой код сделает свое дело:
mov AX, 0XB800 mov es, ax mov ds, ax mov di, 3840 ;Address of 25th row cld K: lea si, [di-160] ;Address of row above mov cx, 80 rep movsw sub di, 320 jne K ;DI=0 is end