0% found this document useful (0 votes)
23 views23 pages

MP 7

The document discusses microprocessor program control instructions including unconditional jumps, conditional branching, and constructing loops. It describes different jump instructions, comparing signed and unsigned integers, and mapping high-level branches to linear code.

Uploaded by

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

MP 7

The document discusses microprocessor program control instructions including unconditional jumps, conditional branching, and constructing loops. It describes different jump instructions, comparing signed and unsigned integers, and mapping high-level branches to linear code.

Uploaded by

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

MICROPROCESSORS

Program Control Instructions

Slides adapted from slides by Prof. Levent Eren


2

Outline

• Unconditional jump
• Conditional branching
• Construction of loops
3

Unconditional Jump
JMP
• Short jump 2-byte instruction that allows jumps or branches to memory
locations within +127 and -128 bytes from the memory location following the
jump
OPCODE DISP
JMP SHORT Label
• Near jump 3-byte instruction that allows jumps or branches within +/-
32Kb from the instruction in the current code segment
OPCODE DISP low DISP high
JMP Label
• Far jump 5-byte instruction that allows a jump to any memory location
within the entire memory space
OPCODE IP low IP high CS low CS high
JMP Label

• For 80386 and above the near jump (5-byte) is within +/-2G if the machine
operates in the protected mode and +/-32K bytes if operates in the real mode
4
5

JMP
6

; R denotes Relocatable

; later opcode will be E9 F6 01


7

Conditional Branching
• Logic and arithmetic instructions set flags
• Flags provide state information from previous instruction(s)
• Using flags we can perform conditional jumping, i.e.,
transfer program execution to some different place within
the program
if condition was true
• jump back or forward in your code to the location specified
• instruction pointer (IP) gets updated (to point to the instruction to
which execution will jump)
if condition was false
• continue execution at the following instruction
• IP gets incremented as usual
8

Conditional Branching (cont.)


• Conditional jumps are always short jumps in the 8086-80286
• the range of the jump is +127 bytes and -128 bytes from the location
following the conditional jump
• In 80386, 80486 conditional jumps are either short or near
jumps
• Conditional jumps test: sign (S), zero (Z), carry (C), parity (P),
and overflow (O).
• For example, a JC will jump if the carry bit is set.
• Note:
an FFh is above the 00h in the set of unsigned numbers
an FFh (-1) is less than 00h for signed numbers
when you compare unsigned FFh is above 00h, but
signed FFh is less than 00h
9

Numerical Comparison

• CMP(comparison) compares A to B
• a subtraction that only changes the flag bits
• useful for checking the entire contents of a register or a memory
location against another value
• usually followed by a conditional jump instruction
CMP AL, 10h ;compare with 10h (contents of AL does not change)

JAE SUPER ;if 10h or above then jump to memory location SUPER

• SUB (subtraction) calculates difference A - B


• saves results to A and set flags
10

Numerical Comparison
Condition Code Settings
CMP Oprnd1, Oprnd2

Unsigned Operands Signed operands

Z: equality/inequality Z: equality/inequality

C: Oprnd1 < Oprnd2 (C=1) C: no meaning


Oprnd1 >= Oprnd2 (C=0)

S: no meaning S and O taken together


O: no meaning If ((S=0) and (O=1)) or ((S=1) and (O=0)) then Oprnd1 < Oprnd2
If ((S=0) and (O=0)) or ((S=1) and (O=1)) then Oprnd1 >= Oprnd2
11

Comparing Signed Integers


• Consider CMP AX,BX computed by the CPU
• The Sign bit (S) will be set if the result of AX-BX has a 1 at the
most significant bit of the result (i.e., 15th bit for 16-bit op)
• The Overflow flag (O) will be set if the result of AX-BX produced a
number that was out of range (-32768 - 32767 for 16-bit
numbers) to be represented by an integer.
• Difference in JS (jump on sign) and JL (jump less than)
• The conditional jump JS looks at the sign bit (S) of the last
compare (or subtraction). If S = = 1 then jump.
• The conditional jump JL looks (S XOR O) of the last compare (or
subtraction)
• REGARDLESS of the value AX-BX, i.e., even if AX-BX causes
overflow, the JL will be correctly executed
12

Comparing Signed Integers (cont.)

• JL is true if the condition: S xor O is met


• JL is true for two conditions:
• S=1, O=0:
• (AX-BX) was negative and (AX-BX) did not overflow
• Example (8-bit):
(-5) - (2) = (-7)
Result (-7) has the sign bit set
Thus (-5) is less than (2).
13

Comparing Signed Integers (cont.)


• S=0, O=1:
• Overflow!, Sign bit of the result is wrong!
• Consider the following case:
AX is a large negative number (-)
BX is a positive number (+).
The subtraction of (-) and (+) is the same as the addition of (-) and (-)
The result causes negative overflow, and thus cannot be
represented as a signed integer correctly (O=1).
The result of AX-BX appears positive (S=0).
• Example (8-bit): (-128) - (1) = (+127)
• Result (+127) overflowed. Answer should have been (-129).
• Result appears positive, but overflow occurred
• Thus (-128) is less than (1), i.e., the condition is TRUE for executing
JL
14

