• API
• FAQ
• Tools
• Archive
SHARE
TWEET

Untitled

a guest Feb 22nd, 2020 136 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. ;
2. ; CS1022 Introduction to Computing II 2018/2019
3. ; Lab 2 - Subarray
4. ;
5.
6. N   EQU 7
7. M   EQU 3
8.
10.     ENTRY
11.
12.     ; initialize system stack pointer (SP)
13.     LDR SP, =0x40010000
14.     LDR R1, =LARGE_A
15.     LDR R2, =SMALL_A
16.     ;
17.     ; Write your program here to determine whether SMALL_A
18.     ;   is a subarray of LARGE_A
19.     ;
20.     ; Store 1 in R0 if SMALL_A is a subarray and zero otherwise
21.     ;
22.
23.     MOV R0,#0;  boolean subArray = false
24.     MOV R3,#0;
25. forI         ;
26.     CMP R3,#N;  for(i = 0; i <array.length;i++)
27.     BGE endForI;{
28.     MOV R4,R3;      for(j =0;j <array.length;j++)
29. forJ         ;      {
30.     CMP R4,#N
31.     BGE endForJ
32.
33.     MOV R7,#N;          r7 = arrayLarge.length
34.     MUL R7,R3,R7;       r7 = i * arrayLarge.length
35.     ADD R7,R7,R4;       index = r7 + coloumn[j]
36.     LDR R7,[R1,R7,LSL#2];r7 = arrayLarge[i][j]
37.
38.     MOV R8,#0           ;r8 = 0
39.     LDR R8,[R2,R8,LSL#2];r8 = arraySmall[0][0] (We do this as we only have to check if the first element of the small array
40.                         ;                       is equal to the element of the large array. This means we only loop when we have an equal element.
41.     CMP R7,R8           ;if(arrayLarge[i][j] == arraySmall[0][0]
42.     BNE notSubArray     ;{
43.     MOV R0,#1           ;   subArray = true;
44.                         ;   (We set subArray to true. This stays true unless the next indexs are not equal until we reach the end.)
45.     MOV R9,R3           ;   int x =i
46.     MOV R5,#0           ;
47. forK                    ;   for(k = 0; k < arraySmall.length;k++)
48.     CMP R5,#M           ;   {
49.     BGE endForK         ;
50.     MOV R10,R4          ;       int y = j
51.                         ;
52.     MOV R6,#0           ;       for(l=0;l<arraySmall.length;l++)
53. forL                    ;       {
54.     CMP R6,#M           ;           r6 = arraySmall.length
55.     BGE endForL         ;
56.     MOV R7,#N           ;           r7 = arrayLarge.length
57.     MUL R7,R9,R7        ;           r7 = x * arrayLarge.length(rowsize)
58.     ADD R7,R7,R10       ;           index = x + coloumn(y)
59.     LDR R7,[R1,R7,LSL#2];           r7 = arrayLarge[x][y]
60.
61.     MOV R8,#M           ;           r8 = arraySmall.length
62.     MUL R8,R5,R8        ;           r8 = k * arrayLarge.length(rowsize)
63.     ADD R8,R8,R6        ;           index = k + coloumn(j)
64.     LDR R8,[R2,R8,LSL #2];          r8 = arraySmall[k][l]
65.
66.     CMP R7,R8           ;           if(arrayLarge[x][y] != arraySmall[k][l])
67.     BEQ isEql           ;           {
68.     MOV R0,#0           ;               subArray = false;
69. isEql                   ;           }
72.     B   forL            ;   }
73. endForL
76.     B   forK            ;
77. endForK
78. notSubArray
80.     B   forJ    ;   }
81. endForJ
83.     B   forI    ;}
84. endForI
85. STOP    B   STOP
86.
87.
88. ;
89. ; test data
90. ;
91.
92. LARGE_A DCD  48, 37, 15, 44,  3, 17, 26
93.         DCD   2,  9, 12, 18, 14, 33, 16
94.         DCD  13, 20,  1, 22,  7, 48, 21
95.         DCD  27, 19, 44, 49, 44, 18, 10
96.         DCD  29, 17, 22,  4, 46, 43, 41
97.         DCD  37, 35, 38, 34, 16, 25,  0
98.         DCD  17,  0, 48, 15, 27, 35, 11
99.
100. SMALL_A DCD  49, 44, 18
101.         DCD   4, 46, 43
102.         DCD  34, 16, 25
103.
104.     END
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.
Top