[go: up one dir, main page]

0% found this document useful (0 votes)
22 views44 pages

COAL Chapter No 5 (Week 7)

Uploaded by

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

COAL Chapter No 5 (Week 7)

Uploaded by

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

EE-2003

Computer Organization
& Assembly Language
INSTRUCTOR

Engr. Aashir Mahboob


Lecturer, Department of Computer Science
FAST NUCES (Karachi)
aashir.mahboob@nu.edu.pk
CH# 05 PROCEDURES

OUTLINE

•Stack Operations

•Defining and Using Procedures


 Imagine a stack of plates . . .
 plates are only added to the top
 plates are only removed from the top
 LIFO structure
STACK OPERATIONS
 •A stack data structure follows the same principle as a stack
of plates:

 • New values are added to the top of the stack, and existing
values are removed from the top.

 •A stack is also called a LIFO structure (Last-In, First-Out)


because the last value put into the stack is always the first
value taken out.
STACK OPERATIONS
Runtime Stack
Runtime Stack
PUSH and POP instructions
PUSH operation
PUSH operation
POP operation
When to use stacks
Example of using stacks
Example: Nested Loop
Example: reversing a string
Example: reversing a string
Related instructions
Defining and using procedures
CALL and RET instructions
CALL-RET example (1 of 2)
CALL-RET example (2 of 2)
Library Procedures - Overview (1 of 3)
 CloseFile – Closes an open disk file
 Clrscr - Clears console, locates cursor at upper left corner
 CreateOutputFile - Creates new disk file for writing in output mode
 Crlf - Writes end of line sequence to standard output
 Delay - Pauses program execution for n millisecond interval
 DumpMem - Writes block of memory to standard output in hex
 DumpRegs – Displays general-purpose registers and flags (hex)
 GetCommandtail - Copies command-line args into array of bytes
 GetDateTime – Gets the current date and time from the system
 GetMaxXY - Gets number of cols, rows in console window buffer
 GetMseconds - Returns milliseconds elapsed since midnight
Library Procedures - Overview (2 of 3)
 GetTextColor - Returns active foreground and background text colors in the
console window
 Gotoxy - Locates cursor at row and column on the console
 IsDigit - Sets Zero flag if AL contains ASCII code for decimal digit (0–9)
 MsgBox, MsgBoxAsk – Display popup message boxes
 OpenInputFile – Opens existing file for input
 ParseDecimal32 – Converts unsigned integer string to binary
 ParseInteger32 - Converts signed integer string to binary
 Random32 - Generates 32-bit pseudorandom integer in the range 0 to FFFFFFFFh
 Randomize - Seeds the random number generator
 RandomRange - Generates a pseudorandom integer within a specified range
 ReadChar - Reads a single character from standard input
Library Procedures - Overview (3 of 3)
 ReadDec - Reads 32-bit unsigned decimal integer from keyboard
 ReadFromFile – Reads input disk file into buffer
 ReadHex - Reads 32-bit hexadecimal integer from keyboard
 ReadInt - Reads 32-bit signed decimal integer from keyboard
 ReadKey – Reads character from keyboard input buffer
 ReadString - Reads string from standard input, terminated by [Enter]
 SetTextColor - Sets foreground and background colors of all subsequent console text output
 Str_compare – Compares two strings
 Str_copy – Copies a source string to a destination string
 StrLength – Returns length of a string
 Str_trim - Removes unwanted characters from a string.
Example 1
TASK:-
Clear the screen, delay the program for 500 milliseconds, and dump the registers and
flags.
Example 2
TASK:-
Display a null-terminated string and move the cursor to the beginning of the next
screen line.
Example 2a
TASK:-
Display a null-terminated string and move the cursor to the beginning of the next
screen line (use embedded CR/LF)
Example 3
TASK:-
Display an unsigned integer in binary, decimal, and hexadecimal, each on a separate
line.
Example 4
TASK:-
Input a string from the user. EDX points to the string and ECX specifies the
maximum number of characters the user is permitted to enter.
Example 5
TASK:-
Generate and display ten pseudo-random signed integers in the range 0 – 99.
Pass each integer to WriteInt in EAX and display it on a separate line.
Example 6
TASK:-
Display a null-terminated string with yellow characters on a blue background.
PROCEDURE PARAMETERS
 A good procedure might be usable in many different programs

 Parameters help to make procedures flexible because parameter values can change
at runtime

 General registers can be used to pass parameters


Documenting Procedures 34

Suggested documentation for each procedure:

 A description of all tasks accomplished by the procedure.


 Receives: A list of input parameters; state their usage and
requirements.
 Returns: A description of values returned by the procedure.
 Requires: Optional list of requirements called preconditions that
must be satisfied before the procedure is called.

If a procedure is called without its preconditions satisfied, it will


probably not produce the expected output.
Example: SumOf Procedure 35

;---------------------------------------------------------
SumOf PROC
;
; Calculates and returns the sum of three 32-bit integers.
; Receives: EAX, EBX, ECX, the three integers. May be
; signed or unsigned.
; Returns: EAX = sum, and the status flags (Carry,
; Overflow, etc.) are changed.
; Requires: nothing
;---------------------------------------------------------
add eax,ebx
add eax,ecx
ret
SumOf ENDP
NESTED PROCEDURE CALLS
main PROC
.
. By the time Sub3
is called, the
call Sub1
exit
main ENDP stack contains all
Sub1 PROC three return
.
. addresses:
call Sub2
ret
Sub1 ENDP

Sub2 PROC (ret to main)


.
.
call Sub3 (ret to Sub1)
ret
Sub2 ENDP
(ret to Sub2) ESP
Sub3 PROC
.
.
ret
Sub3 ENDP
LOCAL AND GLOBAL LABELS
 A local label is visible only to statements inside the same procedure
 A global label is visible everywhere . Global label identified by double colon (::)
Example 7
TASK:-
The ArraySum procedure calculates the sum of an array. It makes two references to
specific variable names:
EXERCISE

What if you wanted to calculate the sum of


two or three arrays within the same
program?
Example 8
TASK:-
This version of ArraySum returns the sum of any doubleword array whose address is in
ESI. The sum is returned in EAX:
USES OPERATOR
 Lists the registers that will be saved (to avoid side effects) (return register shouldn’t be
saved)
ArraySum PROC USES esi ecx
mov eax, 0 ; set the sum to zero
...
 MASM generates the following code
ArraySum PROC
push esi
push ecx
..
pop ecx
pop esi
ret
ArraySum ENDP
When not to push a register
The sum of the three registers is stored in EAX on line (3), but the POP
instruction replaces it with the starting value of EAX on line (4):
RET INSTRUCTION
 Return from subroutine
 Pops stack into the instruction pointer (EIP or IP), control transfers to the target address
 Syntax:
 RET
 RET n
 Optional operand n causes n bytes to be added to the stack pointer after EIP (or IP) is
assigned a value

You might also like