mcsl-17 C and Assembly Language Programming Lab
mcsl-17 C and Assembly Language Programming Lab
1.0 INTRODUCTION
This is the lab course, wherein you will have the hands on experience. You have
studied the support course material (MCS-011 Problem solving and programming). In
this part, C programming under DOS, UNIX and WINDOWS environments are
provided illustratively. A list of programming problems is also provided at the end of
each session. Please go through the general guidelines and the program documentation
guidelines carefully.
1.1 OBJECTIVES
After completing this lab course you will be able to:
x develop the logic for a given problem ;
x write the algorithm;
x draw a flow chart;
x recognize and understand the syntax and construction of C code;
x gain experience of procedural language programming;
x know the steps involved in compiling, linking and debugging C code;
x understand using header files;
x make use of different data-structures like arrays, pointers, structures and files;
x understand how to access and use library functions;
x understand function declaration and definition;
x feel more confident about writing your own functions;
x be able to write some simple output on the screen as well as in the files;
x be able to write some complex programs;
x be able to apply all the concepts that have been covered in the theory course; and
x know the alternative ways of providing solution to a given problem.
x You may seek assistance in doing the lab exercises from the concerned lab
instructor. Since the assignments have credits, the lab instructor is obviously not
expected to tell you how to solve these, but you may ask questions concerning the
C language or a technical problem.
x For each program you should add comments (i.e. text between /* ... */ delimiters)
above each function in the code, including the main function. This should also
include a description of the function written, the purpose of the function, meaning
of the argument used in the function and the meaning of the return value (if any). 5
Lab Manual
These descriptions should be placed in the comment block immediately above the
relevant function source code.
x The comment block above the main function should describe the purpose of the
program. Proper comments are to be provide where and when necessary in the
programming.
x The program written for the problem given should conform to the ANSI standard
for the C language.
x The program should be interactive, general and properly documented with real
Input/ Output data.
x If two or more submissions from different students appear to be of the same origin
(i.e. are variants of essentially the same program), none of them will be counted.
You are strongly advised not to copy somebody else's work.
x As soon as you have finished a lab exercise, contact one of the lab instructor /
incharge in order to get the exercise evaluated and also get the signature from
him/her on the Observation book.
x The total no. of lab sessions (3 hours each) are 10 and the list of assignments is
provided session-wise. It is important to observe the deadline given for each
assignment.
x Small size
x Extensive use of function calls
x Structured language
x Low level (BitWise) programming readily available
x Pointer implementation - extensive use of pointers for memory, array, structures
and functions.
x It has high-level constructs.
x It can handle low-level activities.
x It produces efficient programs.
x It can be compiled on a variety of computers.
6
C Programming Lab
1.4 C PROGRAMMING USING BORLAND
COMPILER
C using Borland C/C++ Compiler
Some of you may be using the Borland C/C++ compiler during the lab sessions under
MS-DOS connecting through Windows. Whilst C++ is a different programming
language to C, it is in fact a superset of C i.e. almost everything that C provides, C++
provides too, and more besides. Therefore we can use Borland C++ to compile our C
programs.
Editing a Program
We can create a program by entering text that corresponds to C statements into a file.
Setting Directories
Before you proceed, make sure that the directory settings for Borland C/C++ are
correct. This can be done as follows:
Select Options from the menu and then select Project from the Options pull-down
menu. This will display the Project Options dialog box. In the Topics area, click on
Directories. On the right-hand side of the window you will see the Directories listed.
Ensure that the information in each of the fields is as given below – if it is incorrect,
modify it accordingly.
Source Directories
Include c:\ bc5\include
Library c:\ bc5\lib
Source Leave this field BLANK
Click on OK to continue.
Creating hello.c
x Select File from the menu and then select New from the file menu. The first thing
that you should do is give the program a name, hello.c:
x Select File from the menu
x Select Save as from the File drop-down menu
x In the Drives drop-down list box, click on the down arrow to open up the list box.
x Scroll through the list to select the drive and click on it.
x Click on the File Name: field and type hello.c
x (Make sure the file name has the .C extension only. It should not have a .CPP
extension. If it does change it to .C, or it won’t run properly)
x Click on the OK button to continue.
x Now type the hello.c program exactly as you wrote in the lab observation book.
x Remember that it is good practice to save your programs periodically. You can do
this as follows:
7
Lab Manual
x Select File from the menu.
x Select Save from the File drop-down menu.
Compiling a Program
When you have finished typing in the program, you should compile it as follows:
Select Project from the menu
Select Compile from the project drop-down menu.
An attempt will be made to compile your program. If there are errors, they will be
reported in the message window. You should use the information provided to help you
fix the problems and then recompile the program.
Running a Program
If you have successfully compiled your program you can now link and run it as
follows:
First, an attempt will be made to link your program. If there are errors, they will be
reported in the message window. You should use the information provided to help you
fix the problems and then recompile and link the program.
Your program now runs. The output from the program will be displayed in a separate
window. (If the screen displays a black output window for a split second and the
window then disappears it means you did not set the Target Output type before you
compiled your program).
To switch between the edit window and the output window, simply click on the
window that you want to activate.
To close the output window, point to the icon in the top left-hand corner and double-
click on it.
To close the hello.c file, double click on the icon in the top left-hand corner of the
hello.c edit window.
During program development, the programmer may repeat this cycle many times,
refining, testing and debugging a program until a satisfactory result is achieved. The
UNIX commands for each step are discussed below.
This will try to compile testprog.c, and, if successful, will produce a runnable file
called a.out. If you want to give the runnable file a better name you can type
cc testprog.c -o testprog
This will compile testprog.c, creating runnable file testprog.
Figure 1.1
4. Click Close.
5. After that you can see the blank interface like figure 1.2.
10
C Programming Lab
Figure 1.2
6. In the main screen select File menu, then click New. The New dialog box appears.
Figure 1.3
7. Select File at the new dialog box. Then, select C++ Source File and click OK.
The screen in figure 1.4 will appear.
11
Lab Manual
Figure 1.4
Creating a program
1. Type your C source code in the text window as follows.
Figure 1.5
Save a program
1. From the menu bar, select File and then select Save As.
2. Select the appropriate directory .In lab session, we will save all our exercise in
Directory desktop. So select save in Desktop.
12
C Programming Lab
3. Type the name of the program file
C program
Example: program1.c
You must save all source code in C extension (means that, all in .c). Click Save button.
Compiling a program
1. From the menu bar select Built and then select Compile program1.c or just click
icon compile. See below figure1.6
Compile
icon
Figure 1.6
You will get message that request you to need a workspace, so just answer Yes to
the question. Visual C++ will create default workspace and then build your code.
This will produce a .obj program file. It does not have proper link with the
library (built-in library) yet.
If there are any program errors or warning messages, visual C++ will display
them in the message window (shown in figure 1.7 below). If there are no errors
or warnings, you can execute your program.
workspace
Message
window
Figure 1.7 13
Lab Manual
Executing (build) a program
1. From the menu bar, select Build and then select Build program1.exe. Or you can
Click build icon. See below figure 1.8
Figure 1.8
2. Now, the program code changes to .exe files extension. This extension you can
see at message window as shown in the figure 1.9.
Figure 1.9
14
C Programming Lab
Running a program
1. From the menu bar, select Build and then select Execute program.exe. or you
can click execute program icon .See below figure 1.10
Figure 1.10
2. Now, output will appear as shown in the figure 1.11. The output screen contains
the printed results. Press any key to return to the program.
Figure 1.11
Let us see the steps involved in the program development life cycle.
Example 1
Represent the complete steps in the program development life cycle that reads the
number of letter grades A, B, C, D and F for a student. The program will compute and
print the student’s grade point average. It should then determine and print the
student’s academic standing (like high honors, honors, satisfactory, or probation)
according to the following table:
Note: In computing grade point average, assume that the weight of letter grade
A is 4, B is 3, C is 2, D is 1 and f is 0.
print Total_average
if Total_ average less than 2
print “ Your academic standing is Probation”
else
if Total_average less than 3
print “ Your academic standing is Satisfactory”
else
if Total_average less than or equal 3.5
print “ Your academic standing is Honors”
else
if Total_average less than or equal 4.00
print “ Your academic standing is High Honors”
end_if
end_if
end_if
end_if
START
A
17
Lab Manual
T
If (( (num_A < 0) or (num_B<0) or (num_C<0) or
(num D <0) or (num F0) ) or (Total subject<=0))
If
(GPA <3)
F
T Print (“Your academic
standing is Satisfactory”)
If F
(GPA <=3.5)
Print (“Your academic
T standing is Honors”)
18
B C Programming Lab
If
(GPA <=4.00)
T
C
STOP
#include <stdio.h>
main()
do {
printf(" \tThis is for calculate your GPA \n");
printf("Enter number of grade A : ");
scanf ("%d", &num_A);
{
if (((num_A <0) || (num_B <0)||(num_C<0)||(num_D <0)||(num_F
<0))||(total_subject <=0))
printf (" you should enter your number that you having take again\n");
}
} while (((num_A <0) || (num_B <0)||(num_C <0)||(num_D <0)||(num_F
<0))||(total_subject <=0));
if (GPA <2)
printf ("Your academic standing is Probation\n\n");
else
if (GPA <3)
printf ("Your academic standing is Satisfactory\n\n");
else
if (GPA <= 3.5)
printf ("Your academic standing is Honors\n\n");
else
if (GPA <= 4.00)
printf ("Your academic standing is High
honors\n\n");
return 0;
}
Step 4: Testing
OUTPUT
This is for calculate your GPA
Enter number of grade A: 3
Enter number of grade B: 2
Enter number of grade C: 2
Enter number of grade D: 0
Enter number of grade F: 0
Your grade point average is 3.14.
Your academic standing is Honors.
3. Design a flowchart and write an interactive program that reads in integers until
a 0 is entered. If it encounters 0 as input, then it should display:
Session 2:
5. Write a program to find all Armstrong number in the range of 0 and 999
Hint: An Armstrong number of three digits is an integer such that the sum of
the cubes of its digits is equal to the number itself. For example, 371 is an
Armstrong number since 3**3 + 7**3 + 1**3 = 371.
7. Write a program to check whether given two numbers are amicable numbers or
not.
Hint: Amicable numbers are two numbers so related that the sum of the proper
divisors of the one is equal to the other, unity being considered as a proper
divisor but not the number itself. Such a pair is (220,284); for the proper
divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110, of which the sum is
284; and the proper divisors of 284 are 1, 2, 4, 71, and 142, of which the sum is
220.
Session 3:
9. Write a function invert( x, p, n) that returns x with the n bits that begin at
position p inverted. You can assume that x, p and n are integer variables and
that the function will return an integer. As an example, if x = 181 [decimal]
which is 10110101 in binary, and p = 4 and n = 2, then the function will return
10101101 or 173 [decimal]. The underlined bits are the changed bits. Note that
21
Lab Manual
bit positions are counted from the right to the left and that the counts start with a
0. Therefore, position 4 is the 5th bit from the rightvalues.
10. Write a function that calculates the compounded interest amount for a given
initial amount, interest rate and number of years. The interest is compounded
annually. The return value will be the interest amount. Use the following
function definition: float comp_int_calc( float int_amt, float rate, int years);
Write a program that will accept the initial amount, interest rate and the number
of years and call the function with these values to find out the interest amount
and display the returned value.
11. Break up the program that you wrote to solve Problem 10 into two separate
source files. The main function should be in one file and the calculation
function must be in another file. And modify the program so that the interest
rate is a symbolic constant and is no longer input from the keyboard. And put all
the C preprocessor directives into a separate header file that is included in the
two program source files [i.e. #include "header.h"].
12. Define two separate macros, MIN and MAX, to find and return, respectively,
the minimum and maximum of two values. Write a sample program that uses
these macros.
Hint: Use the ternary operator.
Session 4:
13. Write a program that will take as input a set of integers and find and display the
largest and the smallest values within the input data values.
14. Write an interactive program that will take as input a set of 20 integers and store
them in an array and using a temporary array of equal length, reverse the order
of the integers and display the values.
Session 5:
16. Write a program to check if the given matrix is magic square or not.
17. Write a program print the upper and lower triangle of the matrix.
Session 6:
20. Using recursion,
(i) Find the factorial of a number
(ii) Find Greatest Common Divisor (GCD) of two numbers
(iii) To generate Fibonacci sequence
(iv) Reverse ‘n’ characters.
22
C Programming Lab
Session 7:
21. Write a program to convert a given lowercase string to upper case string without
using the inbuilt string function.
22. Write a program to count number of vowels, consonants and spaces in a given
string.
23. Write a program to input a string and output the reversed string, i.e. if "USF" is
input, the program has to output "FSU". You are not to use array notation to
access the characters, instead please use pointer notation.
Session 8:
24. Write a program to process the students-evaluation records using structures.
25. Define a structure that will hold the data for a complex number. Using this
structure, please write a program that will input two complex numbers and
output the multiple of the two complex numbers. Use double variables to
represent complex number components.
26. Modify the above program so that the multiplication is carried out in a function
that accepts two complex number structures as input parameters and return a
complex number structure with the result.
Session 9:
27. Write a function that will return the length of a character string. You are not
allowed to use the strlen C library function.
Note: Use “Pointers” concept
28. Write a function that returns the minimum and the maximum value in an array
of integers. Inputs to the function are the array of integers, an integer variable
containing the length of the array and pointers to integer variables that will
contain the minimum and the maximum values. The function prototype is:
void minmax( int array[], int length, int * min, int * max);
29. Write a sample program that uses this function to find and display the minimum
and the maximum values of an array of integers. Use an array of 10 integers.
You can either use scanf to input the values into that array or initialize the array
with values in the program itself.
Session 10:
30. Write a program that prompts the user the name of a file and then counts and
displays the number of bytes in the file. And create a duplicate file with the
word ‘.backup’ appended to the file name. Please check whether file was
successfully opened, and display an error message, if not.
31. Write a program to create a file, open it, type-in some characters and count the
number of characters in a file.
23
Lab Manual
32. Write a program that will input a person's first name, last name, SSN number
and age and write the information to a data file. One person's information
should be in a single line. Use the function fprintf to write to the data file.
Accept the information and write the data within a loop. Your program should
exit the loop when the word 'EXIT' is entered for the first name. Remember to
close the file before terminating the program.
Hint: Use the function strcmp() to compare two strings.
24
Digital Logic
SECTION 2 DIGITAL LOGIC CIRCUITS Circuits
2.0 INTRODUCTION
The logic circuits are the basic building blocks of an electronic circuit. We have
covered these concepts in Block 1 of MCS – 12. In this section you must attempt to
build the combinational circuits using tools created by “Alun Davies”, Designer and
Programmer of the software called Logic. We hope that you will find this software
useful and productive. We hope that it will generate interest in designing Logic
Circuits on a small scale. In addition, you must do paper – based design of some of the
sequential circuit – related problems.
Our attempt in this section is to make you familiar with the package such that you are
able to use the software as quickly as possible. We will discuss about how to build and
test a successful logic circuit project. You must experiment with the package by
yourself and attempt the problems; in doing this you will gain valuable experience and
your efficiency will increase. We hope that your experience with Logic Circuits
design will be a productive experience. We have also presented an example for
creation of logic circuit that you would like to test using Logic. We have also added
practice problems that you can attempt.
2.1 OBJECTIVES
After completing this section and doing all the practical problems given, you would be
able to:
You need to download the file logic zip and install it at your computer. On execution a
simple screen appears having a two-menu option: File and Help. Select the “New
Project” option of the File Menu to get the project window abeled “Logic Gates
Construction” having a grid on the screen. It also includes a Gate and Connection
Tool Bar. (Please refer to the Figure below.)
25
Lab Manual
In the package a lot of projects and circuits are given, so if you want to study the
functionality of any given circuit, please open it from the file menu.
On right click of the circuit you will get options: Where Test Circuit is find that circuit
having any error or not, if not you can proceed in execution of the circuit.
Like in the given figure we have chosen MULTIPLEX.CRC from the projects. On
clicking Execute circuit it displays the Truth table of circuit.
Please note that this Package cannot be used for making SEQUENTIAL Circuits,
those can be made and tested on paper.
26
Digital Logic
2.3 MAKING A LOGIC CIRCUIT USING LOGIC Circuits
Let us try to create the logic circuit given in the following figure using LOGIC:
To create a logic circuit as above you need to perform the following steps:
Step 1: Create a new project using “File/ New Project” Menu options.
Step 2: Locate find AND gate symbol in the toolbox
Step 3: Click on the AND gate button.
Step 4: Place the AND gate at desired locations by just clicking at that location.
Step 5: Similarly place OR gate on the desired location.
Note: (1) You can place as many gates as you like by just selecting and
then clicking on screen.
(2) To delete any extra Gate Object, Right Click on that Object and
select “Delete” from the menu that will get displayed.
(3) If you want to change the position of any gate then first deselect
the Gate button on the tool bar by clicking on the selected button
again. Now click on the desired object whose position you want to
change and drag the pointer wherever you want to place it.
Step 6: Now add labels input ‘a’ ‘b’ ‘c’ ‘d’ and ‘e’ by first clicking on the label
button of the tool bar. The names are given as you place the label on the
project grid through the text dialog box.
Step 7: Linking Gates: To link a label and a gate (or gate to gate) select "Link" ( )
button from the toolbar. Press and hold mouse on the source gate/label and
move the mouse to the destination connection object and release the mouse
button.
A line should appear. You can remove a connection by selecting the Break
connection ( ) button on the toolbar.
Step 8: Testing a Circuit: Once you have made all the connections test your circuit
for correctness by pressing the Test button on the toolbar.
27
Lab Manual
Step 9: Executing a Circuit: If testing is successful then execute the circuit to get
the truth table. You can do it by selecting Execute button, which is labelled
as a truth table in the tool bar.
Step 10: Saving the Project: Select File/ Save Project option to save with a suitable
name with .CRC for future use.
A complete example
One of our objectives is that you should be able to design your very own
combinational logic circuit. Here we are explaining you one example of Full Adder
circuit.
a1 a2 a3 S C
0 0 0 0 0 0.
0 0 1 1 0 1.
0 1 0 1 0 2.
0 1 1 0 1 3.
1 0 0 4.
1 0
5.
1 0 1 0 1 6.
1 1 0 0 1 7.
1 1 1 1 1
28
Digital Logic
Step 4: Draw Karnaugh maps & forming groups of 1's on the K-map Circuits
a2 a2
00 01 11 10 00 01 11 10
0 0 1 1 1
a1 1 a1 1 1 1 1 1 1
a3 a3
S= a1 a2 a3 + a1 a2 a3 + a1 a2 a3 + a1 a2 a3
C= a1 a2 + a1 a3 + a2 a3
S= a1 a2 a3 + a1 a2 a3 + a1 a2 a3 + a1 a2 a3
S= a1 a2 a3 + a2 a3 + a1 a2 a3 + a2 a3
C= a1 a2 + a1 a3 + a2 a3
C= a2 a3 + a1 a2 XOR a3
29
Lab Manual
Step 8: Test the Digital Circuits using given software
x Highlighting Inputs and Outputs: In a complex circuit, you would like to highlight
the connections. You can do it by selecting show output ( ) or show input ( )
buttons. The output is shown in red colour and input is shown in blue colour.
x Editing Circuits: You can use options for copy, paste, or reposition gates etc.
x Printing Circuits and Truth Tables: To print a logic circuit or a truth table simply
select the window containing the data and then select "File / Print...", option.
x Clocks are not used for any purpose in the circuit at present.
x Sample Circuits are available, use them for better understanding.
Circuit or Truth Table does Ensure proper printer is set up and check printer to be
not print. online.
On some high-resolution printers circuits and truth
tables will be printed smaller.
Clock does not work when The clock is not there for execution purposes. It is
circuit is executed. not supported by this version of "Logic Gates."
File does not load. Please check that the file you are trying to load is a
valid ".CRC" file and it exists.
File cannot be saved. Check for the storage device, whether full?
Tool Box does not appear. It has probably been closed. To open it again select
"Window / Show” Menu option.
Session 1:
1. Design and implement the Exclusive-OR gate using AND, OR & NOT gates.
3. We know NAND gate is universal gate but we need proof, so Design other
gates like NOT, OR, AND & NOR using only NAND gates which will prove
that NAND is universal gate.
4. Design a digital circuit whose output is equal to 1 if the majority of inputs are
1’s. The output is 0 otherwise.
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 1
1 0 1 0
1 1 0 1
1 1 1 1
Explain why your circuit is correct
7. Design a combinational circuit that takes a 3-bit number and the output of that
circuit should be the square of the input Number.
8. Design a combinational circuit where input is a 4 bit number and whose output
is the 2’s complement of the input number.
9. Design the Encoder Circuit, which will convert decimal number to binary
number.
Session 2:
10. Design Sequential Circuit, of clocked RS flip flop with 4 NAND gates.
11. Design Sequential Circuit of clocked D flip flop with AND and NOR gates.
14. Design a logical circuit that will calculate the less-than (<) function for two 2-
bit inputs. That is, if the inputs are A and B, each of whose values can be in the
range 0-3 (i.e., 00-11 in binary), then the output should be 1 whenever A < B,
and 0 otherwise. This circuit requires four inputs, referred to as a1, a2, b1, and
b2. a1 and a2 represent a 2-bit number, as do b1 and b2. The output will be true
if the decimal number represented by the pair a1a2 is less than the decimal
number represented by b1b2. Design this circuit with an optimal number of
gates.
15. A multiplexer circuit accepts N inputs and outputs the value of one of those
inputs. The selection of which input goes out on the output is determined by a
set of M control inputs. A multiplexer with M control inputs can steer up to 2M
inputs to a single output. Design 2-to-1 multiplexer.
16. A decoder has M inputs and up to 2M outputs. If the logic values on the M
inputs are interpreted as a binary number of value P, then the Pth output will be
at logic 1 while all the others are at logic 0. Design 2-to-4 decoder.
2.6 SUMMARY
This section, although it involves only two practice sessions, requires a lot of
groundwork done by you on the paper. These problems will provide you a foundation
on the logic circuit design. You must attempt all these problems. This will also help
your basics with MCS 012 subject and will provide confidence to you for any
challenge in circuit design.
32
Assembly Language
SECTION 3 ASSEMBLY LANGUAGE Programming
PROGRAMMING
Structure Page No.
3.0 Introduction 33
3.1 Objectives 33
3.2 Assemblers 33
3.2.1 Turbo Assembler (TASM)
3.2.2 MASM
3.2.3 Emu 8086
3.2.4 The DEBUG Program
3.3 Assembly Programming File 41
3.4 Session-wise List of Programs 42
3.5 What Next? 46
3.6 Summary 46
3.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.
3.1 OBJECTIVES
x Develop and assemble assembly programs
x Identify and use proper assembler directives
x Design simple assembly programs
x Write programs that interface with a programming language
x Appreciate the System Software development environment
x Appreciate a keyboard driver
3.2 ASSEMBLERS
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
Lab Manual
microprocessors.
Step Result
Assemble the source program using x Creates an object file with extension .obj.
an assembler x Creates an optional listing file (.lst) and a
file for cross reference
Link the Object file or files x Creates an executable (.exe) file
x Creates optional map file (.map) and
library file (.lib)
Convert the executable files to com x 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.
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:
/L Generates the list file (.lst)
/Z displays source line having errors.
Debugging Options. You can use Turbo Debugger by using the /ZI command line
option on the assembler.
3.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 most recent 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:
ML [options] filenames_containing.asm [ [options] filenames.asm] [/link options]
Please note that in the above command the terms enclosed within [ ] are optional.
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.
Lab Manual
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
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.
x 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.
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
program execution. You can also watch stack.
x Arithmetic & Logical Unit (ALU) shows the last operation executed by ALU,
especially arithmetic operations like addition. This will enhance your
understanding.
x 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.
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.
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.
Assembly Language
You can use single step button to execute next instruction. Watch the effect of this Programming
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.
Some Tips
x 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.
x The flags of Debug appear as:
x 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)
x DEBUG assumes all numbers entered to be hexadecimal, so you need not type
trailing H.
x F1 key duplicates the previous command one character at a time.
x F3 duplicates the entire previous command.
x DEBUG commands are not case sensitive.
You must maintain a file for keeping each Assembly program. The file should contain
the following:
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
; DISPLAY Hello IGNOU!
; Standard header:
ORG 100H
; Jump to start:
JMP START
; Data:
msg DB 'Hello, IGNOU!','$'
; Load address of msg to DX register:
START: LEA DX, msg
; Print using DOS interrupt:
MOV AH, 9
INT 21h
; Exit to operating system:
MOV AH, 4Ch
INT 21h
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/3S r3
14. Write a Program which adds the sales tax in the Price list of items and replace
the Price list with a new list.
4. Write a program, which will read in decimal inputs repeatedly until a zero
value is read; at this point, it should print out the sum of the numbers read in so
far.
Assembly Language
5. Develop and execute an assembly language program to find the LCM of two Programming
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.
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.
Lab Manual
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.
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.
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.
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+
Assembly Language
73+: C Programming
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.
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.
void main()
{
cout << "Enter number: ";
cin >> n;
sum = 0;
k = 1;
while (K <= sum)
{
sum += k;
++k;
}
cout << "The sum = ";
cout << sum;
cout << '\n';
}
3.6 SUMMARY
This section is an attempt to provide details on Assembly Language Programming
practice. The problems have primarily been divided into 8 sessions covering simple,
arrays loops, functions, interrupt handling, calling assembly program from C etc. You
must attempt all the problems in the specified number of sessions. In order to
complete the tasks as above, you must come prepared with paper-based assembly
programs and should test them at the center for any possible errors. Please note, that
the assembly programs may look cumbersome, but give you a lot of power on
machine. They allow you to understand the machine more closely and use it more
efficiently.