Win32ASM學習[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD

一.?SHL、SHR、SAL、SAR: 移位指令

----------------------------------------------------------------------------------------------------

;SHL(Shift Left):? ? ? 邏輯左移

;SHR(Shift Right):? ? ? 邏輯右移

;SAL(Shift Arithmetic Left): 算術左移

;SAR(Shift Arithmetic Right): 算術右移

;其中的 SHL 和 SAL 相同, 但 SHR 和 SAR 不同.

;SHL、SAL: 每位左移, 低位補 0, 高位進 CF

;SHR? : 每位右移, 低位進 CF, 高位補 0

;SAR? : 每位右移, 低位進 CF, 高位不變,(在每次右移時,保持最高位(符號位)不變,最低位右移至CF中)

;它們的結果影響 OF、SF、ZF、PF、CF

;它們的指令格式相同:SHL r/m, i8SHL r/m, CL

----------------------------------------------------------------------------------------------------

.code
main proc
??? ;SHL、AL
??? mov al, 11100111b
??? shl al, 1
??? PrintHex al ;CE - 11001110b
??? sal al, 2
??? PrintHex al ;38 - 00111000b
???
??? mov al, 11100111b
??? mov cl, 2
??? shl al, cl
??? PrintHex al ;9C - 10011100b
???
??? ;SHR
??? mov al, 11100111b
??? shr al, 2
??? PrintHex al ;39 - 00111001b
???
??? ;SAR
??? mov al, 11100111b
??? sar al, 2
??? PrintHex al ;F9 - 11111001b
??? ret
main endp
end main

------------------------------------------------------------------------------------------------

ROL、ROR、RCL、RCR: 循環移位指令

-----------------------------------------------------------------------------------------------------------------------------------------------

;ROL(Rotate Left):? ? ? ? 循環左移

;ROR(Rotate Right):? ? ? 循環右移

;RCL(Rotate through Carry Left): 帶進位循環左移

;RCR(Rotate through Carry Right): 帶進位循環右移

;ROL: 循環左移, 高位到低位并送 CF

;ROR: 循環右移, 低位到高位并送 CF

;RCL: 循環左移, 進位值(原CF)到低位, 高位進 CF

;RCR: 循環右移, 進位值(原CF)到高位, 低位進 CF

;它們的結果影響 OF、CF

;它們的指令格式相同:SHL r/m, i8SHL r/m, CL

?

?說明: 1. 本指令組只影響標志CF、OF.OF由移入CF的內容決定,OF取決于移位一次后符號位是否改變,如改變,則OF=1.
???????? 2. 由于是循環移位,所以對字節移位8次; 對字移位16次,就可恢復為原操作數.由于帶CF的循環移位,可以將CF的內容移入,所以可以利用它實現多字節的循環.

???????? 3. 示例: 將AL中的組合的兩個BCD分解為兩個未組合的BCD數,存于BH及BL寄存器中程序為:

??????????????? MOV AH,AL? ?;保存AL內容至AH中
??????????????? MOV CL,4????? ;循環次數4送CL
??????????????? SHR??AL,CL???? ;將AL右移4次,高4位移至低4位
??????????????? MOV BH,AL??? ;高位BCD送BH中
??????????????? AND AH,0FH ?;得到低位BCD數
??????????????? MOV BL,AH?? ?;低位BCD數送BL中

注意: 以上程序中的指令SHR AL,CL如改為SAR AL,CL,雖然最高4位可移入低4位,但最高位不為0,故應加入一條指令AND AL,0FH.否則,若最高位不為0時,將得到錯誤結果.

-----------------------------------------------------------------------------------------------------------------------------------------------

.code
main proc
??? ;ROL
??? mov al, 11000011b
??? rol al, 1
??? PrintHex al ;87 - 010000111b
???
??? ;ROR
??? mov al, 11000011b
??? ror al, 1
??? PrintHex al ;E1 - 11100001b
???
??? ;RCL
??? clc
??? mov al, 10101111b
??? rcl al, 1
??? PrintHex al ;5E - 01011110b
???
??? stc
??? mov al, 10101111b
??? rcl al, 1
??? PrintHex al ;5F - 01011111b
???
??? clc
??? mov al, 10101111b
??? rcl al, 2
??? PrintHex al ;BD - 10111101b
???
??? ;RCR
??? clc
??? mov al, 11101011b
??? rcr al, 2
??? PrintHex al ;BA - 10111010b
??? ret
main endp
end main

----------------------------------------------------------------------------------------------------

SHLD、SHRD: 雙精度移位

;SHLD(Double-Precision Shift Left): 雙精度左移

;SHRD(Double-Precision Shift Right): 雙精度右移

;SHLD 和 SHRD 有三個操作數

;操作數三: 是移位數目;操作數一: 是目的操作數

;SHLD 左邊被移出的位由操作數二相同數目的高位填充

;SHRD 右邊被移出的位由操作數二相同數目的低位填充

;操作數二不變, 且須是寄存器;它們的結果影響 OF、SF、ZF、PF、CF

;它們的指令格式相同:

SHLD r16/32/m16/m32, r16/32, i8

SHLD r16/32/m16/m32, r16/32, CL

?

?

?雙精度數左移指令 SHLD

?格式: SHLD OPD,OPS,n(n表示一個常數)
?功能: 指令左移OPD,移位的次數由n確定,移入OPD右邊的各位由OPS提供,這里要求OPD和OPS類型相同,OPD移出的位進入CF.

?

?雙精度數右移指令 SHRD

?格式: SHRD OPD,OPS,n(n表示一個常數)
?功能: 指令右移OPD,移位的次數由n確定,移入OPD左邊的各位由OPS提供,這里要求OPD和??? ----? OPS類型相同,OPD移出的位進入CF.

----------------------------------------------------------------------------------------------------

.code
main proc
??? ;SHLD
??? mov ax, 1100110011110000b
??? mov dx, 1111111100000000b
??? shld ax, dx, 2
??? PrintHex ax ;33C3 - 0011001111000011b
???
??? ;SHRD
??? mov ax, 0000111100110011b
??? mov dx, 0000000011111111b
??? shrd ax, dx, 2
??? PrintHex ax ;C3CC - 1100001111001100b
??? ret
main endp
end main

-----------------------------------------------------------------------------------------------------

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375357.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375357.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375357.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

angular中的表單驗證

angular中的表單驗證很強大, 一共有5中驗證信息,$valid,$invalid,$pristine,$dirty,$error. $valid-----當驗證通過的時候,為true,不通過的時候為false $invalid----當驗證不通過的時候,為true,通過的時候為true $pris…

Cortex-A15 Memory Hierarchy

ARM 平臺為實現速度和成本的平衡,使用多個層次的內存架構。對于多核 CPU 組成的 SOC,每個CPU 內部都有一組高速緩存,包含:ICache、DCache 和 TLB。多個 CPU 共享一個更大的 L2 緩存。L2緩存再和 CPU 外部的DDR3 內存交互。ICache …

Win32ASM學習[14]:符號擴展指令: CBW,CWDE,CDQ,CWD

----------------------------------------------------------------------------------------------------------------------------------------------------------------- ;CBW(Convert Byte to Word): 將 AL 擴展為 AX ;CWDE(Convert Word to Extended Double): 將 …

Win32ASM學習[15]:加減指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

------------------------------------------------------------------------------------------------------------------------------------------------------------------- ;INC(Increment): 加一 ;DEC(Decrement): 減一 ;NEG(Negate): 求補(求反) ;ADD(Add): 加 ;A…

UINavigationController的簡單使用

UINavigationController的使用步驟初始化UINavigationController設置UIWindow的rootViewController為UINavigationController根據具體情況,通過push方法添加對應個數的子控制器UINavigationController的子控制器UINavigationController以棧的形式保存子控制器proper…

Android 圖片的縮略圖

<1>簡介 之前往往是通過Bitmap、Drawable和Canvas配合完成&#xff0c;需要寫一系列繁雜的邏輯去縮小原有圖片&#xff0c;從而得到縮略圖。 現在我給大家介紹一種比較簡單的方法&#xff1a;&#xff08;網上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一個T…

Win32ASM學習[16] :乘除指令: MUL、IMUL、DIV、IDIV

---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一. 無符號數乘法指令 MUL(MULtiply) 格式: MUL OPRD 功能: 乘法操作. 說明: 1. OPRD為通用…

Linux命令之man

一、引言 一直聽別人說linux下有個男人很厲害&#xff0c;遇到不會的不懂的都可以問他&#xff0c;自己也會幾個man命令&#xff0c;但是一直不知道到底man命令是怎么用的&#xff0c;比如查詢不同類的幫助該在man后跟數字幾&#xff0c;man后的數字有什么具體的意思&#xff0…

《JavaScript權威指南》學習筆記 第二天 下好一盤大棋

前段學習js的時候總是零零散散的&#xff0c;以至于很多東西都模棱兩可。時間稍微一久&#xff0c;就容易忘記。最主要的原因是這些東西&#xff0c;原來學的時候就不是太懂&#xff0c;以至于和其他知識無法形成記憶鏈&#xff0c;所以孤零零的知識特別容易忘記。重溫犀牛書&a…

Win32ASM學習[17]:條件跳轉

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 一.跳轉相關的標志位: 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF TF SF Z…

SUID或SGID程序中能不能用system函數

system()函數的聲明和說明如下&#xff1a; 注意它的描述那里&#xff0c;system()執行一個由command參數定義的命令&#xff0c;通過調用/bin/sh -c命令來實現這個功能。也就是說它的邏輯是這樣的&#xff01; 進程調用system函數&#xff0c;system函數調用fork創建一個子進程…

史上最全的maven pom.xml文件教程詳解

<project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd >; <!-- 父項目的坐標。如果項目中沒有規定某個元素的值&am…

Win32ASM學習[18]:串指令-MOVS*、CMPS*、SCAS*、LODS*、REP、REPE、REPNE

-------------------------------------------------------------------------------------------------------------------------------------------------------- 一.字符串傳送指令 MOVSB/MOVSW/MOVSD 格式: MOVS OPD,OPS 功能: OPD<--OPS. 說明: 1. 其中OPS為源串符…

Xamarin iOS編寫第一個應用程序創建工程

Xamarin iOS編寫第一個應用程序創建工程 在Xcode以及Xamarin安裝好后&#xff0c;就可以在Xamarin Studio中編寫程序了。本節將主要講解在Xamarin Studio中如何進行工程的創建以及編寫代碼等內容XamariniOS編寫第一個應用程序創建工程本文選自Xamarin iOS開發實戰大學霸。 1.3.…

Jade之Extends

Extends jade允許多個jade文件繼承一個jade文件。 jade&#xff1a; //- layout.jade doctype html htmlheadblock titletitle Default titlebodyblock content //- index.jade extends ./layout.jadeblock titletitle Article Titleblock contenth1 My Article html&#xff1…

Win32ASM學習[19]:結構與聯合

結構和聯合分別用 struct、union 定義, 都是 ends 結束定義. 它們使用方法相同, 并可以互相嵌套; 主要區別是后者的各成員共用同一個地址. -------------------------------------------------------------------------------------------------------------------------------…

hdu 1257 最少攔截系統(貪心)

題意&#xff1a; 最少需要多少個攔截系統才能將所有的導彈攔截下來。 思路&#xff1a; 第1枚導彈一定需要第一個攔截系統&#xff0c;第2枚導彈如果比第1個高度高&#xff0c;則需要第二個攔截系統。 考慮第i枚導彈&#xff0c;如果前i-1枚導彈的高度都比它小&#xff0c;則需…

Birt使用總結

把report放到其他服務器要重新建立Data Source ,這是配置&#xff0c;拷貝項目時不會同時拷貝 (1)在EXTJs中利用Report實現報表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

Win32ASM學習[20]:子程序

關于函數調用約定 :函數調用約定 這是以前的一個求和函數的例子 ---------------------------------------------------------------------------------------------------------------- .386 .model flat, stdcall include windows.inc include kernel32.inc include …

Mac聯網恢復系統重新安裝Lion

Mac的Lion系統&#xff0c;雖然不像Windows那樣需要經常重裝&#xff0c;但也難免會有要重置的時候&#xff0c;比如更換硬盤。本文介紹如何利用Mac的聯網恢復系統進行Lion系統的在線恢復。Mac的在線恢復系統只在近幾年的機型上才有&#xff0c;在進行系統恢復前&#xff0c;請…