• 沒有找到結果。

• Creating Procedures

N/A
N/A
Protected

Academic year: 2022

Share "• Creating Procedures"

Copied!
24
0
0

加載中.... (立即查看全文)

全文

(1)

Defining and Using Procedures Defining and Using Procedures

• Creating Procedures

• Documenting Procedures

• Example: SumOf Procedure

• CALL and RET Instructions

• Nested Procedure Calls

• Local and Global Labels

• Procedure Parameters

• Flowchart Symbols

• USES Operator

(2)

Creating Procedures Creating Procedures

• Large problems can be divided into smaller tasks to make them more manageable

• A procedure is the ASM equivalent of a Java or C++

function

• Following is an assembly language procedure named sample:

sample PROC .

. ret

sample ENDP

(3)

Documenting Procedures Documenting Procedures

• 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.

Suggested documentation for each procedure:

If a procedure is called without its preconditions having been

satisfied, the procedure's creator makes no promise that it will

work.

(4)

Example:

Example: SumOf SumOf Procedure Procedure

;--- 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

(5)

CALL and RET Instructions CALL and RET Instructions

• The CALL instruction calls a procedure

• pushes offset of next instruction on the stack

• copies the address of the called procedure into EIP

• The RET instruction returns from a procedure

• pops top of stack into EIP

(6)

CALL CALL - - RET Example [1/2] RET Example [1/2]

main PROC

00000020 call MySub 00000025 mov eax,ebx .

.

main ENDP MySub PROC

00000040 mov eax,edx .

. ret

MySub ENDP 0000025 is the offset of the

instruction immediately following the CALL instruction

00000040 is the offset of

the first instruction inside

MySub

(7)

CALL CALL - - RET Example [2/2] RET Example [2/2]

00000025 ESP

EIP 00000040 The CALL instruction

pushes 00000025 onto the stack, and loads 00000040 into EIP

00000025 ESP

EIP 00000025 The RET instruction

pops 00000025 from the

stack into EIP

(8)

Nested Procedure Calls Nested Procedure Calls

main PROC .

.

call Sub1 exit

main ENDP Sub1 PROC .

.

call Sub2 ret

Sub1 ENDP Sub2 PROC .

.

call Sub3 ret

Sub2 ENDP Sub3 PROC .

. ret Sub3 ENDP

(ret to main) (ret to Sub1)

(ret to Sub2) ESP

By the time Sub3 is called, the

stack contains all three return

addresses:

(9)

Local and Global Labels Local and Global Labels

main PROC

jmp L2 ; error!

L1:: ; global label

exit main ENDP sub2 PROC

L2: ; local label

jmp L1 ; ok

ret sub2 ENDP

A local label is visible only to statements inside the same

procedure. A global label is visible everywhere.

(10)

Procedure Parameters [1/3]

Procedure Parameters [1/3]

• A good procedure might be usable in many different programs

• but not if it refers to specific variable names

• Parameters help to make procedures flexible

because parameter values can change at runtime

(11)

Procedure Parameters [2/3]

Procedure Parameters [2/3]

ArraySum PROC

mov esi,0 ; array index

mov eax,0 ; set the sum to zero

L1: add eax,myArray[esi] ; add each integer to sum add esi,4 ; point to next integer loop L1 ; repeat for array size mov theSum,eax ; store the sum

ret

ArraySum ENDP

The ArraySum procedure calculates the sum of an array. It

makes two references to specific variable names:

(12)

Procedure Parameters [3/3]

Procedure Parameters [3/3]

ArraySum PROC

; Recevies: ESI points to an array of doublewords,

; ECX = number of array elements.

; Returns: EAX = sum

;--- mov eax,0 ; set the sum to zero

L1: add eax,[esi] ; add each integer to sum add esi,4 ; point to next integer

loop L1 ; repeat for array size

ret

ArraySum ENDP

This version of ArraySum returns the sum of any doubleword

array whose address is in ESI. The sum is returned in EAX:

(13)

Flowchart Symbols Flowchart Symbols

