Instructions
Objective
Write an ARM assignment program to verify a UPC code to check the check digit in ARM assembly language using Keil assignment solution.
Requirements and Specifications
Most goods sold in U.S. and Canadian stores are marked with a Universal Product Code (UPC). The meanings of the digits underneath the bar code (from left to right) are: First digit: type of item, The first group of five digits: manufacturer, The second group of five digits: product, and Final digit: check digit, used to help identify an error in the preceding digits. To compute the check digit, a) Add the first, third, fifth, seventh, ninth, and eleventh digits b) Add the second, fourth, sixth, eighth, and tenth digits c) Multiply the first sum by 3 and add it to the second sum d) The check digit is the digit which, when added to the above sum, produces a sum that is multiple of 10 Example for UPC 0 13800 15073 8: First sum: 0 + 3 + 0 + 1 + 0 + 3 = 7 Second sum: 1 + 8 + 0 + 5 + 7 = 21 Multiplying the first sum by 3 and adding the second yields 42 The check digit is 8, as 42 + 8 = 50 (multiple of 10). To verify the check digit, you do the first 3 steps above from a) to c) and then add the sum to the check digit. Finally, you check if the result is multiple of 10 or not. Write an ARM assembly program to verify whether a string of 12 ASCII encoded digits stored in memory is a valid UPC or not. If valid, you should store 1 in r0, if not, you should store 2 in r0. Your code should be highly optimized. Use as few instructions as possible (as little as 19 assembly instructions only, NOT including any assembly directives or data definitions)!!. Define in your assembly program the 12 digits UPC string as follow: UPC DCB "013800150738" ;correct UPC string To test your program, you can use the following UPCs: UPC2 DCB "060383755577" ;correct UPC string UPC3 DCB "065633454712" ;correct UPC string You can also get more UPC codes from your kitchen items. For an incorrect UPC, you can change any digit in a correct UPC to generate an incorrect UPC.
Screenshots of output
Source Code
UPC_LEN EQU 12 ; length of UPC code
ASCII_0 EQU 0x30 ; ascii value for '0'
AREA question1, CODE
EXPORT __main
ALIGN
ENTRY
__main PROC
; load UPC string to test
LDR R1, =UPC ; load start address of upc to verify
MOV R0, #1 ; assume number is valid by default
; Calculate the sum of 3 times the odd positions plus
; even positions including the last digit (check digit)
ADD R2, R1, #UPC_LEN ; position of end of upc
MOV R3, #0 ; sum, start in zero
sumloop
LDRB R4, [R1], #1 ; load digit from upc string and increment position
SUB R4, R4, #ASCII_0 ; convert from ascii to decimal
ADD R4, R4, R4, LSL#1 ; multiply by 3 using a shift and a sum
ADD R3, R3, R4 ; add to sum
LDRB R4, [R1], #1 ; load next digit from upc string
SUB R4, R4, #ASCII_0 ; convert from ascii to decimal
ADD R3, R3, R4 ; add value to sum
CMP R1, R2 ; see if we reached the end of upc
BLT sumloop ; if not, repeat loop to add next values
; verify that the result is divisible by 10
; obtain the remainder of result by 10 using repeated subtractions
div10
SUBS R3, R3, #10 ; subtract 10 from value to emulate division
BEQ verified ; if zero, number is divisible by 10 and upc is valid
BGT div10 ; if >0, repeat loop to subtract again
MOV R0, #2 ; if we end here is not a valid upc (remainder is not zero)
verified
; At this point, R0 will be 1 for a valid UPC and 2 otherwise
B verified ; infinite loop to end program
ENDP
ALIGN
AREA TestData, DATA, READONLY
UPC DCB "013800150738" ;correct UPC string
UPC2 DCB "060383755577" ;correct UPC string
UPC3 DCB "065633454712" ;correct UPC string
UPC4 DCB "013400150738" ;incorrect UPC string
UPC5 DCB "060383758577" ;incorrect UPC string
UPC6 DCB "065633954719" ;incorrect UPC string
END
Related Samples
Explore our collection of free assembly language assignment samples. Gain insights into efficient coding techniques and intricate program structures. Access these resources to enhance your understanding and excel in assembly language programming effortlessly.
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language
Assembly Language