日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MMX指令集系列之二----移位运算和乘法指令

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MMX指令集系列之二----移位运算和乘法指令 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

4. 數據移位指令

? 4.1 16位并行左移指令

? ?psllw MM,MM/m64

? ?psllw MM,imm8

? ?把目的寄存器按字由源存儲器(或imm8 立即數)指定位數邏輯左移,移出的位丟失.
? ?低字移出的位不會移入高字.
? ?例:
? ?當MM0 = 0xffff ?ffff ffff ?ffff, 執行psllw MM0,1
? ?則MM0 = 0xfffe fffe fffe fffe

?

? 4.2 16位并行邏輯右移指令


? psrlw MM,MM/m64

? psrlw MM,imm8


? 把目的寄存器按字由源存儲器(或imm8 立即數)指定位數邏輯右移,移出的位丟失.
? 高字移出的位不會移入低字.
? 例:
? 當MM0 = 0xffff ?ffff ?ffff ?ffff, 執行psrlw MM0,1
? 則MM0 = 0x7fff 7fff 7fff 7fff

?

4.3 32位并行左移指令


? pslld MM,MM/m64

? pslld MM,MM imm8

? 把目的寄存器按雙字由源存儲器(或imm8 立即數)指定位數邏輯左移,移出的位丟失.
? 低雙字移出的位不會移入高雙字.
? 例:
? 當MM0 = 0xffffffff ?ffffffff, 執行 pslld MM0,1
? 則MM0 = 0xfffffffe fffffffe

?

4.4 32位并行邏輯右移指令


?psrld MM,MM/m64

?psrld MM,imm8
?

? 把目的寄存器按雙字由源存儲器(或imm8 立即數)指定位數邏輯右移,移出的位丟失.
? 高雙字移出的位不會移入低雙字.
? 例:
? 當 MM0 = 0xffffffff ?ffffffff, 執行psrld MM0,1
? 則 MM0 = 0x7fffffff 7fffffff


4.5 64位數據邏輯左移和邏輯右移

? psllq?MM,imm8

??psrlq?MM,imm8



4.6 16位并行算術右移和32位并行算術右移

??psraw?MM,imm8

??psrad?MM,imm8

??


5. 乘法指令

???pmullw MM,MM/m64

? ?并行16位按字相乘, 取結果低16位, 放入目的寄存器的對應字.??

? 例:
? 當 MM0 == ?0x0000 0000 0002 acfe

? ? ?MM1 == ?0x0000 0000 0009 cef3, 執行 pmullw,

? ? 則MM0 = ?0x0000 0000 0012 991a
? ? 2 * 9 = 18,18 = 0000 0012h,取低16位 0012 為結果.
? ? 0x0acfe == -21250,0xcef3 == -12557,-21250*-12557 = 266836250 = 0x 0fe7 991a,取低16位 991a 為結果.

? ?pmulhw MM,MM/m64
? ?并行16位按字相乘, 取結果高16位, 放入目的寄存器的對應字.

? 例:
? 當MM0 == ?0x0000 0000 0002 acfe

? ? MM1 == ?0x0000 0000 0009 cef3, 執行 pmulhw,

? ? 則MM0 = 0x0000 0000 0000 0fe7
? ? 2 * 9 = 18,18 = 0000 0012h,取高16位 0000 為結果.
? ? 0x0acfe == -21250,0xcef3 == -12557,-21250*-12557 = 266836250 = 0x 0fe7 991a,取高16位 0fe7 為結果.

 pmaddwd MM,MM/m64
 按字對齊有符號向量點乘.
  ? ? ? ? ? ? ? ? ? ?高32位 | 低32位
 目的寄存器:     a0| a1 | a2 | a3
 源寄存器: ?     b0| b1 | b2 | b3
 目的寄存器結果: ?a0*b0+a1*b1 | a2*b2+a3*b3

?

小結:

? 1. 移位指令按照16位或32位進行并行移位.也可以直接操作整個64位數。

? 2. 右移指令分為邏輯右移和算術右移。左移指令沒有算術左移一說。

? 3. 只有三種乘法指令,并行乘法的數據單位都是16位有符號數。

?

?

轉載于:https://www.cnblogs.com/celerychen/archive/2013/04/23/3588232.html

總結

以上是生活随笔為你收集整理的MMX指令集系列之二----移位运算和乘法指令的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。