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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

汇编语言—移位指令(如何正确学习汇编语言)

發布時間:2023/12/15 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 汇编语言—移位指令(如何正确学习汇编语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

移位指令是一組經常使用的指令,包括:算數移位、邏輯移位、雙精度移位、循環移位、帶進位的循環移位;
移位指令都有一個指定需要移動的二進制位數的操作數,該操作數可以是立即數,也可以是CL的值;在8086中,該操作數只能是1,但是在其后的CPU中,該立即數可以是定義域[1,31]之內的數;
一、算數移位指令:
算數移位指令分為:算數左移SAL(Shift Algebraic Left)和算數右移SAR(Shift Algebraic Right);
指令格式: SAL/SAR reg/mem,CL/imm
受影響的標志位:CF,OF,PF,SF,ZF;對AF的影響無定義;
算數左移SAL:把目的操作數的低位部分向高位方向移動CL或imm指定的位數;移位后,空出的低位部分全部用0填充;移出的高位存放在CF中;如果只向左移動1位,那么,空出的最低位填0,移出的最高位存放在CF中;如果向左移動N位,那么,空出的N個低位全部用0填充,移出的N個高位中,只把最后一次移出的那一位存放在CF中,即:CF中只存放最后一次移出的內容;SAL效果如下圖所示:


算數右移SAR:把目的操作數的高位部分向低位方向移動CL或imm指定的位數;移位后,空出的高位部分全部用目的操作數原來的最高位(符號位)填充;如果只是向右移動1位,那么,空出的最高位用目的操作數原來的最高位(符號位)來填充,移出的最低位存放到CF中;如果向右移動N位,那么空出的N個高位全部都用目的操作數原來的最高位(符號位)填充,而移出的N個低位中,只把最后一次移出的那一位放到CF中,即:CF中存放的是最后一次移出的內容;換句話說,算數右移時,空出的高位上移入的是目的操作數原來的最高位的值,即:最高位保持不變,最低位同樣移入到CF中;算數右移常用于帶符號數的右移;SAR效果如下圖所示:


二、邏輯移位指令:
邏輯移位分為:邏輯左移SHL(Shift Logic Left)和邏輯右移SHR(Shift Logic Right);
指令格式: SHL/SHR reg/mem,CL/imm
受影響的標志位: CF,OF,PF,SF,ZF;對AF的影響無定義;
邏輯左移SHL:把目的操作數的低位部分向高位方向移動CL或imm指定的位數;移位后,空出的低位部分全部填充0,移出的高位存放到CF中;如果向左移動N位,則只把最后一次移出的內容存放到CF中;SHL效果如下圖所示:


邏輯右移SHR:把目的操作數的高位部分向低位方向移動CL或imm指定的位數;移位后,空出的高位部分全部填充0,移出的低位存放到CF中;如果向右移動N位,則只把最后一次移出的內容存放到CF中;SHR效果如下圖所示:


三、雙精度移位指令:
分為:雙精度左移SHLD(Shift Left Double)和雙精度右移SHRD(Shift Right Double);這組指令都有三個操作數;
指令格式: SHLD/SHRD reg/mem,reg,CL/imm
其中,第一操作數reg/mem是一個16位或32位的寄存器或存儲單元;第二操作數reg與第一操作數具有相同位數,但它一定是一個寄存器;第三操作數CL/imm指定了移動的位數;
受影響的標志位:CF,OF,PF,SF,ZF;對AF的影響無定義;
在執行雙精度左移指令SHLD時,第一操作數向左移動N位,其”空出”的N個低位由第二操作數的高N位來填充,但是第二操作數本身并不移位、不改變;SHLD效果如下圖所示:


在執行雙精度右移指令SHRD時,第一操作數向右移動N位,其”空出”的N個高位由第二操作數的低N位來填充,但是第二操作數本身并不移位、不改變;SHRD效果如下圖所示:


四、循環移位:
循環移位指令分為:循環左移ROL(Rotate Left)和循環右移ROR(Rotate Right);
指令格式:
ROL/ROR reg/mem,CL/imm
受影響的標志位只有:CF、OF;
這兩條指令不會把進位標志CF納入循環位中;
循環左移ROL:把操作數的低位部分向高位方向循環移動CL/imm指定的位數,空出的低位部分由移出的高位部分來填充,同時,移出的高位部分仍然會存放在CF中;如果是循環左移N位,那么,就空出N個低位,移出N個高位,然后,把移出的這N個高位按照移出的順序依次填入空出的N個低位中,同時,CF中只保存最后一次移出的那一位的內容;ROL效果如下圖所示:


循環右移ROR:把操作數的高位部分向低位方向循環移動CL/imm指定的位數,空出的高位部分由移出的低位部分來填充,同時,移出的低位部分仍然會存放在CF中;如果是循環右移N位,那么,就空出N個高位,移出N個低位,然后,把移出的這N個低位按照移出的順序依次填入空出的N個高位中,同時,CF中只保存最后一次移出的那一位的內容;ROR效果如下圖所示:


五、帶進位的循環移位指令:
帶進位的循環移位指令分為:帶進位的循環左移RCL(Rotate Left Through Carry)和帶進位的循環右移RCR(Rotate Right Through Carry)
指令格式: RCL/ROR reg/mem,CL/imm
受影響的標志位只有:CF,OF;
這兩條指令把進位標志CF納入了循環位中;
帶進位的循環左移指令RCL:把操作數的低位部分向高位方向循環移動CL/imm指定的位數,每向左移動一位,RCL指令都會先把CF的原有值填充到空出的最低位上,再把移出的最高位存放到CF中;這樣循環左移N位之后,CF中保存的仍然是最后一次移出的那一位的內容;RCL效果如下圖所示:


帶進位的循環右移指令RCR:把操作數的高位部分想低位方向循環移動CL/imm指定的位數,每向右移動一位,RCL指令都會先把CF的原有值填充到空出的最高位上,再把移出的最低位存放到CF中;這樣循環右移N位之后,CF中保存的仍然是最后一次移出的那一位的內容;RCR效果如下圖所示:


移位指令中,溢出標志位OF的設置規則為:如果只移動一位,則系統按照操作數的最高符號位在移位前后是否發生改變,來相應地設置溢出標志OF的值:如果移位前操作數的最高符號位與移位后操作數的最高符號位不相同(有變化),則設置OF=1,認為溢出了;否則,設置OF=0,認為沒有溢出;但是,如果移位位數大于1,則OF的值不確定;也就是說,溢出標志OF的值只有在移位位數為1時才有意義;
進位標志CF的設置規則:系統按照移入的位來設置進位標志CF,根據移位后的結果影響SF,ZF,PF,而對AF的影響沒有定義;

FROM: http://bdxnote.blog.163.com/blog/static/8444235201061610333135/

總結

以上是生活随笔為你收集整理的汇编语言—移位指令(如何正确学习汇编语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

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