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