Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- INCLUDE CONSOLE.INC
- .STACK 4096
- .DATA
- B1 DB ?
- B2 DB ?
- B3 DB ?
- W1 DW ?
- W2 DW ?
- W3 DW ?
- D1 DD ?
- D2 DD ?
- D3 DD ?
- Q1 DQ 2
- Q2 DQ 2
- Q3 DQ 2
- H1 DQ ?
- MISTAKE DB "MISTAKE", 0
- .CODE
- ADDTHREE MACRO A, B, C
- IF ('&A&' NE 'EAX') AND ('&B&' NE 'EAX') AND ('&C&' NE 'EAX') AND ('&A&' NE 'AX') AND ('&B&' NE 'AX') AND ('&C&' NE 'AX') AND ('&A&' NE 'AH') AND ('&B&' NE 'AH') AND ('&C&' NE 'AH') AND ('&A&' NE 'AL') AND ('&B&' NE 'AL') AND ('&C&' NE 'AL')
- IF TYPE A EQ 0
- IF TYPE B EQ 0
- IF TYPE C EQ 0
- OUTSTR OFFSET MISTAKE ;все константы
- ELSE (TYPE C EQ 1) OR (TYPE C EQ 2) OR (TYPE C EQ 4);все константы, кроме C
- ADD C, A
- ADD C, B
- ENDIF
- ELSEIF TYPE B LT TYPE C ; если размер B меньше, чем LT
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE B EQ 1 ; A=0,B=1,C=1/0
- MOV AL, C
- ADD B, A
- ADD B, C
- ELSEIF TYPE B EQ 2; A=0,B=2
- IF TYPE C EQ 1; A=0,B=2,C1
- MOVZX AX, C
- ELSE
- MOV AX, C
- ENDIF
- ADD B,A
- ADD B,AX
- ELSEIF TYPE B EQ 4
- IF (TYPE C EQ 0) OR (TYPE C EQ 4)
- MOV EAX, C
- ELSE
- MOVZX EAX, C
- ENDIF
- ADD B, A
- ADD B, EAX
- ENDIF
- ELSEIF (TYPE A LT TYPE B) OR (TYPE A LT TYPE C) ; если A<B или A<C (как типы)
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE A EQ 1; если A - byte -> B and C - byte or const
- MOV AL, B
- ADD AL, C
- ADD A, AL
- ELSEIF TYPE A EQ 2 ; A - word
- IF TYPE B EQ 1
- MOVZX AX, B
- ELSE
- MOV AX, B
- ENDIF
- IF TYPE C EQ 1 ; c - byte
- ADD AL, C
- ADC AH, 0
- ELSE ; c - word
- ADD AX, C
- ENDIF
- ADD A, AX
- ELSE TYPE A EQ 4
- IF (TYPE B EQ 4) OR (TYPE B EQ 0)
- MOV EAX, B
- ELSE
- MOVZX EAX, B
- ENDIF
- IF (TYPE C EQ 4) OR (TYPE C EQ 0)
- ADD EAX, C
- ELSEIF TYPE C EQ 1;c=1
- ADD AL, C
- ADC AH, 0
- JNC M3
- ADD EAX, 65536
- M3:
- ELSE; c=2
- ADD AX, C
- JNC M4
- ADD EAX, 65536
- M4:
- ENDIF
- ADD A, EAX
- ENDIF
- ELSEIF ('&A&' NE 'EBX') AND ('&B&' NE 'EBX') AND ('&C&' NE 'EBX') AND ('&A&' NE 'BX') AND ('&B&' NE 'BX') AND ('&C&' NE 'BX') AND ('&A&' NE 'BH') AND ('&B&' NE 'BH') AND ('&C&' NE 'BH') AND ('&A&' NE 'BL') AND ('&B&' NE 'BL') AND ('&C&' NE 'BL')
- IF TYPE A EQ 0
- IF TYPE B EQ 0
- IF TYPE C EQ 0
- OUTSTR OFFSET MISTAKE ;все константы
- ELSE (TYPE C EQ 1) OR (TYPE C EQ 2) OR (TYPE C EQ 4);все константы, кроме C
- ADD C, A
- ADD C, B
- ENDIF
- ELSEIF TYPE B LT TYPE C ; если размер B меньше, чем LT
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE B EQ 1 ; A=0,B=1,C=1/0
- MOV BL, C
- ADD B, A
- ADD B, C
- ELSEIF TYPE B EQ 2; A=0,B=2
- IF TYPE C EQ 1; A=0,B=2,C1
- MOVZX BX, C
- ELSE
- MOV BX, C
- ENDIF
- ADD B,A
- ADD B,BX
- ELSEIF TYPE B EQ 4
- IF (TYPE C EQ 0) OR (TYPE C EQ 4)
- MOV EBX, C
- ELSE
- MOVZX EBX, C
- ENDIF
- ADD B, A
- ADD B, EBX
- ENDIF
- ELSEIF (TYPE A LT TYPE B) OR (TYPE A LT TYPE C) ; если A<B или A<C (как типы)
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE A EQ 1; если A - byte -> B and C - byte or const
- MOV BL, B
- ADD BL, C
- ADD A, BL
- ELSEIF TYPE A EQ 2 ; A - word
- IF TYPE B EQ 1
- MOVZX BX, B
- ELSE
- MOV BX, B
- ENDIF
- IF TYPE C EQ 1 ; c - byte
- ADD BL, C
- ADC BH, 0
- ELSE ; c - word
- ADD BX, C
- ENDIF
- ADD A, BX
- ELSE TYPE A EQ 4
- IF (TYPE B EQ 4) OR (TYPE B EQ 0)
- MOV EBX, B
- ELSE
- MOVZX EBX, B
- ENDIF
- IF (TYPE C EQ 4) OR (TYPE C EQ 0)
- ADD EBX, C
- ELSEIF TYPE C EQ 1;c=1
- ADD BL, C
- ADC BH, 0
- JNC M3
- ADD EBX, 65536
- M3:
- ELSE; c=2
- ADD BX, C
- JNC M4
- ADD EBX, 65536
- M4:
- ENDIF
- ADD A, EBX
- ENDIF
- ELSEIF ('&A&' NE 'ECX') AND ('&B&' NE 'ECX') AND ('&C&' NE 'ECX') AND ('&A&' NE 'CX') AND ('&B&' NE 'CX') AND ('&C&' NE 'CX') AND ('&A&' NE 'CH') AND ('&B&' NE 'CH') AND ('&C&' NE 'CH') AND ('&A&' NE 'CL') AND ('&B&' NE 'CL') AND ('&C&' NE 'CL')
- IF TYPE A EQ 0
- IF TYPE B EQ 0
- IF TYPE C EQ 0
- OUTSTR OFFSET MISTAKE ;все константы
- ELSE (TYPE C EQ 1) OR (TYPE C EQ 2) OR (TYPE C EQ 4);все константы, кроме C
- ADD C, A
- ADD C, B
- ENDIF
- ELSEIF TYPE B LT TYPE C ; если размер B меньше, чем LT
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE B EQ 1 ; A=0,B=1,C=1/0
- MOV CL, C
- ADD B, A
- ADD B, C
- ELSEIF TYPE B EQ 2; A=0,B=2
- IF TYPE C EQ 1; A=0,B=2,C1
- MOVZX CX, C
- ELSE
- MOV CX, C
- ENDIF
- ADD B,A
- ADD B,CX
- ELSEIF TYPE B EQ 4
- IF (TYPE C EQ 0) OR (TYPE C EQ 4)
- MOV ECX, C
- ELSE
- MOVZX ECX, C
- ENDIF
- ADD B, A
- ADD B, ECX
- ENDIF
- ELSEIF (TYPE A LT TYPE B) OR (TYPE A LT TYPE C) ; если A<B или A<C (как типы)
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE A EQ 1; если A - byte -> B and C - byte or const
- MOV CL, B
- ADD CL, C
- ADD A, CL
- ELSEIF TYPE A EQ 2 ; A - word
- IF TYPE B EQ 1
- MOVZX CX, B
- ELSE
- MOV CX, B
- ENDIF
- IF TYPE C EQ 1 ; c - byte
- ADD CL, C
- ADC CH, 0
- ELSE ; c - word
- ADD CX, C
- ENDIF
- ADD A, CX
- ELSE TYPE A EQ 4
- IF (TYPE B EQ 4) OR (TYPE B EQ 0)
- MOV ECX, B
- ELSE
- MOVZX ECX, B
- ENDIF
- IF (TYPE C EQ 4) OR (TYPE C EQ 0)
- ADD ECX, C
- ELSEIF TYPE C EQ 1;c=1
- ADD CL, C
- ADC CH, 0
- JNC M3
- ADD ECX, 65536
- M3:
- ELSE; c=2
- ADD CX, C
- JNC M4
- ADD ECX, 65536
- M4:
- ENDIF
- ADD A, ECX
- ENDIF
- ELSEIF ('&A&' NE 'EDX') AND ('&B&' NE 'EDX') AND ('&C&' NE 'EDX') AND ('&A&' NE 'DX') AND ('&B&' NE 'DX') AND ('&C&' NE 'DX') AND ('&A&' NE 'DH') AND ('&B&' NE 'DH') AND ('&C&' NE 'DH') AND ('&A&' NE 'DL') AND ('&B&' NE 'DL') AND ('&C&' NE 'DL')
- IF TYPE A EQ 0
- IF TYPE B EQ 0
- IF TYPE C EQ 0
- OUTSTR OFFSET MISTAKE ;все константы
- ELSE (TYPE C EQ 1) OR (TYPE C EQ 2) OR (TYPE C EQ 4);все константы, кроме C
- ADD C, A
- ADD C, B
- ENDIF
- ELSEIF TYPE B LT TYPE C ; если размер B меньше, чем LT
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE B EQ 1 ; A=0,B=1,C=1/0
- MOV DL, C
- ADD B, A
- ADD B, C
- ELSEIF TYPE B EQ 2; A=0,B=2
- IF TYPE C EQ 1; A=0,B=2,C1
- MOVZX DX, C
- ELSE
- MOV DX, C
- ENDIF
- ADD B,A
- ADD B,DX
- ELSEIF TYPE B EQ 4
- IF (TYPE C EQ 0) OR (TYPE C EQ 4)
- MOV EDX, C
- ELSE
- MOVZX EDX, C
- ENDIF
- ADD B, A
- ADD B, EDX
- ENDIF
- ELSEIF (TYPE A LT TYPE B) OR (TYPE A LT TYPE C) ; если A<B или A<C (как типы)
- OUTSTR OFFSET MISTAKE
- ELSEIF TYPE A EQ 1; если A - byte -> B and C - byte or const
- MOV DL, B
- ADD DL, C
- ADD A, DL
- ELSEIF TYPE A EQ 2 ; A - word
- IF TYPE B EQ 1
- MOVZX DX, B
- ELSE
- MOV DX, B
- ENDIF
- IF TYPE C EQ 1 ; c - byte
- ADD DL, C
- ADC DH, 0
- ELSE ; c - word
- ADD DX, C
- ENDIF
- ADD A, DX
- ELSE TYPE A EQ 4
- IF (TYPE B EQ 4) OR (TYPE B EQ 0)
- MOV EDX, B
- ELSE
- MOVZX EDX, B
- ENDIF
- IF (TYPE C EQ 4) OR (TYPE C EQ 0)
- ADD EDX, C
- ELSEIF TYPE C EQ 1;c=1
- ADD DL, C
- ADC DH, 0
- JNC M3
- ADD EDX, 65536
- M3:
- ELSE; c=2
- ADD DX, C
- JNC M4
- ADD EDX, 65536
- M4:
- ENDIF
- ADD A, EDX
- ENDIF
- ENDIF
- ENDM
- START:
- MOV AX,3
- MOV BX,4
- MOV CX,5
- ADDTHREE AX, 5, 5
- OUTU AX
- EXIT
- END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement