Advertisement
ItzhakEfraimov

Untitled

May 24th, 2020
549
0
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 DB 10 DUP(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.                
  19.                 MOV DI,[BP+4]                   ; DI = int array1[]
  20.                 MOV SI,[BP+6]                   ; SI = int array2[]
  21.                 MOV CX,[BP+8]                   ; CX = int size
  22.                 DEC CX                          ; i--
  23.                
  24.                 CounterLoop:
  25.                     CMP CX,0                    ; i >= 0
  26.                     JL ExitCounterLoop          ; i < 0
  27.                     ADD Count[DI],1             ; count[array1[i]]++
  28.                     SUB Count[SI],1             ; count[array2[i]]--
  29.                     INC DI
  30.                     INC SI
  31.                     DEC CX                      ; i--
  32.                     JMP CheckLoop
  33.    
  34.                 ExitCounterLoop:   
  35.                 MOV DI,[BP+8]                   ; CX = int size
  36.                 DEC CX                          ; i--
  37.  
  38.                 CheckLoop:
  39.                     CMP CX,0                    ; size >= i
  40.                     JL ReturnTrue               ; return 1
  41.                     CMP Count[DI],0             ; if(count[i])
  42.                     JG ReturnFalse              ; return 0
  43.                     DEC CX                      ; i--
  44.                     JMP CheckLoop
  45.                    
  46.                 ReturnTrue:
  47.                 MOV AX,1
  48.                 JMP Exit
  49.                    
  50.                 ReturnFalse:
  51.                 XOR AX,AX
  52.                
  53.                 Exit:
  54.                 POP SI
  55.                 POP DI
  56.                 POP BP
  57.                 RET
  58.             _PermutationArray ENDP
  59.         END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement