Advertisement
filashkov

Untitled

Mar 10th, 2020
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. %include "io.inc"
  2.  
  3. section .data
  4.     n dd 31
  5.     k dd 0
  6.    
  7. section .bss
  8.     a resd 600
  9.     number resb 32
  10.  
  11. section .text
  12. global CMAIN
  13. CMAIN:
  14.     mov edx, 0
  15.     mov [a], dword 1
  16.     mov esi, 1          ; esi = current_index
  17.    
  18.     mov eax, 0          ; eax = i
  19.    
  20. .for_i_eax:
  21.     cmp eax, dword [n]
  22.         jz .stop_for_i_eax
  23.            
  24.             mov [a + 4 * esi], dword 1          ; a.append(1)
  25.             inc esi
  26.            
  27.             mov ebx, 0                          ; ebx = j
  28.            
  29.             .for_j_ebx:
  30.                 cmp ebx, eax
  31.                     jz .stop_for_j_ebx
  32.                        
  33.                         mov edi, eax
  34.                        
  35.                         inc eax
  36.                         imul edi
  37.                        
  38.                         mov ecx, 2
  39.                         div ecx
  40.                         add eax, ebx
  41.                        
  42.                         mov ecx, [a + 4 * eax]
  43.                         add ecx, [a + 4 * eax + 4]
  44.                        
  45.                         mov [a + 4 * esi], ecx
  46.                         inc esi
  47.                        
  48.                         mov eax, edi
  49.                        
  50.                     inc ebx
  51.                     jmp .for_j_ebx  
  52.                    
  53.             .stop_for_j_ebx:
  54.            
  55.             mov [a + 4 * esi], dword 1          ; a.append(1)
  56.             inc esi
  57.            
  58.         inc eax
  59.         jmp .for_i_eax
  60.                
  61. .stop_for_i_eax:    
  62.    
  63.     mov eax, 0
  64.    
  65. .print_for_eax:
  66.     cmp eax, dword 100
  67.         jz .stop_print_for_eax
  68.            
  69.             ;PRINT_UDEC 4, [a + 4 * eax]
  70.             ;PRINT_CHAR ' '
  71.            
  72.         inc eax
  73.         jmp .print_for_eax
  74.        
  75. .stop_print_for_eax:
  76.    
  77.     ;PRINT_STRING "Shalom!"
  78.     GET_UDEC 4, eax
  79.     GET_UDEC 4, k
  80.     ;PRINT_HEX 4, eax
  81.     ;NEWLINE
  82.    
  83.     mov edi, eax
  84.    
  85.     mov esi, 0
  86.     mov edx, 0
  87.    
  88.     mov ecx, 0
  89.    
  90. .for_number_ecx:
  91.     cmp ecx, dword 32
  92.         jz .stop_for_number_ecx
  93.            
  94.             mov edx, 0
  95.             rol eax, 1
  96.             mov edi, eax
  97.            
  98.             mov ebx, 2
  99.             div ebx
  100.            
  101.             mov [number + esi], dl
  102.            
  103.             mov eax, edi
  104.             ;PRINT_UDEC 1, [number + esi]
  105.             inc esi
  106.            
  107.         inc ecx
  108.         jmp .for_number_ecx
  109.  
  110. .stop_for_number_ecx:
  111.    
  112.     mov edx, 0
  113.     mov esi, 0                                    ; esi = i
  114.     mov edi, 0                                    ; edi = answer
  115.    
  116. .for_esi:
  117.     cmp byte [number + esi], 1
  118.         jz .stop_for_esi
  119.        
  120.         inc esi
  121.         jmp .for_esi
  122.  
  123. .stop_for_esi:  
  124.    
  125.     ;NEWLINE
  126.     ;PRINT_UDEC 4, esi
  127.    
  128.     mov edx, 30                                   ; n = 30 - i
  129.     sub edx, esi
  130.     inc edx
  131.    
  132.     mov ecx, [k]
  133.     inc ecx
  134.    
  135.     cmp edx, ecx
  136.         jb .return_0
  137.             mov eax, edx
  138.             inc eax
  139.             mul edx
  140.             mov ebx, 2
  141.             div ebx
  142.             add eax, ecx
  143.             mov edi, [a + 4 * eax]
  144.             ;PRINT_STRING "bias = "
  145.             ;PRINT_UDEC 4, eax
  146.             ;NEWLINE
  147.         jmp .after_first
  148.    
  149. .return_0:
  150.     ;PRINT_STRING "Shalom!"
  151.     mov edi, 0
  152. .after_first:
  153.    
  154.     ;NEWLINE
  155.     ;PRINT_UDEC 4, edi
  156.     ;mov edx, [a + 4 * ]
  157.    
  158.     mov esi, 0                                    ; esi = i
  159.    
  160.     ;NEWLINE
  161.     ;PRINT_STRING "SECOND"
  162.     ;NEWLINE
  163.    
  164. .for2_esi:
  165.     cmp byte [number + esi], 1
  166.         jz .stop_for2_esi
  167.        
  168.         inc esi
  169.         jmp .for2_esi
  170.  
  171. .stop_for2_esi:  
  172.  
  173.     ;PRINT_UDEC 4, esi
  174.    
  175.     inc esi                                        ; i += 1
  176.      
  177.     mov ebx, esi                                   ; j = i
  178.     mov ecx, [k]                                   ; ecx = k
  179.    
  180.  .for_ebx_j:
  181.     cmp ebx, 32
  182.         jz .stop_for_ebx_j
  183.        
  184.             cmp byte [number + ebx], 0             ; if (number[ebx] == 0):
  185.                 jnz .else
  186.            
  187.                     dec ecx                            ; k -= 1
  188.                     cmp ecx, 0                         ; if (k == 0):
  189.                         jnz .end_of_1if
  190.                        
  191.                             inc edi                        ; answer += 1
  192.                             jmp .stop_for_ebx_j            ; break
  193.             .else:
  194.                 mov eax, 32
  195.                 sub eax, ebx
  196.                 dec eax
  197.                
  198.                 mov esi, ecx
  199.                 dec esi
  200.                 cmp eax, esi
  201.                     jb .end_of_1if
  202.                
  203.                 mov edx, 0
  204.                
  205.                 mov esi, eax
  206.                 inc esi
  207.                 mul esi
  208.                
  209.                 mov esi, 2
  210.                 div esi
  211.                
  212.                 add eax, ecx
  213.                 dec eax
  214.                
  215.                 add edi, [a + 4 * eax]
  216.                 ; answer += c(32 - ebx - 1, ecx - 1)
  217.         .end_of_1if:
  218.         inc ebx
  219.         jmp .for_ebx_j
  220.  
  221.  .stop_for_ebx_j:
  222.    
  223.     ;NEWLINE
  224.     PRINT_UDEC 4, edi
  225.    
  226.     xor eax, eax
  227.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement