Vous êtes sur la page 1sur 30

Lecture 4

Chapter 6 Symbolic Instruction and Addressing

Chapter Outline
Data Transfer Instruction
Basic Arithmetic Instruction
The INT Instruction

Registers
Information inside the microprocessor is stored in registers.
The registers are classified according to the functions they perform
In general there are fourteen 16-bit registers:
Data registers:
There are four general data registers.
They hold data for an operation.
Address registers:
They are divided into segment, pointer, and index registers.
They hold the address of an instruction or data.
Status register:
It is called the FLAGS register.
It keeps the current status of the processor.
3

Registers

Data Registers

AX
BX
CX
DX
CS
DS
SS
ES
SI
DI
SP
BP
IP

AH

AL

BH

BL

CH

CL

DH

DL

Segment Registers

Pointer and Index Registers

FLAGS Register

Data Registers: AX, BX, CX, DX


These four registers, in addition to being general-purpose registers,
also perform special functions.
The high and low bytes of these registers can be accessed separately.
Ex. The high byte of AX is called AH, and the low byte is called
AL.
This arrangement gives us more registers to use when dealing
with byte-size data.

Data Registers: AX, BX, CX, DX


AX (Accumulator Register) is the preferred register to use in
arithmetic, logic, and data
transfer instructions
BX (Base Register) also serves as an address register.
CX (Count Register) Program loop constructions are facilitated by
the use of CX, which
serves as a loop counter.
DX (Data Register) is used in multiplication and division.

Address Registers - Segment Registers CS, DS, SS, ES


Address registers store addresses of instructions and data in memory.
These values are used by the processor to access memory locations.
In the 8086 processor (16-bit processor):
Memory is a collection of bytes, each memory byte has an
address, starting with 0.
The processor assigns a 20-bit physical address to its memory
20
locations
thus it is possible to address 2 = 1,048,576 bytes
(one megabyte) of memory.
The bytes in memory have addresses 00000h to FFFFFh.

Address Registers - Segment Registers CS, DS, SS, ES


To keep track of the various program segments, the 8086 is
equipped with four segments registers to hold segment numbers:
CS (Code Segment): contains the code segment number.
DS (Data segment): contains the data segment number.
SS (Stack Segment): contains the stack segment number.
ES (Extra Segment): is used if a program needs to access a
second data segment.

Address Registers Pointer and Index Registers: SP, BP, SI, DI


SP (Stack Pointer) register is used in conjunction with SS for
accessing the stack segment.
BP (Base Pointer) register is used primarily to access data on the
stack. However, unlike SP, BP can be used to access data in the
other segments.
SI (Source Index) register is used to point to memory locations in
the data segment addressed by DS. By incrementing the contents
of SI, we can easily access consecutive memory locations.
DI (Destination Index) register performs the same functions as SI.
There is a class of instructions, called string operations, that use DI
to access memory locations addressed by ES.
9

Address Registers - Instruction Pointer (IP)


IP is updated each time an instruction is executed so that it will
point
to the next instruction.
Unlike other registers, the IP cannot be directly manipulated by an
instruction (i.e. The instruction cannot contain IP as its operand).

10

Data Transfer Instruction


MOV
MOVSX-MOVZX
XCHG
LEA

11

MOV Instruction
The MOV (move) instruction is used to:
Transfer data between Registers.
Transfer data between registers and memory locations.
Move a number directly into a register or memory location.
Note: any register can be used except CS & IP
Syntax:
MOV destination, source
Example:
MOV AX, WORD1
MOV AX, BX
MOV AX, 'A'

Before
0006
AX
0008
WORD1

After
0008
AX
0008
WORD1
12

Legal Combinations of operands for MOV

Source operand
General register
Segment register
Memory location
Constant

Destination Operand
General Segment Memory
register register location
yes
yes
yes
yes
no
yes
yes
yes
no
yes
no
yes

Constant
no
no
no
no

Illegal: MOV WORD1, WORD2 Legal: MOV AX, WORD2


MOV WORD1, AX
Illegal: MOV DS, CS

Legal: MOV AX, CS


MOV DS, AX
13

Type Agreement of Operands


The operands of any two-operand instruction must be of the same
type (i.e. Both bytes or words).
Illegal: MOV AX, BYTE1
However, the assembler will accept both of the following:
MOV AH, 'A'
moves 41H into AH
MOV AX, 'A'
moves 0041H into AX

14

MOVE-and-Fill Instruction (MOVSX-MOVZX)


The MOVSX (move) instruction is used to:
Move a byte or word source to a word or doubleword destination.
Use with signed arithmetic values
Syntax:
MOVSX destination, source
Example:
MOVSX CX,10110000B . CX= 11111111 10110000

