0% found this document useful (0 votes)
32 views30 pages

ch5 Presentation

This document summarizes various conditional processing techniques in assembly language, including: - Comparison instructions like TEST and CMP that set status flags for conditional jumps. - Conditional jump instructions like JZ, JC, JE that branch based on status flag values. - Applications of conditional jumps like comparing values and copying the larger/smaller value. - Looping instructions like LOOPZ, LOOPNZ that decrement a counter and conditionally jump to repeat the loop body. - Implementing conditional structures like IF statements using jumps, and logical AND/OR using flag status.

Uploaded by

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

ch5 Presentation

This document summarizes various conditional processing techniques in assembly language, including: - Comparison instructions like TEST and CMP that set status flags for conditional jumps. - Conditional jump instructions like JZ, JC, JE that branch based on status flag values. - Applications of conditional jumps like comparing values and copying the larger/smaller value. - Looping instructions like LOOPZ, LOOPNZ that decrement a counter and conditionally jump to repeat the loop body. - Implementing conditional structures like IF statements using jumps, and logical AND/OR using flag status.

Uploaded by

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

Chapter 5: Conditional Processing

Chapter Overview
Comparison Instructions
Conditional Jumps
Conditional Loop Instructions
Conditional Structures

2
Comparison Instructions
TEST Instruction
CMP Instruction

3
TEST Instruction
 Performs a nondestructive AND operation between each pair of
matching bits in two operands
 No operands are modified, but the Zero flag is affected.
 Example: jump to a label if either bit 0 or bit 1 in AL is set.

test al,00000011b
jnz ValueFound

• Example: jump to a label if neither bit 0 nor bit 1 in AL is set.

test al,00000011b
jz ValueNotFound

4
CMP Instruction (1 of 2)
 Compares the destination operand to the source operand
 Nondestructive subtraction of source from destination (destination operand
is not changed)
 Syntax: CMP destination, source
 Example: destination == source

mov al,5
cmp al,5 ; Zero flag set

• Example: destination < source

mov al,4
cmp al,5 ; Carry flag set

5
CMP Instruction (2 of 2)
 Example: destination > source

mov al,6
cmp al,5 ; ZF = 0, CF = 0

(both the Zero and Carry flags are clear)

6
Conditional Jumps
Jumps Based On . . .
Specific flags
Equality
Unsigned comparisons
Signed Comparisons
Applications
Encrypting a String
Bit Test (BT) Instruction

7

J cond Instruction
A conditional jump instruction branches to a label
when specific register or flag conditions are met

Specific jumps:
JB, JC - jump to a label if the Carry flag is set
JE, JZ - jump to a label if the Zero flag is set
JS - jump to a label if the Sign flag is set
JNE, JNZ - jump to a label if the Zero flag is clear
JECXZ - jump to a label if ECX = 0

8

J cond Ranges
Prior to the 386:
jump must be within –128 to +127 bytes from current
location counter
x86 processors:
32-bit offset permits jump anywhere in memory

9
Jumps Based on Specific Flags

10
Jumps Based on Equality

11
Jumps Based on Unsigned Comparisons

12
Jumps Based on Signed Comparisons

13
Applications (1 of 3)

• Compare unsigned AX to BX, and copy the larger of the two into a variable
named Large

mov Large,bx
cmp ax,bx
jna Next
mov Large,ax
Next:
mov large,bx

• Compare signed AX to BX, and copy the smaller of the two into a variable
named Small

mov Small,ax
cmp bx,ax
jnl Next
mov Small,bx
Next:
mov small, ax
14
Applications (2 of 3)

• Jump to label L1 if the memory word pointed to by ESI equals Zero

cmp WORD PTR [esi],0


je L1

• Jump to label L2 if the doubleword in memory pointed to by EDI is even

test DWORD PTR [edi],1


jz L2

15
Applications (3 of 3)
• Task: Jump to label L1 if bits 0, 1, and 3 in AL are all set.
• Solution: Clear all bits except bits 0, 1,and 3. Then compare the result
with 00001011 binary.

and al,00001011b ; clear unwanted bits


cmp al,00001011b ; check remaining bits
je L1 ; all set? jump to L1

16
Encrypting a String

The following loop uses the XOR instruction to transform every character in a
string into a new value.

KEY = 239 ; can be any byte value


