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.mzph.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;请…