0% found this document useful (0 votes)
107 views86 pages

COAL Lec 4 - Intoduction To Assembly Language - Chap 4

This document provides an introduction to assembly language syntax for the IBM PC. It discusses the basic components of an assembly language program statement, including the name, operation, operand, and comment fields. It also covers topics like constants, variables, arrays, and basic instructions. The overall purpose is to explain the fundamental structure and concepts involved in writing assembly language programs for the IBM PC.

Uploaded by

ZALIL INSAN
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
107 views86 pages

COAL Lec 4 - Intoduction To Assembly Language - Chap 4

This document provides an introduction to assembly language syntax for the IBM PC. It discusses the basic components of an assembly language program statement, including the name, operation, operand, and comment fields. It also covers topics like constants, variables, arrays, and basic instructions. The overall purpose is to explain the fundamental structure and concepts involved in writing assembly language programs for the IBM PC.

Uploaded by

ZALIL INSAN
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 86

INTRODUCTION TO IBM PC ASSEMBLY

LANGUAGE

1 02/25/2021
Assembly Language Syntax

• An assembly language program consists of


statements.

• The syntax of an assembly language program


statement obeys the following rules:

2 02/25/2021
RULES

 Only one statement is written per line

 Each statement is either an instruction or an assembler


directive

 instruction
 translated into machine code

 assembler directive
 instructs the assembler to perform some specific
task
3 02/25/2021
Program Statement

• The general format for an assembly language program


statement is as follows:
name operation operand’(s) comment

Examples:

START: MOV CX,5 ; initialize counter

MAIN PROC

4 02/25/2021
Name Field
• This field is used for:

 instruction label: if present, a label must be followed by


a colon (:)

 procedure names

 variable names.

5 02/25/2021
Name Field
 Assembler translates names into memory addresses.

 Names can be from 1 to 31 characters long: (letters, digits, and


special characters: ?, ., _, $, @, %)

 Embedded blanks are not allowed, names may not begin with
a digit, period (if used) must be the first character

6 02/25/2021
Name Field

Examples:
Legal names Illegal names
COUNTER1 2ABC
@CHARACTER TWO WORDS
$500 A45.26
SUM_OF_DIGITS YOU&ME
.TEST
DONE?

7 02/25/2021
Operation Field
For an instruction

• This field consists of a symbolic operation code,


known as opcode

• The opcode describes the operation’s function

• Symbolic opcodes are translated into machine


language opcode.

8 02/25/2021
Operation Field
For an assembler directive

• This field consists of a pseudo-operation code


(pseudo-op)

• pseudo-ops tell assembly to do something

• Not converted into machine code

• Eg. PROC (to create a procedure)

9 02/25/2021
Operand Field
For an instruction
• This field specifies data to be acted on. It may have one,
two or no operands at all.

• Examples of instructions with different operand fields


NOP ; Instruction with no operand field
INC AX ; Instruction with one operand field
ADD AX, 2 ; Instruction with two operand field
If 2 operands: the first is destination, the second is the source operand

10 02/25/2021
Operand Field

For an assembler directive

• This field contains more information about the directive

11 02/25/2021
Comment Field

• A semicolon marks the beginning of a comment

• A semicolon in the beginning of a line makes it all a


comment line

• Good programming practice dictates the use of a


comment on almost every line.

12 02/25/2021
Key rules for the use of comments

• Do not say something that is obvious

• Put instruction in context of program

13 02/25/2021
Comment Field

Examples of good and bad Comments

MOV CX , 0 ; Move 0 to CX (This is not a good


comment.)
MOV CX , 0 ; CX counts terms, initially set to 0
(This is a good comment.)

14 02/25/2021
Numbers
• Binary number is written as a bit string followed by the
letter `b`.

• Decimal number is written as a string of decimal digits


followed by the letter `d`.

• Hex number is written as a string of hex digits followed


by the letter `h`.

• Hex number must begin with a decimal digit (to differentiate


between ABCH – a variable name or hex number ABC)

• Numbers may have an optional sign


15 02/25/2021
Numbers
Examples:

number type
1010 decimal
1010B binary
-2134D decimal
ABFFH illegal
0ABFFH hex
1BHH illegal
1BFFH hex
1,23 illegal

