Chapter 3
Part 2
Basics of
Assembly
Languages
Prepared by: Amanuel G
Outline
– Why Assembly Language?
– Type and Variable Declaration In 8086 Microprocessor
– Array in 8086
– Basic Arithmetic Instruction of 8086
Top 3 Reasons to Learn
Assembly Language
1. Improve algorithmic/Coding Skills
2. Introduction with low level languages
3. Industrial Purposes
Device drivers
Real time systems
Embedded Computing machines
Assembly Languages is lighter and faster.
Type and Variable Declaration
In 8086 Microprocessor
– Variables declaration in C/C++
– E.g. INT X=10; / Double Y = 20.0;
– Data Types in Assembly Languages
a. DB (DEFINE BYTE)
b. DW (DEFINE WORD)
c. DD (DEFINE DOUBLEWORD)
d. DQ (DEFINE QUADWORD)
DEFINE BYTE
– DB : it stands for define byte (For Smaller Values)
– Example: VAR_NAME TYPE VALUE
A DB 9
MESSAGE DB ‘HELLOWORLD’
– HERE A DATABYTE MEMORY IS ALLOCATED FOR EACH CHARACTER
DEFINE WORD
– DW IS DOR LARGER VALUES
– EXAMPLE : VAR DW 1122H
– STRING IN ASSEMBLY LANGUAGE
STR1 DB “HELLO WORLD”
STR2 DB “HELLO WORLD”,’$’ // $ FOR END OF STRING
STR2 DB 10,13, “HELLO WORLD”,’$’ //10,13 FOR NEW LINE
ARRAY IN 8086
– DECLARATION
NAME TYPE VALUE
– EXAMPLE A DB 1H, 2H, 3FH, 7FH
B DB 1111H, 2222H, 3333H
– ACCESSING VALUES FROM ARRAY A DB 22H, 23H, 24H, 25H
A[0] A[1] A[2] A[3]
22 23 24 25
– EXAMPLE MOV AL, A[2]
– Or Using Index registers MOV SI, 2
– MOV AL, A[SI]
ARRAY DECLARATION USING DUP
– DUP or dup STANDS FOR DUPLICATE
– EXAMPLE: X DB 3 DUP (7)
– similar to X DB 7,7,7
– Y DB 3 DUP (5,6)
– Similar to Y DB 5,6,5,6,5,6
DECLARING AN EMPTY ARRAY
VAR DB 10 DUP (?)
– EQUIVALENT TO INT VAR [10]= {0};
MOV INSTRUCTION IN 8086
– IT COPY SECONDE OPERAND CALLED SOURCE TO FIRST OPERAND
CALLED DESTINATION . E.g. MOV AX, 7
– TYPES OF OPERND SUPPORTED
– MOV REG , MEMORY
– MOV MEMORY , REG
– MOV REG, REG
– MOV MEMORY, IMMEDIATE
– MOV REG, IMMEDIATE
– NOTE : - MOV MEM, MEM ARE NOT SUPPORTED
CONT….
– REG - AX, BX, AH, AL, CH,CL,DI,SI,…………. ETC
– IMMMEDIATE 7, -11,4FH, ……….ETC
– MEMORY [BX] OR [BX+SI] + DISPLACEMENT
– EXAMPLE:- [BX+SI] OR [SI] OR [BP+DI] + DISPLACEMENT
– NOTE:- READ ADDRESS MODE AND PHYSICAL ADDRESS CALCUALTION
EXAMPLE: MOV AX, BX // REG, REG
MOV [BX], AX //MEM,REG
MOV [BX+SI] , 5 // MEM, IMMEDIATE
MOV AX, 5 //REG, IMMEDIATE
MOV AX, [BX] // REG, MEM
BASIC INSTRUCTION OF 8086
ARITHMETIC INSTRUCTION
– The arithmetic Instructions include:
1. Addition
2. Subtraction
3. Multiplication
4. Division
5. Comparison
6. Negation
7. Increment / Decrement etc.
Cont.…
1. ADD: Addition
– Syntax: ADD destination, Source
– Result is stored in destination.
– Example: Suppose AX = 11H and BX = 14H
– ADD AX , BX ; AX = 25H
2. SUB : SUBSTRACTION
– EXAMPLE: MOV CH, 22H
– SUB CH, 11H // NOW CH = 11H
– WHAT IF WE DO SUB CH , 44H ????????????????????
Cont.…
PROCESSOR STATUS REGISTER OR FLAGS
– 15 11 10 9 8 7 6 4 2 0
– 16 BIT, EACH BIT IS CALLED AS “FLAG” CAN BE 0 OR 1
Cont.…
– FLAGS PLAYS VERY IMPORTANT ROLE:
– EXAMPLE 1: MOV CH, 12H
– SUB CH, 12H /// RESULT = ????? Ans: 0
– Flags changes in the following manner: Z=1 (Z flags set to 1, C = 0)
– Example 2: MOV CH, 21H
– SUB CH, 11H
– Z=0 (Result not zero), C=0 (No carry), S=0(result not negative)
– Example 3: MOV CH, 12H
– SUB CH, 24H
– Flags: Z= 0 (result is not zero), S=1(result is negative) , C=1 (Carry)
Cont.…
3. MUL : MULTIPLICATION
Syntax: MUL src // only one operand and Src is reg or mem
– Immediate multiplication is not allowed e.g. MUL 7 // meaningless
– Ex: MOV AL, 7H
– MOV BL, 7H // keep immediate data in BL register
– MUL BL // AL = 7H * 7H = 49H
– NOTE :
– Two 8 bit numbers multiplied generate 16 bit product.
– Two 16 bit numbers multiplied generate 32 bit product.
IMUL : used for signed Numbers
– Example: MOV AL, 35H
MOV BL, 7H // KEEP IMMEDIATE DATA IN BL
IMUL BL
– Result : AX = 00F5 H or +245 in decimal. // Note here sign is present
– It uses OF (Overflow Flag)
– Example: MOV AL, -5H
MOV BL, 7H // KEEP IMMEDIATE DATA IN BL
IMUL BL // RESULT : -35H & Sign Flag is set to 1.
Cont.…
4. DIV (UNSIGNED) / IDIV (SIGNED)
– SYNATX : DIV SRC // SRC IS REG/MEM
– IMMEDIATE DEIVISION IS NOT ALLOWED
– INTERRUPT IS GENERATED WHEN AN ERROR OCCURS
– ERRORS ARE : a- divided by zero
– b- divide overflow {4000 / 2 = 2000}
– Example : MOV AX, 0041H
– MOV AL, 02H
– DIV BL
BASIC INSTRUCTION OF 8086
LOGICAL INSTRUCTIONS
– AND : perform bit wise AND operation
Cont.…
– BENEFITS OF “AND” OPERATION
Cont.…
– BENEFITS OF “AND” PROGRAMMING
Cont.…
– THE “OR “ OPERATION
Cont.…
– THE “XOR “ OPERATION
– XOR AX, AX // AX=0
Cont.…
– TEST: PERFORM BITWISE AND OPERATION BETWEEN TWO OPERAND
– BENEFIT OF TEST OPERATION IT DON’T THE CONTENT OF OPERAND
Cont.…
– NOT
BASIC INSTRUCTION OF 8086
PROGRAM FLOW CONTROL & SOME OTHER BASIC INSTRUCTION
Cont.…
JUMPS : Conditional & Unconditional
Cont.…
LABEL
Cont.…
Conditional Jump
Cont.…
JZ/JNZ
Cont.…
JA/JG, JB , JC, JCXZ
Cont.…
INC, DEC, CMP, SHR, SHL. ROR, ROL
Cont.…
Bit Manipulation Instruction: SHL, SHR, ROR, ROL
Cont.…
SHL : Shift Left
Cont.…
SHR : Shift Right
Cont.…
ROL:
Cont.…
QUIZ
INTERRUPTS AND ITS USES
– There are two types of interrupts
1. Hardware Interrupt
2. 2. Software Interrupt
LAB SESSION 1
Program To Print String
Cont.…
– MOUNT C C:/8086/
– C:
– MASM filename.asm
– Link filename.asm
– Filename.exe // FINAL EXECUTION
LAB SESSION 2
Print a key & Print on Screen
Cont.…
Cont.…
Cont.…
Cont.…
Cont.…
Cont.…