使用汇编语言8086中的字符串指令滚动屏幕



我有一个使用字符串指令滚动屏幕的任务。我的代码工作不太好,我无法解决问题。代码在屏幕上打印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
    

最新更新