C51单片机汇编语言逻辑右移汇编语言SHR右移指令将操作数逻辑右移一位

合集下载

51单片机逻辑运算类指令

51单片机逻辑运算类指令

51单片机逻辑运算类指令
51单片机逻辑运算类指令
对累加器A 的逻辑操作:
CLR A ;将A 中的值清0,单周期单字节指令,与MOV A,#00H 效果相同。

CPL A ;将A 中的值按位取反
RL A ;将A 中的值逻辑左移
RLC A ;将A 中的值加上进位位进行逻辑左移
RR A ;将A 中的值进行逻辑右移
RRC A ;将A 中的值加上进位位进行逻辑右移
SWAP A ;将A 中的值高、低4 位交换。

例:(A)=73H,则执行CPL A,这样进行:
73H 化为二进制为01110011,
逐位取反即为10001100,也就是8CH。

RL A 是将(A)中的值的第7 位送到第0 位,第0 位送1 位,依次类推。

例:A 中的值为68H,执行RL A。

68H 化为二进制为01101000,按上图进行移动。

01101000 化为11010000,即D0H。

RLC A,是将(A)中的值带上进位位(C)进行移位。

例:A 中的值为68H,C 中的值为1,则执行RLC A
1 01101000 后,结果是0 11010001,也就是C 进位位的值变成了0,而(A)则变成了D1H。

RR A 和RRC A 就不多谈了,请大家参考上面两个例子自行练习吧。

SWAP A,是将A 中的值的高、低4 位进行交换。

例:(A)=39H,则执行SWAP A 之后,A 中的值就是93H。

怎么正好是这么。

MCS-51单片机指令系统教程(3)

