Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Computer Organization and Assembly Language: Conditional Processing (Part II)

Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

Computer Organization

and Assembly Language

Week 15-1

Conditional Processing
(Part II)
What's Next

 Boolean and Comparison


Instructions
 Conditional Jumps
 Conditional Loop Instructions
Conditional Jumps
 Jumps Based On . . .
 Specific flags
 Equality
 Unsigned comparisons
 Signed Comparisons
 Applications
 Encrypting a String
 Bit Test (BT) Instruction
Jcond Instruction
 Two steps to create a logic structure in ASM
 Execute CMP, AND, or SUB to modify the CPU status flags
 Execute conditional jump iinstruction
 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
Jcond 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
Jumps Based on Specific Flags
Jumps Based on Equality
Jumps Based on Unsigned
Comparisons
Jumps Based on Signed Comparisons
Applications (1 of 5)
• Task: Jump to a label if unsigned EAX is greater than EBX
• Solution: Use CMP, followed by JA

cmp eax,ebx
ja Larger

• Task: Jump to a label if signed EAX is greater than EBX


• Solution: Use CMP, followed by JG

cmp eax,ebx
jg Greater
Applications (2 of 5)

• Jump to label L1 if unsigned EAX is less than or equal to Val1

cmp eax,Val1
jbe L1 ; below or equal

• Jump to label L1 if signed EAX is less than or equal to Val1

cmp eax,Val1
jle L1
Applications (3 of 5)
• 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:

• 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:
Applications (4 of 5)
• 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
Applications (5 of 5)

• 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
Your turn . . .
 Write code that jumps to label L1 if either bit
4, 5, or 6 is set in the BL register.
 Write code that jumps to label L1 if bits 4, 5,
and 6 are all set in the BL register.
 Write code that jumps to label L2 if AL has
even parity.
 Write code that jumps to label L3 if AX is
negative.
 Write code that jumps to label L4 if the
expression (BX – CX) is greater than zero.

You might also like