代码部分
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT
TABLE_LEN DW 16
TABLE DW 200, 300, 400, 10, 20, 0, 1, 8
DW 41H, 40, 42H, 50, 60, 0FFFFH, 2, 3
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1, DS:DATA1, SS:STACK1
MAIN PROC FAR;第一题:排序(降序)
MOV AX, STACK1
MOV SS, AX
MOV SP, STACK_BTM
MOV AX, DATA1
MOV DS, AX
LP1: MOV BX, 1
MOV CX, TABLE_LEN
DEC CX
MOV SI, OFFSET TABLE
LP2: MOV AX, [SI]
CMP AX, [SI+2]
JAE CONTINUE
XCHG AX, [SI+2]
MOV [SI], AX
MOV BX, 0
CONTINUE: ADD SI, 2
LOOP LP2
CMP BX, 1
JZ TURN_DEC;切换打印十进制和十六进制
JMP SHORT LP1
BACK: JMP EXIT
TURN_DEC: MOV CX, TABLE_LEN;第二题:打印排序后的结果(十进制)
MOV BX, 0
LP3: MOV SI, OFFSET TABLE
ADD SI, BX
MOV AX, [SI]
MOV SI, 0
MOV DI, 000AH
LP4: MOV DX, 0
DIV DI
ADD DX, 30H
PUSH DX
INC SI
CMP AX, 0
JNZ LP4
LP5: POP DX
MOV AH, 2
INT 21H
DEC SI
CMP SI, 0
JNZ LP5
MOV DL, 32
MOV AH, 2
INT 21H
ADD BX, 2
LOOP LP3
JMP BACK
TURN_HEX: MOV CX, TABLE_LEN;第三题:打印排序后的结果(十六进制)
MOV BX, 0
LP6: MOV SI, OFFSET TABLE
ADD SI, BX
MOV AX, [SI]
MOV SI, 0
MOV DI, 0010H
LP7: MOV DX, 0
DIV DI
CMP DX, 10
JAE BRANCH1
ADD DX, 30H
JMP BRANCH2
BRANCH1: ADD DX, 57H
BRANCH2: PUSH DX
INC SI
CMP AX, 0
JNZ LP7
LP8: POP DX
MOV AH, 2
INT 21H
DEC SI
CMP SI, 0
JNZ LP8
MOV DL, 32
MOV AH, 2
INT 21H
ADD BX, 2
LOOP LP6
JMP BACK
EXIT: MOV AX, 4C00H
INT 21H
MAIN ENDP
CODE1 ENDS
END MAIN
代码部分:
data segment
a dd 0ffffffffh;第一个32位数
b dd 0ffffffffh;第二个32位数
result dw 0, 0, 0, 0;存放结果
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds, ax
mov bx, word ptr b
mov ax, word ptr a
mul bx
mov result, ax
mov result+2, dx
mov bx, word ptr b
mov ax, word ptr [a+2]
mul bx
add result+2, ax
adc result+4, dx
adc result+6, 0
mov bx, word ptr [b+2]
mov ax, word ptr a
mul bx
add result+2, ax
adc result+4, dx
adc result+6, 0
mov bx, word ptr [b+2]
mov ax, word ptr [a+2]
mul bx
add result+4, ax
adc result+6, dx
exit:
mov ax, 4c00h
int 21h
code ends
end start
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT
STRING1 DB 'It is a temp string.',0AH,0DH,'$'
STRING2 DB 50 DUP(?)
LEN DW 23
MSG1 DB 0AH,0DH,'OLD_STRING:','$'
MSG2 DB 0AH,0DH,'CPY_STRING:','$'
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1, DS:DATA1, SS:STACK1
MAIN PROC FAR
MOV AX, DATA1
MOV DS,AX
LEA SI, STRING1
MOV AX, SEG STRING2
MOV ES, AX
LEA DI, STRING2
MOV CX, LEN
LABEL1:
MOVSB
LOOP LABEL1
LEA DX, MSG1
MOV AX, 0900H
INT 21H
LEA DX, STRING1
MOV AX, 0900H
INT 21H
LEA DX, MSG2
MOV AX, 0900H
INT 21H
LEA DX, STRING2
MOV AX, 0900H
INT 21H
MOV AX, 4C00H
INT 21H
MAIN ENDP
CODE1 ENDS
END MAIN
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT
STRING1 DB 'Qinhaotong'
STRING2 DB ' 15061166 '
LEN DW STRING2 - STRING1
TEST_STR DB 'It is a temp string wittern by Qinhaotong.',0DH,0AH,'$'
TEST_STR_LEN EQU $ - TEST_STR
TEST_STR_END DW $
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1, DS:DATA1, SS:STACK1
FUNC1 PROC
PUSH DI
MOV DI,OFFSET TEST_STR
PUSH BX
PUSH AX
MOV BX,OFFSET TEST_STR_END
PUSH SI
LABEL1:
CMP DI,BX
JZ LABEL5
MOV SI,OFFSET STRING1
MOV CX,LEN
PUSH DI
LABEL2:
MOV AL,BYTE PTR [SI]
CMP BYTE PTR [DI],AL
JNZ LABEL3
INC SI
INC DI
LOOP LABEL2
MOV SI,OFFSET STRING2
POP DI
CALL FUNC2
JMP LABEL4
LABEL3:
POP DI
LABEL4:
INC DI
JMP LABEL1
LABEL5:
POP SI
POP AX
POP BX
POP DI
RET
FUNC1 ENDP
FUNC2 PROC
PUSH CX
MOV CX,LEN
CLD
REP MOVSB
POP CX
RET
FUNC2 ENDP
MAIN PROC FAR
MOV AX,STACK1
MOV SS,AX
MOV SP,STACK_BTM
MOV AX,DATA1
MOV DS,AX
MOV ES,AX
MOV DX,OFFSET TEST_STR
MOV AH,9
INT 21H
CALL FUNC1
MOV DX,OFFSET TEST_STR
MOV AH,9
INT 21H
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
CODE1 ENDS
END MAIN
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT
MSG1 DB 'OLD_STRING :','$'
MSG2 DB 'CPY_STRING :','$'
MSG3 DB 'UPPER_STRING:','$'
MSG4 DB 'LOWER_STRING:','$'
TEST_STR DB 'It Is A tEmP sTrInG WiTtErN bY QiNhAoToNg.',0AH,0DH,'$'
TEST_CPY DB 50 DUP(?)
TEST_STR_LEN EQU $ - TEST_STR
TEST_STR_END DW $
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1, DS:DATA1, SS:STACK1
MAIN PROC FAR
MOV AX, DATA1
MOV DS,AX
LEA DX, OFFSET MSG1
MOV AX, 0900H
INT 21H
LEA DX, OFFSET TEST_STR;杈撳嚭鍘熷瓧绗︿覆
MOV AX, 0900H
INT 21H
LEA SI, TEST_STR
MOV AX, SEG TEST_CPY
MOV ES, AX
LEA DI, TEST_CPY
MOV CX, TEST_STR_LEN
LABEL1:
MOVSB
LOOP LABEL1
LEA DX, OFFSET MSG2
MOV AX, 0900H
INT 21H
LEA DX, TEST_CPY;杈撳嚭澶嶅埗鐨勫瓧绗︿覆
MOV AX, 0900H
INT 21H
PUSH ES
PUSH DS
POP ES
MOV SI, OFFSET TEST_STR
MOV DI, SI
MOV CX, TEST_STR_LEN
LP1: LODSB
CMP AL, 'a'
JB CONTINUE1
CMP AL, 'z'
JA CONTINUE1
SUB AL, 20H
CONTINUE1: STOSB
LOOP LP1
POP ES
LEA DX, OFFSET MSG3
MOV AX, 0900H
INT 21H
LEA DX, TEST_STR;杈撳嚭澶у啓瀛楃涓?
MOV AX, 0900H
INT 21H
PUSH ES
PUSH DS
POP ES
MOV SI, OFFSET TEST_STR
MOV DI, SI
MOV CX, TEST_STR_LEN
LP2: LODSB
CMP AL, 'A'
JB CONTINUE2
CMP AL, 'Z'
JA CONTINUE2
ADD AL, 20H
CONTINUE2: STOSB
LOOP LP2
POP ES
LEA DX, OFFSET MSG4
MOV AX, 0900H
INT 21H
LEA DX, TEST_STR;杈撳嚭灏忓啓瀛楃涓?
MOV AX, 0900H
INT 21H
MOV AX, 4C00H
INT 21H
MAIN ENDP
CODE1 ENDS
END MAIN
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT
STRING1 DB 'ABOVE',0AH,0DH,'$'
STRING2 DB 'ABOUT',0AH,0DH,'$'
STRING3 DB 'AGAIN',0AH,0DH,'$'
MSG1 DB 0AH,0DH,'BEFORE_SORT:',0AH,0DH,'$'
MSG2 DB 0AH,0DH,'AFTER_SORT:',0AH,0DH,'$'
STRING4 DB 50 DUP(?)
LEN DW 5
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1, DS:DATA1, SS:STACK1
MAIN PROC FAR
MOV AX, DATA1
MOV DS,AX
LEA DX, MSG1
MOV AX, 0900H
INT 21H
LEA DX, STRING1
MOV AX, 0900H
INT 21H
LEA DX, STRING2
MOV AX, 0900H
INT 21H
LEA DX, STRING3
MOV AX, 0900H
INT 21H
MOV BP, 3
START: PUSH ES
PUSH DS
POP ES
MOV SI, OFFSET STRING1
MOV DI, OFFSET STRING2
MOV CX, LEN
CLD
REPZ CMPSB
JA LABEL2
LABEL3: POP ES
PUSH ES
PUSH DS
POP ES
MOV SI, OFFSET STRING2
MOV DI, OFFSET STRING3
MOV CX, LEN
CLD
REPZ CMPSB
JA LABEL6
LABEL7: POP ES
SUB BP, 1
CMP BP, 0
JNZ START
LEA DX, MSG2
MOV AX, 0900H
INT 21H
LEA DX, STRING1
MOV AX, 0900H
INT 21H
LEA DX, STRING2
MOV AX, 0900H
INT 21H
LEA DX, STRING3
MOV AX, 0900H
INT 21H
JMP EXIT
LABEL2: LEA SI, STRING1
MOV AX, SEG STRING4
MOV ES, AX
LEA DI, STRING4
MOV CX, LEN
LABEL1:
MOVSB
LOOP LABEL1
LEA SI, STRING2
MOV AX, SEG STRING1
MOV ES, AX
LEA DI, STRING1
MOV CX, LEN
LABEL4:
MOVSB
LOOP LABEL4
LEA SI, STRING4
MOV AX, SEG STRING2
MOV ES, AX
LEA DI, STRING2
MOV CX, LEN
LABEL5:
MOVSB
LOOP LABEL5
JMP LABEL3
;----------------
LABEL6: LEA SI, STRING2
MOV AX, SEG STRING4
MOV ES, AX
LEA DI, STRING4
MOV CX, LEN
LABEL8:
MOVSB
LOOP LABEL8
LEA SI, STRING3
MOV AX, SEG STRING2
MOV ES, AX
LEA DI, STRING2
MOV CX, LEN
LABEL9:
MOVSB
LOOP LABEL9
LEA SI, STRING4
MOV AX, SEG STRING3
MOV ES, AX
LEA DI, STRING3
MOV CX, LEN
LABEL10:
MOVSB
LOOP LABEL10
JMP LABEL7
EXIT: MOV AX, 4C00H
INT 21H
MAIN ENDP
CODE1 ENDS
END MAIN
代码部分
STACK SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK ENDS
DATA SEGMENT
FUNC DW 5 DUP(?)
NOTE1 DB 'MUL RESULT ',0DH,0AH,'$'
NOTE2 DB 'DIV RESULT ',0DH,0AH,'$'
DATA1 DW ?
DATA2 DW ?
DATA3 DW ?
DATA4 DW ?
NUMBER_B DW 1010101010101010B
DB 0DH,0AH,'$'
PRINT_B DB '1010101010101010B'
DB 0DH,0AH,'$'
NUMBER_D DW 1506H
DB 0DH,0AH,'$'
PRINT_D DB '1506H'
DB 0DH,0AH,'$'
OPER1 DW 10H,00H
OPER2 DW 10H,00H
SYMBOL DB ' : ','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
MOV SP,STACK_BTM
MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET FUNC
MOV BX,OFFSET FUNC1
MOV [SI],BX
MOV BX,OFFSET FUNC2
MOV [SI+2],BX
MOV BX,OFFSET FUNC3
MOV [SI+4],BX
MOV BX,OFFSET FUNC4
MOV [SI+6],BX
MOV BX,OFFSET FUNC5
MOV [SI+8],BX
MOV BX,10
XOR CX,CX
NEXT: MOV AH,1
INT 21H
CMP AL,0DH
JE END_I
PUSH AX
MOV AX,CX
MUL BX
MOV CX,AX
POP AX
SUB AL,30H
XOR AH,AH
ADD CX,AX
JMP NEXT
END_I: MOV BX,CX
CALL [SI+2]
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV DX,OFFSET PRINT_B
MOV AH,9
INT 21H
MOV AX,NUMBER_B
CALL [SI]
MOV DX,OFFSET PRINT_D
MOV AH,9
INT 21H
MOV AX,NUMBER_D
CALL [SI]
CALL [SI+4]
CALL [SI+6]
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
FUNC1 PROC
PUSH CX
PUSH BX
PUSH DX
MOV CX,5
MOV BX,10
LP1: XOR DX,DX
DIV BX
OR DL,30H
PUSH DX
LOOP LP1
MOV CX,5
LP2: POP DX
MOV AH,2
INT 21H
LOOP LP2
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP BX
POP CX
RET
FUNC1 ENDP
FUNC2 PROC
PUSH AX
PUSH CX
MOV CH,4
MOV CL,4
MOV AH,0EH
H1: ROL BX,CL
MOV AL,BL
AND AL,0FH
CMP AL,9
JL H2
ADD AL,7H
H2: ADD AL,30H
INT 10H
DEC CH
JNZ H1
MOV AL,'H'
INT 10H
POP CX
POP AX
RET
FUNC2 ENDP
FUNC3 PROC
PUSH SI
PUSH DI
MOV SI,OFFSET OPER1
MOV DX,[SI+2]
MOV AX,[SI]
MOV SI,OFFSET OPER2
MOV CX,[SI+2]
MOV BX,[SI]
MOV DATA1,0
MOV DATA2,0
MOV DATA3,0
MOV DATA4,0
MOV SI,AX
MOV DI,DX
MUL BX
MOV DATA2,DX
MOV DATA1,AX
MOV AX,DI
MUL BX
ADD DATA2,AX
ADC DATA3,DX
MOV AX,SI
MUL CX
ADD DATA2,AX
ADC DATA3,DX
ADC DATA4,0
MOV AX,DI
MUL CX
ADD DATA3,AX
ADC DATA4,DX
MOV CX,DATA4
MOV BX,DATA3
MOV DX,DATA2
MOV AX,DATA1
POP DI
POP SI
PUSH DX
PUSH AX
MOV DX,OFFSET NOTE1
MOV AH,9
INT 21H
POP AX
POP DX
PUSH BX
MOV BX,CX
CALL [SI+2]
PUSH DX
PUSH AX
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
POP AX
POP DX
POP BX
CALL [SI+2]
PUSH DX
PUSH AX
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
POP AX
POP DX
MOV BX,DX
CALL [SI+2]
PUSH AX
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
POP AX
MOV BX,AX
CALL [SI+2]
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
RET
FUNC3 ENDP
FUNC4 PROC
PUSH SI
MOV SI,OFFSET OPER1
MOV DX,[SI+2]
MOV AX,[SI]
MOV SI,OFFSET OPER2
MOV CX,[SI+2]
MOV BX,[SI]
TEST CX,CX
JNZ LB1
MOV CX,BX
CALL FUNC5
XOR CX,CX
POP SI
PUSH DX
PUSH AX
MOV DX,OFFSET NOTE2
MOV AH,9
INT 21H
POP AX
POP DX
PUSH BX
MOV BX,DX
CALL [SI+2]
PUSH AX
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
POP AX
MOV BX,AX
CALL [SI+2]
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
MOV BX,CX
CALL [SI+2]
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
POP BX
CALL [SI+2]
RET
LB1: PUSH DI
XOR DI,DI
LP1_S: SUB AX,BX
SBB DX,CX
JC VOUT
INC DI
JMP LP1_S
VOUT: ADD BX,AX
ADC CX,DX
MOV AX,DI
MOV DX,0
POP DI
POP SI
PUSH DX
PUSH AX
MOV DX,OFFSET NOTE2
MOV AH,9
INT 21H
POP AX
POP DX
PUSH BX
MOV BX,DX
CALL [SI+2]
PUSH AX
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
POP AX
MOV BX,AX
CALL [SI+2]
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
MOV BX,CX
CALL [SI+2]
MOV DX,OFFSET SYMBOL
MOV AH,9
INT 21H
POP BX
CALL [SI+2]
RET
FUNC4 ENDP
FUNC5 PROC
PUSH AX
MOV AX,DX
MOV DX,0
DIV CX
MOV BX,AX
POP AX
DIV CX
XCHG BX,DX
RET
FUNC5 ENDP
CODE ENDS
END MAIN
代码部分:
STACK SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK ENDS
DATA SEGMENT
FUNC DW 10 DUP(?)
BUFF_LEN EQU $ - BUFF
BUFF_END DW $
BUFF_UP DB 'JustTest.',0DH,0AH,'$'
UP_END DW $
UP_INFO DB 'RESULT',0DH,0AH,'$'
UP_LEN EQU UP_END - BUFF_UP
WORD_TITLE DB 'TestFUNC4.',0DH,0AH,'$'
WORD_INFO DB 'RESULT',0DH,0AH,'$'
WORD_TMP DB 'TEMPW',0DH,0AH,'$'
WORD1 DB 'ABOVE',0DH,0AH,'$'
WORD2 DB 'AGAIN',0DH,0AH,'$'
WORD3 DB 'ABOUT',0DH,0AH,'$'
C_LINE DB 0DH,0AH,'$'
WORD_LEN DW WORD2 - WORD1
CMP_TITLE DB 'TestFUNC5are.',0DH,0AH,'$'
CMP_INFO DB 'RESULT',0DH,0AH,'$'
CWORD1 DB 'Cin',0DH,0AH,'$'
CWORD2 DB 'Qin',0DH,0AH,'$'
EQU_INFO DB 'EQUAL.',0DH,0AH,'$'
W1_INFO DB 'WORD1 GREATER THAN WORD2.',0DH,0AH,'$'
W2_INFO DB 'WORD1 SMALLER THAN WORD2.',0DH,0AH,'$'
CWORD_LEN DW CWORD2 - CWORD1
BUFF_DST DB 'JustTest1',0DH,0AH,'$'
BUFF_SRC DB 'JustTest2',0DH,0AH,'$'
FUNC2_INFO DB 'RESULT',0DH,0AH,'$'
FUNC2_LEN EQU BUFF_SRC - BUFF_DST
FUNC2_END DW $
BUFF_FUNC6 DB 'JustTest3.',0DH,0AH,'$'
FUNC6_INFO DB 'RESULT',0DH,0AH,'$'
FUNC6_WORD DB 'Test'
FUNC6_END DW $
FUNC6_LEN EQU FUNC6_END - FUNC6_WORD
WORD_OLD DB 'Qinhaotong'
WORD_NEW DB '15061166 '
BUFF_INFO DB 'RESULT',0DH,0AH,'$'
LEN DW WORD_NEW - WORD_OLD
BUFF DB 'Just for test.',0DH,0AH
DB 'Qinhaotong test.',0DH,0AH
DB 0DH,0AH
DB '$'
FUNC7_INFO DB 0DH,0AH
DB 'TEST I/O.',0DH,0AH
DB 'INPUT A STRING AND INPUT ENTER TO STOP.',0DH,0AH,'$'
STR DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
MOV SP,STACK_BTM
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,FUNC
MOV BX,OFFSET FUNC1
MOV [SI],BX
MOV BX,OFFSET FUNC2
MOV [SI+2],BX
MOV BX,OFFSET FUNC3
MOV [SI+4],BX
MOV BX,OFFSET FUNC4
MOV [SI+6],BX
MOV BX,OFFSET FUNC5
MOV [SI+8],BX
MOV BX,OFFSET FUNC6
MOV [SI+10],BX
MOV BX,OFFSET FUNC7
MOV [SI+12],BX
CALL [SI]
CALL [SI+2]
CALL [SI+4]
CALL [SI+6]
CALL [SI+12]
CALL [SI+10]
CALL [SI+8]
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
FUNC6 PROC
MOV DX,OFFSET BUFF_FUNC6
MOV AH,9
INT 21H
MOV DX,OFFSET FUNC6_INFO
MOV AH,9
INT 21H
PUSH DI
PUSH BX
PUSH SI
PUSH CX
PUSH AX
MOV DI,OFFSET BUFF_FUNC6
MOV BX,OFFSET FUNC6_INFO
LB1_D: CMP DI,BX
JZ FUNC6ETE_END
MOV SI,OFFSET FUNC6_WORD
MOV CX,FUNC6_LEN
PUSH DI
LB2_D: MOV AL,BYTE PTR [SI]
CMP BYTE PTR [DI],AL
JNZ CONTINUE1
INC SI
INC DI
LOOP LB2_D
MOV SI,DI
MOV CX,OFFSET FUNC6_INFO
SUB CX,DI
POP DI
PUSH DI
CLD
REP MOVSB
CONTINUE1: POP DI
CONTINUE2: INC DI
JMP LB1_D
FUNC6ETE_END: POP AX
POP CX
POP SI
POP BX
POP DI
MOV DX,OFFSET BUFF_FUNC6
MOV AH,9
INT 21H
RET
FUNC6 ENDP
FUNC1 PROC
MOV DX,OFFSET BUFF_UP
MOV AH,9
INT 21H
PUSH SI
PUSH DI
PUSH CX
PUSH AX
PUSH ES
PUSH DS
POP ES
MOV SI,OFFSET BUFF_UP
MOV DI,SI
MOV CX,UP_LEN
CLD
LB1_U: LODSB
CMP AL,'a'
JB CONTINUE
CMP AL,'z'
JA CONTINUE
SUB AL,20H
CONTINUE: STOSB
LOOP LB1_U
POP ES
POP AX
POP CX
POP DI
POP SI
MOV DX,OFFSET UP_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_UP
MOV AH,9
INT 21H
RET
FUNC1 ENDP
FUNC2 PROC
MOV DX,OFFSET BUFF_DST
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_SRC
MOV AH,9
INT 21H
PUSH SI
PUSH DI
PUSH CX
PUSH ES
PUSH DS
POP ES
MOV SI,OFFSET BUFF_SRC
MOV DI,OFFSET BUFF_DST
MOV CX,FUNC2_LEN
CLD
REP MOVSB
POP ES
POP CX
POP DI
POP SI
MOV DX,OFFSET FUNC2_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_DST
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_SRC
MOV AH,9
INT 21H
RET
FUNC2 ENDP
FUNC3 PROC
MOV DX,OFFSET BUFF
MOV AH,9
INT 21H
PUSH DI
PUSH AX
PUSH BX
PUSH SI
MOV DI,OFFSET BUFF
MOV BX,OFFSET BUFF_END
LB1: CMP DI,BX
JZ FUNC3_END
MOV SI,OFFSET WORD_OLD
MOV CX,LEN
PUSH DI
LB2: MOV AL,BYTE PTR [SI]
CMP BYTE PTR [DI],AL
JNZ BECONTINUE
INC SI
INC DI
LOOP LB2
MOV SI,OFFSET WORD_NEW
POP DI
CALL REPL
JMP INCONTINUE
BECONTINUE: POP DI
INCONTINUE: INC DI
JMP LB1
FUNC3_END: POP SI
POP BX
POP AX
POP DI
MOV DX,OFFSET BUFF_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF
MOV AH,9
INT 21H
RET
FUNC3 ENDP
REPL PROC
PUSH CX
MOV CX,LEN
CLD
REP MOVSB
POP CX
RET
REPL ENDP
FUNC4 PROC
MOV DX,OFFSET WORD_TITLE
MOV AH,9
INT 21H
MOV DX,OFFSET WORD1
MOV AH,9
INT 21H
MOV DX,OFFSET WORD2
MOV AH,9
INT 21H
MOV DX,OFFSET WORD3
MOV AH,9
INT 21H
MOV DX,OFFSET C_LINE
MOV AH,9
INT 21H
PUSH CX
PUSH SI
PUSH DI
MOV CX,3
LB_OUT: PUSH CX
MOV SI,OFFSET WORD1
MOV DI,OFFSET WORD2
MOV CX,WORD_LEN
CLD
REPZ CMPSB
JA W1GW2
LB1_S: MOV SI,OFFSET WORD2
MOV DI,OFFSET WORD3
MOV CX,WORD_LEN
CLD
REPZ CMPSB
JA W2GW3
JMP SCONTINUE
W1GW2: MOV SI,OFFSET WORD1
MOV DI,OFFSET WORD_TMP
CALL FUNC2_S
MOV SI,OFFSET WORD2
MOV DI,OFFSET WORD1
CALL FUNC2_S
MOV SI,OFFSET WORD_TMP
MOV DI,OFFSET WORD2
CALL FUNC2_S
JMP LB1_S
W2GW3: MOV SI,OFFSET WORD2
MOV DI,OFFSET WORD_TMP
CALL FUNC2_S
MOV SI,OFFSET WORD3
MOV DI,OFFSET WORD2
CALL FUNC2_S
MOV SI,OFFSET WORD_TMP
MOV DI,OFFSET WORD3
CALL FUNC2_S
SCONTINUE: POP CX
LOOP LB_OUT
POP DI
POP SI
POP CX
MOV DX,OFFSET WORD_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET WORD1
MOV AH,9
INT 21H
MOV DX,OFFSET WORD2
MOV AH,9
INT 21H
MOV DX,OFFSET WORD3
MOV AH,9
INT 21H
RET
FUNC4 ENDP
FUNC2_S PROC
PUSH CX
MOV CX,WORD_LEN
CLD
REP MOVSB
POP CX
RET
FUNC2_S ENDP
FUNC5 PROC
MOV DX,OFFSET CMP_TITLE
MOV AH,9
INT 21H
MOV DX,OFFSET CWORD1
MOV AH,9
INT 21H
MOV DX,OFFSET CWORD2
MOV AH,9
INT 21H
MOV DX,OFFSET CMP_INFO
MOV AH,9
INT 21H
PUSH SI
MOV SI,OFFSET CWORD1
MOV DI,OFFSET CWORD2
MOV CX,CWORD_LEN
CLD
REPZ CMPSB
JZ EQUAL
JA W1
JB W2
EQUAL: MOV DX,OFFSET EQU_INFO
MOV AH,9
INT 21H
JMP FUNC5_END
W1: MOV DX,OFFSET W1_INFO
MOV AH,9
INT 21H
JMP FUNC5_END
W2: MOV DX,OFFSET W2_INFO
MOV AH,9
INT 21H
JMP FUNC5_END
FUNC5_END: POP SI
RET
FUNC5 ENDP
FUNC7 PROC
MOV DX,OFFSET FUNC7_INFO
MOV AH,9
INT 21H
PUSH SI
PUSH AX
PUSH DX
MOV SI,OFFSET STR
LB: MOV AH,1
INT 21H
CMP AL,0DH
JZ NEXT
MOV BYTE PTR [SI],AL
INC SI
JMP LB
NEXT: MOV DL,'$'
MOV BYTE PTR [SI],DL
MOV DX,OFFSET STR
MOV AH,9
INT 21H
POP DX
POP AX
POP SI
RET
FUNC7 ENDP
CODE ENDS
END MAIN
STACK SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK ENDS
DATA SEGMENT
SP_WORD DB 'QINHAOTONG'
SP_POS DB 'test'
SP_INFO DB 'RESULT',0DH,0AH,'$'
SP_LEN EQU SP_POS - SP_WORD
POS_LEN EQU SP_INFO - SP_POS
BUFF_SP DB 'The sentence is just for test.',0DH,0AH,'$'
SP_END DW $
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
MOV SP,STACK_BTM
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,OFFSET BUFF_SP
MOV AH,9
INT 21H
MOV DX,OFFSET SP_INFO
MOV AH,9
INT 21H
CALL FUNC1
MOV DX,OFFSET BUFF_SP
MOV AH,9
INT 21H
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
FUNC1 PROC
PUSH DI
PUSH BX
PUSH SI
PUSH CX
PUSH AX
MOV DI,OFFSET BUFF_SP
MOV BX,OFFSET SP_END
LABEL1: CMP DI,BX
JZ FUNC1_END
MOV SI,OFFSET SP_POS
MOV CX,POS_LEN
PUSH DI
LABEL2: MOV AL,BYTE PTR [SI]
CMP BYTE PTR [DI],AL
JNZ LABEL3
INC SI
INC DI
LOOP LABEL2
PUSH DI
MOV CX,OFFSET SP_END
SUB CX,DI
MOV SI,OFFSET SP_END
MOV AX,SP_LEN
MOV DI,SI
ADD DI,AX
DEC DI
STD
REP MOVSB
POP DI
MOV SI,OFFSET SP_WORD
MOV CX,SP_LEN
CLD
REP MOVSB
LABEL3: POP DI
LABEL4: INC DI
JMP LABEL1
FUNC1_END: POP AX
POP CX
POP SI
POP BX
POP DI
RET
FUNC1 ENDP
CODE ENDS
END MAIN
代码部分:
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT PARA
COUNTER DW 10
DATA1 ENDS
CODE1 SEGMENT PARA
ASSUME DS:DATA1, CS:CODE1, SS:STACK1
MAIN PROC FAR
MOV AX,DATA1
MOV DS,AX
MOV AX,STACK1
MOV SS,AX
MOV AX,STACK_BTM
MOV SP,AX
MOV AX,COUNTER
PUSH AX
CALL FACTORIAL
CALL OUTPUT
MOV AX,4C00H
INT 21H
MAIN ENDP
FACTORIAL PROC
PUSH BP
MOV BP,SP
PUSH DX
PUSH BX
MOV BX,[BP+4]
CMP BX,0
JNZ LAB1
MOV AX,1
JMP LAB2
LAB1: PUSH BX
DEC BX
PUSH BX
CALL FACTORIAL
POP BX
MUL BX
LAB2: POP BX
POP DX
POP BP
RET 2
FACTORIAL ENDP
OUTPUT PROC
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,10
MOV CX,0
LP1: XOR DX,DX
DIV BX
PUSH DX
INC CX
CMP AX,0
JZ LP2
JMP LP1
LP2: POP DX
OR DL,30H
MOV AH,2
INT 21H
LOOP LP2
POP DX
POP CX
POP BX
POP AX
RET
OUTPUT ENDP
CODE1 ENDS
END MAIN
代码部分:
STACK1 SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK1 ENDS
DATA1 SEGMENT
A DW 1506H
B DW 1166H
ENT DB 0DH,0AH,'$'
DATA1 ENDS
CODE1 SEGMENT
ASSUME CS:CODE1,DS:DATA1,SS:STACK1
MAIN PROC FAR
MOV AX,STACK1
MOV SS,AX
MOV AX,DATA1
MOV DS,AX
MOV SP,STACK_BTM
MOV AX,A
PUSH AX
CALL TOH
MOV DX,'H'
MOV AH,02H
INT 21H
LEA DX,ENT
MOV AH,09H
INT 21H
MOV AX,B
PUSH AX
CALL TOD
LEA DX,ENT
MOV AH,09H
INT 21H
MOV AX,A
PUSH AX
MOV AX,B
PUSH AX
CALL MUL_TEST
LEA DX,ENT
MOV AH,09H
INT 21H
MOV AX,A
PUSH AX
MOV AX,B
PUSH AX
CALL DIV_TEST
MOV AX,4C00H
INT 21H
MAIN ENDP
TOH PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH BP
MOV BP,SP
MOV AX,[BP+12]
XOR CX,CX
MOV BX,16
LOOP_TOH: MOV DX,0
DIV BX
CMP DX,10
JAE LABEL1
OR DL,30H
JMP LABEL2
LABEL1: ADD DX,57H
LABEL2: PUSH DX
INC CX
CMP AX,0
JZ PRINTH
JMP LOOP_TOH
PRINTH:
POP DX
MOV AH,02H
INT 21H
LOOP PRINTH
POP BP
POP DX
POP CX
POP BX
POP AX
RET 2
TOH ENDP
TOD PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH BP
MOV BP,SP
MOV AX,[BP+12]
XOR CX,CX
MOV BX,10
LOOP_TOD: MOV DX,0
DIV BX
OR DL,30H
PUSH DX
INC CX
CMP AX,0
JZ PRINT_DEC
JMP LOOP_TOD
PRINT_DEC: POP DX
MOV AH,02H
INT 21H
LOOP PRINT_DEC
POP BP
POP DX
POP CX
POP BX
POP AX
RET 2
TOD ENDP
MUL_TEST PROC NEAR
PUSH AX
PUSH BX
PUSH DX
PUSH BP
MOV BP,SP
MOV AX,[BP+12]
MOV BX,[BP+10]
MUL BX
PUSH DX
CALL TOH
PUSH AX
CALL TOH
MOV DX,'H'
MOV AH,02H
INT 21H
POP BP
POP DX
POP BX
POP AX
RET 4
MUL_TEST ENDP
DIV_TEST PROC NEAR
PUSH AX
PUSH BX
PUSH DX
PUSH BP
MOV BP,SP
MOV AX,[BP+12]
MOV BX,[BP+10]
XOR DX,DX
DIV BX
PUSH DX
CALL TOH
MOV DX,'H'
MOV AH,02H
INT 21H
LEA DX,ENT
MOV AH,09H
INT 21H
PUSH AX
CALL TOH
MOV DX,'H'
MOV AH,02H
INT 21H
POP BP
POP DX
POP BX
POP AX
RET 4
DIV_TEST ENDP
CODE1 ENDS
END MAIN
代码部分:
STACK SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK ENDS
DATA SEGMENT
FUNC DW 10 DUP(?)
BUFF_LEN EQU $ - BUFF
BUFF_END DW $
BUFF_UP DB 'JustTest.',0DH,0AH,'$'
UP_END DW $
UP_INFO DB 'RESULT',0DH,0AH,'$'
UP_LEN EQU UP_END - BUFF_UP
WORD_TITLE DB 'TestFUNC4.',0DH,0AH,'$'
WORD_INFO DB 'RESULT',0DH,0AH,'$'
WORD_TMP DB 'TEMPW',0DH,0AH,'$'
WORD1 DB 'ABOVE',0DH,0AH,'$'
WORD2 DB 'AGAIN',0DH,0AH,'$'
WORD3 DB 'ABOUT',0DH,0AH,'$'
C_LINE DB 0DH,0AH,'$'
WORD_LEN DW WORD2 - WORD1
CMP_TITLE DB 'TestFUNC5are.',0DH,0AH,'$'
CMP_INFO DB 'RESULT',0DH,0AH,'$'
CWORD1 DB 'Cin',0DH,0AH,'$'
CWORD2 DB 'Qin',0DH,0AH,'$'
EQU_INFO DB 'EQUAL.',0DH,0AH,'$'
W1_INFO DB 'WORD1 GREATER THAN WORD2.',0DH,0AH,'$'
W2_INFO DB 'WORD1 SMALLER THAN WORD2.',0DH,0AH,'$'
CWORD_LEN DW CWORD2 - CWORD1
BUFF_DST DB 'JustTest1',0DH,0AH,'$'
BUFF_SRC DB 'JustTest2',0DH,0AH,'$'
FUNC2_INFO DB 'RESULT',0DH,0AH,'$'
FUNC2_LEN EQU BUFF_SRC - BUFF_DST
FUNC2_END DW $
BUFF_FUNC6 DB 'JustTest3.',0DH,0AH,'$'
FUNC6_INFO DB 'RESULT',0DH,0AH,'$'
FUNC6_WORD DB 'Test'
FUNC6_END DW $
FUNC6_LEN EQU FUNC6_END - FUNC6_WORD
WORD_OLD DB 'Qinhaotong'
WORD_NEW DB '15061166 '
BUFF_INFO DB 'RESULT',0DH,0AH,'$'
LEN DW WORD_NEW - WORD_OLD
BUFF DB 'Just for test.',0DH,0AH
DB 'Qinhaotong test.',0DH,0AH
DB 0DH,0AH
DB '$'
FUNC7_INFO DB 0DH,0AH
DB 'TEST I/O.',0DH,0AH
DB 'INPUT A STRING AND INPUT ENTER TO STOP.',0DH,0AH,'$'
STR DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
MOV SP,STACK_BTM
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI,FUNC
MOV BX,OFFSET FUNC1
MOV [SI],BX
MOV BX,OFFSET FUNC2
MOV [SI+2],BX
MOV BX,OFFSET FUNC3
MOV [SI+4],BX
MOV BX,OFFSET FUNC4
MOV [SI+6],BX
MOV BX,OFFSET FUNC5
MOV [SI+8],BX
MOV BX,OFFSET FUNC6
MOV [SI+10],BX
MOV BX,OFFSET FUNC7
MOV [SI+12],BX
CALL [SI]
CALL [SI+2]
CALL [SI+4]
CALL [SI+6]
CALL [SI+12]
CALL [SI+10]
CALL [SI+8]
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
FUNC6 PROC
MOV DX,OFFSET BUFF_FUNC6
MOV AH,9
INT 21H
MOV DX,OFFSET FUNC6_INFO
MOV AH,9
INT 21H
PUSH DI
PUSH BX
PUSH SI
PUSH CX
PUSH AX
MOV DI,OFFSET BUFF_FUNC6
MOV BX,OFFSET FUNC6_INFO
LB1_D: CMP DI,BX
JZ FUNC6ETE_END
MOV SI,OFFSET FUNC6_WORD
MOV CX,FUNC6_LEN
PUSH DI
LB2_D: MOV AL,BYTE PTR [SI]
CMP BYTE PTR [DI],AL
JNZ CONTINUE1
INC SI
INC DI
LOOP LB2_D
MOV SI,DI
MOV CX,OFFSET FUNC6_INFO
SUB CX,DI
POP DI
PUSH DI
CLD
REP MOVSB
CONTINUE1: POP DI
CONTINUE2: INC DI
JMP LB1_D
FUNC6ETE_END: POP AX
POP CX
POP SI
POP BX
POP DI
MOV DX,OFFSET BUFF_FUNC6
MOV AH,9
INT 21H
RET
FUNC6 ENDP
FUNC1 PROC
MOV DX,OFFSET BUFF_UP
MOV AH,9
INT 21H
PUSH SI
PUSH DI
PUSH CX
PUSH AX
PUSH ES
PUSH DS
POP ES
MOV SI,OFFSET BUFF_UP
MOV DI,SI
MOV CX,UP_LEN
CLD
LB1_U: LODSB
CMP AL,'a'
JB CONTINUE
CMP AL,'z'
JA CONTINUE
SUB AL,20H
CONTINUE: STOSB
LOOP LB1_U
POP ES
POP AX
POP CX
POP DI
POP SI
MOV DX,OFFSET UP_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_UP
MOV AH,9
INT 21H
RET
FUNC1 ENDP
FUNC2 PROC
MOV DX,OFFSET BUFF_DST
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_SRC
MOV AH,9
INT 21H
PUSH SI
PUSH DI
PUSH CX
PUSH ES
PUSH DS
POP ES
MOV SI,OFFSET BUFF_SRC
MOV DI,OFFSET BUFF_DST
MOV CX,FUNC2_LEN
CLD
REP MOVSB
POP ES
POP CX
POP DI
POP SI
MOV DX,OFFSET FUNC2_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_DST
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF_SRC
MOV AH,9
INT 21H
RET
FUNC2 ENDP
FUNC3 PROC
MOV DX,OFFSET BUFF
MOV AH,9
INT 21H
PUSH DI
PUSH AX
PUSH BX
PUSH SI
MOV DI,OFFSET BUFF
MOV BX,OFFSET BUFF_END
LB1: CMP DI,BX
JZ FUNC3_END
MOV SI,OFFSET WORD_OLD
MOV CX,LEN
PUSH DI
LB2: MOV AL,BYTE PTR [SI]
CMP BYTE PTR [DI],AL
JNZ BECONTINUE
INC SI
INC DI
LOOP LB2
MOV SI,OFFSET WORD_NEW
POP DI
CALL REPL
JMP INCONTINUE
BECONTINUE: POP DI
INCONTINUE: INC DI
JMP LB1
FUNC3_END: POP SI
POP BX
POP AX
POP DI
MOV DX,OFFSET BUFF_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET BUFF
MOV AH,9
INT 21H
RET
FUNC3 ENDP
REPL PROC
PUSH CX
MOV CX,LEN
CLD
REP MOVSB
POP CX
RET
REPL ENDP
FUNC4 PROC
MOV DX,OFFSET WORD_TITLE
MOV AH,9
INT 21H
MOV DX,OFFSET WORD1
MOV AH,9
INT 21H
MOV DX,OFFSET WORD2
MOV AH,9
INT 21H
MOV DX,OFFSET WORD3
MOV AH,9
INT 21H
MOV DX,OFFSET C_LINE
MOV AH,9
INT 21H
PUSH CX
PUSH SI
PUSH DI
MOV CX,3
LB_OUT: PUSH CX
MOV SI,OFFSET WORD1
MOV DI,OFFSET WORD2
MOV CX,WORD_LEN
CLD
REPZ CMPSB
JA W1GW2
LB1_S: MOV SI,OFFSET WORD2
MOV DI,OFFSET WORD3
MOV CX,WORD_LEN
CLD
REPZ CMPSB
JA W2GW3
JMP SCONTINUE
W1GW2: MOV SI,OFFSET WORD1
MOV DI,OFFSET WORD_TMP
CALL FUNC2_S
MOV SI,OFFSET WORD2
MOV DI,OFFSET WORD1
CALL FUNC2_S
MOV SI,OFFSET WORD_TMP
MOV DI,OFFSET WORD2
CALL FUNC2_S
JMP LB1_S
W2GW3: MOV SI,OFFSET WORD2
MOV DI,OFFSET WORD_TMP
CALL FUNC2_S
MOV SI,OFFSET WORD3
MOV DI,OFFSET WORD2
CALL FUNC2_S
MOV SI,OFFSET WORD_TMP
MOV DI,OFFSET WORD3
CALL FUNC2_S
SCONTINUE: POP CX
LOOP LB_OUT
POP DI
POP SI
POP CX
MOV DX,OFFSET WORD_INFO
MOV AH,9
INT 21H
MOV DX,OFFSET WORD1
MOV AH,9
INT 21H
MOV DX,OFFSET WORD2
MOV AH,9
INT 21H
MOV DX,OFFSET WORD3
MOV AH,9
INT 21H
RET
FUNC4 ENDP
FUNC2_S PROC
PUSH CX
MOV CX,WORD_LEN
CLD
REP MOVSB
POP CX
RET
FUNC2_S ENDP
FUNC5 PROC
MOV DX,OFFSET CMP_TITLE
MOV AH,9
INT 21H
MOV DX,OFFSET CWORD1
MOV AH,9
INT 21H
MOV DX,OFFSET CWORD2
MOV AH,9
INT 21H
MOV DX,OFFSET CMP_INFO
MOV AH,9
INT 21H
PUSH SI
MOV SI,OFFSET CWORD1
MOV DI,OFFSET CWORD2
MOV CX,CWORD_LEN
CLD
REPZ CMPSB
JZ EQUAL
JA W1
JB W2
EQUAL: MOV DX,OFFSET EQU_INFO
MOV AH,9
INT 21H
JMP FUNC5_END
W1: MOV DX,OFFSET W1_INFO
MOV AH,9
INT 21H
JMP FUNC5_END
W2: MOV DX,OFFSET W2_INFO
MOV AH,9
INT 21H
JMP FUNC5_END
FUNC5_END: POP SI
RET
FUNC5 ENDP
FUNC7 PROC
MOV DX,OFFSET FUNC7_INFO
MOV AH,9
INT 21H
PUSH SI
PUSH AX
PUSH DX
MOV SI,OFFSET STR
LB: MOV AH,1
INT 21H
CMP AL,0DH
JZ NEXT
MOV BYTE PTR [SI],AL
INC SI
JMP LB
NEXT: MOV DL,'$'
MOV BYTE PTR [SI],DL
MOV DX,OFFSET STR
MOV AH,9
INT 21H
POP DX
POP AX
POP SI
RET
FUNC7 ENDP
CODE ENDS
END MAIN
STACK SEGMENT PARA STACK
STACK_AREA DW 100H DUP(?)
STACK_BTM EQU $ - STACK_AREA
STACK ENDS
DATA SEGMENT
SP_WORD DB 'QINHAOTONG'
SP_POS DB 'test'
SP_INFO DB 'RESULT',0DH,0AH,'$'
SP_LEN EQU SP_POS - SP_WORD
POS_LEN EQU SP_INFO - SP_POS
BUFF_SP DB 'The sentence is just for test.',0DH,0AH,'$'
SP_END DW $
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK
MAIN PROC FAR
MOV AX,STACK
MOV SS,AX
MOV SP,STACK_BTM
MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,OFFSET BUFF_SP
MOV AH,9
INT 21H
MOV DX,OFFSET SP_INFO
MOV AH,9
INT 21H
CALL FUNC1
MOV DX,OFFSET BUFF_SP
MOV AH,9
INT 21H
EXIT: MOV AX,4C00H
INT 21H
MAIN ENDP
FUNC1 PROC
PUSH DI
PUSH BX
PUSH SI
PUSH CX
PUSH AX
MOV DI,OFFSET BUFF_SP
MOV BX,OFFSET SP_END
LABEL1: CMP DI,BX
JZ FUNC1_END
MOV SI,OFFSET SP_POS
MOV CX,POS_LEN
PUSH DI
LABEL2: MOV AL,BYTE PTR [SI]
CMP BYTE PTR [DI],AL
JNZ LABEL3
INC SI
INC DI
LOOP LABEL2
PUSH DI
MOV CX,OFFSET SP_END
SUB CX,DI
MOV SI,OFFSET SP_END
MOV AX,SP_LEN
MOV DI,SI
ADD DI,AX
DEC DI
STD
REP MOVSB
POP DI
MOV SI,OFFSET SP_WORD
MOV CX,SP_LEN
CLD
REP MOVSB
LABEL3: POP DI
LABEL4: INC DI
JMP LABEL1
FUNC1_END: POP AX
POP CX
POP SI
POP BX
POP DI
RET
FUNC1 ENDP
CODE ENDS
END MAIN