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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/1 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Win32ASM学习[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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

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

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

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

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

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

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

;SHL、SAL: 每位左移, 低位補(bǔ) 0, 高位進(jìn) CF

;SHR? : 每位右移, 低位進(jìn) CF, 高位補(bǔ) 0

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

;它們的結(jié)果影響 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: 循環(huán)移位指令

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

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

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

;RCL(Rotate through Carry Left): 帶進(jìn)位循環(huán)左移

;RCR(Rotate through Carry Right): 帶進(jìn)位循環(huán)右移

;ROL: 循環(huán)左移, 高位到低位并送 CF

;ROR: 循環(huán)右移, 低位到高位并送 CF

;RCL: 循環(huán)左移, 進(jìn)位值(原CF)到低位, 高位進(jìn) CF

;RCR: 循環(huán)右移, 進(jìn)位值(原CF)到高位, 低位進(jìn) CF

;它們的結(jié)果影響 OF、CF

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

?

?說明: 1. 本指令組只影響標(biāo)志CF、OF.OF由移入CF的內(nèi)容決定,OF取決于移位一次后符號位是否改變,如改變,則OF=1.
???????? 2. 由于是循環(huán)移位,所以對字節(jié)移位8次; 對字移位16次,就可恢復(fù)為原操作數(shù).由于帶CF的循環(huán)移位,可以將CF的內(nèi)容移入,所以可以利用它實(shí)現(xiàn)多字節(jié)的循環(huán).

???????? 3. 示例: 將AL中的組合的兩個(gè)BCD分解為兩個(gè)未組合的BCD數(shù),存于BH及BL寄存器中程序?yàn)?

??????????????? MOV AH,AL? ?;保存AL內(nèi)容至AH中
??????????????? MOV CL,4????? ;循環(huán)次數(shù)4送CL
??????????????? SHR??AL,CL???? ;將AL右移4次,高4位移至低4位
??????????????? MOV BH,AL??? ;高位BCD送BH中
??????????????? AND AH,0FH ?;得到低位BCD數(shù)
??????????????? MOV BL,AH?? ?;低位BCD數(shù)送BL中

注意: 以上程序中的指令SHR AL,CL如改為SAR AL,CL,雖然最高4位可移入低4位,但最高位不為0,故應(yīng)加入一條指令A(yù)ND AL,0FH.否則,若最高位不為0時(shí),將得到錯(cuò)誤結(jié)果.

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

.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 有三個(gè)操作數(shù)

;操作數(shù)三: 是移位數(shù)目;操作數(shù)一: 是目的操作數(shù)

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

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

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

;它們的指令格式相同:

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

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

?

?

?雙精度數(shù)左移指令 SHLD

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

?

?雙精度數(shù)右移指令 SHRD

?格式: SHRD OPD,OPS,n(n表示一個(gè)常數(shù))
?功能: 指令右移OPD,移位的次數(shù)由n確定,移入OPD左邊的各位由OPS提供,這里要求OPD和??? ----? OPS類型相同,OPD移出的位進(jìn)入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

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

總結(jié)

以上是生活随笔為你收集整理的Win32ASM学习[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。