Welcome to our diverse blog where we explore a wide range of fascinating topics that span the realms of exam preparation, science, business, technology, web development, administration, and health. Whether you're a student, a tech enthusiast, an entrepreneur, or simply someone seeking to enhance your knowledge, this blog is designed to provide you with insightful and engaging content.
Wednesday, 8 February 2017
X86 INSTRUCTIONS:::SHIFT AND ROTATE:::FOR A SHIFT
Logical Shift Instructions
In a logical shift instruction (also referred to as unsigned shift), the bits that slide off the end disappear (except for the last, which goes into the carry flag), and the spaces are always filled with zeros. Logical shifts are best used with unsigned numbers.
Syntax 1 :
shr src, dest #GAS Syntax
shr dest, src #Intel syntax
Logical shift dest to the right by src bits.
Syntax 2 :
shl src, dest #GAS Syntax
shl dest, src #Intel syntax
Logical shift dest to the left by src bits.
Example (GAS Syntax) :
/*ax=1111.1111.0000.0000 (0xff00, unsigned 65280,
signed -256)*/
movw $ff00,%ax
/*ax=0001.1111.1110.0000 (0x1fe0, signed and
unsigned 8160)*/
shrw $3,%ax
/*(logical shifting unsigned numbers right by 3
is like integer division by 8)*/
/*ax=0011.1111.1100.0000 (0x3fc0, signed and
unsigned 16320)*/
shlw $1,%ax
/*(logical shifting unsigned numbers left by 1
is like multiplication by 2)*/
Arithmetic Shift Instructions
In an arithmetic shift (also referred to as signed shift), like a logical shift, the bits that slide off the end disappear (except for the last, which goes into the carry flag).
But in an arithmetic shift, the spaces are filled in such a way to preserve the sign of the number being slid.
For this reason, arithmetic shifts are better suited for signed numbers in two's complement format.
Syntax 1 :
sar src, dest #GAS Syntax
sar dest, src #Intel syntax
Arithmetic shift dest to the right by src bits. Spaces are filled with sign bit (to maintain sign of original value), which is the original highest bit.
Syntax 2 :
sal src, dest #GAS Syntax
sal dest, src #Intel syntax
Arithmetic shift dest to the left by src bits. The bottom bits do not affect the sign, so the bottom bits are filled with zeros. This instruction is synonymous with SHL.
Example (GAS Syntax) :
/*ax=1111.1111.0000.0000 (0xff00, unsigned 65280,
signed -256)*/
movw $ff00,%ax
/*ax=1111.1100.0000.0000 (0xfc00, unsigned 64512,
signed -1024)*/
salw $2,%ax
/*(arithmetic shifting left by 2 is like multiplication
by 4 for negative numbers, but has an impact on positives
with most significant bit set (i.e. set bits shifted
out))*/
/*ax=1111.1111.1110.0000 (0xffe0, unsigned 65504,
signed -32)*/
sarw $5,%ax
/*(arithmetic shifting right by 5 is like integer
division by 32 for negative numbers)*/
Extended Shift Instructions
The names of the double precision shift operations are somewhat misleading, hence they are listed as extended shift instructions on this page.
They are available for use with 16- and 32-bit data entities (registers/memory locations).
The src operand is always a register, the dest operand can be a register or memory location, the cnt operand is an immediate byte value or the CL register.
In 64-bit mode it is possible to address 64-bit data as well.
The operation performed by shld is to shift the most significant cnt bits out of dest, but instead of filling up the least significant bits with zeros, they are filled with the most significant cnt bits of src.
Syntax 1 :
shld cnt, src, dest #GAS Syntax
shld dest, src, cnt #Intel syntax
Likewise, the shrd operation shifts the least significant cnt bits out of dest, and fills up the most significant cnt bits with the least significant bits of the src operand.
Syntax 2 :
shrd cnt, src, dest #GAS Syntax
shrd dest, src, cnt #Intel syntax
Intel's nomenclature is misleading, in that the shift does not operate on double the basic operand size (i.e. specifying 32-bit operands doesn't make it a 64-bit shift): the src operand always remains unchanged.
Also, Intel's manual states that the results are undefined when cnt is greater than the operand size, but at least for 32- and 64-bit data sizes it has been observed that shift operations are performed by (cnt mod n), with n being the data size.
Example (GAS Syntax) :
# ax=0000.0000.0000.0000 (0x0000)
xorw %ax,%ax
# ax=1111.1111.1111.1111 (0xffff)
notw %ax
# bx=0101.0101.0000.0000
movw $0x5500,%bx
# bx=1111.0101.0101.0000 (0xf550), ax is still 0xffff
shrdw $4,%ax,%bx
# ax=1111.1111.1111.0101 (0xfff5), bx is still 0xf550
shldw $8,%bx,%ax
Example : (decimal numbers are used instead of binary number to explain the concept) :
# ax = 1234 5678
# bx = 8765 4321
shrd $3, %ax, %bx # ax = 1234 5678 bx = 6788 7654
# ax = 1234 5678
# bx = 8765 4321
shld $3, %ax, %bx # bx = 5432 1123 ax = 1234 5678
Subscribe to:
Post Comments (Atom)
"Exploring the Intersections: Insights into Exam Prep, Science, Business,Tech,Web-dev,Admin&Health
काबिज नजूल : आबादी भूमि पर बने मकान को विक्रय करते समय बिक्रीनामा तैयार करने की प्रक्रिया-Occupied Nazul or populated land
काबिज नजूल अथवा आबादी भूमि पर बने मकान को विक्रय करते समय बिक्रीनामा तैयार करने की प्रक्रिया: 1. दस्तावेज इकट्ठा करना: विक्रेता और खरीदार ...
-
There are several home remedies that can help alleviate headache pain. Here are a few:👍 Drink plenty of water: Dehydration can often lea...
-
Sebi Sahara Refund Application form 2023 Sebi-Sahara Refund Online Application Form 2023 सार (Summary) सहारा समूह की सहकारी समितियों के वास्...
-
MSP RATE DECLARED BY GOVERNMENT OF INDIA भारत सरकार द्वारा, रबी 2020-21 के लिए MSP घोषित कर दी गयी है | गेहूँ का समर्थन मूल्य 50 रूपए बढ़ाक...
No comments:
Post a Comment