📄 exp73.asm
字号:
;strcpy——字符串复制及参数传递的技巧
STACK SEGMENT STACK
DW 100H DUP(?)
STACK ENDS
DATA SEGMENT
STRING1 DB 'TEST STRCPY(S2,S1)',00H
STRING2 DB 128 DUP(?)
DATA ENDS
CODE1 SEGMENT
ASSUME CS:CODE1,DS:DATA,SS:STACK
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET STRING2
CALL DispStr
LEA SI,STRING1
LEA DI,STRING2
CALL STRCPY1 ;SI=SourceStr,DI=DestStr
MOV SI,OFFSET STRING2
CALL DispStr
CALL STRCPY2 ;NO ARGUS
MOV SI,OFFSET STRING2
CALL DispStr
LEA DX,STRING1
PUSH DX
LEA DX,STRING2
PUSH DX
CALL FAR PTR STRCPY3
MOV SI,OFFSET STRING2
CALL DispStr
MOV AX,4C00H
INT 21H
MAIN ENDP
DispStr PROC
PUSH SI
PUSH DX
CLD
DISP1: LODSB
CMP AL,0
JZ DISP_EXIT
MOV AH,2
INT 21H
JMP SHORT DISP1
DISP_EXIT:
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP SI
RET
DispStr ENDP
STRCPY1 PROC
CLD
STRCPY_LP1:
LODSB
STOSB
CMP AL,0
JNZ STRCPY_LP1
RET
STRCPY1 ENDP
STRCPY2 PROC
PUSH DI
PUSH SI
LEA SI,STRING1
LEA DI,STRING2
CLD
STRCPY_LP2:
LODSB
STOSB
CMP AL,0
JNZ STRCPY_LP2
RET
STRCPY2 ENDP
CODE1 ENDS
CODE2 SEGMENT
ASSUME CS:CODE2
STRCPY3 PROC FAR
;@ab EQU 6
PUSH BP
MOV BP,SP
PUSH DI
PUSH SI
MOV SI,[BP+6] ;ARGU1? ARGU2?
MOV DI,[BP+8] ;ARGU2? ARGU1?
;MOV SI,[BP+@ab]
;MOV DI,[BP+@ab+2]
CLD
STRCPY_LP3:
LODSB
STOSB
CMP AL,0
JNZ STRCPY_LP3
POP SI
POP DI
POP BP
RET 4 ;2*2
STRCPY3 ENDP
CODE2 ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -