chapter 5 branching and looping contents: jump instructions & loop instructions implementing...

50
Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays programming

Post on 19-Dec-2015

239 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Chapter 5 Branching and Looping

Contents:Jump instructions & Loop instructionsImplementing loop structures & selective structuresApplication: Arrays programming

Page 2: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Outcomes

Master jump instructions Master loop instructions Master the method of

implementing loop structures & selective structures

Master the method of programming arrays

Page 3: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Jump instructions (跳转指令)

Change the sequences of the codes

Implement selective structures and loop structures

Two types Unconditional jump Conditional jump

Page 4: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

5.1 Unconditional Jumps

JMP Statementlable; target address - >CS:EIP

Statementlable : address of other assembly language statement

Similar to GOTOJMP quit

.

.quit: INVOKE ExitProcess, 0

Page 5: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Example:5.1

output explain ; initial instructions mov sum,0 ; sum := 0 mov ebx,0 ; count := 0forever: output prompt ; prompt for number input number,16 ; read ASCII characters atod number ; convert to integer

Page 6: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Example:5.1

add sum,eax ; add number to sum inc ebx ; add 1 to count

dtoa value,ebx ; convert count to ASCII output countLabel ; display label for count output value ; display count

Page 7: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Example:5.1

dtoa value,sum ; convert sum to ASCIIoutput sumLabel ; display label for sumoutput value ; display sum

Page 8: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Example:5.1

mov eax,sum ; get sumcdq ; extend sum to 64 bitsidiv ebx ; sum / countdtoa value,eax ; convert average to ASCIIoutput avgLabel ; display label for averageoutput value ; output average

Page 9: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Example:5.1

output nextPrompt ; skip down; start next prompt jmp forever ; repeat

Page 10: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Jump direction Backward reference (向后跳转)

Transfer control to a point that precedes the jmp statement itself.

Example5.1 Forward reference (向前跳转)

Transfer control to a point that is behind the jmp statement itself.

Jmp quit

Page 11: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

About JMP instructions…

JMP instructions will change the value in the EIP register;

Two kinds of JMP instructions Intersegment jump (段间转移)

Change CS register Intrasegment jump (段内转移)

Not change CS register

Page 12: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Relative jump/direct jump相对跳转 / 直接转移

Contains the sign displacement of the target from the JMP statement itself. Positive for a forward reference Negative for a backward reference Target address = displacement + addr. of n

ext instruction Target address label is contained in jump ins

truction. Example: Jmp forever

Page 13: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Displacement size

short relative jump (短转移) Displacement is a single byte

near relative format (近转移) 32-bit displacement

Page 14: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Indirect jump (间接转移) Use a 32-bit address for the target. Address is stored in a register or in a

memory doubleword Example:

jmp edx ;edx->EIPTarget dword 98098912hjmp Target ; [target]->EIPjmp DWORD PTR [ebx] ; [ebx]->EIP

Page 15: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

5.2 Conditional JUMP (条件转移)

Jcc targetStatement ;target address->EIP cc identifies the condition under which the jum

p is to be executed. If the condition holds, then the jump takes pla

ce; Otherwise, the next instruction is executed. targetStatement must be relative addressing

Conditional jump instructions do not modify the flags; they only react to previously set flag values.

Page 16: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

mnemonic flags description mnemonic flags description

JZ/JE ZF=1

Jump if equal/zero

JNZ/JNE ZF=0 Jump if not equal/not zero

JS SF=1

Jump if sign JNS SF=0 Jump if not sign

JP/JPE PF=1

Jump if parity/even

JNP/JPO PF=0 Jump if not parity/odd

JO OF=1

Jump if overflow JNO OF=0 Jump if not overflow

JC/JB/JNAE CF=1

Jump if below/ not above or equal

JNC/JNB/JAE CF=0 Jump if above or equal/not below

JBE/JNA CF=1 or ZF=1

Jump if below or equal/not above

JNBE/JA CF=0 & ZF=0

Jump if above/not below or equal

JL/JNGE SFOF

Jump if less/not greater or equal

JNL/JGE SF=OF Jump if not less/greater or equal

JLE/JNG ZF=1 or ZF OF

Jump if less or equal/ not greater

JNLE/JG ZF=0 & ZF=OF

Jump if not less or equal/greater

Page 17: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Example

add value to balance;

if balance<0 then …{design for negative banlance} elseif balance=0 then…{design for zro balance}Else…{design for positive balance}End if;

add balance , eax jns elseIfZero… jmp endBalanceCheckelseIfZero: jnz elsePos… jmp endBanlanceCheckelsePos: …

endBanlanceCheck:

Note the begin and end of selective structure.

Page 18: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Set or reset flag

Set flag (标志位置位) Give the value 1 to a flag

Reset/clear flag (标志位复位) Give the value 0 to a flag

Compare instructions are the most common way to establish flag values.

Page 19: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

compare instruction

CMP operand1 , operand2 Calculating operand1 minus

operand2, like a SUB instruction Set flags but do not change

operand1 Addressing mode is the same as

SUB.

Page 20: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Example

if eax>100 then jump to Bigger;

cmp eax, 100 ja Bigger ;(1) jg Bigger ;(2)

Jump or not?EAX=00000000H(1)(2) NOT JUMPEAX=80000000H(1)JUMP(2)NOT JUMP

Page 21: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

IF structure

if value<10 then add 1 to smallCount; else add 1 to largetCount; endif

cmp ebx , 10; value <10 jnl elseLarge inc smallCount jmp endValueCheckelaseLarge: inc lartgeCout endValueCheck:

Page 22: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

IF structure(2) if (total>=100) or (count=10) then add value to total; endif

cmp total , 100; total <=100? jge addValuecmp cx, 10; count=100? jne endAddCheckaddValue: mov ebx, value; copy valueadd total , ebx ; add value to totalendAddCheck:

Page 23: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

IF structure(3) if (count>0) and (ch=backspace) then subtract 1 from count; endif

cmp cx , 0 ; count>0?jng endCheckChcmp al , backspace ; ch a backspace?jne endCheckChdec count ; subtract 1 from countendCheckCh:

Page 24: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

5.3 Implementing Loop Structures

Loop structures include while, until and for loops.

Use jump instructions Use loop instructions while continuation condition loop

..{body of loop} end while;

for index:=initialValue to finalValue loop..{body of loop} end for; until termination condition loop..{body of loop} end until;

Page 25: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

while loop structure while (sum<1000) loop…{body of loop} end while;

whileSum: cmp sum , 1000 ; sum<1000? jnl endWhileSum ;exit loop if not … … jmp whileSum ; go check condition againendWhileSum:

Page 26: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

while loop structure(2)

X:=0; twoToX:=1; while twoToX<=number multiply twoToX by 2; add 1 to x; end while; subtract 1 from x

mov cx, 0 mov eax, 1whileLE: cmp eax, number

jnle endWhileLE Body: add eax, eax

inc cx jmp whileLE

endWhileLE:dec cx

Page 27: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

while loop structure(3)while (sum<1000) and (count<=24) loop …{ body of loop} end while; whileSum:

cmp sum , 1000 ; sum<1000? jnl endWhileSum ;exit loop if not cmp cx , 24 ; count<=24 jnle endWhileSum ; exit if not ;body of loop jmp whileSum ; go check condition againendWhileSum:

Page 28: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

while loop structure(4)while (sum<1000) or (flag=1) loop …{ body of loop} end while;

whileSum: cmp eax , 1000 ; sum<1000? jl body ;execute bbody if so cmp dh , 1 ; flag=1? jne endWhileSum ; exit if not ;body of loop jmp whileSum ; go check condition againendWhileSum:

Page 29: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

while loop structure(5)sum:=0while (number keyed in is not negative) loop add number to sum; end while; mov ebx , 0

whileNotNeg: output prompt input number ,10 atod number js endwhile add ebx , eax jmp whileSum endWhile:

Page 30: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

For loop structure

Index:=initialValue while index <=finalValue loop..{body of loop} add 1 to index; end while;

for index:=initialValue to finalValue loop..{body of loop} end for;

Page 31: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

for loop structurePrompt for tally of numbers;Input tally;Sun:=0For count:=1 to tally loopPrompt for number;Input number;Add number to sum;End for ;

output prompt1 input value , 20 atoi valuemov tally , ax mov edx, 0 ; sum:=0mov bx, 1 ; count:=1

forCount: cmp bx, tallyjnle endfor ; exit if notoutput prompt2input value, 20atod valueadd edx, eaxinc bxjmp forCount ;repeatendFor:

Page 32: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

until loop structureCount :=0;Until (sum>1000) or (count =100) loop ….{ body of loop}Add 1 to count;End until;

mov cx, 0 ;count :=0Until: ;body of loop

inc cx ;add 1 to countcmp sum, 1000 ; sum>1000?jg endUntil ; exit if sum >1000

cmp cx , 100 ; count=100? jne until ; continue if count not =100endUntil:

Page 33: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Loop instructions

Loop statementLabel1. statementLabel is the label of a statement th

at is a short displacement from the loop instruction.

2. ECX -1->ECX3. if ECX =0, then execute the statement followi

ng the looop instruction4. if ECX !=0, then a jump to the instruction at st

atementLabel takes place

Page 34: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

For loop structure for count:=20 downto 1 loop…{ body of loop} end for

