Problem Description: Write an assembly program that reads a line of input from t
ID: 3731095 • Letter: P
Question
Problem Description:
Write an assembly program that reads a line of input from the user and counts the total number of characters, and the number of spaces (ASCII character 32). Prompt the user for the line of input and label the outputs.
It can be safely assumed that the line of input from the user will contain at most 255 characters. Note that the system call that reads the string includes the newline character in the returned string. That should be included as one of the characters to count.
Submit the Following File(s):
WordCount.asm
Required Input:
A line of input with at most 255 characters (including the newline). The input may contain some space characters.
Required Output:
Your output should look something like the following example.
Explanation / Answer
Please find the code below with detailed inline comments.
;***************************************************
;
; Counting number of spaces and characters in string in 8086 ALP
;****************************************************
;macro for printing a string
print macro m
mov ah,09h
mov dx,offset m
int 21h
endm
.model small
;****** Data Segment ******
.data
empty db 10,13, " $"
str1 db 25,?,25 dup('$')
mstring db 10,13, "Enter a String: $"
mscount db 10,13, "Number of spaces: $"
mlength db 10,13, "Number of characters: $"
scount db ?
;********** Code Segment ************
.code
start:
mov ax,@data
mov ds,ax
print mstring
call accept_string
mov si,offset str1+2 ;position si to start of the string
mov cl,str1+1 ;copy length in cl
mov dh,00 ;counter to store number of spaces
cmpagain1: mov al,[si] ;copy content at memory location "si" in "al"
cmp al,' ' ;compare "al" with space
jne below ;if not equal jump to label "below"
inc dh
below: inc si ;move to next character
dec cl ;decrement string length counter
jnz cmpagain1 ;if not zero check again
mov scount,dh ;save the count in memory location "scount"
mov bl,scount ;copy count to "bl" for printing
print mscount
call display1
exit:
mov ah,4ch ;exit the program
int 21h
;accept procedure
accept proc near
mov ah,01
int 21h
ret
accept endp
display1 proc near
mov al,bl
mov bl,al
and al,0f0h
mov cl,04
rol al,cl
cmp al,09
jbe number
add al,07
number: add al,30h
mov dl,al
mov ah,02
int 21h
mov al,bl
and al,00fh
cmp al,09
jbe number2
add al,07
number2: add al,30h
mov dl,al
mov ah,02
int 21h
ret
display1 endp
accept_string proc near
mov ah,0ah ;accept string from user function
mov dx,offset str1 ; store the string in memory pointed by "DX"
int 21h
ret
accept_string endp
end start
end
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.