+1 (315) 557-6473 

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

ARM assembly language using Keil assembler Assembly language
ARM assembly language using Keil assembler Assembly language 1
ARM assembly language using Keil assembler Assembly language 2

Screenshots 

ARM assembly language using Keil assembler Assembly language 3
ARM assembly language using Keil assembler Assembly language 4
ARM assembly language using Keil assembler Assembly language 5

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