##### Exercise Problems for Learning Technology

PROBLEMS FOR 8085 ASSEMBLY LANGUAGE PROGRAMMING

1. Write a program, which loads registers, A, B, C and D with an identical constant [e.g.\$C0]. Try to optimize the program in such a way that the smallest number of program bytes is used. Test the program in single-step mode. After each step test, the register (s) of interest.

2. Assume that 3 bytes of data are stored at consecutive memory addresses of the data-memory starting at Y. Write a program which loads register C with (Y), i.e. with data contained at memory address Y, D with (Y+1), E with (Y+2) and A with (Y+1).
(i)Use register indirect addressing, and
(ii)Use direct addressing mode (LDA instruction), and Compare (i) and (ii) in terms of memory requirement.

3. Test the above 3 programs at the end of each single step. Choose Y within an address of RAM available as per result of the memory map experiment (v).

4. Assume that 2 bytes of data are stored at the consecutive addresses of data-memory starting at address Z. Use indirect addressing i.e. addresses Z', Z'' and Z''' specified by 3 register pairs DE and BC and HL. Write a program which moves the data from addresses Z and Z+1 to addresses Z' and Z'+1, then to addresses Z" and Z"+1,and then to address Z''' and Z'''+1. Test the program by executing it using GO command, and then by checking at the data-memory addresses, Z', Z'+1 Z'', Z''+1, Z''' and Z'''+1.

5. Assume that 1 byte of data is stored at a data-memory address Q. Write a program which tests bit 3 of (Q)[i.e. 4th bit from lsb], write ÿ into a memory address Q+5, if bit 3 = '0', and write \$00 at the same address in case bit 5 = '1'. Test the program, during execution itself in run-mode.

6. Write a program which tests if any bit is '0' in a data byte specified at an address R. If it is so, \$00 would be stored at address R+1 and if not so then \$FF should be stored at the same address. We test the program in run-mode.

7. Write a program, which test if the all-odd bits are '1' in a data byte at a data-memory location S. If it is so store \$01 at S+1, else stores \$00 at the same location.

8. Sixteen bytes of data are specified at consecutive data-memory locations starting at Z. Write a program which increments the value of all sixteen bytes by \$01.

9. Two data-bytes are stored at addresses Y and Y+1. Interchange the data bytes at these two addresses using (i) indirect addressing and (i) direct addressing. Execute the two programs and get the identical results. Also find the difference in memory space used by these two programs.

10. Eight bytes (unsigned binary numbers) with upper nibble zero in each byte are stored at consecutive data-memory address starting Q. Compute the sum of the eight bytes and store it at an address Z. Use indirect addressing.

11. Two unsigned binary numbers are stored at consecutive data memory addresses X, X+1. Write a program for computing (X+1) - (X) by using only the ADD instruction. The magnitude of the result should be stored at register C and the sign at D, (\$00 if positive and \$01 if negative) D using the 2's complement concept.

12. A double precision number (i.e. a 16 bit unsigned number) is stored at Z and Z+1 (lower byte at X). Another double precision number is stored at Z' and Z'+1. Add the two numbers and store result at Z'' and Z''+1 and double this number and store the result at Z''' and Z'''+1.

13. A double precision number (i.e. a 16 bit unsigned number) is stored at Z and Z+1 (lower byte at X). Another double precision number is stored at Z' and Z'+1. Subtract the two numbers and store the result at ZIV and ZIV+1.

14. Two 2-digit BCD numbers, each less than 128 decimal, are stored at the two consecutive memory addresses, Q and Q+1. Write a program for computing the sum and storing the result at address Q+2 using a decimal adjust instruction.

15. Two 2-digit BCD numbers are stored at consecutive memory addresses, Q+3 and Q+4. Compute the difference of the two numbers and store the result at location Y. Use decimal subtraction with the aid of DAA and 1's complement.

16. (i) Two-digit BCD number is stored at memory address X. Convert the number into binary and store the result at an address Q.(ii) An 8-bit binary number is stored at data memory location Y. Convert it into decimal (BCD) and store the result of the address Q.

17. Write a program which decrements a counter (i.e. a binary number stored at register C) one by one and halts when the counter value is zero. Test the program in single-step. Again modify the program, which increments the contents of C up to decimal 100.

18. A counter can be defined as a register, a register pair or a memory address whose content gets incremented or decremented. Define such a counter as subroutine. Write a program for the generation of 2 different time-delays using the same subroutine. Implement this program by using following steps: (i) Set initial value for delay 1[=input parameter of subroutine], (ii) Call subroutine named count, (iii) Set initial value for delay-2, (iv) Call counter subroutine, (v) Jump to step( i). Set the counter to a small initial value and test the program in a single-step mode.

19. Assume crystal frequency = 6MHz. Implement a time-delay loop (counter) for the generation of a 50ms delay. Using monitor delay routine at an address \$0559 and described in section VIII.6.

20. Assume crystal frequency = 4MHz. Implement a time-delay loop (counter) for the generation of a 60s delay. Using monitor delay routine at an address \$0559 and described in section VIII.6. Test this program with the help of your wristwatch by inserting a RST0 instruction such that the program transfers (its control) to the monitor after execution of the time-delay in order to display of initial boot message after 60s.

21. A binary number less than decimal 25 is stored at memory address X. Multiply the number by 6 and store the result at X+1.

22. Now multiply by 10 using a formula: X. 10 = X. 2 + X. 23, and using a concept that a multiplication by 2 corresponds to a shift left by one bit.

23. Write a program for a decimal counter (00-99), which is programmable for the clock-frequency (e.g. frequency can be specified as 6MHz or 4MHz at memory address Q) and display the count in the data-field using a corresponding monitor subroutine.

24. Same as problem No. 23 but let the counter count from decimal 00 to a given decimal number (stored at a data-memory) where it gets reset and starts again.

25. S binary numbers are stored at consecutive data-memory addresses starting at Y, where S is defined at a memory address Z. Find the largest number and store the result at address Z'.

26. S binary numbers are stored at consecutive data memory addresses starting at Q. Rearrange the numbers in ascending order.

27. Write a program for moving a Data-block of 100 bytes. Assume starting address of source block at \$0000 and destination is from memory address \$2000.

28. N bytes start from address Q. These are to be moved to address Q+N+1. The addresses for Q and N are specified at address X.

29. Given two integer numbers stored at memory locations Q and Q+1. Write a program for displaying the greatest common factor (GCF).

30. With the given conditions of problem at serial number 22 above, write a program to divide a number by 10 (instead of multiply). Assume that the number is in multiple of 10,and is less than 251.

31. A binary number is stored at data-memory location Q+5. Compute the number of its logical 1's and store the result at Q+6.

32. In computer communication, data bits are often transmitted in ASCII (abbreviation for American Code for Information Interchange) format. This code consists of 128 symbols for numbers, letters and signs, out of which the hexadecimal characters have the representations as given in table VIII.6. Assume that a hex-decimal character is stored in its ASCII code at address Z. Store the corresponding character at another address at Z'.

33. A code word is stored at data-memory location X. Write a program for testing whether the code word belongs to the ASCII code for decimal 0. Set address to \$FF if YES and \$00 if NO. [Refer table for ASCII code.]

Note: These problems are solely for downloading by a student for own person learning. These problems are author and publisher's copy-right. Any use in a book or published material or printed tutorial will warrant action under the Copyright act by the author and his book publishers from where these has been taken. Students are advised to solve all the problems for best preparation of €85 programming. Students are also free to ask any difficulty through this website 'query' link. - Author