Assembly Language Lecture 5 –...
Transcript of Assembly Language Lecture 5 –...
![Page 1: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/1.jpg)
Assembly Language
Lecture 5 – Procedures
Ahmed SallamSlides based on original lecture slides by Dr. Mahmoud Elgayyar
![Page 2: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/2.jpg)
2
Data Transfer Instructions
Operand types
MOV, MOVZX, MOVSX instructions
LAHF, SAHF instructions
XCHG instruction
Addition and Subtraction
INC and DEC instructions
ADD, SUB instructions
NEG instruction
Data‐Related Operators and Directives
Indirect Addressing
Arrays and pointers
JMP and LOOP instructions
Outcomes of Lecture 4
![Page 3: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/3.jpg)
3
Linking to External Library
The Irvine library
Stack Operations
Runtime Stack
PUSH, POP instructions
Defining and Using Procedures
PROC directive
CALL and RET instructions
Outline
![Page 4: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/4.jpg)
4
Linking to External Library
The Irvine library
Stack Operations
Runtime Stack
PUSH, POP instructions
Defining and Using Procedures
PROC directive
CALL and RET instructions
Outline
![Page 5: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/5.jpg)
5
We write .asm files containing ASCII (i.e., text) versions
of our program
MASM assembles our .asm file into a .obj file – unlinked,
Intel32 binary code
All the .obj files are linked to create an executable – a
.exe file
The .exe file is loaded into main memory, addresses are
resolved, and the program is executed
Assembly & Execution
![Page 6: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/6.jpg)
Assembly 6
Do you remember ?! (Example: Adding and Subtracting Integers 2nd version)
.386
.model flat, stdcall
.stack 4096ExitProcess PROTO, dwExitCode:DWORDDumpRegs PROTO
.codemain PROC
mov eax,10000h ;EAX = 10000hadd eax,40000h ;EAX = 50000hsub eax,20000h ;EAX = 30000hcall DumpRegs ;display registersINVOKE ExitProcess, 0
main ENDPEND main
INCLUDE Irvine32.inc
.codemain PROC
mov eax,10000h ;EAX=10000hadd eax,40000h ;EAX = 50000hsub eax,20000h ;EAX = 30000hcall DumpRegs ;display registersexit
main ENDPEND main
![Page 7: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/7.jpg)
7
Procedure: Same thing as a "method" in java or a "function"
in C
Link Library: A bunch of .obj files merged together
A file containing compiled procedures
OBJ files are assembled from ASM source files
Library built using the Microsoft LIB utility (or similar tool)
Irvine32.lib is an example of a link library
Library is linked (i.e., joined) to your .asm file when you build
your project
Link Library Overview
![Page 8: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/8.jpg)
8
Notice the two LIB files: Irvine32.lib and
kernel32.lib (Part of the Microsoft Win32 SDK)
Linking to a Library
Your program
kernel32.lib
kernel32.dll
Irvine32.liblinks
executes
tolinks to
can link to
![Page 9: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/9.jpg)
Assembly 9
Calling a Procedure
INCLUDE Irvine32.inc.code
mov eax, 1234h ; input argumentcall WriteHex ; show hex numbercall Crlf ; end of line
Call/Use a (library) procedure using the CALL
instruction
Some procedures require input arguments, which must
be pre‐placed in the proper location => a register
The INCLUDE directive copies in the procedure
prototypes (same thing as #include <stdio.h>)
![Page 10: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/10.jpg)
Assembly 10
Library ProceduresClrscr Clears console, locates cursor at upper left cornerCrlf Writes end of line sequence to standard outputDelay Pauses program execution for n millisecond intervalDumpMem Writes block of memory to standard output in hexDumpRegs Displays general-purpose registers and flags (hex)GetCommandtail Copies command-line args into array of bytesGetDateTime Gets the current date and time from the systemMsgBox, MsgBoxAsk
Display popup message boxes
IsDigit Sets Zero flag if AL contains ASCII code for decimal digit (0–9)
ParseDecimal32 Converts unsigned integer string to binaryParseInteger32 Converts signed integer string to binary Random32 Generates 32-bit pseudorandom integer in the range
0 to FFFFFFFFh
![Page 11: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/11.jpg)
Assembly 11
Library ProceduresOpenInputFile Opens existing file for input CloseFile Closes an open disk fileCreateOutputFile Creates new disk file for writing in output modeReadFromFile Reads input disk file into buffer WriteToFile Writes buffer to output fileReadChar , ReadDec , ReadHex , ReadInt , ReadString
Read from standard input
WriteChar , WriteDec , WriteString , WriteHex , WriteInt , WriteBin
Write to standard output
Str_compare , Str_copy , StrLength , Str_trim , Str_ucase
String operations
WaitMsg Displays message, waits for Enter to be pressedDON'T memorize!! Just know what can be done and be able to look them up for
argument/parameter details (pgs 134‐149)
![Page 12: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/12.jpg)
Assembly 12
Example 1
.code
call Clrscr
mov eax,500
call Delay
call DumpRegs
Clear the screen, delay the program for 500 milliseconds,
and dump the registers and flags
EAX=00000613 EBX=00000000 ECX=000000FF EDX=00000000ESI=00000000 EDI=00000100 EBP=0000091E ESP=000000F6EIP=00401026 EFL=00000286 CF=0 SF=1 ZF=0 OF=0
Sample output:
![Page 13: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/13.jpg)
Assembly 13
Example 2
.data
str1 BYTE "Bus Strikes Really Suck!",0
.code
mov edx,OFFSET str1
call WriteString
call Crlf
Display a null‐terminated string and move the cursor to
the beginning of the next screen line.
![Page 14: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/14.jpg)
Assembly 14
Avoiding call Crlf
.data
str1 BYTE "The lab was too long!",0Dh,0Ah,0
.code
mov edx, OFFSET str1
call WriteString
Display a null‐terminated string and move the cursor to
the beginning of the next screen line (use embedded
CR/LF)
![Page 15: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/15.jpg)
Assembly 15
Example 3
testVal = 35.code
mov eax, testValcall WriteBin ; display binarycall Crlfcall WriteDec ; display decimalcall Crlfcall WriteHex ; display hexadecimalcall Crlf
Display an unsigned integer in binary, decimal, and
hexadecimal, each on a separate line
0000 0000 0000 0000 0000 0000 0010 00113523
Sample output:
![Page 16: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/16.jpg)
Assembly 16
Example 4
.data
fileName BYTE 80 DUP(0)
.code
mov edx, OFFSET fileName
mov ecx, SIZEOF fileName ;readstring will read sizeof-1
call ReadString
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
Note: null (zero) byte is automatically added by ReadString
![Page 17: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/17.jpg)
Assembly 17
Example 5
.code
mov ecx,10 ; loop counter
genNum:
mov eax,100 ; ceiling value
call RandomRange ; generate random int
call WriteInt ; display signed int
call Crlf ; goto next display line
loop genNum ; repeat loop
Generate and display ten pseudo‐random (semi‐random)
signed integers in the range 0 – 99
Pass each integer to WriteInt (via EAX) and display it on a separate line
![Page 18: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/18.jpg)
18
1. What types of statements are inside the Irvine32.inc file?
2. (True/False): A link library consists of assembly language source code.
3. Write statements that cause a program to pause for 700 milliseconds.
4. Write statements that prompt the user for an identification number and input a
string of digits into an array of bytes.
Review Questions
![Page 19: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/19.jpg)
19
Linking to External Library
The Irvine library
Stack Operations
Runtime Stack
PUSH, POP instructions
Defining and Using Procedures
PROC directive
CALL and RET instructions
Outline
![Page 20: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/20.jpg)
20
Imagine a stack of plates:
plates are only added to the top = "pushed" on the stack
plates are only removed from the top = "pulled" from the stack
LIFO structure – "Last In, First Out"
Runtime Stack
12345678910 top
bottom
![Page 21: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/21.jpg)
21
Managed by the CPU, using two registers
SS (stack segment) – Segment being used for stack
ESP (stack pointer) – Pointer/Address/Offset of TOP of Stack
In reality, the stack pointer starts at the highest location in the stack segment
x86 CPU Stack
00 000018FF8A
0018FF88
0018FF86
0018FF84
0018FF82
0018FF80
ESP
![Page 22: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/22.jpg)
22
1. A 16‐bit push operation decrements the stack pointer by 4, and
2. Copies a value into the location pointed to by the stack pointer
PUSH
00 000018FF8A
0018FF88
0018FF86
0018FF84
0018FF82
0018FF80
ESP
Before
00 000018FF8A
11 110018FF88
0018FF86
0018FF84
0018FF82
0018FF80
ESP
After
![Page 23: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/23.jpg)
23
After pushing two more integers:
More Pushing
• The stack grows downward (into LOWER addresses/offsets)
• The area below ESP is always available (unless the stack overflows)
• Overflow: When segment is filled (and no more space is available)
00 000018FF8A
11 110018FF88
22 220018FF86
33 330018FF84
0018FF82
0018FF80
ESP
![Page 24: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/24.jpg)
24
1. Copies value at stack[ESP] into a register or variable, and
2. Adds n to ESP, where n is either 2 or 4 (depending on size of
destination)
POP
00 000018FF8A
0018FF88
0018FF86
0018FF84
0018FF82
0018FF80
ESP
After
ECX
![Page 25: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/25.jpg)
25
PUSH syntax:
1. PUSH r/m16 r/m = register/memory
2. PUSH r/m32
3. PUSH imm32
POP syntax:
1. POP r/m16
2. POP r/m32
PUSH, POP Formats
![Page 26: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/26.jpg)
Assembly 26
Using PUSH and POP
push esi ; push registers
push ecx
push ebx
mov esi,OFFSET dwordVal ; display some memory
mov ecx,LENGTHOF dwordVal
mov ebx,TYPE dwordVal
call DumpMem
pop ebx ; restore registers
pop ecx
pop esi
Save and restore registers when they contain important values
PUSH and POP instructions occur in the opposite order (LIFO)
The DumpMem procedure writes a range of memoryto the console window in hexadecimal. Pass it thestarting address in ESI, the number of units in ECX,and the unit size in EBX
![Page 27: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/27.jpg)
Assembly 27
Example: Nested Loop
mov ecx, 100 ; set outer loop countouter: ; begin the outer loop
push ecx ; save outer loop count
mov ecx, 20 ; set inner loop countinner: ; begin the inner loop
… Code for inner loop goes here …loop inner ; repeat the inner loop
pop ecx ; restore outer loop countloop outer ; repeat the outer loop
Idea:
Use stack to save loop counter of outer loop when in inner loop
push the outer loop counter before entering the inner loop
![Page 28: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/28.jpg)
28
1. PUSHFD and POPFD push and pop the EFLAGS
register
2. PUSHAD pushes the 32‐bit general‐purpose registers
on the stack
order: EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI
3. POPAD pops the same registers off the stack in
reverse order
4. PUSHA and POPA do the same for 16‐bit registers
Related Instructions
![Page 29: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/29.jpg)
29
1. When a 32‐bit value is pushed on the stack, what happens to ESP?
2. (True/False) Only 32‐bit values should be pushed on the stack when using the
Irvine32 library.
3. (True/False) Only 16‐bit values should be pushed on the stack when using the
Irvine16 library.
4. (True/False) Local variables in procedures are created on the stack.
5. Challenge: Suppose there were no PUSH instruction. Write a sequence of two other
instructions that would accomplish the same as PUSH EAX.
Review Questions
![Page 30: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/30.jpg)
30
Linking to External Library
The Irvine library
Stack Operations
Runtime Stack
PUSH, POP instructions
Defining and Using Procedures
PROC directive
CALL and RET instructions
Outline
![Page 31: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/31.jpg)
31
Large problems can be divided into smaller tasks to make them more
manageable
A procedure is the ASM equivalent of a Java Method, C/C++ Function,
Basic Subroutine, or Pascal Procedure
Same thing as what is in the Irvine32 library
The following is an assembly language procedure named sample:
Creating Procedures
sample PROC… Code for procedure goes here …ret
sample ENDP
![Page 32: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/32.jpg)
Assembly 32
SumOf Procedure;-----------------------------------------------------;; Calculates and returns the sum of three 32-bit ints; Receives: EAX, EBX, ECX, the three integers; may be signed or unsigned.; Returns: EAX = sum; status flags are changed.; Requires: nothing;-----------------------------------------------------SumOf PROC
add eax,ebx
add eax,ecx
Ret
SumOf ENDP
![Page 33: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/33.jpg)
33
The CALL instruction calls a procedure
1. pushes offset of next instruction on the stack (saves the
value of the instruction pointer)
2. copies the address of the called procedure into EIP (puts
the address of the procedure into the instruction pointer)
3. Begins to execute the code of the procedure
The RET instruction returns from a procedure
1. pops top of stack into EIP (over‐writes instruction pointer
with the value of the instruction after the call)
CALL and RET
![Page 34: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/34.jpg)
Assembly 34
CALL‐RET Example
main PROC00000020 call MySub00000025 mov eax,ebx..
main ENDP
MySub PROC00000040 mov eax,edx..ret
MySub ENDP
0000025 is the offset of the instruction immediately following the CALLinstruction
00000040 is the offset of the first instruction inside MySub
![Page 35: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/35.jpg)
Assembly 35
CALL‐RET in Action
00000025 ESP
EIP
00000040
The CALL instruction pushes00000025 onto the stack, and loads 00000040 into EIP
CALL = PUSH eipMOV EIP, OFFSET proc
00000025 ESP
EIP
00000025The RET instruction pops 00000025 from the stack into EIP
RET = POP eip
(stack shown before RET executes)
![Page 36: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/36.jpg)
Assembly 36
Nested Procedure Callsmain PROC . . call Sub1 exitmain ENDP
Sub1 PROC . . call Sub2 retSub1 ENDP
Sub2 PROC . . call Sub3 retSub2 ENDP
Sub3 PROC . . retSub3 ENDP
(ret to main)
(ret to Sub1)
(ret to Sub2) ESP
By the time Sub3 is called, the stack contains all three return addresses:
![Page 37: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/37.jpg)
Assembly 37
Local and Global Labels
main PROC
jmp L2 ; error
call sub2
L1:: ; global label
exit
main ENDP
sub2 PROC
L2: ; local label
jmp L1 ; legal, but stupid
ret ; When is ret ever called?
sub2 ENDP
1. A local label is visible only inside the same procedure
2. A global label is visible everywhere
00 000018FF8C
0018FF88
0018FF84
0018FF80
ESP
![Page 38: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/38.jpg)
Assembly 38
Without Parameters
ArraySum PROCmov esi,0 ; array indexmov eax,0 ; set the sum to zeromov ecx,LENGTHOF myArray ; set number of elements
forEach:add eax,myArray[esi] ; add each integer to sumadd esi,4 ; point to next integerloop forEach ; repeat for array size
mov theSum,eax ; store the sumret
ArraySum ENDP
This procedure needs parameters so that the array name and resultlocation can be passed in/out and permit the function to be used withdifferent arrays.
• The ArraySum procedure calculates the sum of an array. It makes
two references to specific variable names:
![Page 39: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/39.jpg)
Assembly 39
With Parameters
; Add an array of doublewords; ESI = address of array, ECX = no. of elements; Returns: EAX = sum; ECX, ESI, & flags changed
ArraySum PROCmov eax,0 ; set the sum to zero
forEach:add eax,[esi] ; add each integer to sumadd esi,4 ; point to next integerloop forEach ; repeat for array size
retArraySum ENDP
• This version of ArraySum returns the sum of any doubleword
array whose address is in ESI. The sum is returned in EAX:
![Page 40: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/40.jpg)
40
Lists the registers that are used by a procedure
MASM inserts code that will try to preserve them
USES Operator
ArraySum PROC USES esi ecxmov eax,0 ; set the sum to zeroetc.
MASM generates the code shown in gold:
ArraySum PROCpush esipush ecx..pop ecxpop esiret
ArraySum ENDP
![Page 41: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/41.jpg)
41
1. (True/False): It is possible to define a procedure inside an existing procedure.
2. What would happen if the RET instruction was omitted from a procedure?
3. (True/False): The CALL instruction pushes the offset of the CALL instruction on the
stack.
4. (True/False): In protected mode, each procedure call uses a minimum of 4 bytes of
stack space.
5. (True/False): The USES operator only generates PUSH instructions, so you must code
POP instructions yourself.
Review Questions
![Page 42: Assembly Language Lecture 5 – Proceduressallamah.weebly.com/uploads/6/9/3/5/6935631/assembly-2015-f-05.pdfAssembly Language Lecture 5 ... Write statements that cause a program to](https://reader031.fdocuments.net/reader031/viewer/2022022012/5b2304947f8b9a5d278b4639/html5/thumbnails/42.jpg)
42
Linking to External Library
The Irvine library
Stack Operations
Runtime Stack
PUSH, POP instructions
Defining and Using Procedures
PROC directive
CALL and RET instructions
Summary