You are on page 1of 17

Introduction to MASM /TASM

MASM: (Microsoft assembler)


To Create Source File: An editor is a program which allows you to create a file
containing the assembly language statements for your program. This file is called a source
file.
Command to create a source file

C:\MASM\BIN> Edit filename. asm


The next step is to process the source file with an assembler. When you run the assembler,
it reads the source file of your program. On the first pass through the source program, the
assembler determines the displacement of named data items, the offset labels, etc. and puts
this information in a symbol table. On the second pass through the source program the
assembler produces the binary code for each instruction and inserts the offsets, etc. that it
calculated during first pass.

C:\MASM\BIN > Masm filename. asm X, Z


With this command assembler generates three files.
1. The first file (X) called the object file, is given the extension .OBJ
The object file contains the binary codes for the instructions and information about the
addresses of the instructions.
2. The third file (Z) generated by this assembler is called the cross-reference file and is
given the extension .CRF. The cross-reference file lists all labels and pertinent information
required for cross – referencing.

NOTE : The Assembler only finds syntax errors : It will not tell you whether program
does what it is supposed to do. To determine whether your program works, you have to
run the program and test it.
Next step is to process the object file with linker.
C:\MASM\BIN>LINK filename. obj
Run File [Filename1.exe] : “filename1.exe”

List file [nul.map]: NUL


Libraries [.lib]: library name Definitions File [nul.def]:

Creation of Library: Refer Modular Programming Section


A Linker is a program used to join several object files into one layer object file.

NOTE: On IBM PC – type Computers, You must run the LINK program on
your .OBJ file even if it contains only one assembly module.
The linker produces a link file with the .EXE extension
(an execution file) Next Run C:\MASM\BIN> filename

PROCEDURE FOR EXECUTING A PROGRAM IN MASM :

1) First Click Start button and go to Run


2) For going to command window Type “cmd” in Run window.
3) After getting command window type
a) Cd\
b) For going to 8086 ,Change directory by typing “CD 8086”
c) For writing program you type EDIT

4) After typing EDIT in command window you get Editor Window, Type the program in
editor.
5) After typing program save the file with “.asm” extension.
6) After saving program exit the editor then you get command window again.
For assembling the program type “masm ProgName.asm”. ex:- masm crt.asm
7) For linking the program type “Link Progname.obj”. ex:- link crt.obj
8) For executing the program type” Debug Progname.exe”. ex:-debug crt.exe
For viewing the registers status click “r” after “_”
For executing trace the whole program by typing “t” after “_”
1. Write assembly language programs to evaluate the expressions:
i) z = a + b – d * e
ii) z = x * y + w – v +u / k
a. Considering 8-bit, 16 bit and 32 bit binary numbers as a, b, d, e.
b. Considering 2 digit, 4 digit and 8 digit BCD numbers.
Take the input in consecutive memory locations and also Display the results by using
“int xx” of 8086. Validate program for the boundary conditions.
AIM:- . Write assembly language programs to evaluate the expressions
APPARATUS: MASM
PROGRAM:

8 BIT
DATA SEGMENT
A DB 2DH
B DB 8FH
D DB 2AH
E DB 03H
N1 DB 00H
N2 DB 00h
Z DB ?

DATA ENDS

ASSUME CS:CODE , DS:DATA


CODE SEGMENT

START: MOV AX, DATA


MOV DS,AX
MOV AL,D
MOV BL,E
MUL BL
MOV N1,AL
MOV AL,B
SUB AL,N1
MOV N2,AL
MOV AL,A
ADD AL,N2
MOV Z,AL
INT 03H
CODE ENDS
END START
2. Write an ALP of 8086 to take N numbe rs as input. And do the following ope rations
on the m.
a. Arrange in ascending
b. descending order.

AIM:-Program to sort the given numbers in ascending order


APPARATUS: MASM
PROGRAM:

a. Arrange in ascending

DATA SEGMENT CMP Destination, Source


STRING1 DB 99H,12H,56H,45H,14H IF DES<SOUR CF=1
DATA ENDS Means jump to loop
JC: JUMP IF CARRY
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CH,04H

L2: MOV CL,04H


LEA SI,STRING1

L1: MOV AL,[SI]


MOV BL,[SI+1]
CMP AL,BL
JC L3
MOV DL,[SI+1]
XCHG [SI],DL
MOV [SI+1],DL

L3: INC SI
DEC CL
JNZ L1
DEC CH
JNZ L2

INT 03H

CODE ENDS
END START
b. Descending order.
DATA SEGMENT
STRING1 DB 99H,12H,56H,45H,36H
DATA ENDS
CODE SEGMENT JNC: JUMP IF NO CARRY
ASSUME CS:CODE,DS:DATA JNZ: JUNP IF NON ZERO
START: MOV AX,DATA
MOV DS,AX
MOV CH,04H

L2: MOV CL,04H


LEA SI,STRING1

L1: MOV AL,[SI]


MOV BL,[SI+1]
CMP AL,BL
JNC L3
MOV DL,[SI+1]
XCHG [SI],DL
MOV [SI+1],DL

L3: INC SI
DEC CL
JNZ L1
DEC CH
JNZ L2
INT 03H

CODE ENDS
END START
3. Write an ALP of 8086 to take N numbe rs as input. And do the following ope rations
on the m.

a. Find max and minimum


b. Find average

Considering 8-bit, 16 bit binary numbe rs and 2 digit, 4digit and 8 digit BCD numbers.
Display the results by using “int xx” of 8086. Validate program for the boundary
conditions.
USING 8-BIT
a. Find max
JL MEANS First Operand < Second Operand
JUMP IF LESSTHAN
DATA SEGMENT CMP AL,BL ; AL=4 ,BL=5 THEN JUMP TO THE LOOP
STRING1 DB 08H,14H,05H,0FH,09H
RES DB ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA
MOV DS, AX
MOV CX, 04H
MOV BL, 00H
LEA SI, STRING1

L1: MOV AL, [SI]


CMP AL, BL
JL L2
MOV BL, AL

L2:
INC SI
DEC CX
JNZ L1
MOV RES,BL
INT 3

CODE ENDS
END START

JL label Short Jump if first operand is Less then second operand (as set by CMP instruction).
Signed.
FIND minimum

DATA SEGMENT
STRING1 DB 08H,14H,05H,0FH,09H
RES DB ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START: MOV AX, DATA JGE: JUMP IF GREATER THAN OR EQUAL
MOV DS, AX CMP AL,BL: AL=4,BL=3 ;
MOV CX, 04H ; 4>=3 SO TRUE THEN JUMP TO LOOP
IF AL=3,BL=4; 3>=4 SO FALSE THEN
MOV BL, 79H EXICUTE SEQUENCE INSTRUCTIONS
LEA SI, STRING1

L1:
MOV AL, [SI]
CMP AL, BL
JGE L2
MOV BL, AL

L2:
INC SI
DEC CX
JNZ L1

MOV RES,BL
INT 03H

CODE ENDS
END START
B. FIND AVERAGE:

8-BIT:

DATA SEGMENT
A DB 45h,42h,1AH ,3BH
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE

START: MOV AX,DATA


MOV DS,AX
MOV CL,4
MOV BL,4
LEA SI,A
MOV AX,0000
L1: ADD AL,BYTE PTR[SI]
INC SI
DEC CL
CMP CL,00
JNZ L1
DIV BL
INT 03H

CODE ENDS
END START
EXP NO: Program for searching for a number or character in a
string for 8086.
AIM: Write an alp program for to search a number or character from a string.
APPARATUS:
PROGRAM:
A) By using MASM:
ASSUME CS: CODE, DS: DATA

DATA SEGMENT
LIST DW 53H, 15H, 19H, 02H DEST EQU 3000H
COUNT EQU 05H
DATA ENDS
CODE SEGMENT
START: MOV AX, DATA
MOV DS, AX

MOV AX, 15H


MOV SI, OFFSET LIST
MOV DI, DEST
MOV CX, COUNT
MOV AX, 00
CLD
REP
SCASW
JZ LOOP
MOV AX, 01
LOOP MOV [DI], AX

MOV AH, 4CH

INT 3H
CODE ENDS
END START
OUTPUT:
Input output
MEMORY Data MEMORY Data
LOCATION LOCATION
2000 53 3000 01
2001 15
2002 19
2003 02

