2. Types of Instructions
• Different assembly language instructions are
mainly categories into the following main
types:
3.Data transfer instructions
5.Arithmetic instructions
7.Logical and program control instructions
3. 1)Data trtansfer instruction:
• These instructions are responsible of transfer of
data among operands.
• i) MOV instruction:
copy data from one operand to another.
general Syntax :-
MOV destination ,source
4. i)Mov instruction (conti..)
• Data is copies from source to destination in
such a way that source operand is not
changed.
• The source operand may be
immediate data(constant)
a register
or
a memory operand
5. • The following data transfers are possible:
register to register
register to memory
memory to register
• limitations on types of operands:
iii. CS and IP may never be destination.
v. immediate data and segment registers may
not be moved to segment registers.
6. i. The source and destination operand must be
of same size.
iii. If the source operand is immediate data, it
must not exceed the destination operand
size.
255 (FFh) for a 8-bit destination
or
65’535 (FFFFh) for 16-bit destination
7. • MOV doesn't allow memory to memory
transfer.
• data must be transfer to a register first.
• e.g to copy var1 to var2, we have to write:
mov ax, var1
mov var2, ax
8. Types of operands:
i) Register operand:
A mov that involves only registers is the fastest
type that take only two clock cycles.
clock cycles:-
o CPU’s smallest unit of time measurement
o It varies from 50 to 210 nano seconds
o it depends upon type of CPU processor.
9. • Register should be used when an instruction
must execute quickly.
• Any register may be used as a source
operand.
• Any register, except CS and IP may be a
destination operand.
11. ii) Immediate operands:
• An immediate value i.e. Integer constant may
be moved to any register
( except a segment register or IP).
• And may also be moved to any memory
operand (variable).
12. • In immediate value can not be larger then the
destination operand.
• Examples:
mov bl , 01
mov ax, 1000h
mov total ,1000h
13. iii)Memory operand:
• a variable may be coded as one of the
operands in a mov instruction.
• This causes the contents of memory at the
variable’s address to be used.
14. • If an 8-bit variable name “count” contains the
number ‘1’ ,
• then the following MOV will copy the contents
of count into AL:
Mov al, count
15. In similar way ,BL register’s contents may
be copied into the variable count as:
Mov al, count AL
Count
01 01
17. Some illegal Mov operations are:
1. Moves between two memory operands.
3. Moves of segment registers or immediate
values to segment registers.
5. Moves to CS and IP.
7. Moves between register of different sizes.
9. Moves to immediate operands (constant).
18. iii)Loading instructions :-
• specific register instructions.
• used to load bytes or chains of bytes onto a
register.
• LEA INSTRUCTION (Load Effective Address):
• Purpose: To load the address of the source
operator.
• Syntax:
LEA destination, source
19. LEA instruction (conti..)
• The illustration of one of the facilities we
have with this command :
MOV SI, OFFSET VAR1
Is equivalent to:
LEA SI, VAR1
• MOV......OFFSET instruction is more efficient
because the offset of operand is calculated by
MASM at assembly time.
20. LEA instruction (conti..)
• LEA calculate offset of operand at runtime.
• Slows the program down.
• but LEA instruction may be used effectively
with more advanced addressing modes such
as “BASED MODE”.
• It is very probable that for the programmer it
is much easier to create extensive programs
by using LEA instruction.
21. iii)XCHG instruction
• The xchg (exchange) instruction swaps two
values.
• This instruction is used to exchange the
contents of two registers or of a register and
a variable .
• The general form is
xchg operand1 operand2
22. EXCHG instruction (conti..)
DIFFERENT FORMS OF REGISTER AND MEMORY
OPERANDS ARE:-
• Xchg reg , reg
• Xchg reg , mem
• Xchg ax , reg16
• Xchg eax, reg32
( Available only on 80386 and later processors)
23. EXCHG instruction (conti..)
• Provides the most efficient way to exchange
two 8-bit ,16-bit OR 32-bit operands.
• Because we don’t need a third register or
variable to hold a temporary value.
• Quit suitable in sorting applications where it
provides an advantage of speed.
24. • EXCHG instruction (conti..)
• One or both operand may be register,
OR
• a register may be combined with a memory
operand ,
• But two memory operands may not be used
together .
25. EXCHG instruction (conti..)
MOV AL, VAL1 ; LOAD THE AL REGISTER
XCHG VAL2 ,AL
; EXCHANGE THE AL AND VAL2
MOV VAL1 , AL ; STORE AL BACK INTO VAL1
27. EXCHG instruction (conti..)
Some valid example:
• XCHNG EAX, EBX
(;exchange two 32-bit registers)
• XCHNG AX, BX
(;exchange two 16-bit registers)
28. EXCHG instruction (conti..)
• XCHNG ah , al
; exchange two 8-bit registers
• XCHG var , bx
; exchange 16-bit memory operand with
BX
29. EXCHG instruction (conti..)
• Note that the order of the xchg's operands
does not matter.
• Both operands must be the same size.
• The xchg instruction does not modify any flags
30. .MODEL SMALL
.STACK 100H
.DATA
VAL1 DB 0AH
VAL2 DB 14H
.CODE
MAIN PROC
MOV AX, @DATA ;INITIALIZE DS REGISTER
MOV DS,AX
MOV AL, VAL1 ; LOAD THE AL REGISTER
XCHG VAL2 ,AL ; EXCHANGE THE AL AND VAL2
MOV VAL1 , AL ; STORE AL BACK INTO VAL1
MOV AX,4C00H
INT 21H
MAIN ENDP
END MAIN
31. 2)Arithematic Instructions
• The Intel instruction set has instructions for
integer arithmetic using 8,16 or 32-bits
operands.
• The basic arithematic instructions are given
below:
iii. INC and DEC instructions
iv. ADD instructions
v. SUB instructions
vi. MUL and IMUL instructions
32. i. INC and DEC instructions
• These INC and DEC are actually unary
operators and their operands may be either
8,16, 32-bits register or memory variables.
• INC is used to add 1 to the value of a single
operand.
• DEC is used to subtract 1 from the value of a
single operand.
33. INC and DEC instructions conti..
• These instructions have the following general
form:
INC destination
DEC destination
• These instructions are faster than ADD and
SUB instructions
34. ii) ADD instruction:
• This instruction adds 8 ,16 or 32-bits source
operand to a destination operand of the same
size.
• The syntax of this instruction is:
ADD destination, source
35. ADD instruction conti..
The source operand is unchanged by the
operation .
• Source operand may be a
register,
memory operand
or immediate operand
• whereas destination may be a
register or memory operand.
36. ADD instruction conti..
• A segment register may not be the destination
and only one memory operand may be used.
• The size of source and destination operand
must be the same, in this binary instruction,
Add is a binary operator.
37. iii)Sub Instruction:
• This instruction subtracts a source operand
from a destination operand.
• The syntax of this instruction is:
SUB destination, source
38. SUB instruction conti..
• The sizes of both operands must match and
only one may be the memory operand.
• A segment register may not be the
Destination operand.
• All status flags are affected by this binary
instructing SUB is a binary operand.
39. iv)MUL and IMUL instructions:
• These instructions are used to multiply an 8-
bit or 16-bit operand by AL or AX.
• If an 8-bit source operand is supplied ,if will
automatically multiplied and the result will be
stored in AX.
40. MUL and IMUL instructions conti..
• If a 16-bit operand is source operand is
supplied it will be automatically multiplied by
AX and the result will be stored in DX and AX
so that the higher bits are in DX.
41. • The syntax of these instructions are:
MUL source
IMUL source
• The source operand may be a register or
memory operand.
mul reg
mul mem
• but may not be an immediate data.
42. • The IMUL (integer multiply) instruction
multiplies signed binary values.
• Its sign extends the result through highest bit
of AX or AX:DX ,depending on size of the
source operand.
43. • A result of -10h ,for example ,would be
extended into AH if an 8-bits operation had
taken place or into DX for accomplishing a 16-
bit operation.
44. • DIV INSTRUCTION
Purpose: Division without sign.
• Syntax:
DIV source
• The divider can be a byte or a word and it is
the operator which is given the instruction.
• If the divider is 8 bits, the 16 bits AX register is
taken as dividend and
45. • if the divider is 16 bits the even DX:AX
register will be taken as dividend, taking the
DX high word and AX as the low.
• If the divider was a byte then the quotient will
be stored on the AL register and the residue
on AH, if it was a word then the quotient is
stored on AX and the residue on DX.
46. IDIV INSTRUCTION
• Purpose: Division with sign.
• Syntax:
• IDIV source
• It basically consists on the same as the DIV
instruction,
• the only difference is that this one performs
the operation with sign.
• For its results it used the same registers as the
DIV instruction.
47. 2)LOGICAL INSTRUCTIONS:
• generates their result either as true or false.
• Zero ,Carry and Sign flags are particularly associated
with showing the results of Boolean and comparison
instructions.
• Boolean instructions are based on boolean algebra
operations .
• these operations allow modification of individual bits
in binary numbers.
48. AND results into 1 when both the input bit
are 1.
OR results into 1 when either input bit is 1.
XOR results into 1 when the input bits are
different and is known as exclusive OR.
NOT results into the reverse of input bit
i.e. 1 becomes 0 and 0 becomes 1.
49. ii. The AND instruction
iii.The OR instruction
iv.The XOR instruction
v. The NOT instruction
vi.The NEG instruction