mov ecx, 20 ;number of iterations 循环次数forCount: . . ;body of loop

loop forCount ; repeat body 20 times

Page 35: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

For loop structure

mov ecx, number ;number of iterations 循环次数 cmp ecx , 0 je/jecxz endFor; skip loop if number=0 forIndex: .. ;body of loop

loop forIndex ; repeat body number times

How many times would repeat if ECX=0?

232=4294967296

Page 36: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

For loop structure for counter := 50 downto 1 loop

….{body of loop} end for;

mov ecx , 50 ; number of iterations forCount: ; body of loop dec ecx ;decrement loop counter

jecxz endfor ; exit if counter =0 jmp forCounter ; otherwise repeat body

mov ecx , 50 ; number of iterations forCount: . ; body of loop loop forCount ; repeat body 20 times

Page 37: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

For loop structure for index:=1 to 50 loop…{ body of loop} end for

mov ecx, 50 ;number of iterations 循环次数mov ebx , 1 ; index:=1 forCount: . ;body of loop

inc ebx loop forCount ; repeat body 20 times

Page 38: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Conditional loop

loopz/loope if ECX!=0 and ZF=1 then loop again

loopnz/loopne if ECX!=0 and ZF=0 then loop again

Page 39: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

For loop structure for year:=10 downto 1 until balance=0 loop…{ body of loop} end for

mov ecx, 10 ;maximum number of iterationsforYear: . ;body of loop

cmp ebx , 0 ;balance=0? loopne forYear ; repeat body 20 times

Page 40: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Other instructions lea destination, source

destination will normally be a 32-bit register; source is any reference to memory the address of the source is loaded into the re

gister MOV destination , OFFSET source

jecxz targetstatement jump if ecx=0

Page 41: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Game program

untilDone: output prompt1 ; ask player 1 for target input stringIn, 20 ; get number atod stringIn ; convert to integer mov target,eax ; store target output clear ; clear screen mov cx, 0 ; zero count

Page 42: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Game program(2)

untilMatch: inc cx ; increment count of guesses output prompt2 ; ask player 2 for guess input stringIn, 20 ; get number atod stringIn ; convert to integer

cmp eax, target ; compare guess and target jne ifLess ; guess = target ?

Page 43: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Game program(3)

equal: output gotItOutput ; display "you got it" jmp endCompareifLess: jnl isGreater ; guess < target ? output lowOutput ; display "too low" jmp endCompareisGreater: output highOutput ; display "too high"

Page 44: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Game program(4)endCompare: cmp eax, target ; compare guess and target jne untilMatch ; ask again if guess not = target itoa countOut, cx ; convert count to ASCII output countLabel ; display label, count and prompt input stringIn, 20 ; get response cmp stringIn, 'n' ; response = 'n' ? je endUntilDone ; exit if so cmp stringIn, 'N' ; response = 'N' ? jne untilDone ; repeat if notendUntilDone:

Page 45: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Program using array

; input a collection of numbers; report their average and the numbers which are ;above average

output directions ; display directions mov nbrElts,0 ; nbrElts := 0 lea ebx,nbrArray ; get address of nbrArray

Page 46: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Program using array

whilePos: output prompt ; prompt for number input number,20 ; get number atod number ; convert to integer jng endWhile ; exit if not positive mov [ebx],eax ; store number in array inc nbrElts ; add 1 to nbrElts add ebx,4 ; get address of next item of array jmp whilePos ; repeatendWhile:

Page 47: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Program using array

; find sum and average

mov eax,0 ; sum := 0 lea ebx,nbrArray ; get address of nbrArray mov ecx,nbrElts ; count := nbrElts

jecxz quit ; quit if no numbersforCount1: add eax,[ebx] ; add number to sum add ebx,4 ; get address of next item of array loop forCount1 ; repeat nbrElts times

Page 48: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Program using array

cdq ; extend sum to quadword idiv nbrElts ; calculate average dtoa outValue,eax ; convert average to ASCII output avgLabel ; print label and average output aboveLabel ; print label for big numbers

Page 49: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Program using array ; display numbers above average lea ebx,nbrArray ; get address of nbrArray mov ecx,nbrElts ; count := nbrElts

forCount2: cmp [ebx],eax ; doubleword > average ?jng endIfBig ; continue if average not lessdtoa outValue,[ebx] ; convert value from array to ASCIIoutput outValue ; display valueendIfBig:add ebx,4 ; get address of next item of arrayloop forCount2 ; repeat

Page 50: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays

Exercises P185. Exercises5.5 1, 2, 3,4 P178. Exercises5.4 1, 2 P167. Exercises5.3 1, 2, 3 P157. Exercises5.2 1, 2 P143. Exercises5.1 2