Arithmetic and Logical Operations
Download
Report
Transcript Arithmetic and Logical Operations
Arithmetic and
Logical Operations Part I
1
Boolean Operations
A boolean variable can only have one of
the two values, i.e, can either be 1 or 0.
Given a sequence of bits, each of these
bits can be considered one boolean
variable.
A boolean operation is applied
simultaneously to each bit.
Logical operations are defined for boolean
variables.
Unary boolean operations
Unary boolean operations
input
0
1
zero one invert same
0
1
1
0
0
1
0
1
MAL provides the not operator
Logical Operations
a
0
0
1
1
b
0
1
0
1
and
0
0
0
1
or
0
1
1
1
nand
1
1
1
0
nor
1
0
0
0
Some MAL instructions
not
and
nor
D,S1
D,S1,S2
D,S1,S2
xor
0
1
1
0
xnor
1
0
0
1
Masking and Merging
Masking is the process of extracting a
portion of the variables from a cell.
A mask can be used to extract the
appropriate bits needed for future
operations.
The and instruction can used to extract bits.
Merging is simply inserting a bit sequence
in the appropriate part of the cell.
The or instruction can be used to merge.
Example 14.1
The following can be used as masks:
mask1:
.word
0xff000000
mask
mask2:
.word
0x007fffff
and
01000001100000000000000000110101
00000000011111111111111111111111
00000000000000000000000000110101
Extracted
bits
Example 14.2
What is the result of using mask1 with the
given bit sequence?
and
01000001100000000000000000110101
11111111000000000000000000000000
Example 14.3
and
01000001100000000000000000110101
00000000011111111111111111111111
00000000000000000000000000110101
cleared
or
00000000000000000000000000110101
01000011100000000000000000000000
01000011100000000000000000110101
merged
Example 14.4
Here’s a SAL code that demonstrates
masking and merging:
mask1:
.word
0xff000000
smallc:
.word
0x63000000
charc:
.word
0x43000000
. . .
not mask, mask1
and charc, mask, charc #clear bits
or charc, charc, smallc #merge
Shift Operations
Sometimes it is necessary to move a
sequence of bits to different positions
within the word, e.g. we need to align
variables before merging
A shift operation rearranges the bits
within the cell by shifting them
There are three types of shift operation:
logical, rotate and arithmetic.
Logical Shift
A logical shift moves the bits within the
cell one position to the right or to the left
In a logical right shift, the least
significant bit (lsb) is discarded and the
most significant bit (msb) is assigned 0.
In a logical left shift, the lsb is assigned
0 and the msb is discarded.
A shift instruction will have an operand
that specifies how many times the one
position shift is applied.
Example 14.5
discard
y
0
0 1 0 1 0 1
0
0 0 1 0 1 0
in
x
0
MAL instruction:
srl D,S1,AMT
Example 14.6
y
x
discard
0
0 1 0 1 0 1
1
0 1 0 1 0 0
SAL instruction:
sll
0 in
D,S1,AMT
Rotate
A rotate operation shifts the bits within
the cell without discarding. Unlike the
logical shift, no information is lost in a
rotate operation.
A rotate operation can either be left or
right. A rotate left has an equivalent
rotate right operation.
A rotate right places the lsb into the msb
position. A rotate left places the msb
into the lsb position.
Example 14.7
y
0
0 1 0 1 0 1
x
0
1 0 1 0 1 0
SAL instruction:
rol
x,y,1
Example 14.8
y
0
0 1 0 1 0 1
What is the result of SAL’s ror x,y,2 ?
Arithmetic Shift
A right shift is equivalent to integer
division by two.
A left shift is equivalent to multiplication
by two.
In 2’s complement, positive or negative,
a logical left shift, is equivalent to
multiplication by two.
An arithmetic left shift is the same as a
logical left shift.
An arithmetic right shift replicates the
sign bit, instead of filling in with 0’s as in
the logical right shift.
In 2’s complement, positive or negative,
division by two is accomplished via an
arithmetic right shift.
There is no arithmetic left shift
instruction because the logical left shift
instruction produces identical result.
Example 14.9
1
y
0 1 0 1 0 1
replicated
1
x
1 0 1 0 1 0
SAL instruction:
discard
sra x,y,1
Example 14.10
0
0 1 0 1 0 1
What is the result of multiplying this by two?
20