ItzhakEfraimov

Untitled

May 24th, 2020
300
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(?)                  ; 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 ExitCounterLoop          ; i = size
  38.                     INC Count[DI]               ; count[array1[i]]++
  39.                     DEC Count[SI]               ; count[array2[i]]--
  40.                     ADD DI,2
  41.                     ADD SI,2
  42.                     INC BX                      ; i++
  43.                     JMP CounterLoop
  44.    
  45.                 ExitCounterLoop:  
  46.                 MOV CX,10                       ; CX = 10
  47.                 XOR DI,DI                       ; i = 0
  48.                
  49.  
  50.                 CheckLoop:
  51.                     CMP DI,CX                   ; i < size
  52.                     JE ReturnTrue               ; return 1
  53.                     CMP Count[DI],0             ; if(count[i])
  54.                     JG ReturnFalse              ; return 0
  55.                     INC DI                      ; i++
  56.                     JMP CheckLoop                  
  57.                
  58.                 ReturnTrue:
  59.                 MOV AX,1
  60.                 JMP Exit
  61.                    
  62.                 ReturnFalse:
  63.                 XOR AX,AX
  64.                
  65.                 Exit:
  66.                 POP SI
  67.                 POP DI
  68.                 POP BP
  69.                 RET
  70.             _PermutationArray ENDP
  71.         END
RAW Paste Data