16 02/25/2021
Characters

• Characters and character segments must be enclosed


in single or double quotes; ‘A' , “hello“.

• Assembler translates characters to their ASCII code

• So there is no difference between using ‘A’ and 41h in a


program

17 02/25/2021
Variables
Declaring Integer Variables:

• An integer is a whole number, such as 4 or 4444.


Integers have no fractional part. Integer variables can be
initialized in several ways with the data allocation

directives .

18 02/25/2021
Variables

Allocating Memory for Integer Variables:


• When an integer variable is declared, the assembler
allocates memory space for the variable. The variable
name becomes a reference to the memory space
allocated to that variable.

19 02/25/2021
Syntax

name directive initializer initial value

20 02/25/2021
Variables

Pseudo-op type size range


• DB unsigned 1 byte 0 to 255.
signed 1 byte -128 to +127.
• DW unsigned 2 bytes 0 to 65,535 (64K).
signed 2 bytes -32,768 to +32,767.
• DD unsigned 4 bytes 0 to 4,294,967,295 (4 Mbytes).
signed 4 bytes -2,147,483,648 to +2,147,483,647.
• DQ 8-byte integer 4 consecutive words
• DT 10-byte integer 10 consecutive bytes

21 02/25/2021
Byte variables

• Syntax:
Name DBinitial value

Examples:

ALPHA DB4
BYT DB?

22 02/25/2021
Word variables
• Syntax:
Name DW initial value
Example:
WRD DW -2
• The assembler stores integers with the least
significant byte in the lowest address of the memory
area allocated to the integer
Example:
WD DW 1234H
low byte WD contains 34h, high byte contains 12h

23 02/25/2021
 Array Declaration

• An array is a sequential collection of variables, all of the


same size and type

• Array elements occupy contiguous memory locations.

• The program references each element relative to the


start of the array.

• An array is declared by giving it a name, a type, and a


series of initializing values or placeholders (?).

24 02/25/2021
Array Examples

B_ARRAY DB 10, 25, 20

If array starts at offset address 0200h, it will look like this:

Symbol Address Contents


B-ARRAY 0200H 10
B-ARRAY+1 0200H+1 25
B-ARRAY+2 0200H+2 20

25 02/25/2021
Array Examples

W_ARRAY DW 0FFFFh, 789Ah, 0BCDEh

If array starts at offset address 0100h, it will look like this:

Symbol Address Contents


W_ARRAY 0100H FFFFH
W_ARRAY+2 0102H 789AH
W_ARRAY+4 0104H BCDEH

26 02/25/2021
Character strings

• An array of characters can be initialized by a string of


characters.

• Inside a string, the assembler differentiates between


upper and lower cases (different ASCII codes).

• It is possible to combine characters and numbers in one


definition

27 02/25/2021
Character strings

Examples:
1)
LETTERS DB‘AaBCbc‘
Is equivalent to
LETTERS DB41H,61H,42H,43H,62H,63H
2)
MSG DB‘ABC‘,0AH,0DH,‘$‘
Is equivalent to
MSG DB41H,42H,43H,0AH,0DH,24H

28 02/25/2021
 Constant Declaration

• In an assembly language program, constants are


defined through the use of the EQU directive.
• Syntax:
Name EQU constant

 The EQU directive is used to assign a name to a


constant.
 Use of constant names makes an assembly language
easier to understand.
 No memory is allocated for a constant.
 The symbol on the right of EQU cab also be a string

29 02/25/2021
Constant Declaration
Examples:
1)
LF EQU 0AH ; LF can be used in place of 0Ah

MOV DL LF
MOV DL 0AH Have the same machine code
2)
PMT EQU ‘TYPE YOUR NAME‘ ;

instead of

MSG DB ‘TYPE YOUR NAME‘

We can use

MSG DB PMT

30 02/25/2021
BASIC INSTRUCTIONS

MOV and XCHG

31 02/25/2021
MOV instruction

• Is used to transfer data :


– between registers,
– between a register & a memory location.
Or
– To move a number directly into a register or memory
location.

32 02/25/2021
Syntax

MOV destination , source


Example:
MOV AX , WORD1
This reads “ Move WORD1 to AX “
The contents of register AX are replaced by the
contents of the memory location WORD1.

