Advertisement
Guest User

Untitled

a guest
May 9th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. include console.inc
  2. .STACK 4096
  3. .DATA  
  4.         MISTAKE DB 'SOME KIND OF MISTAKE MAAAN',0
  5.         prov DB 'JUST PROVERKA MAN',0
  6.     B1 db ?
  7.         B2 db ?
  8.         B3 db ?
  9.         W1 dw ?
  10.         W2 dw ?
  11.         W3 dw ?
  12.         D1 dd ?
  13.         D2 dd ?
  14.         D3 dd ?
  15.         Q1 dq ?
  16.         Q2 dq ?
  17.         Q3 dq ?
  18.         ADDTHREE MACRO A,B,C
  19.        
  20.         IF TYPE A LE 4 AND TYPE A GE 1; помещаем в стек переменные
  21.                 PUSH 1 ;, если они размером от byte до dword
  22.                 IF TYPE A EQ BYTE
  23.                         MOV BYTE PTR [ESP],A
  24.                         MOV BYTE PTR [ESP+1],0 ;очищаем "мусор"
  25.                         MOV BYTE PTR [ESP+2],0
  26.                         MOV BYTE PTR [ESP+3],0
  27.                 ENDIF
  28.                 IF TYPE A EQ WORD
  29.                         MOV WORD PTR [ESP],A
  30.                         MOV BYTE PTR [ESP+2],0
  31.                         MOV BYTE PTR [ESP+3],0
  32.                 ENDIF
  33.                 IF TYPE A EQ DWORD
  34.                         MOV DWORD PTR [ESP],A
  35.                 ENDIF
  36.  
  37.  
  38.         ELSEIF TYPE A EQ 0
  39.                 PUSH A
  40.         ENDIF
  41.         outu [ESP]
  42.         newline
  43.         IF TYPE B LE 4 AND TYPE B GE 1; помещаем в стек переменные
  44.                 PUSH 1 ;, если они размером от byte до dword
  45.                 IF TYPE B EQ BYTE
  46.                         MOV BYTE PTR [ESP],B
  47.                         MOV BYTE PTR [ESP+1],0 ;очищаем "мусор"
  48.                         MOV BYTE PTR [ESP+2],0
  49.                         MOV BYTE PTR [ESP+3],0
  50.                 ENDIF
  51.                 IF TYPE B EQ WORD
  52.                         MOV WORD PTR [ESP],B
  53.                         MOV BYTE PTR [ESP+2],0
  54.                         MOV BYTE PTR [ESP+3],0
  55.                 ENDIF
  56.                 IF TYPE B EQ DWORD
  57.                         MOV DWORD PTR [ESP],B
  58.                 ENDIF
  59.  
  60.  
  61.         ELSEIF TYPE B EQ 0
  62.                 PUSH B
  63.        
  64.         ENDIF
  65.         outu [ESP]
  66.         newline
  67.         IF TYPE C LE 4 AND TYPE C GE 1; помещаем в стек переменные
  68.                 PUSH 1 ;, если они размером от byte до dword
  69.                 IF TYPE C EQ BYTE
  70.                         MOV BYTE PTR [ESP],C
  71.                         MOV BYTE PTR [ESP+1],0 ;очищаем "мусор"
  72.                         MOV BYTE PTR [ESP+2],0
  73.                         MOV BYTE PTR [ESP+3],0
  74.                 ENDIF
  75.                 IF TYPE C EQ WORD
  76.                         MOV WORD PTR [ESP],C
  77.                         MOV BYTE PTR [ESP+2],0
  78.                         MOV BYTE PTR [ESP+3],0
  79.                 ENDIF
  80.                 IF TYPE C EQ DWORD
  81.                         MOV DWORD PTR [ESP],C
  82.                 ENDIF
  83.  
  84.                 outu [ESP]
  85.                 newline
  86.         ELSEIF TYPE C EQ 0
  87.                 PUSH C
  88.         ENDIF
  89.         outu [ESP]
  90.         newline
  91.         MOV EAX,0; обнуляем наш арифмитический регистр
  92.        
  93.         IF TYPE A EQ 0
  94.                 IF TYPE B EQ 0;1-START
  95.                                 IF TYPE C EQ 0;2-START
  96.                                         OUTSTR OFFSET MISTAKE
  97.                                        
  98.                                 ELSEIF TYPE C EQ 1
  99.                                 MOV AH, BYTE PTR [ESP+4]
  100.                                 ADD BYTE PTR [ESP], AH
  101.                                 MOV AH, BYTE PTR [ESP+8]
  102.                                 ADD BYTE PTR [ESP], AH
  103.                                 MOV AH, BYTE PTR [ESP]
  104.                                 MOV C, AH
  105.                                
  106.                                 ELSEIF TYPE C EQ 2
  107.                                 MOV AX, WORD PTR [ESP+4]
  108.                                 ADD WORD PTR [ESP], AX
  109.                                 MOV AX, WORD PTR [ESP+8]
  110.                                 ADD WORD PTR [ESP], AX
  111.                                 MOV AX, WORD PTR [ESP]
  112.                                 MOV C, AX
  113.                                
  114.                                 ELSEIF TYPE C EQ 4
  115.                                 MOV EAX, [ESP+4]
  116.                                 ADD [ESP], EAX
  117.                                 MOV EAX, [ESP+8]
  118.                                 ADD [ESP], EAX
  119.                                 MOV EAX, [ESP]
  120.                                 MOV C, EAX
  121.                                
  122.                                ELSE
  123.                                MOV EAX,[ESP+4]
  124.                                ADD DWORD PTR C,EAX
  125.                                ADC DWORD PTR C+4,0
  126.                                MOV EAX, [ESP+8]
  127.                                ADD DWORD PTR C,EAX
  128.                                ADC DWORD PTR C+4,0
  129.                                
  130.                                ENDIF;2-END
  131.                  
  132.                  ELSEIF TYPE C GT TYPE B
  133.                                 OUTSTR OFFSET MISTAKE;Если b - ненулевой
  134.                  ELSEIF TYPE B EQ BYTE
  135.                                        MOV AH, byte ptr [ESP]
  136.                                        ADD byte ptr [ESP+4], AH
  137.                                        MOV AH, BYTE PTR [ESP+8]
  138.                                        ADD BYTE PTR [ESP+4], AH
  139.                                        MOV AH, BYTE PTR [ESP+4]
  140.                                        MOV B,AH
  141.                   ELSEIF TYPE B EQ WORD
  142.                                        MOV AX, WORD ptr [ESP]
  143.                                        ADD WORD ptr [ESP+4], AX
  144.                                        MOV AX, WORD PTR [ESP+8]
  145.                                        ADD WORD PTR [ESP+4], AX
  146.                                        MOV AX, WORD PTR [ESP+4]
  147.                                        MOV B,AX
  148.                   ELSEIF TYPE B EQ DWORD
  149.                                        MOV EAX, [ESP]
  150.                                        ADD [ESP+4], EAX
  151.                                        MOV EAX, [ESP+8]
  152.                                        ADD [ESP+4], EAX
  153.                                        MOV EAX, [ESP+4]
  154.                                        MOV B,EAX
  155.                   ELSEIF TYPE B EQ QWORD
  156.                         IF TYPE C EQ QWORD
  157.                                 MOV EAX,[ESP+8]
  158.                                 ADD DWORD PTR B,EAX
  159.                                 ADC DWORD PTR B+4,0
  160.                                 MOV EAX,DWORD PTR C
  161.                                 ADD DWORD PTR B,EAX
  162.                                 ADC DWORD PTR B+4,0
  163.                                 MOV EAX,DWORD PTR C+4
  164.                                 ADD DWORD PTR B,EAX
  165.                         ELSE
  166.                                 MOV EAX,[ESP+8]
  167.                                 ADD DWORD PTR B,EAX
  168.                                 ADC DWORD PTR B+4,0
  169.                                 MOV EAX,[ESP]
  170.                                 ADD DWORD PTR B,EAX
  171.                                 ADC DWORD PTR B+4,0
  172.                         ENDIF
  173.                   ENDIF        
  174.                
  175.  
  176.        
  177.         ELSEIF TYPE A EQ BYTE; случай, когда первый операнд - byte
  178.                        IF TYPE B LE 1 AND TYPE C LE 1
  179.                                MOV AH, byte ptr [ESP]
  180.                                ADD byte ptr [ESP+8], AH
  181.                                MOV AH, BYTE PTR [ESP+4]
  182.                                ADD BYTE PTR [ESP+8], AH
  183.                                MOV AH, BYTE PTR [ESP+8]
  184.                                MOV A,AH
  185.                        ELSE
  186.                                OUTSTR OFFSET MISTAKE
  187.                        ENDIF
  188.        
  189.        
  190.  
  191.  
  192.         ELSEIF TYPE A EQ WORD
  193.  
  194.                        IF TYPE B LE 2 AND TYPE C LE 2
  195.                                MOV AX, WORD ptr [ESP]
  196.                                ADD WORD ptr [ESP+8], AX
  197.                                MOV AX, WORD PTR [ESP+4]
  198.                                ADD WORD PTR [ESP+8], AX
  199.                                MOV AX, WORD PTR [ESP+8]
  200.                                MOV A,AX
  201.                                
  202.                        ELSE
  203.                                OUTSTR OFFSET MISTAKE
  204.                        ENDIF
  205.  
  206.         ELSEIF TYPE A EQ DWORD
  207.        
  208.                 IF TYPE B LE 4 AND TYPE C LE 4
  209.                        MOV EAX,[ESP]
  210.                        ADD [ESP+8], EAX
  211.                        MOV EAX, [ESP+4]
  212.                        ADD [ESP+8], EAX
  213.                        MOV EAX,[ESP+8]
  214.                        MOV A,EAX
  215.                ELSE
  216.                        OUTSTR OFFSET MISTAKE
  217.                ENDIF
  218.         ELSEIF TYPE A EQ QWORD
  219.                 IF (TYPE B EQ 8) AND (TYPE C EQ 8) ; Type b = type c = q
  220.                 MOV EAX,DWORD PTR B
  221.                 ADD DWORD PTR A,EAX
  222.                 ADC DWORD PTR A+4, 0
  223.                 MOV EAX,DWORD PTR B+4
  224.                 ADD DWORD PTR A+4,EAX
  225.                 MOV EAX,DWORD PTR C
  226.                 ADD DWORD PTR A,EAX
  227.                 ADC DWORD PTR A+4,0
  228.                 MOV EAX,DWORD PTR C+4
  229.                 ADD DWORD PTR A+4,EAX
  230.                
  231.                
  232.                
  233.                 ELSEIF (TYPE B NE 8) AND (TYPE C EQ 8) ; type b !=q type c = q
  234.                 MOV EAX,DWORD PTR [ESP+4]
  235.                 ADD DWORD PTR A,EAX
  236.                 ADC DWORD PTR A+4,0
  237.                 MOV EAX,DWORD PTR C
  238.                 ADD DWORD PTR A,EAX
  239.                 ADC DWORD PTR A+4,0
  240.                 MOV EAX,DWORD PTR C+4
  241.                 ADD DWORD PTR A+4,EAX
  242.                
  243.                
  244.                
  245.                
  246.                 ELSEIF (TYPE B EQ 8) AND (TYPE C NE 8) ; type b = q type c !=q
  247.                 MOV EAX,DWORD PTR [ESP]
  248.                 ADD DWORD PTR A,EAX
  249.                 ADC DWORD PTR A+4,0
  250.                 MOV EAX,DWORD PTR B
  251.                 ADD DWORD PTR A,EAX
  252.                 ADC DWORD PTR A+4,0
  253.                 MOV EAX,DWORD PTR B+4
  254.                 ADD DWORD PTR A+4,EAX
  255.                
  256.                 ELSE (TYPE B NE 8) AND (TYPE C NE 8) ; Type b !=q type c != q
  257.                 MOV EAX,DWORD PTR [ESP]
  258.                 ADD DWORD PTR A,EAX
  259.                 ADC DWORD PTR A+4,0
  260.                 MOV EAX,DWORD PTR [ESP+4]
  261.                 ADD DWORD PTR A,EAX
  262.                 ADC DWORD PTR A+4,0
  263.                 ENDIF
  264.        
  265.        
  266.         ENDIF
  267.        
  268.        
  269.        
  270.        
  271.         ENDM
  272.      
  273.         .CODE
  274.         START:
  275.        ;байты
  276.         MOV byte ptr B1,5
  277.         MOV byte ptr B2,6
  278.         MOV byte ptr B3,7
  279.        ;слова
  280.         MOV word ptr W1,5
  281.         MOV word ptr W2,6
  282.         MOV word ptr W3,7
  283.        ;dword
  284.         MOV dword ptr D1,5
  285.         MOV dword ptr D2,6
  286.         MOV dword ptr D3,7
  287.        ;qword
  288.         MOV dword ptr Q1,5
  289.         MOV dword ptr Q2,6
  290.         MOV dword ptr Q3,7
  291.        
  292.         MOV dword ptr Q1+4,0
  293.         MOV dword ptr Q2+4,0
  294.         MOV dword ptr Q3+4,0
  295.         ADDTHREE B1,B2,B3
  296.         outu B1
  297.  
  298. exit
  299. END START
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement