0% found this document useful (0 votes)
879 views

Write A Program To Multiply Two 16 Bit Binary Numbers

The document contains code snippets for several ARM assembly programs: 1) A program to multiply two 16-bit binary numbers and store the 32-bit result. 2) Programs to find the sum of the first 10 integers, calculate the factorial of a given number, add an array of 16-bit numbers and store the 32-bit result. 3) Additional programs to find the square of a number using a lookup table, find the smallest/largest number in an array, and sort an array of 32-bit numbers in ascending order.

Uploaded by

Akansha Singh
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
879 views

Write A Program To Multiply Two 16 Bit Binary Numbers

The document contains code snippets for several ARM assembly programs: 1) A program to multiply two 16-bit binary numbers and store the 32-bit result. 2) Programs to find the sum of the first 10 integers, calculate the factorial of a given number, add an array of 16-bit numbers and store the 32-bit result. 3) Additional programs to find the square of a number using a lookup table, find the smallest/largest number in an array, and sort an array of 32-bit numbers in ascending order.

Uploaded by

Akansha Singh
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 10

Write a program to multiply two 16 bit binary numbers.

;/* PROGRAM TO MULTIPLY TWO 16BIT NUMBERS


*/
;/* VALUE1: 1900H (6400) (IN R1)
*/
;/* VALUE2: 0C80H (3200) (IN R2)
*/
;/* RESULT: 1388000H(20480000) (IN R3)
*/
AREA MULTIPLY , CODE, READONLY

ENTRY ;Mark first instruction to execute

START

MOV r1,#6400 ; STORE FIRST NUMBER IN R0


MOV r2,#3200 ; STORE SECOND NUMBER IN R1
MUL r3,r1,r2 ; MULTIPLICATION

NOP
NOP
NOP

END ;Mark end of file

Write a program to find the sum of first 10 integer numbers.


;sum 10 to 1 is 55 but reslut in the register is in hex decimal(0x37)
AREA SUM,CODE,READONLY

ENTRY
MOV R1,#10 ; load 10 to regester
MOV R2,#0 ; empty the register to store result
loop
ADD R2,R2,R1 ; add the content of R1 with result at R2
SUBS R1,#0x01 ; Decreament R1 by 1
BNE loop ; repeat till r1 goes 0
back B back ; jumps back to C code
END
Write a program to find factorial of a number

;/* PROGRAM TO FIND FACTORIAL OF A GIVEN NUMBER


*/
;/* In this example we have taken n=7
*/
;/* Check the result in R0/R3 register =13B0H (5040)
*/

AREA FACTORIAL , CODE, READONLY

ENTRY ;Mark first instruction to execute

START

MOV r0, #3 ; STORE FACTORIAL NUMBER IN R0


MOV r1,r0 ; MOVE THE SAME NUMBER IN R1

FACT SUBS r1, r1, #1 ; SUBTRACTION


CMP r1, #1 ; COMPARISON
BEQ STOP
MUL r3,r0,r1; ; MULTIPLICATION
MOV r0,r3 ; Result
BNE FACT ; BRANCH TO THE LOOP IF NOT EQUAL
STOP

NOP
NOP
NOP

END ;Mark end of file

Write a program to add an array of 16 bit numbers and store the 32


bit result in internal RAM

;/* ARRAY OF 6 NUMBERS 0X1111,0X2222,0X3333,0XAAAA,0XBBBB,0XCCCC


*/
;/* THE SUM IS 29997H THE RESULT CAN BE VIEWED IN LOCATION 0X40000000 &
ALSO IN R0 */
*/

AREA ADDITION , CODE, READONLY

ENTRY ;Mark first instruction to execute


START
MOV R5,#6 ; INTIALISE COUNTER TO 6(i.e. N=6)
MOV R0,#0 ; INTIALISE SUM TO ZERO
LDR R1,=VALUE1 ; LOADS THE ADDRESS OF FIRST VALUE
LOOP
LDRH R3,[R1],#02 ; READ 16 BIT DATA
ADD R0,R0,R3 ; ADD R2=R2+R3
SUBS R5,R5,#1 ; DECREMENT COUNTER
CMP R5,#0
BNE LOOP ; LOOK BACK TILL ARRAY ENDS
LDR R4,=RESULT ; LOADS THE ADDRESS OF RESULT
STR R0,[R4] ; STORES THE RESULT IN R1
JMP B JMP

VALUE1 DCW 0X1111,0X2222,0X3333,0XAAAA,0XBBBB,0XCCCC ; ARRAY OF


16 BIT NUMBERS(N=6)

AREA DATA2,DATA,READWRITE ; TO STORE RESULT IN GIVEN


ADDRESS
RESULT DCD 0X0

END ; Mark end of file

Write a program to find the square of a number (1 to 10) using look-


up table
;/* Assembly Program to find square of Number
*/
;/* GIVEN NUMBER IS 6 (R1) THEN RESULT IS IN R3=24H(36)
*/
AREA SQUARE , CODE, READONLY

ENTRY ;Mark first instruction to execute

START

LDR R0, = TABLE1 ; Load start address of Lookup table


LDR R2, = 0X40000000
LDR R1,[R2] ; Load no whose square is to be find
MOV R1, R1, LSL#0x2 ; Generate address corresponding to square of given
no
ADD R0, R0, R1 ; Load address of element in Lookup table
LDR R3, [R0] ; Get square of given no in R3

NOP
NOP
NOP

;Lookup table contains Squares of nos from 0 to 10 (in hex)

TABLE1 DCD 0X00000000; SQUARE OF 0=0


DCD 0X00000001; SQUARE OF 1=1
DCD 0X00000004; SQUARE OF 2=4
DCD 0X00000009; SQUARE OF 3=9
DCD 0X00000010; SQUARE OF 4=16
DCD 0X00000019; SQUARE OF 5=25
DCD 0X00000024; SQUARE OF 6=36
DCD 0X00000031; SQUARE OF 7=49
DCD 0X00000040; SQUARE OF 8=64
DCD 0X00000051; SQUARE OF 9=81
DCD 0X00000064; SQUARE OF 10=100

END ; Mark end of file

Write a program to find the largest/smallest number in an array of


32 numbers .

;/* PROGRAM TO FIND SMALLEST NUMBER IN AN ARRAY & STORE IN INTERNAL


RAM */
;/* ARRAY OF 7 NUMBERS 0X44444444 ,
0X22222222,0X11111111,0X22222222,0XAAAAAAAA */
;/* 0X88888888 ,0X99999999
*/
;/* RESULT CAN BE VIEWED IN LOCATION 0X40000000 & ALSO IN R2
*/

AREA SMALLEST , CODE, READONLY

ENTRY ;Mark first instruction to execute

START
MOV R5,#6 ; INTIALISE COUNTER TO 6(i.e. N=7)
LDR R1,=VALUE1 ; LOADS THE ADDRESS OF FIRST VALUE
LDR R2,[R1],#4 ; WORD ALIGN T0 ARRAY ELEMENT
LOOP
LDR R4,[R1],#4 ; WORD ALIGN T0 ARRAY ELEMENT
CMP R2,R4 ; COMPARE NUMBERS
BLS LOOP1 ; IF THE FIRST NUMBER IS < THEN GOTO
LOOP1
MOV R2,R4 ; IF THE FIRST NUMBER IS > THEN MOV
CONTENT R4 TO R2
LOOP1
SUBS R5,R5,#1 ; DECREMENT COUNTER
CMP R5,#0 ; COMPARE COUNTER TO 0
BNE LOOP ; LOOP BACK TILL ARRAY ENDS

LDR R4,=RESULT ; LOADS THE ADDRESS OF RESULT


STR R2,[R4] ; STORES THE RESULT IN R1

NOP
NOP
NOP

; ARRAY OF 32 BIT NUMBERS(N=7)

VALUE1
DCD 0X44444444 ;
DCD 0X22222222 ;
DCD 0X11111111 ;
DCD 0X22222222 ;
DCD 0XAAAAAAAA ;
DCD 0X88888888 ;
DCD 0X99999999 ;

AREA DATA2,DATA,READWRITE ; TO STORE RESULT IN GIVEN


ADDRESS
RESULT DCD 0X0

END ; Mark end of file

Write a program to arrange a series of 32 bit numbers in


ascending/descending order.

;/* PROGRAM TO sort in ascending order


*/
;/* ARRAY OF 4 NUMBERS 0X44444444 ,0X11111111,0X33333333,0X22222222
*/
;/* SET A BREAKPOINT AT START1 LABLE & RUN THE PROGRAM
*/
;/* CHECK THE UNSORTED NUMBERS AT LOCATION 0X40000000 NEXT
*/
;/* RESULT CAN BE VIEWED AT LOCATION 0X40000000
*/
*/

AREA ASCENDING , CODE, READONLY

ENTRY ;Mark first instruction to execute

START

MOV R8,#4 ; INTIALISE COUNTER TO 4(i.e.


N=4)
LDR R2,=CVALUE ; ADDRESS OF CODE REGION
LDR R3,=DVALUE ; ADDRESS OF DATA REGION

LOOP0
LDR R1,[R2],#4 ; LOADING VALUES FROM
CODE REGION
STR R1,[R3],#4 ; STORING VALUES TO DATA
REGION

SUBS R8,R8,#1 ; DECREMENT COUNTER


CMP R8,#0 ; COMPARE COUNTER TO 0
BNE LOOP0 ; LOOP BACK TILL ARRAY
ENDS

START1 MOV R5,#3 ; INTIALISE COUNTER TO 3(i.e.


N=4)
MOV R7,#0 ; FLAG TO DENOTE EXCHANGE
HAS OCCURED
LDR R1,=DVALUE ; LOADS THE ADDRESS OF
FIRST VALUE

LOOP LDR R2,[R1],#4 ; WORD ALIGN T0 ARRAY ELEMENT


LDR R3,[R1] ; LOAD SECOND NUMBER
CMP R2,R3 ; COMPARE NUMBERS
BLT LOOP2 ; IF THE FIRST NUMBER IS <
THEN GOTO LOOP2
STR R2,[R1],#-4 ; INTERCHANGE NUMBER R2 &
R3
STR R3,[R1] ; INTERCHANGE NUMBER R2 &
R3
MOV R7,#1 ; FLAG DENOTING EXCHANGE
HAS TAKEN PLACE
ADD R1,#4 ; RESTORE THE PTR

LOOP2

SUBS R5,R5,#1 ; DECREMENT COUNTER


CMP R5,#0 ; COMPARE COUNTER TO 0
BNE LOOP ; LOOP BACK TILL ARRAY
ENDS
CMP R7,#0 ; COMPARING FLAG
BNE START1 ; IF FLAG IS NOT ZERO
THEN GO TO START1 LOOP

NOP
NOP
NOP

; ARRAY OF 32 BIT NUMBERS(N=4) IN CODE REGION

CVALUE
DCD 0X44444444 ;
DCD 0X11111111 ;
DCD 0X33333333 ;
DCD 0X22222222 ;

AREA DATA1,DATA,READWRITE ;
; ARRAY OF 32 BIT NUMBERS IN DATA REGION
DVALUE
DCD 0X00000000 ;

END ; Mark end of file

Descending order

;/* PROGRAM TO sort in Descending order


*/
;/* ARRAY OF 4 NUMBERS 0X44444444 ,0X11111111,0X33333333,0X22222222
*/
;/* SET A BREAKPOINT AT START1 LABLE & RUN THE PROGRAM
*/
;/* CHECK THE UNSORTED NUMBERS AT LOCATION 0X40000000 NEXT
*/
;/* RESULT CAN BE VIEWED AT LOCATION 0X40000000
*/
*/

AREA DESCENDING , CODE, READONLY

ENTRY ;Mark first instruction to execute

START

MOV R8,#4 ; INTIALISE COUNTER TO 4(i.e.


N=4)
LDR R2,=CVALUE ; ADDRESS OF CODE REGION
LDR R3,=DVALUE ; ADDRESS OF DATA REGION

LOOP0
LDR R1,[R2],#4 ; LOADING VALUES FROM
CODE REGION
STR R1,[R3],#4 ; STORING VALUES TO DATA
REGION

SUBS R8,R8,#1 ; DECREMENT COUNTER


CMP R8,#0 ; COMPARE COUNTER TO 0
BNE LOOP0 ; LOOP BACK TILL ARRAY
ENDS

START1 MOV R5,#3 ; INTIALISE COUNTER TO 3(i.e.


N=4)
MOV R7,#0 ; FLAG TO DENOTE EXCHANGE
HAS OCCURED
LDR R1,=DVALUE ; LOADS THE ADDRESS OF
FIRST VALUE

LOOP LDR R2,[R1],#4 ; WORD ALIGN T0 ARRAY ELEMENT


LDR R3,[R1] ; LOAD SECOND NUMBER
CMP R2,R3 ; COMPARE NUMBERS
BGT LOOP2 ; IF THE FIRST NUMBER IS >
THEN GOTO LOOP2
STR R2,[R1],#-4 ; INTERCHANGE NUMBER R2 &
R3
STR R3,[R1] ; INTERCHANGE NUMBER R2 &
R3
MOV R7,#1 ; FLAG DENOTING EXCHANGE
HAS TAKEN PLACE
ADD R1,#4 ; RESTORE THE PTR
LOOP2
SUBS R5,R5,#1 ; DECREMENT COUNTER
CMP R5,#0 ; COMPARE COUNTER TO 0
BNE LOOP ; LOOP BACK TILL ARRAY
ENDS
CMP R7,#0 ; COMPARING FLAG
BNE START1 ; IF FLAG IS NOT ZERO
THEN GO TO START1 LOOP

NOP
NOP
NOP

; ARRAY OF 32 BIT NUMBERS(N=4) IN CODE REGION

CVALUE
DCD 0X44444444 ;
DCD 0X11111111 ;
DCD 0X33333333 ;
DCD 0X22222222 ;

AREA DATA1,DATA,READWRITE ;
; ARRAY OF 32 BIT NUMBERS IN DATA REGION
DVALUE
DCD 0X00000000 ;

END ; Mark end of file

Write a program to count the number of ones and zeros in two


consecutive memory locations.
;/* PROGRAM TO COUNT THE NUMBER OF ONES & ZEROS IN TWO CONSECUTIVE
MEMORY LOCATIONS */
;/* WE TOOK TWO NUMBERS i.e. 0X11111111,0XAA55AA55 (R0)
*/
;/* CHECK THE RESULT IN R2 FOR ONES & R3 FOR ZEROS
*/

AREA ONEZERO , CODE, READONLY

ENTRY ;Mark first instruction to execute


START

MOV R2,#0 ; COUNTER FOR ONES


MOV R3,#0 ; COUNTER FOR ZEROS
MOV R7,#1 ; COUNTER TO GET TWO WORDS
LDR R6,=VALUE ; LOADS THE ADDRESS OF VALUE

LOOP MOV R1,#32 ; 32 BITS COUNTER


LDR R0,[R6],#4 ; GET THE 32 BIT VALUE

LOOP0 MOVS R0,R0,ROR #1 ; RIGHT SHIFT TO CHECK CARRY BIT


(1's/0's)
BHI ONES ; IF CARRY BIT IS 1 GOTO ONES
BRANCH OTHERWISE NEXT

ZEROS ADD R3,R3,#1 ; IF CARRY BIT IS 0 THEN INCREMENT


THE COUNTER BY 1(R3)
B LOOP1 ; BRANCH TO LOOP1

ONES ADD R2,R2,#1 ; IF CARRY BIT IS 1 THEN INCREMENT THE


COUNTER BY 1(R2)

LOOP1 SUBS R1,R1,#1 ; COUNTER VALUE DECREMENTED


BY 1
BNE LOOP0 ; IF NOT EQUAL GOTO TO LOOP0
CHECKS 32BIT

SUBS R7,R7,#1 ; COUNTER VALUE DECREMENTED


BY 1
CMP R7,#0 ; COMPARE COUNTER R7 TO 0
BNE LOOP ; IF NOT EQUAL GOTO TO LOOP

NOP
NOP
NOP

VALUE DCD 0X11111111,0XAA55AA55; TWO VALUES IN AN ARRAY


END ; Mark end of file

You might also like