-1
我有使用字符串指令滚动屏幕的任务。我的代码不工作得很好,我无法弄清楚问题所在。代码在屏幕上打印A-Y,然后它应该将第一行滚动到第二行,等等,但它相当于复制第一行,依此类推。使用汇编语言中的字符串指令滚动屏幕8086
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行,然后尝试复制第2行到第3行,但是当然你已经覆盖第2行。你应该向后运行该复制。 – Jester
@Jester有一个MOVS指令,所以它不应该复制行,DS和ES都指向VGA存储器(除了复制第一行到数组)。 – Masu
正如我所说,你的'REP MOVSW'循环在'K'复制行(在vga内存中)。 – Jester