Beruflich Dokumente
Kultur Dokumente
Programming
Outline
Data Representation
Variable Declaration
Instruction Types
Memory Segmentation
2
COE-KFUPM
Outline Cont.
Program Structure
Addressing Modes
The stack
Procedures
Macros
String Instructions
COE-KFUPM
Machine/Assembly Language
Machine Language:
Assembly Language:
Assembler:
COE-KFUPM
COE-KFUPM
Programmers Model:
Instruction Set Architecture
ISA includes
Instruction set,
Memory, and
Programmer-accessible registers.
COE-KFUPM
CPU
Data Bus
Memory
16-bit
16
Control Bus
COE-KFUPM
CPU Registers
Data Registers
SI (Source Index)
DI (Destination Index)
SP (Stack Pointer)
BP (Base Pointer)
IP (Instruction Pointer)
8
COE-KFUPM
Segment Registers
CS (Code Segment)
DS (Data Segment)
SS (Stack Segment)
ES (Extra Segment)
FLAGS Register
Zero flag
Sign flag
Parity flag
Carry flag
Overflow flag
COE-KFUPM
Fetch-Execute Process
Fetch-Execute process
10
COE-KFUPM
4000
65535
IR
0010101100111111
11
COE-KFUPM
Statement syntax
Name
operation
operand(s)
comment
Name field
12
special characters ? . @ _ $ %
Names may not begin with a digit
If a period is used, it must be first character
Case insensitive
COE-KFUPM
COUNTER1
@character
SUM_OF_DIGITS
$1000
Done?
.TEST
TWO WORDS
2abc
A45.28
You&Me
13
COE-KFUPM
Operation field
instruction
Symbolic operation code (opcode)
Symbolic opcodes translated into machine language opcode
Describes operations function; e.g. MOV, ADD, SUB, INC.
Assembler directive
Operand field
14
COE-KFUPM
Comment field
Examples
MOV CX, 0
; move 0 to CX
MOV CX, 0
; initialize registers
15
COE-KFUPM
Data Representation
Numbers
11011
11011B
64223
-21843D
1,234
1B4DH
1B4D
FFFFH
0FFFFH
decimal
binary
decimal
decimal
illegal, contains a nondigit character
hexadecimal number
illegal hex number, does not end with H
illegal hex numbe, does not begin with with digit
hexadecimal number
16
COE-KFUPM
Characters
COE-KFUPM
Let AL=FFH
Let AH=30H
Let BL=80H
COE-KFUPM
Variable Declaration
Data-defining pseudo-ops
DB
DW
DD
DQ
DT
define byte
define word
define double word (two consecutive words)
define quad word (four consecutive words)
define ten bytes (five consecutive words)
19
COE-KFUPM
Byte Variables
I DB 4
K DB 5, 3, -1 allocates 3 bytes
K
20
05
03
FF
COE-KFUPM
10
Word Variables
name
DW
I DW 4
J DW -2
K DW 1ABCH
L DW 01
initial value
04
00
FE
FF
BC
1A
31
30
21
COE-KFUPM
name
DD
initial value
I DD 1FE2AB20H
I
20
AB
E2
1F
FC
FF
FF
FF
J DD -4
22
COE-KFUPM
11
Named Constants
LF
EQU
0AH
PROMPT
EQU
23
COE-KFUPM
DUP Operator
24
COE-KFUPM
12
Instruction Types
Arithmetic instructions
ADD, SUB, INC, DEC, ADC, SBB, NEG, CMP, MUL, IMUL,
DIV, IDIV, CBW, CWD.
25
COE-KFUPM
procedure transfers.
JMP, JG, JL, JE, JNE, JGE, JLE, JNG, JNL, JC, JS, JA, JB,
JAE, JBE, JNB, JNA, JO, JZ, JNZ, JP, JCXZ, LOOP, LOOPE,
LOOPZ, LOOPNE, LOOPNZ, CALL, RET.
String instructions
26
COE-KFUPM
13
Interrupt instructions
Miscellaneous instructions
NOP, WAIT.
27
COE-KFUPM
General Rules
MOV AX, BL
MOV AL, BL
MOV AH, BL
MOV i, j
MOV AL, i
illegal
legal
legal
illegal
legal
ADD 2, AX
ADD AX, 2
28
illegal
legal
COE-KFUPM
14
Memory Segmentation
COE-KFUPM
Location of segments
0000:FFFF=0FFFFh.
Segment 1 starts at address 0001:0000=00010h and ends at
0001:FFFF= 1000Fh.
Segments overlap.
The starting physical address of any segment has the first
hex digit as 0.
Program segments
30
15
Data Segment
Stack segment
Code segment
31
COE-KFUPM
Memory Models
SMALL
MEDIUM
COMPACT
LARGE
code in more than one segment & data in more than one
segment & no array larger than 64K bytes
HUGE
code in more than one segment & data in more than one
segment & arrays may be larger than 64K bytes
32
COE-KFUPM
16
COE-KFUPM
34
COE-KFUPM
17
Assembling a program
Linking a program
COE-KFUPM
Running a program
Simplified procedure
Debugging a program
36
COE-KFUPM
18
Addressing Modes
Register mode
operand is in a register
MOV AX, BX
Immediate mode
operand is constant
MOV AX, 5
Direct mode
operand is variable
MOV AL, i
37
COE-KFUPM
MOV AX, SI
MOV AX, [SI]
38
AX=0100h
AX=1234h
COE-KFUPM
19
Syntax of operand
[register + displacement]
[displacement + register]
[register] + displacement
displacement + [register]
displacement [register]
39
COE-KFUPM
If BX or BP used
If SI or DI used
Examples:
Illegal examples:
COE-KFUPM
20
variable[base_register][index_register]
[base-register + index_register + variable + constant]
variable [base_register + index_register + constant]
constant [base_register + index_register + variable]
41
COE-KFUPM
PTR Operator
Examples:
MOV [BX], 1
MOV Bye PTR [BX], 1
MOV WORD PTR [BX], 1
j DW 10
MOV AL, j
MOV AL, Byte PTR J
42
illegal
legal
COE-KFUPM
21
COE-KFUPM
System BIOS
44
COE-KFUPM
22
Software Layers
System Hardware
Non-standard interface
BIOS
Standard interface
Operating System
Standard interface
Application Program
45
COE-KFUPM
Input/Output - Cont.
AH=1
AH=2
AH=9
AH=8
AH=0Ah
46
COE-KFUPM
23
Single-Key Input
Input: AH=1
MOV AH, 1
INT 21H
MOV AH, 8
INT 21H
47
COE-KFUPM
Single-Character Output
To display a character
MOV AH, 2
MOV DL, ?
INT 21H
; displaying character ?
MOV AH, 1
INT 21H
MOV AH, 2
MOV DL, AL
INT 21H
48
COE-KFUPM
24
Displaying a String
MSG DB Hello!$
MOV AH, 9
MOV DX, offset MSG
INT 21H
COE-KFUPM
Inputting a String
COE-KFUPM
25
.DATA
CR EQU 0DH
LF EQU 0AH
MSG1 DB Enter a lower case letter: $
MSG2 DB CR, LF, In upper case it is:
Char DB ?, $
51
COE-KFUPM
.CODE
.STARTUP
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
SUB AL, 20H
MOV CHAR, AL
LEA DX, MSG2
MOV AH, 9
INT 21H
.EXIT
52
; read character
; convert it to upper case
; and store it
; display second message and
; uppercase letter
; return to DOS
COE-KFUPM
26
OF DF IF TF SF ZF
5 4
3 2
AF
PF
0
CF
53
COE-KFUPM
54
COE-KFUPM
27
Unsigned overflow
Example:
FFFF
+ FFFF
----------1 FFFEh
55
COE-KFUPM
MOV Instruction
Destination source
Two registers
A register and a memory location
A constant to a register or memory location
General Segment Memory Constant
Register Register Location
General
Register
Segment
Register
Memory
Location
56
yes
yes
yes
yes
yes
no
yes
no
yes
yes
no
yes
COE-KFUPM
28
Examples:
illegal
illegal
illegal
illegal
illegal
illegal
illegal
legal
legal
legal
57
COE-KFUPM
XCHG Instruction
Operand1 operand2
Operand2 operand1
Memory
Location
General
Register
yes
yes
Memory
Location
yes
no
COE-KFUPM
29
Syntax:
yes
yes
yes
yes
no
yes
59
COE-KFUPM
Syntax:
Examples:
INC AX
DEC BL
INC [BX]
INC Byte PTR [BX]
DEC I
INC DS
60
legal
legal
illegal
legal
legal
illegal
COE-KFUPM
30
NEG instruction
Operand 0 operand
Examples:
61
COE-KFUPM
CMP instruction
Operand1-operand2
62
yes
yes
yes
yes
no
yes
COE-KFUPM
31
Syntax:
MOV AX, A
MOV DX, A+2
ADD B, AX
ADC B+2, DX
63
COE-KFUPM
Multiplication
If operand is a Byte
MUL operand;
AX AL * operand
If operand is a Word
64
COE-KFUPM
32
Multiplication Cont.
CF=OF=0
MUL BL;
IMUL BL;
MUL AL;
IMUL AL;
MUL BX;
IMUL BX;
65
COE-KFUPM
66
COE-KFUPM
33
Division
If operand is a Byte
If operand is a Word
67
COE-KFUPM
Division - Cont.
Divide Overflow
DX=0005
DX=0001
COE-KFUPM
34
69
COE-KFUPM
Logic Instructions
Syntax:
70
OR
10101010
11110000
--------------11111010
10101010
XOR 11110000
--------------01011010
COE-KFUPM
35
COE-KFUPM
Effect on flags
Examples:
COE-KFUPM
36
NOT instruction
TEST instruction
Example
COE-KFUPM
Syntax:
Opcode destination, 1
Opcode destination, CL
Shift Instructions:
COE-KFUPM
37
Rotate instructions
75
COE-KFUPM
SHR AL, 1 ;
SAR AL, 1 ;
SHL AL, 1 ;
SAL AL, 1 ;
AL 7Fh
AL FFh
AL FEh
AL FEh
COE-KFUPM
38
MOV AH, AL
MOV CL, 4
SAL AL, CL ;
ADD AL, AH;
AL= 16*AL
AL=16*AL + AL = 17 AL
77
COE-KFUPM
Unconditional jump
JMP label ;
IP label
Conditional jump
Signed jumps
Unsigned jumps
Common jumps
Signed jumps
JG/JNLE
JGE/JNL
JL/JNGE
JLE/JNG
78
39
Unsigned jumps
JA/JNBE
JAE/JNB
JB/JNAE
JBE/JNA
Single-Flag jumps
JE/JZ
JNE/JNZ
JC
JNC
JO
JNO
79
COE-KFUPM
Single-flag jumps
JS
JNS
JP/JPE
JNP/JPO
Jump based on CX
JCXZ
Loop Instructions
Loop
Loopnz/Loopne
Loopz/Loope
COE-KFUPM
40
Example:
If AX < 0 Then
Replace AX by AX
ENDIF
; if AX < 0
CMP AX, 0
JNL END_IF
;then
NEG AX
END_IF:
81
COE-KFUPM
IF-Then-Else
Example:
If AL <= BL Then
Display character in AL
Else
Display character in BL
ENDIF
MOV AH, 2
; if AL<=BL
CMP AL, BL
JNBE ELSE_
;then
MOV DL, AL
JMP DISPLAY
ELSE_:
MOV DL, BL
DISPLAY:
INT 21H
END_IF:
82
COE-KFUPM
41
CASE
Example:
CASE AX
<0: put 1 in BX
=0: put 0 in BX
>0: put 1 in BX
END_CASE
; case AX
CMP AX, 0
JL NEGATIVE
JE ZERO
JG POSITIVE
NEGATIVE: MOV BX, -1
JMP END_CASE
ZERO:
MOV BX, 0
JMP END_CASE
POSITIVE: MOV BX, 1
END_CASE:
83
COE-KFUPM
CASE Cont.
Example:
CASE AL
1,3: display o
2,4: display e
END_CASE
; case AL
CMP AL, 1
; 1, 3:
JE ODD
CMP AL, 3
JE ODD
CMP AL, 2
; 2, 4:
JE EVEN
CMP AL, 4
JE EVEN
JMP END_CASE
ODD:
MOV DL, o
JMP DISPLAY
EVEN:
MOV DL, e
DISPLAY: MOV AH, 2
INT 21H
84 END_CASE:
COE-KFUPM
42
Example:
END_IF
; read a character
MOV AH, 1
INT 21H
; If (A <= character) and (character <= Z) Then
CMP AL, A
JNGE END_IF
CMP AL, Z
JNLE END_IF
; display character
MOV DL, AL
MOV AH, 2
INT 21H
END_IF:
85
COE-KFUPM
Example:
COE-KFUPM
43
Loop Instructions
Loop Next
Dec Cx
If CX<>0
JMP Next
Loopz/loope Next
Dec Cx
If (CX<>0) AND (ZF=1)
JMP Next
Loopnz/loopne Next
Dec Cx
If (CX<>0) AND (ZF=0)
87
JMP Next
COE-KFUPM
FOR LOOP
Example:
For 80 times DO
Display *
END_IF
Next:
88
MOV CX, 80
MOV AH, 2
MOV DL, *
INT 21H
Loop Next
COE-KFUPM
44
While Loop
Example:
Initialize count to 0
Read a character
While character <> Carriage Return DO
Count = Count + 1
Read a character
END_While
MOV DX, 0
MOV AH, 1
INT 21H
While_:
CMP AL, 0DH
JE End_While
INC DX
INT 21H
JMP While_
End_While:
89
COE-KFUPM
Repeat Loop
Example:
Repeat
Read a character
Until character is blank
MOV AH, 1
Repeat:
INT 21H
; until
CMP AL,
JNE Repeat
90
COE-KFUPM
45
Application of Loope
Next:
XOR SI, SI
MOV CX, 9
INC SI
CMP Table[SI-1], 7
Loopne Next
91
COE-KFUPM
The Stack
Instructions
PUSH
POP
PUSHF
POPF
COE-KFUPM
46
Stack Instructions
COE-KFUPM
Reversing a String
String DB COE-205
MOV CX, 7 ; CX contains length of string
XOR BX, BX
Next: MOV AL, String[BX]
PUSH AX
INC BX
LOOP Next
MOV CX, 7
XOR BX, BX
Next2: POP AX
MOV String[BX], AL
INC BX
LOOP Next2
94
COE-KFUPM
47
Procedures
Procedure Declaration
Name
PROC
type
;body of the procedure
Name
RET
ENDP
Procedure type
Procedure Invocation
CALL Name
95
COE-KFUPM
Procedures Cont.
procedure
CS gets new segment number if procedure is far
RET n
IP [SP+1:SP]
SP SP + 2 + n
96
COE-KFUPM
48
Copy SP to BP
Access parameters from stack using BP register
97
COE-KFUPM
Procedure - Example
NL DB 10,13,$
98
MOV AH, 1
; read a number
INT 21H
AND AX, 0FH ; convert number from ASCII
MOV CX, AX
MOV BX, AX
Next:: PUSH CX
PUSH BX
CALL Display
POP CX
MOV AH, 9
LEA DX, NL
INT 21H
Loop Next
Display Proc Near
MOV BP, SP
MOV CX, [BP+2]
MOV AH, 2
MOV DL, *
Next2: INT 21H
Loop Next2
RET 2
Display ENDP
COE-KFUPM
49
IN/OUT Instructions
IN AL, DX ; AL [DX]
IN AX, DX ; AL [DX] ; AH [DX+1]
OUT DX, AL ; [DX] AL
OUT DX, AX ; [DX] AL; [DX+1] AH
99
COE-KFUPM
String Instructions
Five categories
100
COE-KFUPM
50
MOVSB
ES:[DI] DS:[SI]
DI DI+1; SI SI+1 (if DF=0)
DI DI-1; SI SI-1 (if DF=1)
MOVSW
ES:[DI+1:DI] DS:[SI+1:SI]
DI DI+2; SI SI+2 (if DF=0)
DI DI-2; SI SI-2 (if DF=1)
101
COE-KFUPM
CMPSB
DS:[SI] - ES:[DI]
DI DI+1; SI SI+1 (if DF=0)
DI DI-1; SI SI-1 (if DF=1)
CMPSW
DS:[SI+1:SI] - ES:[DI+1:DI]
DI DI+2; SI SI+2 (if DF=0)
DI DI-2; SI SI-2 (if DF=1)
102
COE-KFUPM
51
SCASB
AL - ES:[DI]
DI DI+1; (if DF=0)
DI DI-1 (if DF=1)
SCASW
AX - ES:[DI+1:DI]
DI DI+2; (if DF=0)
DI DI-2; (if DF=1)
SCAS destination
103
COE-KFUPM
LODSB
AL DS:[SI]
SI SI+1; (if DF=0)
SI SI-1 (if DF=1)
LODSW
AX DS:[SI+1:SI]
SI SI+2; (if DF=0)
SI SI-2; (if DF=1)
LODS destination
104
COE-KFUPM
52
STOSB
ES:[DI] AL
DI DI+1; (if DF=0)
DI DI-1 (if DF=1)
STOSW
ES:[DI+1:DI] AX
DI DI+2; (if DF=0)
DI DI-2 (if DF=1)
STOS destination
105
COE-KFUPM
.CODE
REP
106
COE-KFUPM
53
.CODE
Next:
107
54