Экран прокрутки с использованием строковых инструкций на ассемблере 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
    
Другие вопросы по тегам