INTRODUCTION TO IBM PC ASSEMBLY LANGUAGE

Download Report

Transcript INTRODUCTION TO IBM PC ASSEMBLY LANGUAGE

INTRODUCTION TO IBM PC
ASSEMBLY LANGUAGE
1
CAP221
4/8/2015
Assembly Language Syntax
• An assembly language program
consists of statements.
• The syntax of an assembly
language
program
statement
obeys the following rules:
2
CAP221
4/8/2015
RULES
Only one statement is written per line
Each statement is either an instruction or
an assembler directive
instruction is translated into machine
code
assembler directive instructs the
assembler to perform some specific task
3
CAP221
4/8/2015
Program Statement
• The general format for an assembly language
program statement is as follows:
name operation operand’(s) comment
Examples:
START:
MOV CX,5
MAIN
PROC
4
; initialize counter
CAP221
4/8/2015
Name Field
• This field is used for:
instruction label: if present, a label must
be followed by a colon (:)
procedure names
variable names.
5
CAP221
4/8/2015
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
CAP221
4/8/2015
Name Field
Examples:
Legal names
7
Illegal names
COUNTER1
2ABC
@CHARACTER
$500
SUM_OF_DIGITS
.TEST
DONE?
TWO WORDS
A45.26
YOU&ME
CAP221
4/8/2015
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
CAP221
4/8/2015
Operation Field
For an assembler directive
• This field consists of a pseudooperation code (pseudo-op)
• pseudo-ops tell assembly to do
something
9
CAP221
4/8/2015
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
CAP221
4/8/2015
Operand Field
For an assembler directive
• This field contains more information
about the directive
11
CAP221
4/8/2015
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
CAP221
4/8/2015
Key rules for the use of comments
• Do not say something that is
obvious
• Put instruction in context of
program
13
CAP221
4/8/2015
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
CAP221
4/8/2015
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
• Numbers may have an optional sign
15
CAP221
4/8/2015
Numbers
Examples:
number
type
1010
1010B
-2134D
ABFFH
0ABFFH
1BHH
1BFFH
1,23
decimal
binary
decimal
illegal
hex
illegal
hex
illegal
16
CAP221
4/8/2015
Characters
• Characters and character
segments must be enclosed in
single or double quotes; ‘A' ,
“hello“.
• Assembler translates
characters to their ASCII code
17
CAP221
4/8/2015
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
CAP221
4/8/2015
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
CAP221
4/8/2015
Syntax
name directive initializer
20
CAP221
initial value
4/8/2015
Variables
Pseudo-op type
• DB unsigned
signed
• DW unsigned
signed
• DD unsigned
signed
size
1 byte
1 byte
2 bytes
2 bytes
4 bytes
range
0 to 255.
-128 to +127.
0 to 65,535 (64K).
-32,768 to +32,767.
0 to 4,294,967,295 (4 Mbytes).
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
CAP221
4/8/2015
Byte variables
• Syntax:
Name
DB
initial value
Examples:
ALPHA
BYT
22
DB
DB
4
?
CAP221
4/8/2015
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
CAP221
4/8/2015
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
CAP221
4/8/2015
Array Examples
B_ARRAY
DB
10, 25, 20
If array starts at offset address 0200h, it will look like this:
Symbol
B-ARRAY
B-ARRAY+1
B-ARRAY+2
25
Address
0200H
0200H+1
0200H+2
CAP221
Contents
10
25
20
4/8/2015
Array Examples
W_ARRAY
DW 0FFFFh, 789Ah, 0BCDEh
If array starts at offset address 0100h, it will look
like this:
Symbol
W_ARRAY
W_ARRAY+2
W_ARRAY+4
26
Address
0100H
0102H
0104H
CAP221
Contents
FFFFH
789AH
BCDEH
4/8/2015
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
CAP221
4/8/2015
Character strings
Examples:
1)
LETTERS
Is equivalent to
LETTERS
2)
MSG
Is equivalent to
MSG
28
DB
‘AaBCbc‘
DB
41H,61H,42H,43H,62H,63H
DB
‘ABC‘,0AH,0DH,‘$‘
DB
41H,42H,43H,0AH,0DH,24H
CAP221
4/8/2015
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
CAP221
4/8/2015
Constant Declaration
Examples:
1)
LF
EQU
0AH ; LF can be used in place of 0Ah
MOV
MOV
DL
DL
LF
0AH
PMT
EQU
‘TYPE YOUR NAME‘ ;
DB
‘TYPE YOUR NAME‘
DB
PMT
Have the same machine code
2)
instead of
MSG
We can use
MSG
30
CAP221
4/8/2015
BASIC INSTRUCTIONS
MOV and XCHG
31
CAP221
4/8/2015
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
CAP221
4/8/2015
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
CAP221
4/8/2015
Mov AX , WORD1
Before
After
0006
0008
AX
AX
0008
0008
WORD1
WORD1
34
CAP221
4/8/2015
MOV AX , BX
• AX gets what was previously in
BX , BX is unchanged.
35
CAP221
4/8/2015
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
CAP221
4/8/2015
XCHG instruction
• (Exchange) operation is used to exchange
the contents of
– two registers, or
– a register and a memory location
37
CAP221
4/8/2015
Syntax
XCHG destination , source
38
CAP221
4/8/2015
Example
XCHG AH , BL
This instruction swaps the contents of AH and
BL.
39
CAP221
4/8/2015
XCHG AH , BL
After
Before
1A
AH
00
BH
40
00
05
00
AL
AH
AL
00
1A
BH
BL
05
BL
CAP221
4/8/2015
Example
XCHG AX , WORD1
• This swaps the contents of AX and memory
location WORD1.
41
CAP221
4/8/2015
Restrictions on MOV & XCHG
MOV
Source
Operand
Destination Operand
General
Register
Segment
Register
Memory
Location
Constant
General
Register
yes
yes
yes
no
Segment
Register
yes
no
yes
no
Memory
Location
yes
yes
no
no
Constant
yes
no
yes
no
42
CAP221
4/8/2015
Restrictions on MOV & XCHG
XCHG
Source
Operand
43
Destination Operand
General
Register
Memory
Location
General
Register
yes
yes
Memory
Location
yes
no
CAP221
4/8/2015
Restrictions on MOV & XCHG
Example :
ILLEGAL : MOV WORD1 , WORD2
LEGAL:
MOV AX , WORD2
MOV WORD1 , AX
44
CAP221
4/8/2015
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
CAP221
4/8/2015
Syntax
46
ADD
destination , source
SUB
destination , source
CAP221
4/8/2015
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
CAP221
4/8/2015
ADD WORD1 , AX
Before
48
After
01BC
01BC
AX
AX
0523
06DF
WORD1
WORD1
CAP221
4/8/2015
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
CAP221
4/8/2015
SUB AX , DX
Before
After
0000
50
FFFF
AX
AX
0001
0001
DX
DX
CAP221
4/8/2015
Example
ADD BL , 5
This is an addition of the number 5 to the
contents of register BL.
51
CAP221
4/8/2015
Legal combinations of operands for
ADD & SUB
Destination operand
Source Operand
General Register
Memory location
General Register
yes
yes
Memory location
yes
no
Constant
yes
yes
52
CAP221
4/8/2015
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
CAP221
4/8/2015
INC ( increment )
Is used to add 1 to the contents
of a
• Register or
• Memory location
54
CAP221
4/8/2015
DEC ( decrement )
Is used to subtract 1 from the
contents of a
• Register or
• Memory location
55
CAP221
4/8/2015
Syntax
INC destination
DEC destination
56
CAP221
4/8/2015
Example
INC WORD1
adds 1 to the contents of WORD1
57
CAP221
4/8/2015
INC WORD1
58
Before
After
0002
0003
WORD1
WORD1
CAP221
4/8/2015
Example
DEC BYTE1
subtracts 1 to the variable BYTE1
59
CAP221
4/8/2015
DEC BYTE1
Before
60
After
FE
FD
BYTE1
BYTE1
CAP221
4/8/2015
NEG
• Is used to negate the contents of the
destination.
• It does this by replacing
by its two’s complement.
61
CAP221
the
contents
4/8/2015
Syntax
NEG
destination
The destination may be a
register or
memory location.
62
CAP221
4/8/2015
NEG BX
63
Before
After
0002
FFFE
BX
BX
CAP221
4/8/2015
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
CAP221
4/8/2015
Translation of HLL to
Assembly Language
Statement
B = A
Translation
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.
65
CAP221
4/8/2015
Translation of HLL to
Assembly Language
StatementTranslation
A = 5–A
MOV AX , 5
SUB AX , A
MOV A , AX
; put 5 in AX
; AX…. 5 – A
; put it in A
There is another shorter way :
66
CAP221
4/8/2015
67
NEG
A
; A = -A
ADD
A , 5
;A = 5 - A
CAP221
4/8/2015
Translation of HLL to
Assembly Language
Statement
A= B–2*A
Translation
MOV AX , B
; AX has B
SUB AX , A ; AX has B – A
SUB AX , A
; AX has
B–2*A
MOV A , AX
68
CAP221
; move results to B
4/8/2015
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.
69
CAP221
4/8/2015
Memory Models
The size of the code & data a
program can have is determined
by specifying a memory model
using the . MODEL directive.
70
CAP221
4/8/2015
Syntax
. MODEL
memory_mode1
LARGE
SMALL
71
MEDUIM
COMPACT
Code in one
segment
Code in more
than one
segment
Code in
one
segment
Data in one
segment
Data in one
segment
Data in
more than
one
segment
CAP221
Code in more than
one segment
Data in more than
one segment
No array larger
than 64K bytes.
4/8/2015
• Unless there is a lot of code or data,
the appropriate model is SMALL.
• . MODEL directive should come
before any segment definition.
72
CAP221
4/8/2015
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
73
CAP221
4/8/2015
Example
.DATA
WORD1
WORD2
MSG
MASK
74
DW 2
DW 5
DB ‘ This is a message ‘
EQU 10010010B
CAP221
4/8/2015
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
75
CAP221
4/8/2015
Declaration Syntax
.STACK
size
An optional number that
specifies the stack area size
in bytes.
76
CAP221
4/8/2015
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.
77
CAP221
4/8/2015
Code Segment
• It contains a program’s
instructions.
78
CAP221
4/8/2015
Syntax
.CODE
name
Optional name for the
segment
there is no need for a
name in a SMALL
program
Why??
The assembler will
generate an error
79
CAP221
4/8/2015
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
80
CAP221
4/8/2015
Example
.CODE
MAIN
PROC
; main procedure body
MAIN
ENDP
; other procedures go here
81
CAP221
4/8/2015
Program Structure
•
A program has always the following general structure:
.model
.stack
.data
small
100h
;Select a memory model
;Define the stack size
; 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
82
CAP221
4/8/2015