Question

Write a new subroutine in assembly to convert the upper-case letters to lower-case letter. Example of...

Write a new subroutine in assembly to convert the upper-case letters to lower-case letter. Example of lower case to upper is provided below:

Let’s look at a subroutine to capitalize all the lower-case letters in the string. We need to load each character, check to see if it is a letter, and if so, capitalize it.

Each character in the string is represented with its ASCII code. For example, ‘A’ is represented with a 65 (0x41), ‘B’ with 66 (0x42), and so on up to ‘Z’ which uses 90 (0x5a). The lower case letters start at ‘a’ (97, or 0x61) and end with ‘z’ (122, or 0x7a). We can convert a lower case letter to an upper case letter by subtracting 32.

__asm void my_strcpy(const char *src, char *dst){       
loop
        LDRB r2, [r0] ; Load byte into r2 from mem. pointed to by r0 (src pointer)
        ADDS r0, #1 ; Increment src pointer
        STRB r2, [r1] ; Store byte in r2 into memory pointed to by (dst pointer)
        ADDS r1, #1 ; Increment dst pointer
        CMP r2, #0 ; Was the byte 0?
        BNE loop ; If not, repeat the loop
        BX lr ; Else return from subroutine
}
        

__asm void my_capitalize(char *str){    
cap_loop
        LDRB r1, [r0] ; Load byte into r1 from memory pointed to by r0 (str pointer)
        CMP r1, #'a'-1 ; compare it with the character before 'a'
        BLS cap_skip ; If byte is lower or same, then skip this byte
        CMP r1, #'z' ; Compare it with the 'z' character
        BHI cap_skip ; If it is higher, then skip this byte
        SUBS r1,#32 ; Else subtract out difference to capitalize it
        STRB r1, [r0] ; Store the capitalized byte back in memory
cap_skip
        ADDS r0, r0, #1 ; Increment str pointer
        CMP r1, #0 ; Was the byte 0?
        BNE cap_loop ; If not, repeat the loop
        BX lr ; Else return from subroutine
}
        

/*----------------------------------------------------------------------------
 MAIN function
 *----------------------------------------------------------------------------*/

int main(void){
const char a[] = "Hello world!";
char b[20];
my_strcpy(a, b);
my_capitalize(b);
while (1)
;
}
0 0
Add a comment Improve this question Transcribed image text
Answer #1

.MODEL SMALL
.DATA

MSG DB 0DH,0AH, ' ENTER THE STRING :-----> : $'
MSG2 DB 0DH,0AH, ' YOUR STRING IS :-----> : $'
STR1 DB 255 DUP(?)
ONE DB ?
TWO DB ?
.CODE

BEGIN:
MOV AX,@DATA
MOV DS,AX

LEA DX,MSG
MOV AH,09H
INT 21H

LEA SI,STR1
MOV AH,01H

READ:
INT 21H
MOV BL,AL

CMP AL,0DH
JE DISPLAY

XOR AL,20H
MOV [SI],AL
INC SI

;CMP BL,0DH
JMP READ
  


DISPLAY:

MOV AL,'$'
MOV [SI],AL

LEA DX,MSG2
MOV AH,09H
INT 21H


LEA DX,STR1
MOV AH,09H
INT 21H

; MOV AH,4CH
; INT 21H
.EXIT

END BEGIN

Add a comment
Know the answer?
Add Answer to:
Write a new subroutine in assembly to convert the upper-case letters to lower-case letter. Example of...
Your Answer:

Post as a guest

Your Name:

What's your source?

Earn Coins

Coins can be redeemed for fabulous gifts.

Not the answer you're looking for? Ask your own homework help question. Our experts will answer your question WITHIN MINUTES for Free.
Similar Homework Help Questions
ADVERTISEMENT
Free Homework Help App
Download From Google Play
Scan Your Homework
to Get Instant Free Answers
Need Online Homework Help?
Ask a Question
Get Answers For Free
Most questions answered within 3 hours.
ADVERTISEMENT
ADVERTISEMENT