第1个回答 2009-11-09
;下面的偏移地址自己根据情况设置
DATA SEGMENT
SRC DW 1000H;源数据块偏移地址
DES DW 1010H;目的数据块偏移地址
COUNT DW 0020H;要移动的字节数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV ES,AX;假设两个数据块都在同一个段
MOV SI,SRC
MOV DI,DES
MOV CX,COUNT
CMP SI,DI
JE DONE;相等就不复制
JA L1
STD;SI<DI就降序复制,设置DF=1
ADD SI,COUNT
DEC SI
ADD DI,COUNT
DEC DI
REP MOVSB
JMP DONE
L1:CLD;SI>DI就升序复制,设置DF=0
REP MOVSB
DONE:MOV AX,4C00H
INT 21H
CODE ENDS
END START本回答被提问者采纳
第2个回答 2009-11-09
;input code
data segment
SRC DB 'LINK:WARNING NO STACK SEGMENT',0
DST DB 100 DUP (0)
data ends
code segment
assume cs:code,ds:data
start:
;向栈中压入传入参数
MOV AX,DATA
PUSH AX
PUSH AX
;
MOV AX,OFFSET SRC
PUSH AX
MOV AX,OFFSET DST
PUSH AX
CALL MOVDATA
MOV AH,4CH
INT 21H
MOVDATA PROC
PUSH BP
MOV BP,SP
;
PUSH DS
PUSH ES
PUSH SI
PUSH DI
PUSH CX
PUSH AX
;从栈中取出参数
MOV AX,[BP+4]
MOV DI,AX
MOV AX,[BP+6]
MOV SI,AX
MOV AX,[BP+8]
MOV DS,AX
MOV ES,AX
PUSH SI
XCHG SI,DI
CLD
MOV AL,0
MOV CX,0FFFFH
REPNZ SCASB
NOT CX ;获取字符串的长度
XCHG SI,DI
POP SI
;
TEST SI,1
JZ PARITY
MOVSB
DEC CX
PARITY:
SHR CX,1
REP MOVSW
JCXZ OK
MOVSB
OK:
POP AX
POP CX
POP DI
POP SI
POP ES
POP DS
POP BP
RET 8
MOVDATA ENDP
code ends
end start