MCS-51单片机指令系统教程(3)
MOV IE,#00H ;初始化中断允许寄存器 MOV TH1,#0FEH ;为定时器1赋初值 尽管使用SFR的寄存器名称来取代直接地址,可以带 来程序的可读性,但是在汇编时,仍要将寄存器名字转换 为直接地址。
2,当直接地址时在工作寄存器区中时,可以使用两种寻址 方式来访问。 如:
MOV A,00H ;将RAM中00H单元数据送累加器A
04
03
02
01
00
返回前一次
2.2.3立即寻址
指令本身直接含有所需要的8位或16位的操作数。
将此数称为“立即数”(使用#标明)。如:
MOV A,#30H
;将(8位)立即数送累加器A
MOV DPTR,#2000H ;16位立即数送DPTR积存器
【注意】:MOV A,#30H MOV A,30H 两者的区别。 立即数寻址的指令长度为2或3个字节。
三字节指令在存储器中存放的方式示意图
指令的字节数与指令的运行时间
指令的字节多是否意味着指令周期就长?
指令
字节数 周期数
MOV A,R0
1
1
MOV A,#0FFH 2
1
MOV 20H,#30H 3
2
MUL AB
1
4
INC DPTR
1
1
指令说明 R0内容送累加器A
立即数FFH送A 立即数30H送内存20h单元
累加器A 02H
ALU
DPTR 0300H
0300H + 02H
0302H
ROM
0302H X
返回
MOVC A,@A+DPTR
2.2.6 相对寻址
转移指令中使用的一种寻址方式。MCS-51单片机的指令 系统中,有两类转移指令:相对转移( 2个或3个字节)

汇编shr指令

汇编shr指令

汇编shr指令
汇编语言中的shr指令是右移(shift right)指令,用于将指定的操作数向右移动指定的位数。

它可以用来进行除以2的幂的运算。

shr指令的语法格式如下:
```
shr destination, count
```
其中,destination是要移动的操作数,可以是寄存器或内存。

count是指定要移动的位数。

使用shr指令后,操作数的每个位都向右移动count位,最低位用0填充。

举个例子,假设al寄存器的值为11011010(bin),执行shr al, 3指令后,al的值将变为00011011(bin)。

shr指令常用于进行位操作和算术运算。

比如,将一个无符号整数右移一位相当于将其除以2,而将一个有符号整数右移一位相当于将其除以2并且保留符号位。

单片机指令大全

单片机指令大全

引言概述:单片机指令是嵌入式系统设计中至关重要的一部分,它们定义了单片机的功能和操作。

本文是单片机指令大全系列的第二部分,旨在提供更多全面的单片机指令信息,帮助读者更好地理解和应用单片机指令。

正文内容:一、移位指令1.逻辑左移指令:将操作数的每一位向左移动一位,并且最低位填充0。

2.逻辑右移指令:将操作数的每一位向右移动一位,并且最高位填充0。

3.算术右移指令:将操作数的每一位向右移动一位,并且最高位保持不变。

4.循环左移指令:将操作数的每一位向左循环移动一位,即最高位移动到最低位。

5.循环右移指令:将操作数的每一位向右循环移动一位,即最低位移动到最高位。

二、逻辑运算指令1.逻辑与指令:对操作数进行逻辑与运算,将两个二进制数对应位上的值进行逻辑与操作。

2.逻辑或指令:对操作数进行逻辑或运算,将两个二进制数对应位上的值进行逻辑或操作。

3.逻辑非指令:对操作数进行逻辑非运算,将二进制数的每一位取反。

4.逻辑异或指令:对操作数进行逻辑异或运算,将两个二进制数对应位上的值进行逻辑异或操作。

5.逻辑移位指令:将操作数进行逻辑左移或右移。

三、算术运算指令1.加法指令:对操作数进行加法运算,并将运算结果保存到指定的寄存器或存储器中。

2.减法指令:对操作数进行减法运算,并将运算结果保存到指定的寄存器或存储器中。

3.乘法指令:对操作数进行乘法运算,并将运算结果保存到指定的寄存器或存储器中。

4.除法指令:对操作数进行除法运算,并将运算结果保存到指定的寄存器或存储器中。

5.移位指令:对操作数进行移位运算,包括算术左移、算术右移、循环左移和循环右移。

四、输入输出指令1.读取输入指令:从指定的输入设备读取数据,并将数据保存到指定的寄存器或存储器中。

2.输出显示指令:将指定的数据从寄存器或存储器中读取,并显示到指定的输出设备上。

3.端口输入指令:从指定的端口读取数据,并将数据保存到指定的寄存器或存储器中。

4.端口输出指令:将指定的数据从寄存器或存储器中读取,并输出到指定的端口上。

单片机汇编语言指令集

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP mPUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL 影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定对于IBM PC机它有它的指令系统,其中包括:数据传送指令、串处理指令、算术指令、控制移动指令、逻辑指令、处理机控制指令。

C51中左右移运算

C51中左右移运算

C51中左右移运算C51中左右移运算汇编:1.对于51单⽚机:RLC A;即将累加器ACC中内容左移1位,最低位被CY原始值替代,最⽚位移⽚进位标志CY中,同理还有RRC A。

具体使⽚:MOV A,#0FFH;CLR C;RLC A;2.对于8086:(1)左移:SHL/SAL DST CNT 移位时操作数的最低位将移⽚0,最⽚位移⽚CF中,若左移若⽚位,则CF中只保留最后⽚次移出的内容。

(2) 右移:分为逻辑右移与算术右移。

逻辑右移即SHR,⽚法与SHL同;算术右移即SAR,移位时操作数的最⽚位移⽚的是它原来的值,即最⽚位保持不变,最低位同样移⽚CF,主要⽚于带符号数的右移。

(3)循环移位:ROR/ROL/RCR/RCL DST CNT 类似51的移位指令,不过可以⽚次操作多位移动。

C51:1.在C51中操作符为"<<",每执⽚⽚次左移指令,操作数最⽚位移⽚CY,CY中本来的数丢失,最低位补0,其他位依次向左移动1位。

右移指令类同。

2.循环左移:使⽚C51库函数⽚带的 unsigned char crol(unsigned char c,unsigned b);实现将字符C循环左移b位,跟8086汇编的循环移位类同,同样右移函数为_cror_;标准C:1.">>",C语⽚中的右移运算,⽚般情况下是⽚位补零,但在处理有符号数的时候会因计算机系统的不同⽚不同。

有符号数⽚位是零,则右移时⽚位补零;如果是负数即⽚位是1,那么有的系统会移⽚1(移动⽚位就补⽚个1),称算术右移(⽚部分系统),有的会移⽚0,称逻辑右移。

2."<<",C语⽚中的左移运算,⽚论是有符号数还是⽚符号数都是按照逻辑左移来操作,即向左移动若⽚位,低位补0即可。

C++:">>“和”<<"运算符如果没有被重载的情况下使⽚与标准C相同,如果被重载如输⽚输出流的操作,则变成输⽚输出操作符,如cout<<xxx; cin>>yyy; 当然也可以被重载为其他的操作。

51单片机指令系统:逻辑运算及移位(7)

51单片机指令系统:逻辑运算及移位(7)

51单片机指令系统:逻辑运算及移位(7)51单片机指令系统:逻辑运算及移位(7)第二十五课:逻辑运算及移位指令分析逻辑运算和移位指令共有25条,有与、或、异或、求反、左右移位、清0等逻辑操作,有直接、寄存器和寄存器间址等寻址方式。

这类指令一般不影响程序状态字(PSW)标志。

[1]. 循环移位指令(4条)这4条指令的作用是将累加器中的内容循环左或右移一位,后两条指令是连同进位位CY一起移位。

RL A ;累加器A中的内容左移一位RR A ;累加器A中的内容右移一位RLC A ;累加器A中的内容连同进位位CY左移一位RRC A ;累加器A中的内容连同进位位CY右移一位[2]. 累加器半字节交换指令(1条)这条指令是将累加器中的内容高低半字节互换,这在上一节中内容已有介绍。

SWAP A ; 累加器中的内容高低半字节互换[3]. 求反指令(1条)这条指令将累加器中的内容按位取反。

CPL A ; 累加器中的内容按位取反[4]. 清零指令(1条)这条指令将累加器中的内容清0。

CLR A ; 0→(A),累加器中的内容清0[5]. 逻辑与操作指令(6条)这组指令的作用是将两个单元中的内容执行逻辑与操作。

如果直接地址是I/O地址,则为“读—修改—写”操作。

ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。

结果存在寄存器A中。

ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。

结果存在直接地址单元中。

ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。

结果存在累加器A中。

ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。

结果存在累加器A中。

ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。

结果存在直接地址单元中。

ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。

结果存在累加器A中。

汇编言语——移位指令

汇编言语——移位指令

(2)操作数d2 表示移动的位数,只能是立即数1或者寄 存器CL,当移动位数超过1位时,必须把移动位数放在CL 中,以CL作为d2操作数。 (3)操作数d1各位移动的情况如图7.1所示,从最高位起, 将有d2位移到操作数d1之外,除了最后移出的一位放到标志 位CF中之外,5/7 14/6 …… CF 操作数d1 1 0 0
(4)移动后d1中的数据是在其原值的后面加了d2个0,即 把原数值扩大了倍,当扩大后的值超过表示范围时,超过d1 类型(字节或字)规定位数的高位部分会自动丢失。 (5)该指令对其余标志位的影响情况是:移动后的结果 为0则ZF置1,否则ZF清0;移动后d1最高位的值会复制到SF 上;如果移动前后d1的最高位不同则OF置1,否则OF清0。 移位指令涉及数值计算问题,但并不复杂。比如AX的值是 8D56H,CL的值是3,则下面几条指令是SHL指令的正确用 法,后面也给出了移位后的结果: SHL SHL SHL SHL AL,1 移位后,AL = 0ACH,CF = 0,AH不变 AX,1 移位后,AX = 1AACH,CF = 1 AH,CL 移位后,AH = 68H,CF = 0,AL不变 AX,CL 移位后,AX = 6AD0H,CF = 0
7.1 移位指令
7.1.1 逻辑左移 【指令格式】SHL d1, d2 【功能】把操作数d1的各个二进制位依次向左移动d2位, 移动造成右边的空位填0,结果放回操作d1中。 【说明】 (1)操作数d1必须是通用寄存器或内存型寻址方式,必须 有确定的类型,可以是字节型,也可以是字型,并且对内存型 寻址方式可以使用段跨越。
位号:15/7 14/6 …… 操作数d1
……
1
0
CF
图7.3 算术右移指令SAR的功能
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C51单片机汇编语言逻辑右移汇编语言SHR 右移指令将操作数逻辑右移一位
在C51单片机汇编语言中,逻辑右移是通过SHR(右移指令)来实现的。

逻辑右移是指将一个二进制数的各位向右移动一位,移动后的位置用0填充。

本文将详细介绍C51单片机汇编语言逻辑右移的操作步骤和具体实现方法。

1. C51单片机汇编语言概述
C51单片机汇编语言是由英特尔公司开发的一种用于嵌入式系统的低级编程语言。

它被广泛应用于各种嵌入式系统中,包括家电、汽车电子、通信设备等。

C51汇编语言具有指令丰富、执行效率高、对硬件资源的灵活利用等特点,因此在嵌入式系统开发中得到了广泛的应用。

2. 逻辑右移(SHR)指令的作用和原理
逻辑右移是将操作数的二进制表示向右移动一位,移动后的位置用0填充。

逻辑右移(SHR)指令是C51单片机汇编语言提供的一种操作指令,用于实现逻辑右移的功能。

逻辑右移的原理是将操作数的二进制表示向右移动一位,并在最高位位置插入0。

3. 逻辑右移操作的示例
下面以一个示例来说明逻辑右移(SHR)的具体操作步骤和实现方法。

假设我们要将一个8位的二进制数A右移一位,将结果保存在另一
个变量B中。

首先,将A加载到A寄存器中。

MOV A, #0xFF ; 将0xFF加载到A寄存器中
接下来,通过SHR指令对A进行逻辑右移操作,并将结果保存在
B中。

SHR A, #1 ; 将A右移一位,结果保存在A中
MOV B, A ; 将A的值保存到B中
此时,变量B中的值就是二进制数A逻辑右移一位后的结果。

上述示例中,我们将二进制数A右移一位,并将结果保存在B中。

通过逻辑右移,原二进制数中的各位向右移动一位,并在最高位位置
插入0。

逻辑右移操作可以通过SHR指令来实现。

4. 总结
逻辑右移是C51单片机汇编语言中常用的操作之一,通过SHR指
令可以方便地实现逻辑右移的功能。

逻辑右移将操作数的二进制表示
向右移动一位,移动后的位置用0填充。

在实际的嵌入式系统开发中,逻辑右移的操作能够有效地处理和优化数据,提高程序的执行效率和
系统的性能。

本文简要介绍了C51单片机汇编语言逻辑右移的操作步骤和实现方法,希望对读者理解和应用逻辑右移操作有所帮助。

在实际应用中,
读者还可以进一步探索C51单片机汇编语言的其他特性和操作指令,丰富自己的嵌入式系统开发技能。

相关文档
最新文档