汇编语言 将数据段中的一个字符串传送到附加段中,然后将附加段中的字符串输出到屏幕上。求填空

DATAS SEGMENT ;定义源数据段
MSR DB "HELLO,WORLD!$"
LEN EQU $- MSR
DATAS ENDS

EXDA SEGMENT ;定义附加数据段
MSD DB LEN DUP(?)
EXDA ENDS

STACK1 SEGMENT STACK ;定义堆栈段
DW 20 DUP(?)
STACK1 ENDS

CODE SEGMENT ;定义代码段
ASSUME CS:CODE, DS:DATAS, ES:EXDA
START: MOV AX, DATAS
MOV DS, AX ;装载数据段寄存器
MOV AX, EXDA
MOV ES, AX ;装载附加数据段寄存器
MOV SI, OFFSET MSR ;设置SI
MOV DI, OFFSET MSD ;设置DI
MOV CX, LEN
NEXT: ① ;开始传输数据

INC SI
INC DI
DEC CX
JNZ NEXT
PUSH ES
POP DS ;将附加段寄存器指向的段值赋给DS寄存器
MOV DX, OFFSET MSD
MOV AH, 9
INT 21H
KEY: MOV AH, 01H ;判断是否有按键按下?
INT 16H ;为观察运行结果,使程序有控制的退出
JZ KEY
MOV AX, 4C00H ;结束程序退出
INT 21H
CODE ENDS
END START
可以使用串操作指令完成以上功能吗?源程序是什么

仅用两句传送指令,即可。
……

MOV CX, LEN
NEXT:
MOV AL, DS[SI] ; ① ;开始传输数据
MOV ES[DI], AL ; ②
INC SI
……
程序中,已经给出了 INC SI、INC DI,
所以就不能用串传送指令。
否则,就重复加一了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-09
s1 segment
STRING1 db 'ABCDEF'
STRING2 db 6 dup(?)
h db 24h
s1 ends
s2 segment stack
dw 100(?)
top label word
s2 ends
s3 segment
assume ds:s1,ss:s2,cs:s3
p proc far
lea sp,top
mov ax,s1
mov ds,ax
mov es,ax
lea si,STRING1
lea di,STRING2
mov cx,6
cld
rep movsb
lea dx,STRING2
mov ah,9
int 21h
mov ah,4ch
int 21h
s3 ends
end p