Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

In class Project & Homework Assignment. Create a menu for a program as shown bel

ID: 3602764 • Letter: I

Question

In class Project & Homework Assignment. Create a menu for a program as shown below.  (This will be done in class) Option 1 will request a string from the user. This string may contain any character on the keyboard, both upper and lowercase letters (for now the strings are limited to a length of 50 characters.

   Option 2 will convert all elements of the string to lower case.  

Option 3 will remove all nonletter elements.   

Option 4 will determine if the string is a palindrome.  

Option 5 will display the string to the screen.

Option 6 exits the program. If the user enters something other than 1 – 6 there should be an error displayed to the screen. We will develop the menu in class.  Your homework will be to complete the functionality of the program.

All the menu options dealing with strings require an offset to the input string to be passed to a procedure.  At the end of every string procedure, the original string will reflect the changes caused by a given option.

For example:     If the user input string is :    a#d A&B.    

After Option 2 is executed: The string will look like :  a#d a&b.   

After Option 3 is executed:  The string will look like : adab

There are no rules on the other that procedures are executed other than a string must be entered before any string modifications can take place. You must create your own procedures to copy a string, compare a string, convert a string to uppercase, clear a string.  Use of Irvine Library functions to copy a string or compare a string is specifically not allowed for this program. You may only use the following Irvine Library string operations:  ReadString and WriteString.  All other nonstring Irvine Library procedures are available for your use.  Do not use DumpRegs except for troubleshooting.

Menu 1. Enter a string

2. Convert the string to lower case

3. Remove all non-letter elements

4. Is it a palindrome?

5. Print the string

6. Quit

;// In class Homework 5

INCLUDE Irvine32.inc

maxStringLength = 51d

clearEAX TEXTEQU <mov eax, 0>
clearEBX TEXTEQU <mov ebx, 0>
clearECX TEXTEQU <mov ecx, 0>
clearEDX TEXTEQU <mov edx, 0>
clearESI TEXTEQU <mov esi, 0>
clearEDI TEXTEQU <mov edi, 0>

.data

UserOption BYTE 0h
theString BYTE maxStringLength DUP (0)
theStringLength BYTE ? ;// user entered string length NOT the max length

.code
main PROC

;//clear registers

clearEAX
clearEBX
clearECX
clearEDX
clearESI
clearEDi

startHere:
call DisplayMenu
call ReadHex
mov UserOption, al

;// Procedure selection process
;// setting up for future procedure calls.
mov edx, OFFSET theString
mov ecx, lengthof theString

opt1:
cmp UserOption, 1
jne Opt2
call clrscr
mov ecx, maxstringlength
call option1
mov theStringLength, al
jmp startHere

opt2:
cmp UserOption, 2
jne Opt3
movzx ecx, theStringLength
call option2
jmp startHere

opt3:
cmp UserOption, 3
jne Opt4
movzx ecx, theStringLength
call clrscr
call option3
jmp startHere

opt4:
cmp UserOption, 4
jne Opt4
movzx ecx, theStringLength
call option4
jmp startHere

opt5:
cmp UserOption, 5
jne Opt6
movzx ecx, theStringLength
call option5
jmp startHere

opt6:
cmp UserOption, 6
je quitit
call oops
jmp startHere


quitit:
exit
main ENDP

displayMenu PROC uses EDX
;Description: Displays menu
;Receives: Nothing
;Returns: Nothing
;

.data
Menuprompt1 BYTE 'MAIN MENU', 0Ah, 0Dh,
'=========', 0Ah, 0Dh,
'1. Enter a string', 0Ah, 0Dh,
'2. Convert the string to lower case', 0Ah, 0Dh,
'3. Remove all non-letter elements', 0Ah, 0Dh,
'4. Is the string a palindrome?', 0Ah, 0Dh,
'5. Print the string', 0Ah, 0Dh,
'6. Quit', 0Ah, 0Dh, 0h
.code
call clrscr
mov edx, Offset Menuprompt1
call WriteString
ret
displayMenu ENDP

option1 Proc uses ecx
;//description : get string from user
;//receives: offset of string in edx, maxlength in ecx
;//returns: user entered string Offset not changed
;//         length of string returned in eax
.data

userPrompt1 byte "enter your string --> ", 0

.code
push edx             ;//save offset of string to stack
mov edx, Offset userPrompt1
call writeString
pop edx              ;//restore offset of string
call ReadString      ;//get user input

ret
option1 ENDP

option2 Proc uses edx ecx edi
;//Description : Converts all Capital Letters to lowercase
;//Receives:     Offset of the string in edx
;//              string length in ecx
;//Returns:      Original string with all capital letters
;//              converted to lower case


loop2:
mov al, byte ptr [edx+edi] ;//grab element of string
cmp al, 41h
jb keepgoing
cmp al, 5Ah
ja keepgoing
add al, 20h
mov byte ptr [edx+edi], al
keepgoing:
inc edi
loop loop2

ret
option2 ENDP

option3 Proc

ret
option3 ENDP

option4 Proc

ret
option4 ENDP


option5 Proc

ret
option5 ENDP

oops Proc USES EDX
;Description: Prints error message
;Receives nothing
;returns nothing
.data
Caption BYTE "*** Error ***",0
OopsMsg BYTE "You have chosen an invalid option!", 0ah, 0dh, 0

.code
mov edx, Offset Caption
mov edx, offset OopsMsg
call msgBox
ret
Oops ENDP



END main

Explanation / Answer

#include //Always use meaningful names for types typedef unsigned char boolean; #define True 't' #define FALSE (!True) //this is a really neat trick for swapping values efficiently void swap(long* a,long *b) { *a=*a^*b;*b=*b^*a;*a=*a^*b; } //Here's a readability improvement #define until(condition) while(!(condition)) int main(int n, char*args[]){ double *d; int i; char input[5]; //should be long enough for most doubles. boolean sorted = FALSE; //In C, you need to specify the array size beforehand, so ask printf("Please enter the length of the array "); gets(input); //scan the input string and convert to a value sscanf(input,"%s",&input[0]); n=(long)atol(input); //allocate space, make sure you get the order of arguments right. d = calloc(sizeof(double),n); //Get and sort the array until (sorted) { for (i=0;i
Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote