ItzhakEfraimov

Untitled

May 24th, 2020
285
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; lab8.asm - a function that checks if an array is a premutation of the other
  2. ;
  3.         .MODEL SMALL
  4.         .STACK 100h
  5.         .DATA
  6.        
  7.             Count DW 10 DUP(?)                  ; count[10] = {0}
  8.        
  9.         .CODE      
  10.             PUBLIC _PermutationArray
  11.             _PermutationArray PROC NEAR
  12.                 PUSH BP
  13.                 MOV BP,SP          
  14.                 PUSH DI
  15.                 PUSH SI
  16.                
  17.                 XOR CX,CX                       ; CX = 0
  18.                 XOR DI,DI                       ; DI = 0 (index)
  19.                
  20.                 MOV CX,10                       ; CX = 10          
  21.  
  22.                 ZerofyLoop: ; Count[10] = {0}
  23.                     CMP DI,CX
  24.                     JE ExitZerofyLoop
  25.                     MOV Count[DI],0
  26.                     INC DI
  27.                     JMP ZerofyLoop
  28.                    
  29.                 ExitZerofyLoop:
  30.                 MOV DI,[BP+4]                   ; DI = int array1[]
  31.                 MOV SI,[BP+6]                   ; SI = int array2[]
  32.                 MOV CX,[BP+8]                   ; CX = int size
  33.                 XOR BX,BX                       ; i = 0
  34.                    
  35.                 CounterLoop:
  36.                     CMP BX,CX                   ; i < size
  37.                     JE CounterLoop2             ; i = size
  38.                     INC Count[DI]               ; count[array1[i]]++
  39.                     ADD DI,2
  40.                     INC BX                      ; i++
  41.                     JMP CounterLoop
  42.  
  43.                 XOR BX,BX                       ; i = 0
  44.  
  45.                 CounterLoop2:
  46.                     CMP BX,CX                   ; i < size
  47.                     JE ExitCounterLoop2         ; i = size
  48.                     DEC Count[SI]               ; count[array1[i]]++
  49.                     ADD SI,2
  50.                     INC BX                      ; i++
  51.                     JMP CounterLoop2
  52.    
  53.                 ExitCounterLoop2:  
  54.                 MOV CX,10                       ; CX = 10
  55.                 XOR DI,DI                       ; i = 0
  56.                
  57.  
  58.                 CheckLoop:
  59.                     CMP DI,CX                   ; i < size
  60.                     JE ReturnTrue               ; return 1
  61.                     CMP Count[DI],'0'           ; if(count[i])
  62.                     JNE ReturnFalse             ; return 0
  63.                     INC DI                      ; i++
  64.                     JMP CheckLoop                  
  65.                
  66.                 ReturnTrue:
  67.                 MOV AX,1
  68.                 JMP Exit
  69.                    
  70.                 ReturnFalse:
  71.                 XOR AX,AX
  72.                
  73.                 Exit:
  74.                 POP SI
  75.                 POP DI
  76.                 POP BP
  77.                 RET
  78.             _PermutationArray ENDP
  79.         END
RAW Paste Data