![Page 1: Chapter 5 Branching and Looping Contents: Jump instructions & Loop instructions Implementing loop structures & selective structures Application: Arrays](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/45.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/46.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/47.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062221/56649d395503460f94a128e5/html5/thumbnails/50.jpg)
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