How to resolve the algorithm Tau function step by step in the AArch64 Assembly programming language
Published on 12 May 2024 09:40 PM
How to resolve the algorithm Tau function step by step in the AArch64 Assembly programming language
Table of Contents
Problem Statement
Given a positive integer, count the number of its positive divisors.
Show the result for the first 100 positive integers.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm Tau function step by step in the AArch64 Assembly programming language
Source code in the aarch64 programming language
/* ARM assembly AARCH64 Raspberry PI 3B or android 64 bits */
/* program taufunction64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
.equ MAXI, 100
/*********************************/
/* Initialized data */
/*********************************/
.data
sMessResult: .asciz " @ "
szCarriageReturn: .asciz "\n"
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
sZoneConv: .skip 24
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: // entry of program
mov x0,#1 // factor number one
bl displayResult
mov x0,#2 // factor number two
bl displayResult
mov x2,#3 // begin number three
1: // begin loop
mov x5,#2 // divisor counter
mov x4,#2 // first divisor 1
2:
udiv x0,x2,x4 // compute divisor 2
msub x3,x0,x4,x2 // remainder
cmp x3,#0
bne 3f // remainder = 0 ?
cmp x0,x4 // same divisor ?
add x3,x5,1
add x6,x5,2
csel x5,x3,x6,eq
3:
add x4,x4,#1 // increment divisor
cmp x4,x0 // divisor 1 < divisor 2
blt 2b // yes -> loop
mov x0,x5 // equal -> display
bl displayResult
add x2,x2,1
cmp x2,MAXI // end ?
bls 1b // no -> loop
ldr x0,qAdrszCarriageReturn
bl affichageMess
100: // standard end of the program
mov x0, #0 // return code
mov x8, #EXIT // request to exit program
svc #0 // perform the system call
qAdrszCarriageReturn: .quad szCarriageReturn
/***************************************************/
/* display message number */
/***************************************************/
/* x0 contains the number */
displayResult:
stp x1,lr,[sp,-16]! // save registres
ldr x1,qAdrsZoneConv
bl conversion10 // call décimal conversion
strb wzr,[x1,x0]
ldr x0,qAdrsMessResult
ldr x1,qAdrsZoneConv // insert conversion in message
bl strInsertAtCharInc
bl affichageMess // display message
ldp x1,lr,[sp],16 // restaur des 2 registres
ret
qAdrsMessResult: .quad sMessResult
qAdrsZoneConv: .quad sZoneConv
/********************************************************/
/* File Include fonctions */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
You may also check:How to resolve the algorithm Loops/Do-while step by step in the 11l programming language
You may also check:How to resolve the algorithm Permutations step by step in the GAP programming language
You may also check:How to resolve the algorithm String append step by step in the Scala programming language
You may also check:How to resolve the algorithm Yellowstone sequence step by step in the jq programming language
You may also check:How to resolve the algorithm Harshad or Niven series step by step in the ALGOL-M programming language