assembly_lecture9

advertisement
Lecture 9
(The Stack and Procedures)
Lecture Outline
• Introduction
• The Stack
• The PUSH Instruction
• The POP Instruction
•Terminology of Procedures
•INDEC / OUTDEC procedures
1
Introduction
• The stack segment of a program is used for temporary storage of
data and addresses.
• PUSH and POP instructions are used to add and remove words from
the stack.
2
The Stack
• A stack is a one-dimensional data structure.
• Items are added and removed from one end of the structure; that is,
it processes in a “last-in-first-out” manner.
• A program must set aside a block of memory to hold the stack.
• Ex: .STACK 100H
When the program is assembled and loaded in memory:
• SS will contain the segment number of the stack segment.
• SP is initialized to 100H, which represents the empty stack
position.
• When the stack is not empty, SP contains the offset address
of the top of the stack.
3
The PUSH Instruction
• To add a new word to the stack we PUSH it on.
• Syntax:
PUSH source
16-bit register or memory location
• Execution of PUSH causes the following to happen:
• SP is decreased/decremented by 2.
• A copy of the source content is moved to the address specified by
SS:SP. The source is unchanged.
4
The PUSH Instruction
1234
AX
5678
BX
Offset
Offset
Offset
00F8
00F8
00F8
00FA
00FA
00FA
00FC
00FC
00FC 5678
00FE
00FE
0100
Empty Stack
SP
1234
SP
0100
After PUSH AX
00FE
SP
1234
0100
AFTER PUSH BX
5
The POP Instruction
• To remove the top item from the stack, we POP it.
• Syntax:
POP destination
16-bit register (except IP) or memory location
• Execution of POP causes the following to happen:
• The content of SS:SP (the top of the stack) is moved to the
destination.
• SP is increased by 2.
6
The POP Instruction
FFFF CX
5678 CX
5678 CX
0001 DX
0001 DX
1234 DX
Offset
Offset
Offset
00F8
00F8
00F8
00FA
00FA
00FA
00FC 5678
00FC 5678
00FC 5678
00FE
1234
SP
00FE
1234
SP
0100
0100
Stack
After POP CX
00FE
0100
1234
SP
After POP DX
7
Exercise 1
• Write assembly code that uses the stack operations to swap the
content of AX and DX.
PUSH AX
PUSH DX
POP AX
POP DX
8
Terminology of Procedures
• An assembly program can be structured as a collection of
procedures.
• The MAIN procedure, contains the entry point to the program.
• To carry out a task, the main procedure calls one of the other
procedures.
• It is also possible for these procedures to call each other, or for a
procedure to call itself.
• When one procedure calls another, control transfers to the called
procedure and its instructions are executed; the called procedure
usually returns control to the caller at the next instruction after the
call statement.
9
Procedure Declaration
• Syntax (except the main procedure):
name PROC type
The optional operand type is:
; body of the procedure
• NEAR: the statement that
RET
calls the procedure is in the
name ENDP
same segment as the
procedure itself, or
Name is the The RET (return)
• FAR: the statement that
user-defined instruction causes
calls the procedure is in a
name of the
control to transfer
different segment.
procedure.
back to the calling
If type is omitted, NEAR is
procedure
assumed.
15
Communication Between Procedures
• Assembly language procedures do not have parameter lists.
• It’s up to the programmer to devise a way for procedures to
communicate.
• E.g. If there are only few input and output values, they can be
placed in registers.
10
The CALL Instruction
• To invoke a procedure, the CALL instruction is used.
11
The CALL Instruction
Offset address
Code segment
Offset address
MAIN PROC
IP
0010
0012
CALL PROC1
next instruction
0200
PROC1 PROC
first instruction
MAIN PROC
IP
0010
0012
CALL PROC1
next instruction
0200
PROC1 PROC
first instruction
RET
Offset address
RET
Stack segment
00FE
0100
Before CALL
Code segment
Offset address
SP
00FE
0100
Stack segment
SP
0012
After CALL
12
The RET Instruction
Offset address
Code segment
Offset address
MAIN PROC
IP
0010
0012
CALL PROC1
next instruction
Code segment
MAIN PROC
0010
0012
CALL PROC1
next instruction
0200
PROC1 PROC
first instruction
0200
PROC1 PROC
first instruction
0300
RET
0300
RET
Offset address
00FE
0100
IP
Stack segment
0012
Before RET
Offset address
SP
Stack segment
00FE
0100
SP
After RET
13
INDEC / OUTDEC Procedures
• procedures used to read and print decimal data
•To invoke the two procedures, use CALL instruction inside the
MAIN PROC .
•Example
CALL INDEC
.
.
.
.
CALL OUTDEC
14
INDEC / OUTDEC Procedures
• INDEC
Read character input from user and convert it to decimal stored in
AX register
Code of INDEC exist in file PGM9_3.ASM
•OUTDEC
Display the decimal number in register AX to output screen
Code of OUTDEC exist in file PGM9_1.ASM
•Include the two files using INCLUDE directive
Syntax:
INCLUDE C:\ASM\ PGM9_3.ASM
INCLUDE C:\ASM\ PGM9_1.ASM
15
INDEC / OUTDEC Procedures
OUTDEC
PROC
PUSH
AX
PUSH
BX
PUSH
CX
PUSH
DX
OR
AX,AX
JGE
@END_IF1
PUSH
AX
MOV
DL,'-'
MOV
AH,2
INT
21H
POP
AX
NEG
AX
@END_IF1:
XOR
CX,CX
MOV
BX,10D
@REPEAT1:
XOR
DX,DX
DIV
BX
PUSH
DX
INC
CX
OR
AX,AX
JNE
@REPEAT1
MOV
AH,2
@PRINT_LOOP:
POP
DX
OR
DL,30H
INT
21H
LOOP
@PRINT_LOOP
POP
DX
POP
CX
POP
BX
POP
AX
RET
OUTDEC
ENDP
16
INDEC / OUTDEC Procedures
INDEC
PROC
;;;;;;;;;;;;;;;;;;; READ DECIMAL NUMBER;;;;;;;;;;;;
PUSH
BX
PUSH
CX
PUSH
DX
@BEGIN:
MOV
MOV
INT
XOR
XOR
MOV
INT
CMP
JE
CMP
JE
JMP
@MINUS:
MOV
@PLUS:
INT
@REPEAT2:
CMP
JNGE
CMP
JNLE
AND
PUSH
MOV
MUL
POP
AH,2
DL,'?'
21H
BX,BX
CX,CX
AH,1
21H
AL,'-'
@MINUS
AL,'+'
@PLUS
@REPEAT2
CX,1
21H
AL,'0'
@NOT_DIGIT
AL,'9'
@NOT_DIGIT
AX,000FH
AX
AX,10
BX
BX
17
INDEC / OUTDEC Procedures
Cont…
ADD
BX,AX
MOV
AH,1
INT
21H
CMP
AL,0DH
JNE
@REPEAT2
MOV
AX,BX
OR
CX,CX
JE
@EXIT
NEG
AX
@EXIT:
POP
DX
POP
CX
POP
BX
RET
@NOT_DIGIT:
MOV
AH,2
MOV
DL,0DH
INT
21H
MOV
DL,0AH
INT
21H
JMP
@BEGIN
INDEC
ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;END READ;;;;;;;;;
18
INDEC / OUTDEC Procedures
MAIN PROGRAM
MODEL
.STACK
.CODE
MAIN
SMALL
100H
PROC
----------------------------------------CALL INDEC
CALL OUTDEC
----------------------------------------MOV
AH, 4CH
INT
21H
MAIN
ENDP
; exit to DOS
INCLUDE C:ASM\PGM9_1.ASM
INCLUDE C:ASM\PGM9_3.ASM
END
MAIN
19
Download