问题描述
; 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
我已经尝试了该程序的以下变体:
- 使用LOOP代替LOOPNE
- 将JNZ与DEC CX结合使用Loop指令
但是我似乎无法传输数据字节。这是在masm中调试时的输出
解决方法
我相信问题在于MOV [DI],AL
指令。
没有段前缀,将假定DI中的地址在DS引用的段中,并且您要使用ES引用的段。
如果我没记错的话,语法是MOV ES:[DI],AL