Draw a detailed flowchart and write an ARM assembly program to determine whether
ID: 3725416 • Letter: D
Question
Draw a detailed flowchart and write an ARM assembly program to determine whether a string of printable ASCII letters (from a to z or from A to Z, case insensitive) stored in memory is a palindrome (i.e., the letters in the string are the same from left to right as from right to left, case insensitive) or not. If palindrome, you should store 1 in r0. if not, you store 2 in r0 Your code should be highly optimized. Use as few instructions as possible (as little as 21 assembly instructions only)!! gnore all characters that are not letters. You should also treat capital and small letters the same, i.e., case insensitive. For example, "madam", "deleveled", "Noon", "He lived as a devil, eh?", and "Was it a car or a cat I saw?" are palindrome strings. However, "madam, I am Adam." is not a palindrome string. A string can have even or odd number of characters and must end with character 0x00 (i.e., the ASCII code of the null character) Define in your assembly program the string as follow: STRING DCB "He lived as a devil, eh?" string EoS end of string DCB 0x00Explanation / Answer
Program : ( with explanation)
mov bl,50 ; Starting Address of the memory
mov dl,0 ; number of characters make up the string
loop:
in 00 ;read the input from keyboard
cmp al, 2E ;checking to see if input is a fullstop
jz palindrome ;loop to see if input is a palindrome
mov [bl], al ;save input in the memory address
inc bl ;goto the next memory addr in bl
inc dl ;increment dl by 1 to length of the string
push al
jmp loop
palindrome:
cmp dl,0 ;check if it has goes through whole string
jz is_palin ;loop it has then string is a palindrome
mov bl, 50 ;bring back first input character
mov dl,[bl]
pop cl ;put last input character
cmp cl,dl ;check if the two values are the same
jnz not_palindrome ;if they are not same,then loop to not_palindrome
inc bl ;go to next input address
dec dl ;take away 1 from length of the string
jmp palindrome ;loop back to the start of the palindrome
not_palindrome:
mov dl,c0
mov cl,6E
mov [dl],cl ;print the character "n" to the vdu
jmp done ; do not execute code at is_palin
is_palin:
mov dl,c0
mov cl,79
mov [dl],cl ;print the character 'y' to the vdu
end
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.