Types of Instructions• Different assembly language instructions are mainly categories into the following main types:3.Data transfer instructions5.Arithmetic instructions7.Logical and program control instructions
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
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
• 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.
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
• MOV doesnt 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
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 measuremento It varies from 50 to 210 nano secondso it depends upon type of CPU processor.
• 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.
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).
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
LEA instruction (conti..)• The illustration of one of the facilities we have with this command : MOV SI, OFFSET VAR1Is equivalent to: LEA SI, VAR1• MOV......OFFSET instruction is more efficient because the offset of operand is calculated by MASM at assembly time.
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.
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
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)
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.
• 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 .
EXCHG instruction (conti..)MOV AL, VAL1 ; LOAD THE AL REGISTERXCHG VAL2 ,AL ; EXCHANGE THE AL AND VAL2MOV VAL1 , AL ; STORE AL BACK INTO VAL1
EXCHG instruction (conti..) Some valid example:• XCHNG EAX, EBX (;exchange two 32-bit registers)• XCHNG AX, BX (;exchange two 16-bit registers)
EXCHG instruction (conti..)• XCHNG ah , al ; exchange two 8-bit registers• XCHG var , bx ; exchange 16-bit memory operand with BX
EXCHG instruction (conti..)• Note that the order of the xchgs operands does not matter.• Both operands must be the same size.• The xchg instruction does not modify any flags
.MODEL SMALL.STACK 100H.DATAVAL1 DB 0AHVAL2 DB 14H.CODEMAIN 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 21HMAIN ENDPEND MAIN
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 instructionsiv. ADD instructionsv. SUB instructionsvi. MUL and IMUL instructions
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.
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
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
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.
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.
iii)Sub Instruction:• This instruction subtracts a source operand from a destination operand.• The syntax of this instruction is: SUB destination, source
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.
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.
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.
• 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.
• 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.
• 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.
• 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
• 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.
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.
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.
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.
ii. The AND instructioniii.The OR instructioniv.The XOR instructionv. The NOT instructionvi.The NEG instruction