# Program To Arm Assembly Language Using Keil Assembler X86 Assembly Language Assignment Solution.

## Instructions

Objective
Write a ARM assignment program to convert assembly language using Keil assembler

## Requirements and Specifications

Screenshots

Source Code

```LAB 1 /* Pseudocode:  for (i==0 ; i {   n = a AND b ; // and operation   m = a ORR b; // or operation   p = a EOR b; // xor operation  }  if (n==m)  {   X = n LSR 4; //(logical right shift by 4)  else   X = m LSL 4; //(logical left shift by 4)  } */ .globl function /* function (j, a, b) */ function: MOV X4, #0 // Start of for    B COMPARE // jump to comparison FOR: AND X5,X1,X2 // n=a AND b    ORR X6,X1,X2 // m=a ORR b    EOR X7,X1,X2 // p=a EOR b    ADD X4,X4,1 // i++ COMPARE: CMP X4,X0 // compare i and j    B.LT FOR // if i < j repeat for    CMP X5,X6 // compare n and m    B.EQ IF // if n == m, go to if    B ELSE // otherwise go to else IF: LSR X0,X5,4 // X = n LSR 4    RET ELSE: LSL X0,X6,4 // X = m LSL 4    RET LAB 3-1 .globl assembly_function /* assembly_function(int arr[], int n) */ assembly_function:    MOV X4,0 // start sum = 0    MOV W5,0 // i = 0    B COMPARE // jump to for comparison FOR: LDR W2,[X0] // load arr[i]    ADD W5,W5,W2 // sum +=arr[i]    ADD X0,X0,4 // advance array pointer    ADD X4,X4,1 // i++ COMPARE: CMP X4,X1 // if i   B.LT FOR // repeat for    MOV W0,W5 // return sum    RET LAB 3-2 .globl sum_loop, sum_unrolled /* int sum_loop ( int arr[] , int n ) */ sum_loop: MOV X4,0 // start sum = 0    MOV W5,0 // i = 0    B COMPARE // jump to for comparison FOR: LDR W2,[X0] // load arr[i]    ADD W5,W5,W2 // sum +=arr[i]    ADD X0,X0,4 // advance array pointer    ADD X4,X4,1 // i++ COMPARE: CMP X4,X1 // if i   B.LT FOR // repeat for    MOV W0,W5 // return sum    RET /* int sum_unrolled(int arr[] , int n) */ sum_unrolled: MOV W4,0 // start sum1 = 0    MOV W5,0 // start sum2 = 0    MOV W6,0 // start sum3 = 0    MOV W7,0 // start sum4 = 0    MOV W8,0 // start sum5 = 0    MOV W9,0 // start sum6 = 0    MOV W10,0 // start sum7 = 0    MOV W11,0 // start sum8 = 0    MOV W12,0 // start sum9 = 0    MOV W13,0 // start sum10 = 0    MOV X2,0 // i = 0    B COMPAREI // jump to for comparison FORI: LDR W3,[X0,0] // load arr[i + 0]    ADD W4,W4,W3 // sum1 +=arr[i + 0]    LDR W3,[X0,4] // load arr[i + 1]    ADD W5,W5,W3 // sum2 +=arr[i + 1]    LDR W3,[X0,8] // load arr[i + 2]    ADD W6,W6,W3 // sum3 +=arr[i + 2]    LDR W3,[X0,12] // load arr[i + 3]    ADD W7,W7,W3 // sum4 +=arr[i + 3]    LDR W3,[X0,16] // load arr[i + 4]    ADD W8,W8,W3 // sum5 +=arr[i + 4]    LDR W3,[X0,20] // load arr[i + 5]    ADD W9,W9,W3 // sum6 +=arr[i + 5]    LDR W3,[X0,24] // load arr[i + 6]    ADD W10,W10,W3 // sum7 +=arr[i + 6]    LDR W3,[X0,28] // load arr[i + 7]    ADD W11,W11,W3 // sum8 +=arr[i + 7]    LDR W3,[X0,32] // load arr[i + 8]    ADD W12,W12,W3 // sum9 +=arr[i + 8]    LDR W3,[X0,36] // load arr[i + 9]    ADD W13,W13,W3 // sum10 +=arr[i + 9]    ADD X0,X0,40 // advance array pointer    ADD X2,X2,10 // i+=10 COMPAREI: CMP X2,X1 // if i   B.LT FORI // repeat for    ADD W0,W4,W5 // return sum1 + sum2 + sum3 +... + sum10    ADD W0,W0,W6    ADD W0,W0,W7    ADD W0,W0,W8    ADD W0,W0,W9    ADD W0,W0,W10    ADD W0,W0,W11    ADD W0,W0,W12    ADD W0,W0,W13    RET```