-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