Download INTRODUCTION TO IBM PC ASSEMBLY LANGUAGE

Document related concepts
no text concepts found
Transcript
INTRODUCTION TO IBM PC
ASSEMBLY LANGUAGE
1
CAP221
4/30/2017
Assembly Language Syntax
• An assembly language program
consists of statements.
2
CAP221
4/30/2017
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/30/2017
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/30/2017
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/30/2017
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/30/2017
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/30/2017
Operation Field
For an instruction
• The opcode describes the operation’s
function
• Symbolic opcodes are translated into
machine language opcode.
8
CAP221
4/30/2017
Operation Field
For an assembler directive
• This field consists of a pseudooperation code (pseudo-op)
• pseudo-ops tell assembler to do
something
9
CAP221
4/30/2017
Operand Field
For an instruction
• 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/30/2017
Numbers
Examples:
number
type
1010
1010B
-2134D
ABFFH
0ABFFH
1BHH
1BFFH
1,23
decimal
binary
decimal
illegal
hex
illegal
hex
illegal
11
CAP221
4/30/2017
Characters
• Characters and character
segments must be enclosed in
single or double quotes; ‘A' ,
“hello“.
• Assembler translates
characters to their ASCII code
12
CAP221
4/30/2017
Byte variables
• Syntax:
Name
DB
initial value
Examples:
ALPHA
13
DB
4
CAP221
4/30/2017
Word variables ( 2 bytes)
• 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
14
CAP221
4/30/2017
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
15
Address
0200H
0200H+1
0200H+2
CAP221
Contents
10
25
20
4/30/2017
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
16
Address
0100H
0102H
0104H
CAP221
Contents
FFFFH
789AH
BCDEH
4/30/2017
Character strings
Examples:
1)
LETTERS
Is equivalent to
LETTERS
2)
MSG
Is equivalent to
MSG
17
DB
‘AaBCbc‘
DB
41H,61H,42H,43H,62H,63H
DB
‘ABC‘,0AH,0DH,‘$‘
DB
41H,42H,43H,0AH,0DH,24H
CAP221
4/30/2017
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
18
CAP221
4/30/2017
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
19
CAP221
4/30/2017
BASIC INSTRUCTIONS
MOV and XCHG
20
CAP221
4/30/2017
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.
21
CAP221
4/30/2017
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.
22
CAP221
4/30/2017
Mov AX , WORD1
Before
After
0006
0008
AX
AX
0008
0008
WORD1
WORD1
23
CAP221
4/30/2017
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 )
24
CAP221
4/30/2017
XCHG instruction
• (Exchange) operation is used to exchange
the contents of
– two registers, or
– a register and a memory location
25
CAP221
4/30/2017
Syntax
XCHG destination , source
26
CAP221
4/30/2017
Example
XCHG AH , BL
This instruction swaps the contents of AH and
BL.
27
CAP221
4/30/2017
XCHG AH , BL
After
Before
1A
AH
00
BH
28
00
05
00
AL
AH
AL
00
1A
BH
BL
05
BL
CAP221
4/30/2017
Example
XCHG AX , WORD1
• This swaps the contents of AX and memory
location WORD1.
29
CAP221
4/30/2017
Restrictions on MOV
Example :
ILLEGAL : MOV WORD1 , WORD2
LEGAL:
MOV AX , WORD2
MOV WORD1 , AX
30
CAP221
4/30/2017
ADD & SUB
• Are used to add & subtract the contents of
– two registers,
– a register & memory location , or
– a register and a number
– memory location and a number.
31
CAP221
4/30/2017
Syntax
32
ADD
destination , source
SUB
destination , source
CAP221
4/30/2017
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.
33
CAP221
4/30/2017
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.
34
CAP221
4/30/2017
Example
ADD BL , 5
This is an addition of the number 5 to the
contents of register BL.
35
CAP221
4/30/2017
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
36
CAP221
4/30/2017
INC ( increment )
Is used to add 1 to the contents
of a
• Register or
• Memory location
37
CAP221
4/30/2017
DEC ( decrement )
Is used to subtract 1 from the
contents of a
• Register or
• Memory location
38
CAP221
4/30/2017
Syntax
INC destination
DEC destination
39
CAP221
4/30/2017
Example
INC WORD1
adds 1 to the contents of WORD1
40
CAP221
4/30/2017
Example
DEC BYTE1
subtracts 1 to the variable BYTE1
41
CAP221
4/30/2017
NEG
• Is used to negate the contents of the
destination.
• It does this by replacing
by its two’s complement.
42
CAP221
the
contents
4/30/2017
Syntax
NEG
destination
The destination may be a
register or
memory location.
43
CAP221
4/30/2017
NEG BX
44
Before
After
0002
FFFE
BX
BX
CAP221
4/30/2017
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.
45
CAP221
4/30/2017
Translation of HLL to
Assembly Language
Statement
A = 5–A
46
Translation
MOV AX , 5
SUB AX , A
MOV A , AX
CAP221
; put 5 in AX
; AX…. 5 – A
; put it in A
4/30/2017
Translation of HLL to
Assembly Language
Statement
A= B–2*A
47
Translation
MOV AX , B
SUB AX , A
SUB AX , A
MOV A , AX
CAP221
; AX has B
; AX has B – A
; AX has B – 2 * A
; move results to B
4/30/2017
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.
48
CAP221
4/30/2017
Memory Models
The size of the code & data a
program can have is determined
by specifying a memory model
using the . MODEL directive.
49
CAP221
4/30/2017
Syntax
. MODEL
memory_mode1
LARGE
SMALL
50
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/30/2017
• Unless there is a lot of code or data,
the appropriate model is SMALL.
• . MODEL directive should come
before any segment definition.
51
CAP221
4/30/2017
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
52
CAP221
4/30/2017
Example
.DATA
WORD1
WORD2
MSG
MASK
53
DW 2
DW 5
DB ‘ This is a message ‘
EQU 10010010B
CAP221
4/30/2017
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
54
CAP221
4/30/2017
Declaration Syntax
.STACK
size
An optional number that
specifies the stack area size
in bytes.
55
CAP221
4/30/2017
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.
56
CAP221
4/30/2017
Code Segment
• It contains a program’s
instructions.
57
CAP221
4/30/2017
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
58
CAP221
4/30/2017
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
59
CAP221
4/30/2017
Example
.CODE
MAIN
PROC
; main procedure body
MAIN
ENDP
; other procedures go here
60
CAP221
4/30/2017
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
61
CAP221
4/30/2017