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

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

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