文档章节

学 Win32 汇编[24] - 移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR、SHLD、SHRD

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 669
阅读 9
收藏 0

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

本文转载自:http://www.cnblogs.com/del/archive/2010/04/15/1712490.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
汇编带进位循环左移,右移

3.1 假定(DX)=0B9H,(CL)=3,(CF)=1,确定下列各条指令单独执行后DX中的值。 (1) SHR DX, 1 ;(DX)=05CH (2) SAR DX, CL ;(DX)=17H (3) SHL DX, CL ;(DX)=5C8H (4) SHL DL, 1 ;(DX)=72H ......

巴顿
2012/09/16
2.6K
1
汇编总结:左移,右移指令

1.左移指令和右称指令的种类及作用: 左移指令作用:左移指令将操作数的bit位向左移动n位,空出来的位用0填充。 左移指令包含sal和shl,这两条指令的作用是相同的,空出来的位用0填充。 其中左...

guonaihong
2015/09/26
2.4K
0
汇编语言指令英文全称

1.通用数据传送指令 MOV----> move MOV dest,src;dest←src MOV指令把一个字节或字的操作数从源地址src传送至目的地址dest。 MOVSX---->extended move with sign data MOVZX---->extended mo......

伽罗kapple
2015/10/24
155
0
80x86 寻址方式与指令系统简介

80x86 寻址方式与指令系统简介 【课前思考】   (1) 什么是指令和指令系统?指令在什么时候由哪部分来执行?   (2) 8086汇编语言指令由几部分组成?各部分的作用是什么?   (3) ...

TheRoodToDeath
2017/03/14
0
0
关于汇编语言寄存器和指令操作的整理

最近汇编学到后面的内容, 越来越觉得前面的基础没有掌握好, 弄得最后编写汇编程序的时候, 寄存器瞎用, 没有一点的规矩, 中断操作也不知道是对哪个寄存器里的数进行操作, 每次做一个小程序, 都...

如风达
2016/09/04
25
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ std::thread

C++11提供了std::thread类来表示一个多线程对象。 1,首先介绍一下std::this_thread命名空间: (1)std::this_thread::get_id():返回当前线程id (2)std::this_thread::yield():用户接口...

yepanl
27分钟前
1
0
Nignx缓存文件与动态文件自动均衡的配置

下面这段nginx的配置脚本的作用是,自动判断是否存在缓存文件,如果有优先输出缓存文件,不经过php,如果没有,则回到php去处理,同时生成缓存文件。 PHP框架是ThinkPHP,最后一个rewrite有关...

swingcoder
31分钟前
1
0
20180920 usermod命令与用户密码管理

命令 usermod usermod 命令的选项和 useradd 差不多。 一个用户可以属于多个组,但是gid只有一个;除了gid,其他的组(groups)叫做扩展组。 usermod -u 1010 username # 更改用户idusermod ...

野雪球
33分钟前
0
0
Java网络编程基础

1. 简单了解网络通信协议TCP/IP网络模型相关名词 应用层(HTTP,FTP,DNS等) 传输层(TCP,UDP) 网络层(IP,ICMP等) 链路层(驱动程序,接口等) 链路层:用于定义物理传输通道,通常是对...

江左煤郎
39分钟前
1
0
使用xtrabackup完成远程备份

转载收藏,以防丢失 需求 Can I backup remote databases from my local server02-27-2013, 06:17 AMHi, I am using mysqldump so far for taking daily backups of my Production datab......

阿dai
45分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部