当前位置: 代码迷 >> 汇编语言 >> 双精度右移指令SHRD的疑问
  详细解决方案

双精度右移指令SHRD的疑问

热度:3849   发布时间:2013-02-26 00:00:00.0
求助:双精度右移指令SHRD的疑问
shrd:   双精度右移指令,只能在80386以上处理器使用,将目的操作数向右移动相应位数,空出来的位由源操作数的低位填充。

格式:   shrd   目的操作数,源操作数,移位位数
指令不改变源操作数,源操作数必须为寄存器。


例:
mov   ax,1234h
mov   bx,5678h
shrd   ax,bx,16     ;ax=5678h

mov   eax,12345678h
mov   ebx,87654321h
shrd   eax,ebx,32     ;eax=12345678h,右移8字节,eax不变,
shrd   eax,ebx,28     ;eax=76543211h,右移7字节还是可以的。

为什么都是双精度右移,16位寄存器完全移位就可以,而32位寄存器完全移位就不行了呢?请指教

------解决方案--------------------------------------------------------
因为shrd的移位数是做了mod 32限制的,移32位就是移0位。
而移16位是没有问题的。

------解决方案--------------------------------------------------------
题目要求用shrd移5个32位数呢
----------------------------
《Intel 汇编语言程序设计》的课后习题?

TITLE bit_trip2
INCLUDE irvine32.inc

.data
array DWORD 99999999h,99999999h,99999999h,99999999h,99999999h

.code
main PROC

mov esi,OFFSET array
mov ecx,(LENGTHOF array)-1
push esi
push ecx

top:
mov eax,[esi+4]
shrd DWORD PTR[esi],eax,1
add esi,4
loop top
shr DWORD PTR [esi],1

pop ecx
inc ecx
pop esi
mov ebx,TYPE array
call dumpmem

exit

main ENDP
END main
  相关解决方案