汇编语言下的移位指令和串传送指令

移位指令

  1. SHL(Shift Left Logical):逻辑左移。
  2. SHR(Shift Right Logical):逻辑右移。
  3. SAL(Shift Arithmetic Left):算术左移(与SHL相同)。
  4. SAR(Shift Arithmetic Right):算术右移。
  5. ROL(Rotate Left):循环左移。
  6. ROR(Rotate Right):循环右移。
  7. RCL(Rotate through Carry Left):带进位的循环左移。
  8. RCR(Rotate through Carry Right):带进位的循环右移。

这些移位指令都是对二进制位进行移动

SHL/SAL(逻辑左移)

将位向左移动指定的次数,最右边空出的位填充0。

MOV AL, 01H ; AL = 0000 0001B
SHL AL, 1  ; AL = 0000 0010B,左移1位

SHR(逻辑右移)

将位向右移动指定的次数,最左边空出的位填充0。

MOV AL, 02H ; AL = 0000 0010B
SHR AL, 1  ; AL = 0000 0001B,右移1位

 

SAR(算术右移)

将位向右移动指定的次数,最左边空出的位用原来的最高位(符号位)填充。

MOV AL, 82H ; AL = 1000 0010B
SAR AL, 1  ; AL = 1000 0001B,右移1位,符号位填充

ROL(循环左移)

将位向左移动指定的次数,最左边移出的位被放到最右边。

MOV AL, 01H ; AL = 0000 0001B
ROL AL, 1  ; AL = 0001 0000B,左移1位,最左边的位被放到最右边

 

ROR(循环右移)

将位向右移动指定的次数,最右边移出的位被放到最左边。

MOV AL, 01H ; AL = 0000 0001B
ROR AL, 1  ; AL = 1000 0000B,右移1位,最右边的位被放到最左边

RCL(带进位的循环左移)

将位向左移动指定的次数,最左边移出的位被放到进位标志(CF)中,原来在CF中的位被放到最右边。

MOV AL, 03H ; AL = 0000 0011B
STC         ; 将CF设置为1
RCL AL, 1  ; AL = 0011 0100B,左移1位,CF的值被放到最右边,最左边的位被放到CF

 

RCR(带进位的循环右移)

将位向右移动指定的次数,最右边移出的位被放到进位标志(CF)中,原来在CF中的位被放到最左边。

MOV AL, 03H ; AL = 0000 0011B
STC         ; 将CF设置为1
RCR AL, 1  ; AL = 1100 0011B,右移1位,CF的值被放到最左边,最右边的位被放到CF

 

 串传送指令

MOVSB/MOVSW/MOVSD

这些指令用于在内存之间复制数据。MOVSB 传送一个字节,MOVSW 传送一个字(16位),MOVSD 传送一个双字(32位)。

; 假设DS:SI指向源字符串,ES:DI指向目的字符串
; CX寄存器包含要复制的字节数
CLD             ; 清除方向标志,确保SI和DI自增
REP MOVSB       ; 重复复制字节,直到CX为0

 

LODSB/LODSW/LODSD

这些指令用于从内存中加载数据到寄存器,并根据方向标志(DF)递增或递减SI/DI。

; 假设DS:SI指向源字符串
; AL/AX/EAX将存储加载的数据
CLD             ; 清除方向标志,确保SI自增
LODSB           ; 加载一个字节到AL,并递增SI
LODSW           ; 加载一个字到AX,并递增SI
LODSD           ; 加载一个双字到EAX,并递增SI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值