BUFMAX = 128
.data
buffer BYTE BUFMAX+1 DUP(0)
bufSize DWORD BUFMAX

.code
mov ecx,bufSize ; loop counter
mov esi,0 ; index 0 in buffer
L1:
xor buffer[esi],KEY ; translate a byte
inc esi ; point to next byte
loop L1

17
BT (Bit Test) Instruction
Copies bit n from an operand into the Carry flag
Syntax: BT bitBase, n
bitBase may be r/m16 or r/m32
n may be r16, r32, or imm8
Example: jump to label L1 if bit 9 is set in the AX
register:
bt AX,9 ; CF = bit 9
jc L1 ; jump if Carry

18
Conditional Loop Instructions
LOOPZ and LOOPE
LOOPNZ and LOOPNE

19
LOOPZ
Syntax:
and LOOPE
LOOPE destination
LOOPZ destination
Logic:
ECX  ECX – 1
if ECX > 0 and ZF=1, jump to destination
Useful when scanning an array for the first element that
does not match a given value.

In 32-bit mode, ECX is the loop counter register. In 16-bit real-address


mode, CX is the counter, and in 64-bit mode, RCX is the counter.

20
LOOPNZ and LOOPNE
LOOPNZ (LOOPNE) is a conditional loop instruction
Syntax:
LOOPNZ destination
LOOPNE destination
Logic:
ECX  ECX – 1;
if ECX > 0 and ZF=0, jump to destination
Useful when scanning an array for the first element
that matches a given value.

21
LOOPNZ Example
The following code finds the first positive value in an array:

.data
array SWORD -3,-6,-1,-10,10,30,40,4
.code
mov esi,OFFSET array
mov ecx,LENGTHOF array
next:
test WORD PTR [esi],8000h ; test sign bit
add esi,TYPE array
loopnz next ; continue loop
jnz quit ; none found
sub esi,TYPE array ; ESI points to
value
quit:

22
Conditional Structures
Block-Structured IF Statements

Compound Expressions with AND

Compound Expressions with OR

WHILE Loops

Table-Driven Selection

23
Block-Structured IF Statements
Assembly language programmers can easily translate logical statements
written in C++/Java into assembly language. For example:

if( op1 == op2 ) mov eax,op1


cmp eax,op2
X = 1;
jne L1
else mov X,1
X = 2; jmp L2
L1: mov X,2
L2:

24
Compound Expression with AND (1
of 3)
 When implementing the logical AND operator, consider that HLLs use
short-circuit evaluation
 In the following example, if the first expression is false, the second
expression is skipped:

if (al > bl) AND (bl > cl)


X = 1;

25
Compound Expression with AND (2
of 3)
if (al > bl) AND (bl > cl)
X = 1;

This is one possible implementation . . .

cmp al,bl ; first expression...


ja L1
jmp next
L1:
cmp bl,cl ; second expression...
ja L2
jmp next
L2: ; both are true
mov X,1 ; set X to 1
next:

26
Compound Expression with AND (3
of 3)
if (al > bl) AND (bl > cl)
X = 1;

But the following implementation uses 29% less code by reversing the first
relational operator. We allow the program to "fall through" to the second
expression:

cmp al,bl ; first expression...


jbe next ; quit if false
cmp bl,cl ; second expression...
jbe next ; quit if false
mov X,1 ; both are true
next:

27
Compound Expression with OR
When implementing the logical OR operator, consider that HLLs use
(1 of 2)

short-circuit evaluation
In the following example, if the first expression is true, the second
expression is skipped:

if (al > bl) OR (bl > cl)


X = 1;

28
Compound Expression with OR (2 of 2)
if (al > bl) OR (bl > cl)
X = 1;

We can use "fall-through" logic to keep the code as short as possible:

cmp al,bl ; is AL > BL?


ja L1 ; yes
cmp bl,cl ; no: is BL > CL?
jbe next ; no: skip next statement
L1: mov X,1 ; set X to 1
next:

29
WHILE Loops
A WHILE loop is really an IF statement followed by the body of the loop,
followed by an unconditional jump to the top of the loop. Consider the
following example:

while( eax < ebx)


eax = eax + 1;

This is a possible implementation:

top: cmp eax,ebx ; check loop condition


jae next ; false? exit loop
inc eax ; body of loop
jmp top ; repeat the loop
next:

30

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy