我有一个使用字符串指令滚动屏幕的任务。我的代码工作不太好,我无法解决问题。代码在屏幕上打印A-Y,然后应该将第一行滚动到第二行,以此类推,但它复制第一行,以此类推
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
您的代码中有两个问题:
-
您忘记在从屏幕复制到Array1缓冲区的部分中写入
mov si,0
。 -
你应该从屏幕底部开始,按照你指示的方式滚动(@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