33 02/25/2021
Mov AX , WORD1

Before After

0006 0008

AX AX

0008 0008

WORD1 WORD1

34 02/25/2021
MOV AX , BX

• AX gets what was previously in BX , BX is


unchanged.

35 02/25/2021
’MOV AH , ‘A

• This is a move of the 041h ( the ASCII code of


“A” ) into register AH.

• The previous value of AH is overwritten


( replaced by new value )

36 02/25/2021
XCHG instruction

• (Exchange) operation is used to exchange

the contents of

– two registers, or
– a register and a memory location

37 02/25/2021
Syntax

XCHG destination , source

38 02/25/2021
Example

XCHG AH , BL

This instruction swaps the contents of AH and BL.

39 02/25/2021
XCHG AH , BL

Before After

1A 00 05 00

AH AL AH AL

00 05 00 1A

BH BL BH BL

40 02/25/2021
Example

XCHG AX , WORD1

• This swaps the contents of AX and memory


location WORD1.

41 02/25/2021
Restrictions on MOV & XCHG
MOV Destination Operand
Source General Segment Memory Constant
Operand Register Register Location

General
Register yes yes yes no
Segment
Register yes no yes no
Memory
Location yes yes no no
Constant yes no yes no

42 02/25/2021
Restrictions on MOV & XCHG
XCHG Destination Operand
Source General Memory
Operand Register Location

General
Register yes yes

Memory
Location yes no

43 02/25/2021
Restrictions on MOV & XCHG

Example :

ILLEGAL : MOV WORD1 , WORD2

LEGAL:
MOV AX , WORD2
MOV WORD1 , AX

44 02/25/2021
ADD & SUB

• Are used to add & subtract the contents of

– two registers,
– a register & memory location , or
– add ( subtract ) a number to ( from ) a register or a
memory location.

45 02/25/2021
Syntax

ADD destination , source

SUB destination , source

46 02/25/2021
Example

ADD WORD1 , AX

This instruction , “ Add AX to WORD1 “ , causes the


contents of AX & memory word WORD1 to be added,
and the sum is stored in WORD1. AX is unchanged.

47 02/25/2021
ADD WORD1 , AX

Before After

01BC 01BC

AX AX

0523 06DF

WORD1 WORD1

48 02/25/2021
Example

SUB AX , DX

This instruction , “ Subtract DX from AX “ , the value of


DX is subtracted from the value of AX , with the difference

being stored in AX. DX is unchanged.

49 02/25/2021
SUB AX , DX

Before After

0000 FFFF

AX AX

0001 0001

DX DX

50 02/25/2021
Example

ADD BL , 5

This is an addition of the number 5 to the contents of


register BL.

51 02/25/2021
Legal combinations of operands for
ADD & SUB

Destination operand
Memory location General Register Source Operand

yes yes General Register

no yes Memory location

yes yes Constant

52 02/25/2021
ILLEGAL

ADD BYTE1 , BYTE2


Solution :
move BYTE2 to a register before adding

MOV AL , BYTE2 ; AL gets BYTE2

ADD BYTE1 , AL ; add it to BYTE1

53 02/25/2021
INC ( increment )

Is used to add 1 to the contents of a


• Register or
• Memory location

54 02/25/2021
DEC ( decrement )

Is used to subtract 1 from the contents of a


• Register or
• Memory location

55 02/25/2021
Syntax

INC destination

DEC destination

56 02/25/2021
Example

INC WORD1

adds 1 to the contents of WORD1

57 02/25/2021
INC WORD1

Before After

0002 0003

WORD1 WORD1

58 02/25/2021
Example

DEC BYTE1

subtracts 1 to the variable BYTE1

59 02/25/2021
DEC BYTE1

Before After

FE FD

BYTE1 BYTE1

60 02/25/2021
NEG

• Is used to negate the contents of the destination.

• It does this by replacing the contents by its


two’s complement.

61 02/25/2021
Syntax

NEG destination

The destination may be a


register or
memory location.

62 02/25/2021
NEG BX

Before After

0002 FFFE

BX BX

