在汇编语言编程中不使用字符串指令移动字符串 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
我尝试了该程序的以下变体:
- 使用 LOOP 而不是 LOOPNE
- 使用 JNZ 和 DEC CX 而不是循环指令
但我似乎无法传输数据字节。这是在 masm 中调试时的输出
我认为问题出在 MOV [DI],AL
指令上。
如果没有段前缀,它会假设DI中的地址在DS引用的段中,而你想使用ES引用的段。
如果我没记错的话,语法是MOV ES:[DI],AL
; 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 而不是循环指令
但我似乎无法传输数据字节。这是在 masm 中调试时的输出
我认为问题出在 MOV [DI],AL
指令上。
如果没有段前缀,它会假设DI中的地址在DS引用的段中,而你想使用ES引用的段。
如果我没记错的话,语法是MOV ES:[DI],AL