CSc 3210
Computer Organization and Programming
Fall Quarter 1998
Programming Assignment #1 (Due: 28 September 1998, Monday)
Assignment Objectives:
Problem Description:
Write an assembler program that will compute the number of characters and words in a sentence stored in a string which is internally defined in the data segment of your program as follows:
SENTENCE DB 'I hope to finish this assignment in time so that I do ' DB 'not get a late penalty for this assignment.'You may assume that the sentence always ends with a period. The sentence may be big enough that it may not fit in one line as shown in the example. Your program should work for any sentence that is defined in the data segment of your program. The output of the program should look like the following (centered on the screen):
_________________________________________________________ | Name: Raj Sunderraman | | This program executed on September 10, 1998 at 5:10 PM | | Number of characters = xxxx | | Number of words = xxx | _________________________________________________________The output should be enclosed in a nice rectangle which can be created by using the extended ASCII characters on page 6-31 of the course notes. The rectangle shown above is NOT how it should appear in your output. The first line of the output should contain your name. The second line of the output should contain the date and time of execution of the program in the format indicated. You would have to obtain the system date and time to accomplish this. The remaining lines of the output should appear exactly as shown (except for the answers, which would be different depending on the time you ran your program and the sentence you include in the data segment). The output of your program should match, in every detail, the format illustrated above. Points will be deducted for any variation. The program should wait for user to press any key before terminating.
Submission Instructions: Electronically submit count.asm and count.exe by the deadline and submit a hard copy printout of the program listing of count.asm.
Hints:
tasm /zi /l sum tlink /v sum
MOV AH,2CH ; get system time INT 21HAfter the interrupt, CH contains the hour (00 - 23), CL contains minutes (00 - 59) and DH contains seconds (00 - 59).
MOV AH,2AH ; get system date INT 21HAfter the interrupt, DH contains the month (01 - 12), DL contains day (01 - 31) and CX contains year (1980 - 2099).
DIV TENwould divide AX by 10 (assuming TEN has been declared as a byte containing 10). After the instruction has executed, AL will contain the quotient and AH will contain the remainder. Notice that the instruction does not mention a register, since division is always done in the AX register. Warning: Instructions such as
DIV 10are rejected by the assembler.
MSG DB 'Hello!','$' ; message string to be displayed ; notice dollar symbol at end. ... ... MOV AH,09H ; request display LEA DX,MSG ; load address of message INT 21H ; DOS interrupt
MOV AX,0600H ; AH 06 (scroll), AL 00 (full screen) MOV BH,30 ; Attribute: color setting MOV CX,0000 ; upper left row:column MOV DX,184FH ; lower right row=24,column=79 INT 10H ; interrupt call to BIOS
MOV DL,10 ; column 10 MOV DH,5 ; row 5 MOV BH,0 ; page 0 MOV AH,02H ; request set cursor INT 10H ; interrupt call to BIOS
MOV AH,10H INT 16H