8086 micro processor programs 2
TRANSCRIPT
8086 PROGRAMMING:2Dr Vinita Kumari
8086 SOFTWARE MODEL
2
When you write your assembly language program for an 8086, theoretically you should define the different segments!!!
Data segment refers to an area of memory set
aside for data
• Format DS:BX or DI or SI
• example:DS:0200 = 25
DS:0201 = 12
DS:0202 = 15
DS:0203 = 1F
DS:0204 = 2B
Program SegmentsData segment
PROGRAM TO ADD ARRAY OF DATA
Example:
Add 5 bytes of data: 25H, 12H, 15H, 1FH,
2BH
Program SegmentsData segment
using data segment with a constant offset
Data location in memory:
DS:0200 = 25
DS:0201 = 12
DS:0202 = 15
DS:0203 = 1F
DS:0204 = 2B
Program:
MOV AL,0
ADD AL,[0200]
ADD AL,[0201]
ADD AL,[0202]
ADD AL,[0203]
ADD AL,[0204]
PROGRAM TO ADD ARRAY OF DATA USING INC
INSTRUCTION
Example:
Add 5 bytes of data: 25H, 12H, 15H, 1FH,
2BH
Program SegmentsData segment
using data segment with an offset register
Program:
MOV AL,0
MOV BX,0200H
ADD AL,[BX]
INC BX ;same as “ADD BX,1”
ADD AL,[BX]
INC BX
ADD AL,[BX]
INC BX
ADD AL,[BX]
INC BX
ADD AL,[BX]
END
PROGRAM TO ADD ARRAY OF DATA USING
JUMP INSTRUCTION
Example:
Add 5 bytes of data: 25H, 12H, 15H, 1FH,
2BH
Program SegmentsData segment
using data segment with an offset register
Program:
MOV AL,0
MOV BX,0200H
MOV CL, 05H
BACK: ADD AL,[BX]
INC BX
DEC CL
JNZ : BACK
MOV [BX], AL
END
PROGRAM TO ADD ARRAY OF DATA WITH CARRY
Example:
Add 5 bytes of data: 25H, 12H, 15H, 1FH,
2BH
Program SegmentsData segment
using data segment with an
offset register
Program:
MOV AL,0
MOV BX,0200H
MOV CL, 05H
MOV DL, 00H
BACK: ADD AL,[BX]
INC BX
JNC: NEXT
INC DL
NEXT: DEC CL
JNZ : BACK
MOV [BX], AL
INC BX
MOV [BX], DL
8085 PROGRAM TO ADD ARRAY OF DATA
USING JUMP INSTRUCTION
Example:
Add 5 bytes of data: 25H, 12H, 15H, 1FH,
2BH
Program SegmentsData segment
Program:
LXI H 2050
MVI A,00H
MOV B, M
MVI C, 05H
BACK: ADD B
INX H
DCR C
JNZ : BACK
MOV M, A
8086 PROGRAM TO ADD TWO 16 BIT
NUMBER
PROGRAM TO ADD TWO 16 BIT NUMBERS
DATA SEGMENT
NUM DW 1234H, F234H
SUM DW 2 DUP (0)
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, NUM
MOV BX, 0H
ADD AX, NUM+2
JNC DOWN
INC BX
DOWN: MOV SUM,AX,
MOV SUM+2, BX
MOV AH, 4CH
CODE ENDS
END START
INPUT: 1234H, F234H
OUTPUT: 10468H
8086 PROGRAM TO SUBTRACT TWO 16 BIT
NUMBER
PROGRAM TO SUBSTRACT TWO 16 BIT
NUMBERS
DATA SEGMENT
NUM DW F234H, 1234H
DIF DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, NUM
SUB AX, NUM+2
MOV DIF,AX,
MOV AH, 4CH
CODE ENDS
END START
8086 PROGRAM TO SUBTRACT TWO 16 BIT
NUMBER USING LEA INSTRUCTION
DIRECTION FLAG
one of 8086 processor control flags.
controls the direction of string operations:
DF = 0 => forward processing
DF = 1 => backward processing
CLD - clears the DF; sets DF = 0
STD - sets DF = 1
21
If the direction flag is cleared with a CLDinstruction, then the pointers in SI and DI will beautomatically be incremented after each stringoperation
If the direction flag is set with an STD instruction,then the pointers in SI and DI will be automaticallybe decremented after each string operation
INSTRUCTION DESCRIPTION(CONTD.)
.
LEA – Load Effective Address
LEA register, source: determines offset of the
variable or memory location named source and
puts it into 16-bit register.
LEA DI, NEW_LOC
PROGRAM TO SUBTRACT TWO 16 BIT
NUMBERS
DATA SEGMENT
NUM DW 1234H, F234H
DIF DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
CLD
LEA SI, NUM
MOV AX, [SI]
SUB AX, [SI+2]
MOV DIF,AX,
MOV AH, 4CH
CODE ENDS
END START
PROGRAM TO ADD A SERIES OF FIVE 16 BIT
NUMBERS
DATA SEGMENT
NUM DW 1234H, F234H, 1111H,
2123H, 1024H
SUM DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
MOV CL, 05
MOV BX,00
CLD
GO:LEA SI, NUM
MOV AX, [SI]
ADD AX, [SI+2]
JNC: NEXT
INC BX
NEXT:DEC CL
JNZ: GO
MOV SUM,AX,
MOV AH, 4CH
CODE ENDS
END START
8086 PROGRAM TO MULTIPLY TWO 16 BIT
UNSIGNED NUMBER USING LEA INSTRUCTION
MUL
MUL source
Multiplies an unsigned byte from source times an
unsigned byte in AL register or unsigned word in AX
register
Example
MUL BH- AL times BH, result in AX
MUL CX- AX times CX, result high word in DX, low
word in AX
MUL BYTE PTR [BX]- AL times byte in DS pointed
by [BX]
PROGRAM TO MULTIPLY TWO 16 BIT
NUMBERS
DATA SEGMENT
NUM DW 1234H, F234H
PROD DW 2 DUP (0)
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS: DATA
START: MOV AX, DATA
MOV DS, AX
CLD
MOV DX, 00H
LEA SI, NUM
MOV AX, [SI]
MUL AX, [SI+2]
MOV PROD, AX
MOV PROD+2, DX
MOV AH, 4CH
CODE ENDS
END START