Class Book Practical Knowledge and Exam
Class Book Practical Knowledge and Exam
2.0 Introduction 14
2.1 Objectives 14
2.2 Assemblers 15
2.2.1 Turbo Assembler (TASM) 15
2.2.2 MASM 16
2.2.3 Emu 8086 18
2.2.4 The DEBUG Program 20
2.3 Assembly Programming File 22
2.4 Session-wise List of Programs 23
2.5 What Next? 28
2.6 Summary 28
2.0 INTRODUCTION
This guide is an attempt to familiarize you with some of the important Assemblers
available in the Windows environment. You may use any of these tools available as per
your study center. This practical session also contains several sample programs that you
may need to run/debug at your study center. Some minor mistakes have been created
purposely. In order to run the program, you must correct those errors. You may also find
that assembler directives used by these programs may differ. You need to look into such
details. You must also attempt the unresolved problems in order to gain the maximum
from this course. Remember, assembly and C Programming helps you greatly in System
Software implementation and giving understanding of the machine. We hope you will
enjoy these practicals.
2.1 OBJECTIVES
14
Assembly Language
2.2 ASSEMBLERS Programming
Assembler is the Program that supports an environment for translating assembly language
programs to Machine executable files, that is, an assembly program containing statements
like MOV AL, 10h and directives like MODEL SMALL, which are meaningless to the
microprocessor and so are converted to an equivalent machine program. Thus, the
assembler program is a translator that does almost a similar type of work as a compiler.
But, how is a compiler different than an assembler? One of the major differences to note
here is that each high level statement of a C program on compilation will produce many
machine statements; whereas an assembly instruction is generally translated to single
instruction. We would like to reiterate here that assembly and machine languages is
machine dependent and programs written in assembly for one microprocessor may not
run on other microprocessors.
Step Result
Assemble the source program using · Creates an object file with extension .obj.
an assembler · Creates an optional listing file (.lst) and a
file for cross reference
Link the Object file or files · Creates an executable (.exe) file
· Creates optional map file (.map) and library
file (.lib)
Convert the executable files to com · This is an optional step
file which are fast
There are many assemblers that support the above tasks in different ways; even the
options available with them are quite different. Let us discuss the basic options available
with the commonly used assemblers/interfaces for running assembly programs. You may
use any of the following depending on the availability of tools at your center.
Assembling
Turbo Assembler allows a user to assemble multiple files. Each file may be assigned its
own options in a single command line. TASM allows you to use * and ? wild cards, as
they exist in DOS. For example, to assemble all the programs having file names like
progam1.asm, program2.asm, program3.asm, you may just give the command:
TASM program? (.asm extension is the default extension).
The turbo assembler allows you to assemble programs in groups. Each group is separated
by a + sign. Two of the most common options for turbo assembler are:
15
Lab Course /L Generates the list file (.lst)
/Z displays source line having errors.
Converting Object Files to .COM Programs : TLINK command allows you to convert
an object program directly to .COM format:
TLINK /T object_filename, com_filename, con
Debugging Options : You can use Turbo Debugger by using the /ZI command line
option on the assembler.
2.2.2 MASM
There are many versions available with the Microsoft MASM. Let us discuss the two
latest versions of it.
MASM 6.1
This is one of the versions of Assemblers. It accepts commands of the older versions also.
The command that can be used for assembling the program is ML command. This
command has the following format:
Please note that in the above command the terms enclosed within [ ] are optional.
This program will create .com file after assembling and linking the two files.
MASM 5.1
This is an old version of Microsoft assembler. It requires separate steps for assembling,
linking, and converting into .com file. The command line format for this assembler is:
MASM [options] source.asm [,objectfilename.obj] [,listfilename.lst] [,crossreffilename]
You need not specify the .asm extension in the above format, as it is taken by default,
similarly, you need not assign .obj and .lst extensions which are assigned by default.
Each file may have its own path and filename, which may be different from the source
file path.
The following command creates object and cross-reference files with the same name with
the suitable extension.
MASM filename,,,
For getting further explanation on these options using the help of MASM, please type:
MASM /H.
Linking : The command line for linking a MASM 5.1 program is:
LINK object_filename, executable_filename [,map_filename] [,library_filename]
Most of the option and file names as above are the same as that of TASM.
You can also link more than one object files to one executable file by using the command
like:
LINK prosgram1 + program2 + program3
17
Lab Course Converting MASM 5.1 Object Files to .COM Programs. The EXE2BIN program
available in DOS converts .EXE modules generated by MASM into .COM modules.
Assembler Tables
The important tables of assemblers that are available in the .lst listings are:
Segments and Groups Table: The following details are contained in this table.
This is an emulator Programming that can be used for executing/testing/ emulating 8086
programs. The Program was available at website http://www.emu8086.com. This
program is priced. The following are some of the salient points of this package:
· It is helpful for those who just begin to study assembly language. It compiles the
source code and executes it on emulator step by step. This is a very useful feature.
18 You must see the changed values with each step. The emulator has an easy Visual
interface, which allows watching registers, flags and memory contents during the Assembly Language
Programming
program execution. You can also watch stack.
· Arithmetic & Logical Unit (ALU) shows the last operation executed by ALU,
especially arithmetic operations like addition. This will enhance your understanding.
· Please note, as the 8086 machine code is fully compatible with all the next
generations of Intel's microprocessors, including Pentium II and Pentium 4. This
8086 code is very portable, since it runs both on old and on the modern computer
systems. Another advantage of 8086 instruction set is that it is smaller, and thus
easier to learn.
1. Start Emu8086 by selecting the ICON from the desktop, or by running Emu8086.exe.
The following window appears:
2. For referring to already stored samples you can select sample button.
3. You can use your own programs also stored in suitable .asm files.
4. You can compile or emulate the Program.
5. Click Single Step button and watch how the code is being executed.
Using Emulator
If you want to load your code into the emulator to watch the effect of step by step
execution on registers, flags, stach etc you must select the emulate option this is a great
learning tool; just click "Emulate" button . On selecting emulate button you will see
the following window.
19
Lab Course
You can press the buttons at the bottom to watch other windows also along with your
program. Please notice even memory offset values as shown and effect can be seen over
them also.
You can use single step button to execute next instruction. Watch the effect of this single
step on Instruction Pointer (IP), and other registers.
If you double click on register text-boxes it will open "Extended Viewer" window with
value of that register converted to all possible forms. You can change the value of the
register directly in this window.
Double click on memory list item; it will open "Extended Viewer" with WORD value
loaded from memory at selected location. Lower byte is at lower address that is: LOW
BYTE is loaded from selected position and HIGH BYTE from next memory address.
You can change the value of the memory word directly in the "Extended Viewer"
window.
You can change the values of registers on runtime by typing over the existing values
shown.
Flags button allows viewing and showing the flags set by the last ALU operations. The
ALU button shows the ALU temporary register. The stack button shows the current stack
values.
The DOS DEBUG program is a useful tool for writing and debugging assembly
programs. This also allows for examining the contents of a file or memory. DEBUG.EXE
is available in DOS in a directory named \DOS or in Windows 95/98 by selecting the
20
MS-DOS prompt from Start Menu. You may run DEBUG in a window. You can also use Assembly Language
Programming
cut and paste through clipboard.
DEBUG starts and a prompt, a hyphen (-), appears on the screen. DEBUG is now ready
to accept your commands.
Some Tips
· Initially CS, DS, ES, and SS registers have the address of the 256-byte (100H). This
initial size is referred to Program Segment Prefix (PSP). The actual user program
work area starts after this.
· The flags of Debug appear as:
· Memory address is assigned using segment:offset pair. Please note that the data
segment for .EXE programs begins at DS:0, whereas that for .COM program begins
DS: 100 (same as instruction)
· DEBUG assumes all numbers entered to be hexadecimal, so you need not type
trailing H.
· F1 key duplicates the previous command one character at a time.
· F3 duplicates the entire previous command.
· DEBUG commands are not case sensitive.
You must maintain a file for keeping each Assembly program. The file should contain the
following:
Problem
Algorithm Steps
1. Start
2. Store ‘Hello IGNOU!’ in variable named msg
3. Load address of the variable msg to DX register
4. Print using DOS interrupt using function 9 (Recollect function 9 requires 9 to be
loaded in register AH followed by a call to Interrupt 21h. )
5. Exit to operating system. Once the message has been printed, it successfully
terminates the program by returning to operating system. (Remember this is achieved
by moving “4C” to AH register and calling Interrupt 21h)
Program
The total number of sessions allotted for Circuit Design and Assembly Prgramming are
10. Out of these, the first two sessions have already been covered in Section 2: Circuit
Design. Thus, in this section we will have only 8 sessions; numbered 3 to 10.
1. Write a program to add two numbers present in two consecutive memory locations
and store the result in next memory location.
23
Lab Course Memory
Number1
Number2
Result
4. Write a program to exchange two memory variables using MOV and XCHG
instruction. Can you do it with just XCHG?
5. Write a program to find the sum of two BCD numbers stored in memory.
6. Write a program, which will read two decimal numbers, then multiply them
together, and finally print out the result (in decimal).
8. Write a program, which will read in two decimal inputs and print out their sum, in
decimal.
9. Write a program, which will read in two decimal inputs and print out the smaller of
the two, in decimal.
10. Write a program to calculate the average of three given numbers stored in memory.
11. Write a program in 8086 assembly language to find the volume of sphere using
following formula: V = 4/3p r3
24
4. Write a program, which will read in decimal inputs repeatedly until a zero value is Assembly Language
Programming
read; at this point, it should print out the sum of the numbers read in so far.
5. Develop and execute an assembly language program to find the LCM of two 16-bit
unsigned integers.
6. Develop and execute an assembly language program to find the HCF of two
unsigned 16-bit numbers.
8. Develop and execute a program to sort a given set of 8-bit unsigned integers into
ascending order.
9. Develop and execute an assembly language program to sort a given set of 16-bit
unsigned integers into descending order.
10. Write a Program which adds the sales tax in the Price list of items and replace the
Price list with calculated values.
14. Write a Program, which takes the input of 4-digit number, and display the sum of
square of digits as given below.
Example: Input = 4721
42+72+22+12 = 16+49+4+1
Result = 70. (Display)
15. Using the method of "add-and-shift" loop, in which you use the binary digits of one
number to control additions of a shifted version of the other number into a running
total; this is essentially the same algorithm you use when multiplying numbers by
hand in decimal.
25
Lab Course 16. Write a Program, which should adds two 5-byte numbers (numbers are stored in
array- NUM1 & NUM2), and stores the sum in another array named RESULT.
17. Write a program which should convert 4 digits BCD number into its binary
equivalent.
18. Write a program to conduct a binary search on a given sorted array of 16-bit,
unsigned integers, and a given 16-bit unsigned key.
19. Write a program to convert a string in upper case to lower case or lower case to
upper case.
20. Develop cryptographic algorithm where each letter is replaced by a different letter.
Given the mapping of characters to encoded characters, it is simple to translate
from encoded to decoded data. Write a Program, which encodes the string into the
ASCII value but not corresponding ASCII value; shift 5 place left in ASCII and
write the encoding string.
21. Similarly write another Program to Decoding with respect to above problem.
1. Write a program, which takes two inputs as strings and display the Concatenated
string.
2. Write a program, which converts string lower case characters to upper case
characters and upper case characters to lower case characters.
4. Write a program, which converts string to its ASCII value and store in array.
5. Write a program to find if two strings are equal length: and if the strings are found
to be of equivalent length then are they the same, if not the same then which string
is lexicographically greater.
6. Write a program to determine a given string is a palindrome. If 'Yes' output the
message “The given string is a palindrome”. If 'No' output the message “No, it is
not a palindrome”.
7. Write a program to search for a character in a given string and calculate the number
of occurrences of the character in the given string.
1. Write a program that will compute a grade for this class based on grades input into
it. Write two different procedures one for computing total marks based of different
examinations held and another for computing overall grade of student
26
Procedures-I: The total marks will be computed as follows: Assembly Language
Programming
20% Midterm Exam
20% Final Project
30% Quizzes
30% Projects
Procedure-II: The letter grade will be computed from the overall grade as
follows:
93+: A
90+: A-
87+: B+
83+: B
80+: B-
77+: C+
73+: C
70+: C-
65+: D
0+: F
2. Write a Drive detection program. The program should determines whether the drives.
a. Exist
b. Are removable or fixed
c. Are local, remote, or shared
d. Are a floppy, hard, RAM or CD-ROM drive
4. Write a program to display the current system time using DOS INT 21H, function
4CH.
5. Write a procedure, which takes one character from console at 10-second intervals,
and stores each character in one array of characters.
6. Write a program, which will generate an interrupt when there is a division by zero.
7. Write a program to implement character array, which can store only the character
values in the array and using this array try to reverse a string.
1. Write the corresponding 8086 assembly language code of the following program
given in C++ language.
#include <iostream.h>
int n, sum, k;
void main()
27
Lab Course {
cout << "Enter number: ";
cin >> n;
sum = 0;
k = 1;
while (K <= sum)
{
sum += k;
++k;
}
cout << "The sum = ";
cout << sum;
cout << '\n';
}
2. Write a program in which it call a routine or function made in c of name fact. The
fact functional calculates the factorial of a given number, call that function in
assembly program and find the factorial of the given number. Store the result in
memory.
3. Write a program, which convert ASCII number into its equivalent binary in
assembly code. Call this program in C and display the result on user screen.
You must use the skills acquired through the practical in order to develop efficient
functions/subroutines, device drivers, interrupt servicing programs etc. Thus, you can
further go on to do a lot of important things using Assembly Programming Language and
extracting some useful efficient work using Microcomputers. You must refer to further
readings as given in MCS 012 Block 4 in order to do so.
2.6 SUMMARY
28