15

MOVE-and-Fill Instruction (MOVSX-MOVZX)


The MOVZX (move) instruction is used to:
Move a byte or word source to a word or doubleword destination.
Use with unsigned arithmetic values
Syntax:
MOVZX destination, source
Example:
MOVZX CX,10110000B . CX= 00000000 10110000

16

XCHG Instruction
The XCHG (exchange) operation is used to exchange the contents
of:
Two registers.
A register and a memory location.
Syntax:
XCHG destination, source
Example:
XCHG AH, BL
XCHG AX,WORD1

Before
1A
00
AH
AL

After
05
00
AH
AL

00
BH

00
BH

05
BL

1A
BL
17

Legal Combinations of operands for XCHG

Source Operand
General register
Memory location

Destination Operand
General Memory
register location
yes
yes
yes
no

18

LEA Instruction
LEA (Load Effective Address) puts a copy of the source offset
address into the destination.
Syntax:
LEA destination, source
Where destination is a general register and source is a memory
location
Example:
MSG DB 41H, 42H, 43H
LEA DX, MSG
puts the offset address of the variable MSG into DX.
Data Definition + Basic Instructions

19

17

Basic Arithmetic Instruction


ADD
SUB
INC
DEC

20

ADD and SUB Instructions


The ADD (add) and SUB (subtract) instructions are used to:
Add/subtract the contents of:
Two registers.
A register and a memory location.
Add/subtract a number to/from a register or memory location.
Syntax:
ADD destination, source

SUB destination, source

Examples:
ADD WORD1, AX

SUB AX, DX

Before
01BC
AX
0523
WORD1

After
01BC
AX
06DF
WORD1

Before
0000
AX
0001
DX

After
FFFF
AX
0001
DX
21

Legal Combinations of operands for ADD & SUB

Source Operand
General register
Memory location
Constant

Destination Operand
General Memory
register location
yes
yes
yes
no
yes
yes

Illegal: ADD BYTE1, BYTE2


Legal: MOV AL, BYTE2
ADD BYTE1, AL

22

INC and DEC Instructions


INC (increment) is used to add 1 to the contents of a register or
memory location.
DEC (decrement) is used to subtract 1 from a register or memory
location.
Syntax:
INC destination

DEC destination

Examples:
INC WORD1

DEC BYTE1

Before
0002
WORD1

After
0003
WORD1

Before
FFFE
BYTE1

After
FFFD
BYTE1
23

INT Instruction
To invoke a DOS or BIOS routine, the INT (interrupt) instruction is
used.
Format:
INT interrupt_number
where interrupt_number is a number that specifies a routine.

INT 21h
INT 21h may be used to invoke a large number of DOS functions.
A particular function is requested by placing a function number in
the AH register and invoking INT 21h.
Some of the functions are:
Function number
1
2
9

Routine
single-key input
single-character output
character string output

INT21h functions expect input values to be in certain registers and


return output values in other registers.

INT 21h
Function 1: Single-Key Input
Input: AH = 1
Output: AL = ASCII code if character key is pressed
= 0 if non-character key is pressed
To invoke the routine, the following instructions should be executed:
MOV AH,1 ; input key function
INT 21H
; ASCII code in AL

INT 21h
Function 2: Display a character or execute a control function
Input: AH = 2
DL = ASCII code of the character
Output AL = ASCII code of the character
To invoke the routine, the following instructions should be executed:
MOV AH, 2
; display character function
MOV DL, '?'
; character is '?' (or any other character)
INT 21H
; display character

INT 21h
Function 2 may be used to perform control functions.
If DL contains the ASCII code of a control character, INT 21h
causes the control function to be performed.
The principal control characters are :
ASCII code (Hex)
07H
08H
09H
0AH
0DH

Symbol
BEL
BS
HT
LF
CR

Function
beep (sounds a tone)
backspace
tab
line feed (new line)
carriage return (start of current line)

INT 21h
Function 9: Display a string
Input: AH = 9
DX = offset address of string.
The string must end with a '$' character
To invoke the routine, the following instructions should be executed:
MOV AX, @DATA
A program containing a data segment should
begins with these two instructions
MOV DS, AX
MOV AH, 9
LEA DX, MSG
INT 21H

; display string function


; get message (Load Effective Address)
; display string

INT 21h
Function 4CH: Returning control to DOS
Input: AH = 4CH
To invoke the routine, the following instructions should be executed:
MOV AH, 4CH
; DOS exit function
INT 21H
; exit to DOS