• The following symbols are the basic building blocks of flowcharts:

begin / end

process (task)

decision procedure

call

yes

no manual input

display

(14)

begin

push esi, ecx

eax = 0

add eax,[esi]

add esi, 4

CX > 0?

cx = cx - 1

yes

no pop ecx, esi

end

ArraySum Procedure

push esi push ecx mov eax,0 AS1:

add eax,[esi]

add esi,4 loop AS1 pop ecx pop esi

Flowchart for the Flowchart for the ArraySum

ArraySum Procedure Procedure

(15)

Your turn . . . Your turn . . .

Draw a flowchart that expresses the following pseudocode:

input exam grade from the user if( grade > 70 )

display "Pass"

else

display "Fail"

endif

(16)

. . . (Solution)

. . . (Solution)

begin

grade > 70?

display "Pass"

display "Fail"

end input exam grade

yes no

(17)

Your turn . . . Your turn . . .

• Modify the flowchart in the previous slide to allow the

user to continue to input exam scores until a value

of –1 is entered

(18)

USES Operator USES Operator

• Lists the registers that will be saved

ArraySum PROC USES esi ecx

mov eax,0 ; set the sum to zero .

. ret

ArraySum ENDP

; MASM generates the following code:

ArraySum PROC push esi push ecx .

.

pop ecx

pop esi

ret

(19)

When not to push a register When not to push a register

SumOf PROC ; sum of three integers

push eax ; 1

add eax,ebx ; 2

add eax,ecx ; 3

pop eax ; 4

ret

SumOf ENDP

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):

(20)

Program Design Using Procedures Program Design Using Procedures

• Top-Down Design (functional decomposition) involves the following:

• design your program before starting to code

• break large tasks into smaller ones

• use a hierarchical structure based on procedure calls

• test individual procedures separately

(21)

Integer Summation Program [1/4]

Integer Summation Program [1/4]

Main steps:

• Prompt user for multiple integers

• Calculate the sum of the array

• Display the sum

Description: Write a program that prompts the user for multiple 32-bit integers, stores them in an array,

calculates the sum of the array, and displays the sum on

the screen.

(22)

Procedure Design [2/4]

Procedure Design [2/4]

Main

Clrscr ; clear screen

PromptForIntegers

WriteString ; display string

ReadInt ; input integer

ArraySum ; sum the integers

DisplaySum

WriteString ; display string

WriteInt ; display integer

(23)

Structure Chart [3/4]

Structure Chart [3/4]

Summation Program (main)

Clrscr PromptForIntegers ArraySum DisplaySum

WriteString

WriteString ReadInt WriteIntWriteInt

gray indicates library procedure

• View the stub program

• View the final program

(24)

Sample Output [4/4]

Sample Output [4/4]

Enter a signed integer: 550 Enter a signed integer: -23 Enter a signed integer: -96

The sum of the integers is: +431

參考文獻

相關文件

– Change Window Type to Video Scene Editor – Select Add → Images and select all images – Drag the strip to the “1st Frame” in Layer

L1:add eax,C_minutesInDay ; totalMinutes+=minutesInDay call WriteString ; display str1 (offset in EDX) call WriteInt ; display totalMinutes (EAX) call Crlf. inc days

Nos quadros os totais não perfazem o somatório de todos os valores, devido a arredondamentos Figures may not add up to the total stated due to rounding in

Nos quadros os totais não perfazem o somatório de todos os valores, devido a arredondamentos Figures may not add up to the total stated due to rounding in

Employer and employee’s mutual agreement certificate for continuous hiring: to be filled up by the Employer (If Letter of Consent is not enough, please follow the specific form to

Os jovens, adultos e idosos são agrupados segundo a classificação frequentemente usada em estatística.. Due to rounding, percentages may not add up

More precisely, it is the problem of partitioning a positive integer m into n positive integers such that any of the numbers is less than the sum of the remaining n − 1

You are given the desired boiling point of an ethylene glycol solution containing 1.0 kg of water and asked to find the mass of ethylene glycol you need to add to achieve the