ItzhakEfraimov

Untitled

May 24th, 2020
286
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 DX,DX                       ; i = 0
  34.                 XOR BX,BX
  35.                    
  36.                 CounterLoop:
  37.                     CMP DX,CX                   ; i < size
  38.                     JE CounterLoop2             ; i = size
  39.                     MOV BX,[DI]
  40.                     ADD Count[BX],1
  41.                     ;INC Count[DI]              ; count[array1[i]]++
  42.                     ADD DI,2
  43.                     INC DX                      ; i++
  44.                     JMP CounterLoop
  45.                    
  46.                 XOR DX,DX
  47.                 XOR BX,BX                       ; i = 0
  48.  
  49.                 CounterLoop2:
  50.                     CMP DX,CX                   ; i < size
  51.                     JE ExitCounterLoop2         ; i = size
  52.                     MOV BX,SI
  53.                     SUB Count[BX],1
  54.                     ;DEC Count[SI]              ; count[array1[i]]++
  55.                     ADD SI,2
  56.                     INC DX                      ; i++
  57.                     JMP CounterLoop2
  58.    
  59.                 ExitCounterLoop2:  
  60.                 MOV CX,10                       ; CX = 10
  61.                 XOR DI,DI                       ; i = 0
  62.                
  63.  
  64.                 CheckLoop:
  65.                     CMP DI,CX                   ; i < size
  66.                     JE ReturnTrue               ; return 1
  67.                     CMP Count[DI],'0'           ; if(count[i])
  68.                     JNE ReturnFalse             ; return 0
  69.                     INC DI                      ; i++
  70.                     JMP CheckLoop                  
  71.                
  72.                 ReturnTrue:
  73.                 MOV AX,1
  74.                 JMP Exit
  75.                    
  76.                 ReturnFalse:
  77.                 XOR AX,AX
  78.                
  79.                 Exit:
  80.                 POP SI
  81.                 POP DI
  82.                 POP BP
  83.                 RET
  84.             _PermutationArray ENDP
  85.         END
RAW Paste Data