Assembly Language Programming - 8086 Assembly Language Programming
Assembly Language Programming - 8086 Assembly Language Programming
html
Rahul Setpal
8086 Assembly Language Programming
Assembly Language Programming is a low level programming language which is processor View my complete profile
specific. It means it will run only on the processor architecture for which it was written.
Blog Archive
Pros:
2015 (1)
1. Faster- Basically assembly language program are executed in much less time as
June (1)
compared to the high-level programing language like c,c+.
8086 Assembly Language Programming
2. Low memory usage - As assembly is processor specific it consumes less memory and
are compiled in low memory space.
3. Real Time Systems - Real time applications use assembly because they have a deadline
for their output. (i.e system should response or generate output within a specific period of
time.)
Cons:
If you are programming for a specific processor or for real time applications assembly
language programming can be more useful to you in terms of processing speed, performance and
in low memory systems.
The code can be written in Notepad and saved with an extension of asm. i.e
Filename.asm
This file can be made to run on various assembler packages like TASM, MASM etc.
There are also different Emulators (a software which simulates a hardware) available for various
processors for compiling and running the code.
I will be using TASM to run few of my codes written for 8086 processor.
1 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
These are the Statements or Instructions that Direct the assembler to perform a task.
The inform the processor about the start/end of segment, procedure or program and reserve a
appropriate space for data storage etc.
ASSUME
2) DUP()
START
It indicates the start of Program.
END
It indicates end of Program.
ENDS
Indicates End of Segment.
PROC
Used to indicate the beginning of Procedure.
ENDP
Used to indicate the end of Procedure.
EQU
EQU (Equates) it is used for declaring variables having constants
2 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
values.
SOFTWARE INTERRUPTS
1) INT 03H
2) KEYBOARD INTERRUPTS
i) MOV AH,0AH
INT 21H
Display Messages
i) MOV AH,09H
INT 21H
3) INT 10H
INT 10h / AH = 0 - set video mode.
Input:
AL = desired video mode.
3 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
MACRO
Definition of the macro
A macro is a group of repetitive instructions in a program which are
coded only once and can be used as many times as necessary.
Syntax of a Macro
The parts which make a macro are:
i) Declaration of the macro.
ii) Code of the macro
iii) Macro termination directive
Example:
DSPLY MSG1
PROC
Procedure
Definition of procedure
4 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Syntax of a Procedure
There are two types of procedures, the INTRA-SEGMENTS, which are found on the
same segment of instructions, and the INTER-SEGMENTS which can be stored on
different memory segments.
When the intra-segment procedures are used, the value of IP is stored on the stack and
when the intra-segments are used the value of CS:IP is stored.
**********************NOTE******************
Eg. A DB 01H,20H,30H,40H,50H
MOV AX,DATA
MOV DS,AX
5 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
***********************IMP********************
Download TASM.
you can use the following link to download.
https://drive.google.com/file/d/0B2UREG3dWedjVU4tZ1RlQ3ltM0k/view?usp=sharing
cd c:\tasm\bin
Here my filename is 1
6 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
7 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
you will be returned to above screen with the message "Program has no symbol table"
click ok.
press F9
8 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
List of Programs
Program:
DATA SEGMENT
A DW 9384H
B DW 1845H
SUM DW ?
CARRY DB 00H
DATA ENDS
CODE SEGMENT
START: MOV AX, DATA
MOV DS, AX
MOV AX, A
ADD AX, B
JNC SKIP
INC CARRY
SKIP: MOV SUM, AX
INT 03H
CODE ENDS
END START
9 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Output:
Program:
Output:
10 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 0FFH,70H,90H,60H,0FEH,20H,10H,13H,25H,00H
DATA ENDS
CODE SEGMENT
START :MOV AX,DATA
MOV DS,AX
MOV CX,0009H
BACK: MOV DX,0009H
LEA SI,A
BACK1: MOV AL,[SI]
INC SI
CMP AL,[SI]
JC SKIP
XCHG AL,[SI]
DEC SI
MOV [SI],AL
INC SI
SKIP: DEC DX
JNZ BACK1
LOOP BACK
INT 03H
CODE ENDS
END START
Output:
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 0FFH,70H,90H,60H,0FEH,20H,10H,13H,25H,00H
DATA ENDS
CODE SEGMENT
START :MOV AX,DATA
MOV DS,AX
MOV CX,0009H
BACK: MOV DX,0009H
LEA SI,A
BACK1: MOV AL,[SI]
INC SI
CMP AL,[SI]
JNC SKIP
XCHG AL,[SI]
11 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
DEC SI
MOV [SI],AL
INC SI
SKIP: DEC DX
JNZ BACK1
LOOP BACK
INT 03H
CODE ENDS
END START
Output:
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 10H,50H,40H,20H,80H,00H,00FFH,30H,60H,00FEH
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
LEA SI,A
MOV BH,00H
MOV CX,000AH
BACK: CMP BH,[SI]
JNC SKIP
MOV BH,[SI]
SKIP: INC SI
LOOP BACK
MOV [SI],BH
INT 03H
CODE ENDS
END START
Output:
Program:
ASSUME CS:CODE,DS:DATA
12 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
DATA SEGMENT
A DB 10H,50H,40H,20H,80H,01H,00FFH,30H,60H,00FEH
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
LEA SI,A
MOV BH,[SI]
MOV CX,0009H
BACK: INC SI
CMP BH,[SI]
JC SKIP
MOV BH,[SI]
SKIP: LOOP BACK
INC SI
MOV [SI],BH
INT 03H
CODE ENDS
END START
Output:
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 10H,15H,25H,16H,17H,19H,23H,77H,47H,34H
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
LEA SI,A
MOV BX,0000H
MOV CX,000AH
BACK: MOV AL,[SI]
ROR AL,1
13 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
JC ODD
INC BL
JMP NEXT
ODD: INC BH
NEXT: INC SI
LOOP BACK
INT 03H
CODE ENDS
END START
Output:
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 50H,41H,30H,00H,80H,90H,00FFH,00H,00H,70H
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV BX,0000H
LEA SI,A
MOV CX,000AH
BACK: MOV AL,[SI]
CMP AL,00H
JZ ZERO
ROL AL,1
JC NEGAT
INC DL
JMP SKIP
ZERO: INC BX
JMP SKIP
NEGAT: INC DH
SKIP: INC SI
LOOP BACK
INT 03H
CODE ENDS
END START
Output:
14 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
9) To take String from user find its length and reverse the string
Program:
ASSUME DS:DATA,CS:CODE
DATA SEGMENT
CR EQU 13D ; EQU defines constant, CR and LF are constants
LF EQU 10D ; CARRIAGE RETURN and LINE FEED initialize with
; ASCII VALUES
ER DB CR,LF,'NO STRING ENTERED PRESS ANY KEY TO EXIT........$'
LEN DB CR,LF,'THE LENGTH OF STRING IS->$'
REV DB CR,LF,'REVERSE OF YOUR STRING->$'
INPUT DB 'ENTER A STRING->$'
TEMP DB 00FFH DUP (?)
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA ; Initialize DATA SEGMENT
MOV DS,AX
DEC CL
CMP CL,64H ; CHECK for STRING LENGTH greater
; than 100D (64H)
PUSHF ; CLEAR the OVERFLOW flag
POP BX
AND BH,00F7H
15 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
PUSH BX
POPF
JGE PRINT1
MOV BX,CX
CMP CL,0AH ; CHECK for STRING LENGTH greater
JGE SKIP ; than 10D (0AH)
MOV BX,CX
ADD BL,30H
MOV AH,02H ; PRINT the LENGTH for SINGLE
MOV DL,BL ; DIGIT (FROM 1-9)
INT 21H
JMP SKIP1
INT 03H
CODE ENDS
END START
Output:
16 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
10) To take a string from user & find its length (using Macro and Procedure)
Program:
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
DISP MSG1
MOV CX,00H
READ: MOV AH,01H
INT 21H
CMP AL,CR
JZ AHEAD
INC CX
JMP READ
Output:
17 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 'M','A','D','A','M'
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV CH,00H
LEA SI,A
LEA DI,A+04H
MOV CL,02H
BACK: MOV AH,[SI]
MOV BH,[DI]
CMP AH,BH
JNZ SKIP
INC SI
DEC DI
DEC CL
JNZ BACK
INC CH
SKIP: INT 03H
CODE ENDS
END START
Output:
18 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 13D,10D,'THE GIVEN STRING IS PALINDROME $'
B DB 13D,10D,'THE GIVEN STRING IS NOT PALINDROME $'
C DB 'ENTER THE STRING- $'
TEMP DB 00FFH DUP(?)
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AH,09H
LEA DX,C
INT 21H
MOV DX,CX
MOV AX,CX ; MOVE COUNT IN AX
MOV BL,02H
DIV BL ; COMPARISION SHOULD BE DONE HALF THE NO. OF CHARACTERS
MOV CL,AL
CODE ENDS
END START
Output:
19 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
ER DB 13D,10D,'"INVALID INPUT"......PLS TRY AGAIN!!!! $'
A DB 13D,10D, 'THE ENTERED STRING IS PALINDROME$'
B DB 13D,10D,'THE ENTERED STRING IS NOT A PALINDROME$'
INPUT DB 'ENTER A STRING->$'
TEMP DB 00FFH DUP (?)
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
LEA SI,TEMP
MOV AH,01H
MOV [SI],AL
INT 21H
INC CX
INC SI
CMP AL,13D ; CHECK whether STRING PROVIDED
JNE BACK
DSPLY ER ; PRINT ERROR msg on SCREEN
DEC CX
MOV BX,CX
CALL COUNT ; CALL sub-routine to CALCULATE NO. of
LEA SI,TEMP ; COMPARISION
INC SI
20 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
LEA DI,TEMP
ADD DI,BX
BAAK: INC SI
CMP DH,20H
JE PLUSS
BAKK: DEC DI
CMP AH,DH
JNZ SKIP
DEC CL
JNZ BACK1
JMP LAST
PLUS: INC SI
MOV AH,[SI]
JMP BAAK
PLUSS: DEC DI
MOV DH,[DI]
JMP BAKK
LAST: DSPLY A
JMP EXIT
SKIP: DSPLY B
CODE ENDS
END START
Output:
******************
21 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 13D,10D,'THE GIVEN STRING IS PALINDROME $'
B DB 13D,10D,'THE GIVEN STRING IS NOT PALINDROME $'
C DB 'ENTER THE STRING- $'
TEMP DB 00FFH DUP(?)
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
MOV AH,09H
LEA DX,C
INT 21H
MOV DX,CX
MOV AX,CX ; MOVE COUNT IN AX
MOV BL,02H
DIV BL ; COMPARISION SHOULD BE DONE HALF THE NO. OF
CHARACTERS
MOV CL,AL
BAKK: DEC DI
CMP AL,BL ; COMPARING AL AND BL
JNZ SKIP
DEC CL
JNZ BACK1
JMP SKIP2
22 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
CODE ENDS
END START
Output:
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
MULD DW 1234H, 1234H
MULR DW 4321H, 4321H
RES DW 04H DUP(?)
DATA ENDS
CODE SEGMENT
START: MOV AX,DATA
MOV DS,AX
Output:
23 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
Note: In this program all entered elements should be single digit and space should be
given after each element.
Program:
ASSUME CS:CODE,DS:DATA
DATA SEGMENT
A DB 'MULTIPLICATION OF 3X3 MATRIX$'
B DB 13D,10D,10D,'THE 1st MATRIX$'
C DB 13D,10D,10D,'THE 2nd MATRIX$'
D DB 13D,10D,'ENTER THE 1st ROW $'
E DB 13D,10D,'ENTER THE 2nd ROW $'
F DB 13D,10D,'ENTER THE 3rd ROW $'
M1 DB 20H DUP (?)
M2 DB 20H DUP (?)
ANS DB 20H DUP(?)
G DB 13D,10D,10D,'THE RESULT OF MULTIPLICATION IS $'
I DB 13D,10D,'$'
K DB 20H,'$'
DATA ENDS
CODE SEGMENT
DSPLY MACRO MSG
MOV AH,09H
LEA DX,MSG
INT 21H
ENDM
MOV AL,03H
MOV AH,0
INT 10H
DSPLY A
DSPLY B
LEA SI,M1
CALL INPUT
DSPLY C
LEA SI,M2
CALL INPUT
DSPLY G
DSPLY I
LEA SI,M1+01H
LEA DI,M2+01H
CALL AD
DSPLY K
24 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
LEA SI,M1+01H
LEA DI,M2+03H
CALL AD
DSPLY K
LEA SI,M1+01H
LEA DI,M2+05H
CALL AD
DSPLY I
LEA SI,M1+07H
LEA DI,M2+01H
CALL AD
DSPLY K
LEA SI,M1+07H
LEA DI,M2+03H
CALL AD
DSPLY K
LEA SI,M1+07H
LEA DI,M2+05H
CALL AD
DSPLY I
LEA SI,M1+0DH
LEA DI,M2+01H
CALL AD
DSPLY K
LEA SI,M1+0DH
LEA DI,M2+03H
CALL AD
DSPLY K
LEA SI,M1+0DH
LEA DI,M2+05H
CALL AD
MOV AH,01H
INT 21H
INT 03H
DSPLY E
BACK1: MOV AH,01H
AND AL,0FH
MOV [SI],AL
INT 21H
INC SI
CMP AL,13D
JNE BACK1
DSPLY F
BACK2: MOV AH,01H
AND AL,0FH
MOV [SI],AL
INT 21H
INC SI
25 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
CMP AL,13D
JNE BACK2
RET
INPUT ENDP
AD PROC NEAR
MOV AX,0000H
MOV CX,0000H
MOV DL,0003H
LEA BX,ANS
BAAK: MOV AL,[SI]
MOV CL,[DI]
MUL CL
MOV [BX],AX
ADD SI,02H
ADD DI,06H
INC BX
DEC DL
JNZ BAAK
MOV AX,0000H
LEA SI,ANS
MOV AL,[SI]
INC SI
MOV CL,[SI]
ADD AL,CL
INC SI
MOV CL,[SI]
ADC AL,CL
MOV BL,AL
ROL BL,01H
JNC SKIP0
SUB AL,64H
CMP AL,64H
PUSHF
POP BX
AND BX,00F7H
PUSH BX
POPF
JL SKIIP
SUB AL,64H
MOV BL,AL
MOV AH,02H
MOV DL,32H
INT 21H
JMP SKIP1
26 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
RET
AD ENDP
CODE ENDS
END START
Output:
2 comments:
Reply
Reply
Comment as:
Publish Notify me
Home
27 of 28 7/6/2018 1:10 PM
Assembly Language Programming: 8086 Assembly Language Programming http://alpbyrs.blogspot.com/2015/06/assembly-language-programming.html
28 of 28 7/6/2018 1:10 PM