在汇编语言编程中不使用字符串指令移动字符串 8086

Moving a string without using string instuctions in Assemply language programming 8086

; Moving a string without using string instructions

ASSUME CS:CODE,DS:DATA,ES:EXTRA

DATA SEGMENT
    SOURCE  DB  11H,22H,33H,44H
DATA ENDS

EXTRA SEGMENT
    DEST    DB  ?
EXTRA ENDS

CODE SEGMENT

START:  MOV AX,DATA
        MOV DS,AX

        MOV AX,EXTRA
        MOV ES,AX

        MOV SI,OFFSET SOURCE
        MOV DI,OFFSET DEST
        MOV CX,0004H
        CLD

TRANSFER:   
        MOV AL,[SI]
        MOV [DI],AL
        INC SI
        INC DI 
        ;DEC CX
        LOOPNE TRANSFER

        MOV AH,4CH
        INT 21H

CODE ENDS
END START

我尝试了该程序的以下变体:

  1. 使用 LOOP 而不是 LOOPNE
  2. 使用 JNZ 和 DEC CX 而不是循环指令

但我似乎无法传输数据字节。这是在 masm 中调试时的输出

我认为问题出在 MOV [DI],AL 指令上。

如果没有段前缀,它会假设DI中的地址在DS引用的段中,而你想使用ES引用的段。

如果我没记错的话,语法是MOV ES:[DI],AL