CSc 3210
Computer Organization and Programming
Fall 1999
Programming Assignment #1 (Due: 29 September 1999, Wednesday)
Assignment Objectives:
Problem Description:
Write an assembler program that will count the number of negative, zero and positive elements in an array of integers. The array of integers is internally defined in the data segment of your program as follows:
NUMBERS DB 10, -24, 36, 0, 45, -11, 0, -20 DB 11, 24, 26, -57, -20The array of numbers may be big enough that it may not fit in one line. Your program should work for any array 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 negatives = xxxx | | Number of zeros = xxxx | | Number of positives = xxxx | _________________________________________________________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 array 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 count tlink /v count
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