`
zzc1684
  • 浏览: 1224521 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

学 Win32 汇编[24] - 移位: 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, 高位不变

;它们的结果影响 OF、SF、ZF、PF、CF
;它们的指令格式相同:
SHL r/m, i8
SHL r/m, CL

; Test24_1.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .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, i8
SHL r/m, CL

; Test24_2.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .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

; Test25_3.asm .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .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
分享到:
评论

相关推荐

    x86汇编指令集大全(带注释).pdf

    X86汇编指令集是计算机体系结构中不可或缺的一部分,特别是在32位和64位的x86架构处理器中。这篇文档详细列举了汇编指令,并为每条指令提供了注释说明。以下知识点涵盖了文档中提及的关键指令及其功能。 一、数据...

    8080汇编手册_全

    从给定的文件信息来看,这是一份关于8080微处理器的汇编语言指令集的手册。8080是由英特尔公司在1972年推出的8位微处理器,是计算机历史上的一个重要里程碑,对后来的微处理器设计产生了深远的影响。这份手册详细列...

    汇编指令词汇大全 全集

    - ROL/ROR:循环左移/右移,最高位移至最低位或反之。 - RCL/RCR:带进位的循环左移/右移。 5. 控制流程指令: - JMP:无条件转移指令。 - JZ/JNZ/JS/JNS/JO/JNO/JP/JNP/JB/JNB/JBE/JNBE/JL/JNL/JLE/JNLE:条件...

    汇编语言指令大全

    - SHL(SAL):逻辑左移。 - SHR:逻辑右移。 - SAR:算术右移。 - ROL:循环左移。 - ROR:循环右移。 6. 字符串操作指令:专门用于处理字符串。例如: - MOVS:移动字符串。 - CMPS:比较字符串。 - SCAS...

    汇编指令手册

    ### 汇编指令手册知识点解析 #### 一、数据传输指令 数据传输指令主要用于实现存储器、寄存器及输入输出端口之间的数据传递。 ##### 1. 通用数据传送指令 - **MOV**: 用于简单地将一个值复制到另一个位置。支持...

    8086汇编指令大全

    - ROL/ROR/RCL/RCR:循环移位。 7. 串指令: - 串指令主要用于处理连续的数据,如字符串复制、查找等。 - 涉及到的寄存器包括DS:SI(源串地址)、ES:DI(目标串地址)和CX(计数器)。 - 指令如MOVS、CMPS、...

    8086指令集(全部的)

    - **RCL / RCR**: 通过进位的循环左移/通过进位的循环右移。 - 例如:`RCL AX, 1` 将AX寄存器的值向左循环移动一位,并考虑CF标志位。 #### 四、串指令 串指令用于处理字符串数据。 - **LODSB / LODSW / LODSD**...

    80868088汇编指令汇总

    - ROL、ROR、RCL、RCR:循环移位,RCL和RCR使用CF进行移位。 7. 串指令: - 串操作指令如MOVS, CMPS, LODS, STOS等,用于处理连续内存区域的数据,常用于数组和字符串操作。 这些指令构成了8086/8088汇编语言的...

    汇编指令及说明举例

    ### 汇编指令及说明举例 #### 一、数据移动指令 1. **MOV**:数据移动指令,用于将一个寄存器或内存位置的数据移动到另一个寄存器或内存位置。 - 示例:`MOV AX, BX` 将BX寄存器中的值移动到AX寄存器。 2. **...

    汇编指令啊

    - SHL/SAL/SHR/SAR:左移、算术左移、逻辑右移、算术右移,例如SHR AX, 1将AX的值右移一位。 - ROL/ROR/RCL/RCR:循环左移、循环右移、带进位循环左移和带进位循环右移。 8. 串指令: - 串操作指令如MOVS, CMPS,...

    汇编指令大全 8086

    - ROL/ROR:循环左移/右移,最高位移入最低位。 - RCL/RCR:带进位的循环左移/右移。 5. 字符处理和调整指令: - CBW/CWD:将字节扩展为字,将字扩展为双字。 - DAA/DAS:压缩BCD码的加法/减法十进制调整。 - ...

    汇编速查手册~~~~~

    - **RCL/RCR**:带进位位的循环左移或循环右移。 #### 七、字符串操作指令 1. **字符串操作指令** - **MOVS**:移动指令。 - 示例:`MOVS BYTE PTR ES:[DI], AL`(将AL寄存器中的值复制到ES:DI指向的内存位置)...

    汇编-第8课移位指令和串操作指令.pdf

    移位指令主要包括逻辑移位(SHL、SHR)、算术移位(SAL、SAR)以及循环移位(ROL、ROR、RCL、RCR)。 1. **逻辑移位**: - **SHL(逻辑左移)**:将操作数的位向左移动指定的次数,空出的高位用0填充,最低位移出...

    汇编语言指令大全(详解版)

    5. **位操作指令**:这些指令允许对数据的位进行操作,如移位(SHL、SHR)、测试(TEST)等。 6. **输入输出指令**:用于与外部设备进行通信,如输入(IN)、输出(OUT)指令。 #### 具体指令详解 ##### 算术运算...

    8086指令集

    ##### SHR, SHL, SAR, SAL **功能:** 对操作数进行右移或左移。 **格式:** - SHR r/m, data/CL - SHL r/m, data/CL - SAR r/m, data/CL - SAL r/m, data/CL #### 十一、循环移位指令 ##### ROR, ROL, RCR, RCL *...

    汇编语言指令大全说明文档

    - ROR, ROL, RCR, RCL:执行循环移位,如`ROR r/m, data/CL`将r/m的内容右循环移位。 4. 程序流程控制指令 - CLC, STC, CMC:设置或改变进位标志,如`CLC`清除进位标志。 - CLD, STD:设置或改变方向标志,`CLD`...

    8086汇编指令表[文].pdf

    - SHL、SHR:分别用于逻辑左移和右移。 - SAL、SAR:分别用于算术左移和右移。 9. 控制寄存器操作指令: - CLTS:清除任务状态段寄存器TS。 - HLT:停止微处理器的执行,直到下一个外部中断。 这些指令是8086汇编...

    汇编语言指令大全(详解版).

    本文将详细介绍各种汇编语言指令,包括数据传送指令、算术逻辑指令、移位指令、控制转移指令等,并解释它们在实际应用中的具体作用。 #### 数据传送指令 1. **MOV(移动)**:将一个值或地址中的内容移动到另一个...

Global site tag (gtag.js) - Google Analytics