63 02/25/2021
Type agreement of operands
• For instruction with 2 operand, the two operands must
be of the same type; that is, both words or bytes.
• Illegal …. MOV AX , BYTE1 …. Is not allowed.
• Assembler will accept both the following instructions :
MOV AH , ‘A’ ….. moves 41h into AH
MOV AX , ‘A’ ….. moves 0041h into AX

64 02/25/2021
Translation of HLL to
Assembly Language

Statement Translation
B = A

65 02/25/2021
Translation of HLL to
Assembly Language

Statement Translation
B = A MOV AX , A ; moves A into AX

MOV B , AX ; and then into B


WHY
Because direct memory – memory move is illegal we must
move the contents of A into a register before moving it
to B.

66 02/25/2021
Translation of HLL to
Assembly Language

Statement Translation

A = 5–A

67 02/25/2021
Translation of HLL to
Assembly Language

Statement Translation

A = 5–A
MOV AX , 5 ; put 5 in AX
SUB AX , A ; AX…. 5 – A
MOV A , AX; put it in A

There is another shorter way :

68 02/25/2021
NEG A ; A = -A

ADD A , 5 ;A = 5 - A

69 02/25/2021
Translation of HLL to
Assembly Language

Statement Translation

A= B–2*A

70 02/25/2021
Translation of HLL to
Assembly Language

Statement Translation

A = B – 2 * A MOV AX , B ; AX has B
SUB AX , A ; AX has B – A SUB AX
, A ; AX has B – 2 * A
MOV A , AX ; move results to B

71 02/25/2021
Program Structure
• Machine language programs consist of :
– Codes,
– Data, and
– Stack.
Each part occupies a memory segment. They are
structured as program segments. Each program
segment is translated into a memory segment by the
assembler.

72 02/25/2021
Memory Models

The size of the code & data a program can have


is determined by specifying a memory model
using the . MODEL directive.

73 02/25/2021
Syntax

. MODEL memory_mode1

LARGE

SMALL MEDUIM COMPACT Code in more than


one segment
Code in more Code in
Code in one Data in more than
than one one
segment segment segment one segment
Data in one Data in one Data in No array larger
segment segment more than than 64K bytes.
one
segment
74 02/25/2021
• Unless there is a lot of code or data, the appropriate
model is SMALL.

• . MODEL directive should come before any segment


definition.

75 02/25/2021
Data Segment
• A program’s data segment contains all the variable
definitions. Constant definitions are made here as well,
but they may be placed elsewhere in the program since
no memory allocation is involved.

• We use the . DATA directive followed by variable &


constant declarations.

• Variable addresses are computed as offsets from the


start of this segment

76 02/25/2021
Example

.DATA
WORD1 DW 2
WORD2 DW 5
MSG DB ‘ This is a message ‘
MASK EQU 10010010B

77 02/25/2021
Stack Segment

• Used to set aside storage for the stack

• Stack addresses are computed as offsets into this


segment

• Use: .stack followed by a value that indicates the size of


the stack

78 02/25/2021
Declaration Syntax

.STACK size

An optional number that


specifies the stack area size
in bytes.

79 02/25/2021
Example

.STACK 100 H

Sets aside 100h bytes for the stack area ( a reasonable


size for most applications ) .
If size is omitted , 1 KB is set aside for the stack area.

80 02/25/2021
Code Segment

• It contains a program’s instructions .

81 02/25/2021
Syntax

.CODE name

Optional name for the


segment

there is no need for a


name in a SMALL
program

82 02/25/2021
Inside the code segment

• Instructions are organized as procedures.

• The simplest procedure definition is :


name PROC
; body of the procedure
name ENDP
name is the name of the procedure, PROC and ENDP
are pseudo-op that delineate the procedure

83 02/25/2021
Example

.CODE
MAIN PROC
; main procedure body
MAIN ENDP
; other procedures go here

84 02/25/2021
Program Structure
• A program has always the following general structure:

.model small ;Select a memory model


.stack 100h ;Define the stack size
.data
; Variable and array declarations
; Declare variables at this level
.code
main proc
; Write the program main code at this level
main endp
;Other Procedures
; Always organize your program into procedures
end main ; To mark the end of the source file

85 02/25/2021
Reference
• Chap 4

86 02/25/2021

You might also like