J'avais une tâche à faire défiler l'écran en utilisant des instructions de chaîne. Mon code ne fonctionne pas très bien et je n'arrive pas à comprendre le problème. Le code imprime A-Y sur l'écran, puis il doit faire défiler la première ligne vers la deuxième et ainsi de suite, mais il copie plutôt la première rangée et ainsi de suite.Écran de défilement à l'aide d'instructions de chaîne dans le langage d'assemblage 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
Commenter votre code, surtout si vous voulez que les autres pour aider et apprendre à utiliser un débogueur. Cela dit, si je comprends votre code, copiez d'abord la ligne 1 vers la ligne 2, puis essayez de copier la ligne 2 vers la ligne 3, mais bien sûr, vous avez déjà écrasé la ligne 2. Vous devriez exécuter cette copie à l'envers. – Jester
@Jester il y a une instruction MOVS donc il ne doit pas copier les lignes et DS et ES pointent tous les deux vers la mémoire VGA (sauf pour copier la première ligne vers le tableau). – Masu
Votre boucle 'REP MOVSW' à' K' copie les lignes (dans la mémoire vga) comme je l'ai dit. – Jester