Comparing Signed Integers


CMP AX, BX
BX AX
AX – BX = 2 – (-4) = 2 + 4 = 6 =0110
So s = 0, no overflow (o = 0)
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 Therefore AX >= BX

BX AX
AX – BX = 6 – (-3) = 6 + 3 = 9 = 1001
So s = 1, overflow (o = 1)
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 Therefore AX >= BX

AX BX
AX – BX = 2 – 4 = -2 = 1110
So s = 1, no overflow (o = 0)
-8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 Therefore AX < BX
15

Conditional Branching
(cont.)
• Terminology used to differentiate between jump
instructions that use the carry flag and the overflow flag
• Above/Below unsigned compare
• Greater/Less signed (+/-) compare

• Names of jump instructions


J => Jump
N => Not
A/B G/L => Above/Below Greater/Less
E => Equal
16

Summary of
Conditional Jump Instructions
Command Description Condition

JA=JNBE Jump if above C=0 & Z=0


Jump if not below or equal
JBE=JNA Jump if below or equal C=1 | Z=1
JAE=JNB=JNC Jump if above or equal C=0
Jump if not below
Jump if no carry
JB=JNAE=JC Jump if below C=1
Jump if carry
JE=JZ Jump if equal Z=1
Jump if Zero
JNE=JNZ Jump if not equal Z=0
Jump if not zero
JS Jump Sign (MSB=1) S=1
17

Summary of
Conditional Jump Instructions
Command Description Condition

JNS Jump Not Sign (MSB=0) S=0


JO Jump if overflow set O=1
JNO Jump if no overflow O=0
JG=JNLE Jump if greater
Jump if not less or equal S=O & Z=0
JGE=JNL Jump if greater or equal S=O
Jump if not less
JL=JNGE Jump if less S^O
Jump if not greater or equal
JLE=JNG Jump if less or equal S^O | Z=1
Jump if not greater
JCXZ Jump if register CX=zero CX=0
18

Mapping High Level Branches


into Linear Code

CMP AX, BX
JA true_label
….
<False Processing>
….
JMP done_label
….
true_label: <True processing>
….
done_label: <resume execution>
19

Mapping High Level Branches


into Linear Code (cont.)
20

Examples
; if (J <= K) then ; while (J >= K) do begin
; L := L + 1 ; J := J - 1;
; else L := L - 1 ; K := K + 1;
; J, K, L are signed words ; L := J * K;
; end;
WhlLoop:
MOV AX, J MOV AX, J
CMP AX, K CMP AX, K
JNEL DoElse JNGE QuitLoop
INC L DEC J
JMP ifDone INC K
DoElse: MOV AX, J
DEC L IMUL AX, K
ifDone: MOV L, AX
JMP WhlLoop
QuitLoop:
21

LOOP Instruction
• LOOP instruction
• Combination of a decrement CX and a conditional jump
• LOOP decrements CX (ECX if in 32-bit mode) and if CX  0 it
jumps to the address indicated by the label
• if CX becomes a 0, the next sequential instruction executes
ADDS PROC NEAR
MOV CX, 100 ; load count
MOV SI, OFFSET BLOCK1 ; BLOCK1 in DS
MOV DI, OFFSET BLOCK2 ; BLOCK2 in ES
Again:
LODSW ;get Block1 data; AX =DS:[SI]; SI = SI + 2
ADD AX, ES:[DI] ;add Block2 data
STOSW ;store in Block2; ES:[DI] = AX; DI = DI + 2
LOOP Again ;repeat 100 times
RET
ADDS ENDP
22

LOOPNE Instruction
• The LOOPNE instruction is useful for controlling loops that stop on
some condition or when the loop exceeds some number of iterations

• Consider String1 that contains a sequence of characters that end with


the byte containing zero
• we want to convert those characters to upper case and copy them to
String2

…..
String1 BYTE “This string contains lower case characters”, 0
String2 BYTE 128 dup (0)
……..
23

LOOPNE Instruction (cont.)


LEA SI, String1 ;the same as use of OFFSET
LEA DI, String2
MOV CX, 127 ;Max 127 chars to String2
StrLoop:
LODSB ;get char from String1; AL =[SI]; SI = SI + 1
CMP AL, ‘a’ ;see if lower case
JB NotLower ;chars are unsigned
CMP AL, ‘z’
JA NotLower
AND AL, 5Fh ;convert lower -> upper case;
;bit 6 must be 0
NotLower:
STOSB ; [DI] = AL; DI = DI + 1
CMP AL, 0 ;see if zero terminator
LOOPNE StrLoop ;quit if AL or CX = 0

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