www.pudn.com > jpeg1.zip > MACROS.ASM
LEN EQU 8 EOB EQU 0FFH ;-------------------------------------- DISP_MSG MACRO MSG PUSH AX PUSH DX LEA DX,MSG MOV AH,9 INT 21H POP DX POP AX ENDM ;-------------------------------------- INS_BSR_BX MACRO LOCAL TEST_BX,ZERO,NEXT OR BX,BX JZ ZERO MOV CX,16 TEST_BX: DEC CX SHL BX,1 JNC TEST_BX NEXT: MOV BX,CX INC BX ZERO: ENDM ;-------------------------------------- ISHLD MACRO LOCAL ZERO,SHIFT OR CL,CL JZ SHORT ZERO PUSH CX XOR CH,CH SHIFT: SHL WORD PTR CURRENT_CODE,1 RCL WORD PTR CURRENT_CODE+2,1 RCL BX,1 LOOP SHIFT POP CX ZERO: ENDM ;-------------------------------------- POST MACRO LOCAL NEXT CMP AX,255 JNG NEXT MOV AX,255 NEXT: ENDM ;-------------------------------------- CHANGE_FLOAT_INT MACRO LOCAL SHIFT,ZERO,IS_1,NEXT,OVER SUB BH,7EH JS ZERO JZ IS_1 PUSH CX MOV CL,24 SUB CL,BH MOV BH,BL OR BL,80H SHIFT: SHR BL,1 RCR AX,1 LOOP SHIFT ADC AX,0 POP CX NEXT: TEST BH,80H JZ OVER NEG AX JMP OVER IS_1: MOV AX,1 JMP OVER ZERO: XOR AX,AX OVER: ENDM ;-------------------------------------- CHG_FLOAT_INT MACRO LOCAL SHIFT,ZERO,IS_1,NEXT,OVER PUSH CX PUSH BX CMP BH,7EH JB ZERO JZ IS_1 SUB BH,7FH OR BL,80H MOV CX,23 SUB CL,BH SHIFT: SHR BL,1 RCR AX,1 LOOP SHIFT ADC AX,0 JMP NEXT ZERO: XOR AX,AX JMP NEXT IS_1: MOV AX,1 NEXT: POP BX TEST BL,80H JZ OVER NEG AX OVER: POP CX ENDM ;-------------------------------------- ASK_1_X MACRO K1,K2,I,J,FU MOV AL,ES:[SI+BX+7-J] SUB AL,128 CBW MOV DX,AX MOV AL,ES:[SI+BX+J] SUB AL,128 CBW PUSH AX ADD AX,DX CALL STANDARD MOV WORD PTR X1[(K1*8+I)*4+2],AX POP AX SUB AX,DX IF FU NEG AX ENDIF CALL STANDARD MOV WORD PTR X1[(K2*8+I)*4+2],AX ADD BX,STEP ENDM ;-------------------------------------- ASK_X_1 MACRO K1,K2,I,J,C,FU MOV AX,WORD PTR X1[(K1*8+I)*4+2] MOV BX,WORD PTR X1[(K1*8+I)*4] MOV CX,WORD PTR X1[(K2*8+I)*4+2] MOV DX,WORD PTR X1[(K2*8+I)*4] PUSH AX PUSH BX PUSH CX PUSH DX CALL FLOAT_ADD MOV CH,86H XOR CL,CL XOR DX,DX CALL FLOAT_ADD AND AL,7FH XCHG AX,BX CHG_FLOAT_INT POST MOV ES:[SI+BP+7*FU-J*2*FU+J],AL POP DX POP CX POP BX POP AX SUB CL,80H CALL FLOAT_ADD MOV CH,86H XOR CL,CL XOR DX,DX CALL FLOAT_ADD AND AL,7FH XCHG AX,BX CHG_FLOAT_INT POST MOV ES:[SI+BP+J*2*FU-J-7*FU+7],AL ADD BP,STEP ENDM ;-------------------------------------- MOV_1_2 MACRO NUM1,NUM2,K LOCAL ZERO MOV BX,WORD PTR X2[NUM1*4+2] MOV AX,WORD PTR X2[NUM1*4] IF K PUSH BX OR BX,AX POP BX JZ ZERO INC BH ZERO: ENDIF MOV WORD PTR X1[NUM2*4+2],BX MOV WORD PTR X1[NUM2*4],AX ENDM ;-------------------------------------- MOV_2_1 MACRO NUM1,NUM2,K LOCAL ZERO MOV BX,WORD PTR X1[NUM1*4+2] MOV AX,WORD PTR X1[NUM1*4] IF K PUSH BX OR BX,AX POP BX JZ ZERO INC BH ZERO: ENDIF MOV WORD PTR X2[NUM2*4+2],BX MOV WORD PTR X2[NUM2*4],AX ENDM ;-------------------------------------- ASK_1_2 MACRO DES_NUM1,DES_NUM2,SOU_NUM1,SOU_NUM2 MOV AX,WORD PTR X2[SOU_NUM1*4+2] MOV BX,WORD PTR X2[SOU_NUM1*4] MOV CX,WORD PTR X2[SOU_NUM2*4+2] MOV DX,WORD PTR X2[SOU_NUM2*4] PUSH AX PUSH BX CALL FLOAT_ADD MOV WORD PTR X1[DES_NUM1*4+2],AX MOV WORD PTR X1[DES_NUM1*4],BX POP BX POP AX SUB CL,80H CALL FLOAT_ADD MOV WORD PTR X1[DES_NUM2*4+2],AX MOV WORD PTR X1[DES_NUM2*4],BX ENDM ;-------------------------------------- ASK_2_1 MACRO DES_NUM1,DES_NUM2,SOU_NUM1,SOU_NUM2 MOV AX,WORD PTR X1[SOU_NUM1*4+2] MOV BX,WORD PTR X1[SOU_NUM1*4] MOV CX,WORD PTR X1[SOU_NUM2*4+2] MOV DX,WORD PTR X1[SOU_NUM2*4] PUSH AX PUSH BX CALL FLOAT_ADD MOV WORD PTR X2[DES_NUM1*4+2],AX MOV WORD PTR X2[DES_NUM1*4],BX POP BX POP AX SUB CL,80H CALL FLOAT_ADD MOV WORD PTR X2[DES_NUM2*4+2],AX MOV WORD PTR X2[DES_NUM2*4],BX ENDM ;-------------------------------------- DIVIDE MACRO LOC,INT LOCAL OVERFLOW,DIV_END MOV AX,[SI+LOC*4+2] SUB AH,INT/2 JNC DIV_END OVERFLOW: XOR AX,AX MOV [SI+LOC*4],AX DIV_END: MOV [SI+LOC*4+2],AX ENDM ;-------------------------------------- DIV32 MACRO LOC,INT LOCAL OVERFLOW,DIV_END MOV AX,[SI+LOC*4+2] SUB AH,INT/32+4 JNC DIV_END OVERFLOW: XOR AX,AX MOV [SI+LOC*4],AX DIV_END: MOV [SI+LOC*4+2],AX ENDM ;-------------------------------------- MOVS_1_2 MACRO NUM1,NUM2,K LOCAL DIVE,OVER MOV AX,WORD PTR X2[NUM1*4+2] MOV BX,WORD PTR X2[NUM1*4] IF K MOV WORD PTR X1[NUM2*4],BX MOV WORD PTR X1[NUM2*4+2],AX LEA BP,CONST7 LEA DI,X1[NUM2*4] CALL FLOAT_DIV ELSE SUB AH,2 JNC DIVE XOR AX,AX MOV WORD PTR X1[NUM2*4],AX MOV WORD PTR X1[NUM2*4+2],AX JMP SHORT OVER DIVE: MOV WORD PTR X1[NUM2*4],BX MOV WORD PTR X1[NUM2*4+2],AX OVER: ENDIF ENDM ;-------------------------------------- MOVS_2_1 MACRO NUM1,NUM2,K LOCAL ZERO MOV AX,WORD PTR X1[NUM1*4+2] MOV BX,WORD PTR X1[NUM1*4] IF K MOV WORD PTR X2[NUM2*4],BX MOV WORD PTR X2[NUM2*4+2],AX LEA DI,X2[NUM2*4] LEA BP,CONST7 CALL FLOAT_MUL ELSE PUSH AX OR AX,BX POP AX JZ ZERO ADD AH,2 ZERO: MOV WORD PTR X2[NUM2*4+2],AX MOV WORD PTR X2[NUM2*4],BX ENDIF ENDM ;-------------------------------------- MOV_1_2_87 MACRO NUM1,NUM2,K FLD X2[NUM1*4] IF K FIMUL INT_2 ENDIF FSTP X1[NUM2*4] FWAIT ENDM ;-------------------------------------- MOV_2_1_87 MACRO NUM1,NUM2,K FLD X1[NUM1*4] IF K FIMUL INT_2 ENDIF FSTP X2[NUM2*4] FWAIT ENDM ;-------------------------------------- ASK_1_2_87 MACRO DES_NUM1,DES_NUM2,SOU_NUM1,SOU_NUM2 FLD X2[SOU_NUM1*4] FADD X2[SOU_NUM2*4] FSTP X1[DES_NUM1*4] FLD X2[SOU_NUM1*4] FSUB X2[SOU_NUM2*4] FSTP X1[DES_NUM2*4] FWAIT ENDM ;-------------------------------------- ASK_2_1_87 MACRO DES_NUM1,DES_NUM2,SOU_NUM1,SOU_NUM2 FLD X1[SOU_NUM1*4] FADD X1[SOU_NUM2*4] FSTP X2[DES_NUM1*4] FLD X1[SOU_NUM1*4] FSUB X1[SOU_NUM2*4] FSTP X2[DES_NUM2*4] FWAIT ENDM ;-------------------------------------- MOVS_1_2_87 MACRO NUM1,NUM2,K IF K FLD X2[NUM1*4] FDIV CONST77 ELSE FLD X2[NUM1*4] FIDIV INT_4 ENDIF FSTP X1[NUM2*4] FWAIT ENDM ;-------------------------------------- MOVS_2_1_87 MACRO NUM1,NUM2,K IF K FLD X1[NUM1*4] FMUL CONST77 ELSE FLD X1[NUM1*4] FIMUL INT_4 ENDIF FSTP X2[NUM2*4] FWAIT ENDM ;-------------------------------------- D_SHIFT MACRO LOCAL GREATER,LESS,EQUAL,NEXT PUSH CX CMP DH,DL JB LESS JE EQUAL GREATER: MOV CL,DL CALL SHIFT_IN SUB DH,DL JMP SHORT NEXT EQUAL: MOV CL,DL CALL SHIFT_IN INC BP MOV DH,32 JMP SHORT NEXT LESS: MOV CL,DH CALL SHIFT_IN INC BP SUB DL,DH MOV CL,DL CALL SHIFT_IN MOV DH,32 SUB DH,DL NEXT: POP CX ENDM ;-------------------------------------- INDEX_8 MACRO LOCAL GREAT_EQUAL,LESS,NEXT MOV DL,8 XOR BX,BX CMP DH,DL JB LESS GREAT_EQUAL: MOV BL,BYTE PTR CURRENT_CODE+3 JMP NEXT LESS: PUSH BP PUSH DI MOV DI,BP INC DI SHL DI,1 SHL DI,1 MOV AH,ES:[DI+3] POP DI POP BP MOV BL,BYTE PTR CURRENT_CODE+3 MOV CL,8 SUB CL,DH SHR BL,CL SHL BL,CL MOV CL,DH SHR AH,CL OR BL,AH NEXT: ENDM ;-------------------------------------- INDEX_16 MACRO LOCAL GREAT2_EQUAL2,LESS,NEXT MOV DL,16 XOR BX,BX CMP DH,DL JB LESS GREAT2_EQUAL2: MOV BX,WORD PTR CURRENT_CODE+2 JMP NEXT LESS: PUSH BP PUSH DI MOV DI,BP INC DI SHL DI,1 SHL DI,1 MOV AX,ES:[DI+2] POP DI POP BP MOV BX,WORD PTR CURRENT_CODE+2 MOV CL,16 SUB CL,DH SHR BX,CL SHL BX,CL MOV CL,DH SHR AX,CL OR BX,AX NEXT: ENDM ;-------------------------------------- I_SHIFT MACRO LOCAL GREATER,LESS,EQUAL,NEXT XOR BX,BX CMP DH,DL JB LESS JE EQUAL GREATER: MOV CL,DL ISHLD SUB DH,DL JMP NEXT EQUAL: MOV CL,DL ISHLD INC BP SHL BP,1 SHL BP,1 MOV AX,ES:[BP+2] MOV WORD PTR CURRENT_CODE+2,AX MOV AX,ES:[BP] MOV WORD PTR CURRENT_CODE,AX SHR BP,1 SHR BP,1 MOV DH,32 JMP NEXT LESS: MOV CL,DH ISHLD SUB DL,DH MOV CL,DL INC BP SHL BP,1 SHL BP,1 MOV AX,ES:[BP+2] MOV WORD PTR CURRENT_CODE+2,AX MOV AX,ES:[BP] MOV WORD PTR CURRENT_CODE,AX SHR BP,1 SHR BP,1 ISHLD MOV DH,32 SUB DH,DL NEXT: ENDM