RESULT: Program for search a number or character from a string performed by using
masm.
EXP NO: PALINDROME
a) AIM: Write an alp program TO Find given series is Palindrome or not
.
APPARATUS: MASM software
PROGRAM:
DATA SEGMENT
STR1 DB 'MADAM','$'
STRLEN1 DW $-STR1
STRREV DB 20 DUP(' ')
STR_PALIN DB 'STRING IS PALINDROME.','$'
STR_NOT_PALIN DB 'STRING IS NOT PALINDROME.','$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE, DS:DATA
BEGIN: MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV CX, STRLEN1
ADD CX, -2
LEA SI, STR1
LEA DI, STRREV
ADD SI, STRLEN1
ADD SI, -2
L1: MOV AL, [SI]
MOV [DI], AL
DEC SI
INC DI
LOOP L1
MOV AL, [SI]
MOV [DI], AL
INC DI
MOV DL, '$'
MOV [DI], DL
MOV CX, STRLEN1
PALIN_CHECK: LEA SI, STR1
LEA DI, STRREV
REPE CMPSB
JNE NOT_PALIN
PALIN:
MOV AH, 09H
LEA DX, STR_PALIN
INT 21H
JMP EXIT

NOT_PALIN: MOV AH, 09H


LEA DX, STR_NOT_PALIN
INT 21H

EXIT: MOV AX, 4C00H


INT 21H
CODE ENDS
END BEGIN

OUTPUT:

STRING IS PALINDROME
FACTORIAL OF A NUMBER USING RECURSION TECHNIQUE
DATA SEGMENT
MESS1 DB 'ENTER THE NUMBER(0-8):''$'
MESS2 DB 0AH,0DH, ' FACTORIAL OF THE GIVEN NUMBER=''$'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA DX,MESS1
MOV AH,09H
INT 21H
CALL READ
MOV BL,DL
MOV AX,0001H
MOV BH,00H
CALL FACT
MOV BX,AX
CALL DISP
MOV AH,4CH
INT 21H

FACT PROC NEAR


PUBLIC FACT
CMP BX,0001H
JBE NEXT
MUL BX
DEC BX
CALL FACT
NEXT:RET
FACT ENDP
READ PROC NEAR
PUBLIC READ
MOV AH,01H
INT 21H
MOV DL,AL
SUB DL,30H
RET
READ ENDP

DISP PROC NEAR


PUBLIC DISP
LEA DX,MESS2
MOV AH,09H
INT 21H
MOV CL,04H
MOV CH,02H
BACK:MOV DL,BH
SHR DL,CL
CMP DL,0AH
JC L1
ADD DL,07H
L1:ADD DL,30H
MOV AH,06H
INT 21H
AND BH,0FH
CMP BH,0AH
JC L2
ADD BH,07H
L2:ADD BH,30H
MOV DL,BH
MOV AH,06H
INT 21H
DEC CH
JZ L3
MOV BH,BL
JMP BACK
L3:RET
DISP ENDP

CODE ENDS
END START

OUTPUT:

ENTER THE NO<0-8> : 7


FACTORIAL OF THE GIVEN NUMBER : 13B0

ENTER THE NO<0-8> : 5


FACTORIAL OF THE GIVEN NUMBER : 0078
GENERATION OF FIBONACCI SERIES (HEXADECIMAL)
DATA SEGMENT
MESS1 DB 0AH,0DH,'ENTER THE LIMIT:''$'
MESS2 DB 0AH,0DH,'FIBONACCI SERIES UPTO THE LIMIT ','$'
MESS3 DB 0AH,0DH,'THE NUMBER OF ELEMENTS IN FIBONACCI SERIES IS: ','$'
MESS4 DB 'IS: ','$'
TEMP DB 01H
COUNT DB 00H
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
LEA DX,MESS1
MOV AH,09H
INT 21H
CALL READ
MOV CH,DL
LEA DX,MESS2
MOV AH,09H
INT 21H
CALL READ
MOV BL,CH
CALL DISP
LEA DX,MESS4
MOV AH,09H
INT 21H
XOR BX,BX
AGAIN: INC COUNT
CALL DISP
ADD TEMP,BH
JC NEXT
MOV BL,TEMP
MOV TEMP,BH
MOV BH,BL
CMP BL,CH
JA NEXT
JMP AGAIN
NEXT:LEA DX,MESS3
MOV AH,09H
INT 21H
MOV AL,COUNT
ADD AL,00H
DAA
MOV BL,AL
CALL DISP
MOV AH,4CH
INT 21H

OUTPUT:

ENTER THE LIMIT: AA


FIBONACCI SERIES UPTO THE LIMIT AA IS : 00 01 01 02 03 05 08 0D 15 22 37
59 90
NUMBERS OF ELEMENTS IN FIBONACCI SERIES : 13

You might also like