x86汇编_SHLD/SHRD双精度左右移指令_笔记49

x86汇编_SHLD/SHRD双精度左右移指令_笔记49本文详细介绍了 x86 指令集中的 SHLD 和 SHRD 指令 用于双精度数据的左移和右移操作

大家好,欢迎来到IT知识分享网。

SHLD(双精度左移)指令将目的操作数向左移动指定位数。移动形成的空位由源操作数的高位填充。SHRD(双精度右移)指令将目的操作数向右移动指定位数。移动形成的空位由源操作数的低位填充。源操作数不变,但是符号标志位、零标志位、辅助进位标志位、奇偶标志位和进位标志位会受影响。

下图展示的是 SHLD 执行移动两位的过程。源操作数的最高位复制到目的操作数的最低位上。目的操作数的所有位都向左移动:

x86汇编_SHLD/SHRD双精度左右移指令_笔记49

下图展示的是 SHRD 执行移动两位的过程:

x86汇编_SHLD/SHRD双精度左右移指令_笔记49

目标操作数可以是寄存器或内存操作数,源操作数必须是寄存器,移位次数可以是 CL 寄存器或者 8 位立即数,格式如下:

SHLD 16位寄存器,16位寄存器,cl寄存器或者8位立即数
SHLD 16位内存数,16位寄存器,cl寄存器或者8位立即数
SHLD 32位寄存器,32位寄存器,cl寄存器或者8位立即数
SHLD 32位内存数,32位寄存器,cl寄存器或者8位立即数

下面的代码示例展示了用 SHRD 如何将一个双字数组右移 4 位:

.data array DWORD 648B2165h, 8C943A29h, 6DFA4B86h, 91F76C04h, 8BAF9857h .code main PROC nop mov esi, OFFSET array mov ecx, (LENGTHOF array) - 1 L1: mov eax, [esi + TYPE DWORD] shrd [esi], eax, 4 add esi, TYPE DWORD loop L1 shr DWORD PTR [esi], 4 invoke ExitProcess,0 main ENDP end main

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/157112.html

(0)
上一篇 2025-02-07 22:33
下一篇 2025-02-08 07:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信