1.一个用于进制转换和乘除法的综合程序
;程序功能:1.将16个数字组成的数组分别进行16进制输出和10进制输出, ; 并且进行排序,之后再次输出排好的16进制和10进制 ; 2.将一个2进制的数字转化成10进制 ; 3.乘除法子程序 STACK1 SEGMENT PARA STACK STACK_AREA DW 100H DUP(?) STACK_BTM EQU $-STACK_AREA STACK1 ENDS DATA1 SEGMENT TABLE_LEN DW 16 TABLE DW 260,701,400,5,4,0,11,43,61H,40,63H,50,60,0FECAH,12,34 BIN1 DW 1011101010110101B DEC1 DB 6 DUP(0) BIN2 DB '1011101010110101B$' TRAN DB '-->$' FG DB '--$' D1 DW ? D2 DW ? D3 DD ? 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 CALL TRAN16 CALL TRAN10 CALL PX CALL TRAN16 CALL TRAN10 CALL TRAN2TO10 CALL MULTI CALL DIVI EXIT1: MOV AX,4C00H INT 21H MAIN ENDP TRAN16 PROC EXIT2: MOV CX,17 DEC CX MOV SI,OFFSET TABLE START2: MOV BX,[SI] MOV DL,BH SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP5 ADD DL, 07H STEP5: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BH AND DL, 0FH CMP DL, 0AH JB STEP6 ADD DL, 07H STEP6: ADD DL, 30H INT 21H MOV DL,BL SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP7 ADD DL, 07H STEP7: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BL AND DL, 0FH CMP DL, 0AH JB STEP8 ADD DL, 07H STEP8: ADD DL, 30H INT 21H MOV DL,48h ;输出'H' MOV AH,02h INT 21h MOV AH,2 ;输出空格 MOV DL,32 INT 21h ADD SI,2 LOOP START2 MOV AH,02h ;输出回车 MOV DL,0dh INT 21h MOV AH,02h MOV DL,0ah INT 21h RET TRAN16 ENDP TRAN10 PROC MOV CX,17 DEC CX MOV SI,OFFSET TABLE START1: MOV AX,[SI] ;10进制结果输出 PUSH CX XOR CX,CX MOV BX,10 nx1: XOR DX,DX DIV BX OR DX,0e30h INC CX PUSH DX CMP AX,0 JNZ nx1 nx2: POP AX INT 10H LOOP nx2 POP CX MOV AH,2 MOV DL,32 INT 21h ADD SI,2 LOOP START1 MOV AH,02h ;输出回车 MOV DL,0dh INT 21h MOV AH,02h MOV DL,0ah INT 21h RET TRAN10 ENDP TRAN2TO10 PROC MOV DX, OFFSET BIN2 MOV AH, 9 INT 21H MOV DX, OFFSET TRAN MOV AH, 9 INT 21H MOV DX,BIN1 MOV DI,OFFSET DEC1 MOV CX,0 LOP1:PUSH CX MOV AX,DX MOV DX,0 MOV CX,10 DIV CX XCHG AX,DX ADD AL,30H MOV [DI],AL INC DI POP CX INC CX CMP DX,0 JNZ LOP1 DEC2:DEC DI MOV AL,[DI] MOV DL,AL MOV AH,2 INT 21H LOOP DEC2 MOV AH,02h ;输出回车 MOV DL,0dh INT 21h MOV AH,02h MOV DL,0ah INT 21h RET TRAN2TO10 ENDP DIVI PROC ;除法 SUB DX,DX MOV AX,0DCBAH MOV BX,0111H DIV BX add word ptr D3,DX MOV SI,OFFSET D3 START: ;PUSH DX MOV BX,AX MOV DL,BH SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP1 ADD DL, 07H STEP1: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BH AND DL, 0FH CMP DL, 0AH JB STEP2 ADD DL, 07H STEP2: ADD DL, 30H INT 21H MOV DL,BL SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP3 ADD DL, 07H STEP3: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BL AND DL, 0FH CMP DL, 0AH JB STEP4 ADD DL, 07H STEP4: ADD DL, 30H INT 21H MOV DL,48h MOV AH,02h INT 21h MOV DX, OFFSET FG MOV AH, 9 INT 21H MOV BX,[SI] MOV DL,BH SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP9 ADD DL, 07H STEP9: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BH AND DL, 0FH CMP DL, 0AH JB STEP10 ADD DL, 07H STEP10: ADD DL, 30H INT 21H MOV DL,BL SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP11 ADD DL, 07H STEP11: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BL AND DL, 0FH CMP DL, 0AH JB STEP12 ADD DL, 07H STEP12: ADD DL, 30H INT 21H MOV DL,48h MOV AH,02h INT 21h MOV AH,02h;换行 MOV DL,0dh INT 21h MOV AH,02h MOV DL,0ah INT 21h RET DIVI ENDP MULTI PROC ;乘法 SUB DX,DX MOV AX,1234H MOV BX,0F10FH MUL BX mov word ptr D3, ax mov word ptr D3+2, dx MOV SI,OFFSET D3 MOV BX,[SI+2] MOV DL,BH SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP21 ADD DL, 07H STEP21: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BH AND DL, 0FH CMP DL, 0AH JB STEP22 ADD DL, 07H STEP22: ADD DL, 30H INT 21H MOV DL,BL SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP23 ADD DL, 07H STEP23: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BL AND DL, 0FH CMP DL, 0AH JB STEP24 ADD DL, 07H STEP24: ADD DL, 30H INT 21H MOV BX,[SI] MOV DL,BH SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP25 ADD DL, 07H STEP25: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BH AND DL, 0FH CMP DL, 0AH JB STEP26 ADD DL, 07H STEP26: ADD DL, 30H INT 21H MOV DL,BL SHR DL,1 SHR DL,1 SHR DL,1 SHR DL,1 CMP DL, 0AH JB STEP27 ADD DL, 07H STEP27: ADD DL, 30H MOV AH, 02H INT 21H MOV DL, BL AND DL, 0FH CMP DL, 0AH JB STEP28 ADD DL, 07H STEP28: ADD DL, 30H INT 21H MOV DL,48h MOV AH,02h INT 21h MOV AH,02h MOV DL,0dh INT 21h MOV AH,02h MOV DL,0ah INT 21h RET MULTI ENDP PX PROC 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 EXIT JMP SHORT LP1 EXIT: RET PX ENDP CODE1 ENDS END MAIN
程序运行结果:
2.一个用于字符串操作的综合程序
第一部分:
;程序功能:在指定位置插入字符串(假定字符串是 15061153 zhangchongzhi),并且打印插入前后的对别 STACK SEGMENT PARA STACK STACK_AREA DW 100H DUP(?) STACK_BTM EQU $ - STACK_AREA STACK ENDS DATA SEGMENT INS_WORD DB '15061153 zhangchongzhi' ;插入的字符串 INS_POS DB 'what' ;插入位置 INS_INFO DB 'After inserting ,the result:',0DH,0AH,'$' INS_LEN EQU INS_POS - INS_WORD POS_LEN EQU INS_INFO - INS_POS BUFF_INS DB 'I just want to know what happened yesterday.',0DH,0AH,'$' ;总的字符串 INS_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_INS MOV AH,9 INT 21H MOV DX,OFFSET INS_INFO MOV AH,9 INT 21H CALL INSERT MOV DX,OFFSET BUFF_INS MOV AH,9 INT 21H EXIT: MOV AX,4C00H INT 21H MAIN ENDP INSERT PROC PUSH DI PUSH BX PUSH SI PUSH CX PUSH AX MOV DI,OFFSET BUFF_INS MOV BX,OFFSET INS_END LP1_I: CMP DI,BX JZ INSERT_END MOV SI,OFFSET INS_POS MOV CX,POS_LEN PUSH DI LP2_I: MOV AL,BYTE PTR [SI] CMP BYTE PTR [DI],AL JNZ CONTINUE1 INC SI INC DI LOOP LP2_I PUSH DI MOV CX,OFFSET INS_END SUB CX,DI MOV SI,OFFSET INS_END MOV AX,INS_LEN MOV DI,SI ADD DI,AX DEC DI STD REP MOVSB POP DI MOV SI,OFFSET INS_WORD MOV CX,INS_LEN CLD REP MOVSB CONTINUE1: POP DI CONTINUE2: INC DI JMP LP1_I INSERT_END: POP AX POP CX POP SI POP BX POP DI RET INSERT ENDP CODE ENDS END MAIN
程序运行结果:
第二部分:
;程序功能:1.小写到大写转换 ; 2.字符串复制 ; 3.字符串按照字典序排序(默认为三个长度相同的字符串) ; 4.字符串替换 ; 5.IO检测 STACK SEGMENT PARA STACK STACK_AREA DW 100H DUP(?) STACK_BTM EQU $ - STACK_AREA STACK ENDS DATA SEGMENT BUFF_DST DB 'TO LOWER:',0DH,0AH,'$' BUFF_SRC DB 'TO UPPER',0DH,0AH,'$' COPY_INFO DB 'AFTER COPYING:',0DH,0AH,'$' COPY_LEN EQU BUFF_SRC - BUFF_DST COPY_END DW $ BUFF_DEL DB 'FOR DELETING',0DH,0AH,'$' DEL_INFO DB 'AFRER DELETING:',0DH,0AH,'$' DEL_WORD DB 'DELETE' DEL_END DW $ DEL_LEN EQU DEL_END - DEL_WORD WORD_OLD DB 'ZHANGCHONGZHI' WORD_NEW DB 'CHONGZHIZHANG' BUFF_INFO DB 'AFTER REPLACING:',0DH,0AH,'$' LEN DW WORD_NEW - WORD_OLD BUFF DB 'FOR REPLACING:',0DH,0AH DB 'ZHANGCHONGZHI line1: HOW ARE YOU!',0DH,0AH DB 'ZHANGCHONGZHI line2: WHAT HAPPENED.',0DH,0AH DB 'ZHANGCHONGZHI line3: 15061153.',0DH,0AH DB 'ZHANGCHONGZHI IS A GOOD BOY.',0DH,0AH DB 0DH,0AH DB '$' BUFF_LEN EQU $ - BUFF BUFF_END DW $ BUFF_UP DB 'TO UPPER:',0DH,0AH,'$' UP_END DW $ UP_INFO DB 'AFTER UPPERING:',0DH,0AH,'$' UP_LEN EQU UP_END - BUFF_UP WORD_TITLE DB 'FOR SORTING:.',0DH,0AH,'$' WORD_INFO DB 'AFTER SORTING:',0DH,0AH,'$' WORD_TMP DB 'TEMP',0DH,0AH,'$' WORD1 DB 'ACDC',0DH,0AH,'$' WORD2 DB 'PEAR',0DH,0AH,'$' WORD3 DB 'GOOD',0DH,0AH,'$' C_LINE DB 0DH,0AH,'$' WORD_LEN DW WORD2 - WORD1 CMP_TITLE DB 'FOR COMPARING:',0DH,0AH,'$' CMP_INFO DB 'AFTER COMPARING:',0DH,0AH,'$' CWORD1 DB 'TEER',0DH,0AH,'$' CWORD2 DB 'TEAR',0DH,0AH,'$' EQU_INFO DB 'WORD1 IS EQUAL TO WORD2.',0DH,0AH,'$' W1_INFO DB 'WORD1 IS GREATER THAN WORD2.',0DH,0AH,'$' W2_INFO DB 'WORD1 IS SMALLER THAN WORD2.',0DH,0AH,'$' CWORD_LEN DW CWORD2 - CWORD1 IO_INFO DB 0DH,0AH DB 'FOR IO TESTING',0DH,0AH DB 'INPUT A STRING:',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 DX,OFFSET BUFF_UP MOV AH,9 INT 21H CALL UPPER MOV DX,OFFSET UP_INFO MOV AH,9 INT 21H MOV DX,OFFSET BUFF_UP 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 CALL COPY MOV DX,OFFSET COPY_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 MOV DX,OFFSET BUFF MOV AH,9 INT 21H CALL INQ MOV DX,OFFSET BUFF_INFO MOV AH,9 INT 21H MOV DX,OFFSET BUFF MOV AH,9 INT 21H 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 CALL SORT 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 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 CALL COMP MOV DX,OFFSET BUFF_DEL MOV AH,9 INT 21H MOV DX,OFFSET DEL_INFO MOV AH,9 INT 21H CALL DEL MOV DX,OFFSET BUFF_DEL MOV AH,9 INT 21H MOV DX,OFFSET IO_INFO MOV AH,9 INT 21H CALL IO EXIT: MOV AX,4C00H INT 21H MAIN ENDP DEL PROC PUSH DI PUSH BX PUSH SI PUSH CX PUSH AX MOV DI,OFFSET BUFF_DEL MOV BX,OFFSET DEL_INFO LP1_D: CMP DI,BX JZ DELETE_END MOV SI,OFFSET DEL_WORD MOV CX,DEL_LEN PUSH DI LP2_D: MOV AL,BYTE PTR [SI] CMP BYTE PTR [DI],AL JNZ CONTINUE1 INC SI INC DI LOOP LP2_D MOV SI,DI MOV CX,OFFSET DEL_INFO SUB CX,DI POP DI PUSH DI CLD REP MOVSB CONTINUE1: POP DI CONTINUE2: INC DI JMP LP1_D DELETE_END: POP AX POP CX POP SI POP BX POP DI RET DEL ENDP UPPER PROC 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 LP1_U: LODSB CMP AL,'a' JB CONTINUE CMP AL,'z' JA CONTINUE SUB AL,20H CONTINUE: STOSB LOOP LP1_U POP ES POP AX POP CX POP DI POP SI RET UPPER ENDP COPY PROC PUSH SI PUSH DI PUSH CX PUSH ES PUSH DS POP ES MOV SI,OFFSET BUFF_SRC MOV DI,OFFSET BUFF_DST MOV CX,COPY_LEN CLD REP MOVSB POP ES POP CX POP DI POP SI RET COPY ENDP INQ PROC PUSH DI PUSH AX PUSH BX PUSH SI MOV DI,OFFSET BUFF MOV BX,OFFSET BUFF_END LP1: CMP DI,BX JZ INQ_END MOV SI,OFFSET WORD_OLD MOV CX,LEN PUSH DI LP2: MOV AL,BYTE PTR [SI] CMP BYTE PTR [DI],AL JNZ BECONTINUE INC SI INC DI LOOP LP2 MOV SI,OFFSET WORD_NEW POP DI CALL REPL JMP INCONTINUE BECONTINUE: POP DI INCONTINUE: INC DI JMP LP1 INQ_END: POP SI POP BX POP AX POP DI RET INQ ENDP REPL PROC PUSH CX MOV CX,LEN CLD REP MOVSB POP CX RET REPL ENDP SORT PROC PUSH CX PUSH SI PUSH DI MOV CX,3 LP_OUT: PUSH CX MOV SI,OFFSET WORD1 MOV DI,OFFSET WORD2 MOV CX,WORD_LEN CLD REPZ CMPSB JA W1GW2 LP1_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 COPY_S MOV SI,OFFSET WORD2 MOV DI,OFFSET WORD1 CALL COPY_S MOV SI,OFFSET WORD_TMP MOV DI,OFFSET WORD2 CALL COPY_S JMP LP1_S W2GW3: MOV SI,OFFSET WORD2 MOV DI,OFFSET WORD_TMP CALL COPY_S MOV SI,OFFSET WORD3 MOV DI,OFFSET WORD2 CALL COPY_S MOV SI,OFFSET WORD_TMP MOV DI,OFFSET WORD3 CALL COPY_S SCONTINUE: POP CX LOOP LP_OUT POP DI POP SI POP CX RET SORT ENDP COPY_S PROC PUSH CX MOV CX,WORD_LEN CLD REP MOVSB POP CX RET COPY_S ENDP COMP PROC 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 COMP_END W1: MOV DX,OFFSET W1_INFO MOV AH,9 INT 21H JMP COMP_END W2: MOV DX,OFFSET W2_INFO MOV AH,9 INT 21H JMP COMP_END COMP_END: RET COMP ENDP IO PROC PUSH SI PUSH AX PUSH DX MOV SI,OFFSET STR LP: MOV AH,1 INT 21H CMP AL,0DH JZ NEXT MOV BYTE PTR [SI],AL INC SI JMP LP NEXT: MOV DL,'$' MOV BYTE PTR [SI],DL MOV DX,OFFSET STR MOV AH,9 INT 21H POP DX POP AX POP SI RET IO ENDP CODE ENDS END MAIN
程序运行结果: