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.算术逻辑部件(ALU)(P4)答:cpu内部的算数逻辑部件也叫运算器,是专门用来处理各种数据信息的,它可以进行加、减、乘、除算术运算和与、或、非、异或等逻辑运算。

2.控制器(P5)答:是CPU的控制中心3.字长(P9)答:是cpu同时能处理的数据位数,也称数据宽度。

字长越长,计算能力越高,速度越快。

4.主频(P9)答:Cpu的时钟频率,和cpu的运算速度密切相关,主频越高,运算速度越快。

5.偶校验(P11)答:运算结果的低八位中所含的1的个数为偶数,则PF为1。

6.奇校验(P11)答:运算结果的低八位中所含的1的个数为奇数,则PF为0。

7.总线周期(P12)答:在取指令和传送数据时,CPU总线接口部件占用的时间。

8.最小模式(P13)答:在系统中只有一个微处理器9.中断向量(P27)答:中断处理子程序的入口地址,每个中断类型对应一个中断向量。

10.非屏蔽中断(NMI)(P28)答:从引脚NMI进入的中断,它不受中断允许标志IF的影响。

11.可屏蔽中断(INTR)(P28)答:从引脚INTR进入的中断,它受中断允许标志IF的影响。

12.基址(P77)答:任何通用寄存器都可以作为基址寄存器,即其内容为基址。

注意,这里的基址不是段基址,而只是一个延续下来的习惯叫法,实际上是指有效地址的一个基础量。

13.直接寻址(P77)答:数据在存储器中,有效地址由指令直接给出。

默认段地址寄存器DS。

直接寻址是对存储器访问时可采用的最简单的方式。

14.指令性语句(P127)答:一条指令,在汇编的过程中会产生对应的目标代码。

如:ADD AL,BL和MOV AX,1000都是指令性语句。

15.指示性语句(伪指令)(P127)答:伪指令,为汇编程序提供某些信息,让汇编程序在汇编过程中执行某些特定的功能。

16.接口技术(P177)答:接口按功能分为两类:一类是使CPU正常工作所需要的辅助电路,通过这些辅助电路,使CPU得到时钟信号或接收外部的多个中断请求等;另一类是输入/输出接口,利用这些接口,CPU可接收外部设备送来的信息或发送给外设。

移位指令计算方法

移位指令计算方法

移位指令计算方法移位指令是计算机中常用的一种指令,它可以将二进制数向左或向右移动一定的位数,从而实现乘以或除以2的幂次方的运算。

在计算机中,移位指令的计算方法有多种,下面将按照类别进行介绍。

逻辑移位逻辑移位是指将二进制数向左或向右移动一定的位数,移动后在空出的位上填充0。

逻辑左移可以实现乘以2的幂次方的运算,逻辑右移可以实现除以2的幂次方的运算。

例如,将二进制数1010左移一位,得到的结果为10100,相当于将10乘以2。

将二进制数1010右移一位,得到的结果为0101,相当于将10除以2。

算术移位算术移位是指将二进制数向左或向右移动一定的位数,移动后在空出的位上填充符号位。

算术左移可以实现乘以2的幂次方的运算,算术右移可以实现除以2的幂次方的运算。

例如,将二进制数1010左移一位,得到的结果为10100,相当于将10乘以2。

将二进制数1010右移一位,得到的结果为1101,相当于将10除以2。

循环移位循环移位是指将二进制数向左或向右移动一定的位数,移动后将移出的位重新移动到另一端。

循环左移可以实现循环移位加密的功能,循环右移可以实现循环移位解密的功能。

例如,将二进制数1010左移一位,得到的结果为0101,将移出的位1重新移动到最右端。

将二进制数1010右移一位,得到的结果为0101,将移出的位0重新移动到最左端。

总结移位指令是计算机中常用的一种指令,它可以实现乘以或除以2的幂次方的运算。

在计算机中,移位指令的计算方法有逻辑移位、算术移位和循环移位三种。

逻辑移位可以将二进制数向左或向右移动一定的位数,移动后在空出的位上填充0;算术移位可以将二进制数向左或向右移动一定的位数,移动后在空出的位上填充符号位;循环移位可以将二进制数向左或向右移动一定的位数,移动后将移出的位重新移动到另一端。

51单片机汇编指令总结

51单片机汇编指令总结

51单片机汇编指令总结数据传输指令一.片内RAM数据传输指令1.以累加器A为目的操作数的指令:MOV A , RnMOV A , directMOV A , @RiMOV A , #data2.以寄存器Rn为目的操作数的指令:MOV Rn , AMOV Rn ,directMOV Rn ,data3.以直接地址为目的操作数的指令:MOV direct ,AMOV direct ,RnMOV direct1 ,derect2MOV direct ,@RiMOV direct ,#data4.间接地址为目的操作数的指令:MOV @Ri ,AMOV @Ri ,directMOV @Ri ,#data5.十六位数据传送指令:MOV DPTR , #data16二.累加器A与片外RAM数据传送指令:MOVX A ,@RiMOVX A , @DPTRMOVX @Ri ,AMOVX @DPTR ,A三.查表寻址:MOVC A ,@A+DPTR (先PC←(PC)+1,后A←((A)+(DPTR)))+MOVC A ,@A+PC (先PC←(PC)+1,后A←((A)+(PC)))四.交换指令:1.字节交换指令:XCH A ,RnXCH A ,directXCH A ,@Ri2.半字节交换指令:XCHD A ,@Ri3.累加器半字节交换指令:SWAP A五.栈操作指令:1.PUSH(入栈指令)PUSH direct2.POP(出栈指令)POP direct算术运算指令:一.加法减法指令:1.加法指令:ADD A ,RnADD A ,directADD A ,@RiADD A ,#data2.带进位加法指令:ADDC A ,Rn A←(A)+(Rn)+CYADDC A ,direct A←(A)+(direct)+CYADDC A ,@Ri A←(A)+((Ri))+CYADDC A ,#data A←(A)+(data)+CY3.带借位减法指令:SUBB A ,Rn A←(A)-CY-(Rn)SUBB A ,direct A←(A)-CY-(direct)SUBB A ,@Ri A←(A)-CY-((Ri))SUBB A ,#data A←(A)-CY-#data二.乘法除法指令:1.乘法指令:MUL AB BA←(A) ×(B)高字节放在B中,低字节放在A中2.除法指令:DIV AB A←(A) ÷(B)的商,(B) ←(A) ÷(B)的余数三.加1减1指令:1.加1指令:INC A A←(A)+1INC Rn Rn←(Rn)+1INC direct direct←(direct)+1INC @Ri (Ri) ←((Ri))+1INC DPTR DPTR←(DPTR)+12.减1指令:DEC ADEC RnDEC directDEC @Ri四.十进制调制指令:DA A 调整累加器A的内容为BCD码逻辑操作指令:一.逻辑与、或、异或指令:1.逻辑与指令:ANL A ,RnANL A ,directANL A ,@RiANL A ,#data2.逻辑或这令:ORL A ,RnORL A ,directORL A ,@RiORL A ,#dataORL direct ,AORL direct ,#data3.逻辑异或指令:XRL A ,RnXRL A ,directXRL A ,@RiXRL A ,#dataXRL direct ,AXRL direct ,#data二.清零、取反指令:1.累加器A清零指令:CRL A2.累加器A取反指令:CPL A三.循环位移指令:1.累加器A循环左移指令:RL A2.累加器A循环右移指令:RR A3.累加器A连同进位位循环左移指令:RLC A4. 累加器A连同进位位循环右移指令:RRC A控制转移指令:一.无条件转移指令:1.绝对转移指令:AJMP addr11 (先PC+2,然后将addr11的低十位传给PC,PC的高六位不变)2.长转移指令:LJMP addr16 (用addr16的值替换PC的值)3.相对转移(短转移)指令:SJMP rel(带符号的偏移字节数)(PC+2,再加rel赋值给PC)4.间接转移指令:JMP @A+DPTR (A)+(DPTR) →(PC)二.条件转移指令:1.累加器判零转移指令:JZ rel 先PC+2;后判断,A为0时转移,PC+rel赋值给PC;否则顺序执行JNZ rel 先PC+2,后判断,A不为0时转移,PC+rel赋值给PC;否则顺序执行2.比较转移指令:CJNE 目的操作数,源操作数,relCJNE A,direct,rel 先PC+3传回PC,再比较目的操作数和原操作数CJNE A,#data,rel 目>源时,程序转移,PC+rel传回PC且CY=0CJNE Rn,#data,rel 目=源时,程序顺序执行CJNE @Ri,#data,rel 目<源时,程序转移,PC+rel传回PC且CY=13.减一非0指令:DJNZ Rn,rel 先PC\+2,Rn-1,当Rn为0时程序顺序执行,否则PC+rel传回PCDJNZ direct,rel 先PC+3,direct-1,direct为0时程序顺序执行,否则PC+rel 传回PC二.子程序调用、返回指令:1.绝对调用指令ACALL:ACALL addr11 先PC+2,SP+1将PC的低八位存入SP;SP+1,将PC的高八位存入SP。

汇编语言设计-逻辑运算指令

汇编语言设计-逻辑运算指令

ADD AL , BL ; X2+ X8 ;3T 所需时间:21T
2、循环移位指令 ⑴、循环左移指令ROL
CF OPRD
ROL OPRD , CNT ; B/W
例:ROL BX , 1 ;BX中的内容不含进位依次循环左移1位
⑵、 循环右移指令ROR
CF OPRD
ROR OPRD , CNT ; B/W
MOV AL , DATA ;10T MOV AL , DATA ;取数X ;10T
MOV BL , 10 ;4T MUL BL ;至少70T
SAL AL , 1 ;X2→AL ;2T MOV BL , AL ;暂存于BL ;2T SAL AL , 1 ;X4 ;2T
所需时间: 84T
SAL AL , 1 ;X8 ;2T
INC AL
㈡、移位类指令 1、非循环移位指令
⑴、逻辑/算术左移指令SHL/SAL
格式: SHL OPRD , COUNT CF OPRD
SAL OPRD , COUNT
0
例: SAL BL , 1 ;将BL中的值左移一位,最低位补0。
SHL DL , CL ;将DL中的值左移若干位,CL中指出所 移的位数(如(CL)=4),则DL的值左移4位
例1:将存于AX和BX寄存器中的32位数联合左移(乘2)。 SAL AX , 1 ;先将AX中的最高位移入CF,最低位补0 RCL BX , 1 ;将CF及DX的内容一起循环左移1次
如,设:(DX)=1234H (AX)=9806H 执行SAL AX , 1后,则(AX)=300CH CF=1 再执行RCL BX , 1后,则(DX)=2469H CF=0 例2:试实现两个字单元的32位数据乘以2。程序段如下:

51单片机汇编指令详解

51单片机汇编指令详解

MCS-51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataAJMP addr11ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct,AANL direct,#dataANL C,bitANL C,/bit1、ACALL addr11指令名称:绝对调用指令指令代码:{A10,A9,A8,10001},A[7:0]指令功能:构造目的地址,进行子程序调用。

其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。

操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数: 2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。

2、ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn), n=0~7字节数: 1机器周期;1影响标志位:C,AC,OV3、ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数: 2机器周期:1影响标志位:C,AC,OV4、ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV5、ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数: 2机器周期:1影响标志位:C,AC,OV6、ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C), n=0~7字节数: 1机器周期:1影响标志位:C,AC,OV7、ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数: 2机器周期:1影响标志位:C,AC,OV8、ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C), i=0,1字节数: 1机器周期:1影响标志位:C,AC,OV9、ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数: 2机器周期:1影响标志位:C,AC,OV10、AJMP addr11指令名称:绝对转移指令指令代码:{A10,A9,A8,00001},A[7:0]指令功能:构造目的地址,实现程序转移。

C语言和单片机中的左移右移

C语言和单片机中的左移右移

1当左移移出的是“1”而不是0时,你该怎么想?2当左移的操作数是一个sign型是,你该怎么想?3在单片机中和在C语言中是完全一样的吗?4左移与右移在内存中的关系?5什么时候左移相当于乘2?6有兴趣的话可以研究一下单片机汇编中的循环左右移!左移先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:int i = 1;i = i << 2; //把i里的值左移2位也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因)需要注意的一个问题是int类型最左端的符号位和移位移出去的情况.我们知道,int是有符号的整形数,最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如:int i = 0x40000000; //16进制的40000000,为2进制的01000000 (0000)i = i << 1;那么,i在左移1位之后就会变成0x80000000,也就是2进制的100000...0000,符号位被置1,其他位全是0,变成了int类型所能表示的最小值,32位的int这个值是-2147483648,溢出.如果再接着把i左移1位会出现什么情况呢?在C语言中采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0.左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:int i = 1, j = 0x80000000; //设int为32位i = i << 33; // 33 % 32 = 1 左移1位,i变成2j = j << 33; // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃在用gcc编译这段程序的时候编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在gcc下是这个规则,别的编译器是不是都一样现在还不清楚.总之左移就是: 丢弃最高位,0补最低位在keil c51中,内部函数库INTRINS.H中_crol_(m,n)表示将m循环左移n位,与m<<n的效果不同。

51单片机汇编指令表

51单片机汇编指令表
MOV
Rn,#data
立即数送入寄存器
8
MOV
direct,A
累加器内容送入直接地址单元
9
MOV
direct,Rn
寄存器内容送入直接地址单元
10
MOV
direct,direct
直接地址单元中的数据送入另一个直接地址单元
11
MOV
direct,@Ri
间接RAM中的数据送入直接地址单元
12
MOV
direct,#data
直接地址单元加1
16
INC
@Ri
间接RAM单元加1
17
DEC
A
累加器减1
18
DEC
Rn
寄存器减1
19
DEC
direct
直接地址单元减1
20
DEC
@Ri
间接RAM单元减1
21
INC
DPTR
地址寄存器DPTR加1
22
MUL
A,B
A乘以B,结果放在A
23
DIV
A,B
A除以B,结果放在A
ห้องสมุดไป่ตู้24
DA
A
累加器十进制调整
12
CJNE
A,#data,rel
累加器与立即数比较,不相等则转移
13
CJNE
Rn,#data,rel
寄存器与立即数比较,不相等则转移
14
CJNE
@Ri,#data,rel
间接RAM单元与立即数比较,不相等则转移
15
CJNE
Rn,rel
寄存器减1,非零转移
16
CJNE
direct,erl
直接地址单元减1,非零转移

51单片机汇编指令详解

51单片机汇编指令详解

1、XCH A,Rn指令名称:寄存器寻址字节交换指令指令代码:C8H~CFH指令功能:寄存器寻址字节操作内容:(A)交换(Rn);n=0~7字节数: 1机器周期:12、XCH A,direct指令名称:直接寻址字节交换指令指令代码:C5H指令功能:累加器内容与内部RAM低128单元或专用寄存器内容交换操作内容:(A)交换(direct)字节数: 2机器周期:13、XCH A,@Ri指令名称:间接寻址字节交换指令指令代码:C6H~C7H指令功能:累加器内容与内部RAM低128单元内容交换操作内容:(A)交换((Ri)); i=0,1字节数: 1机器周期:14、XCHD A,@Ri指令名称:半字节交换指令指令代码:D6H~D7H指令功能:累加器内容低4位与内部RAM低128单元低4位交换操作内容:(A)3~0交换((Ri))3~0;i=0,1字节数: 1机器周期:15、XRL A,Rn指令名称;逻辑异或操作指令指令代码:68H~6FH指令功能:累加器内容与寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(Rn); n=0~7字节数: 1机器周期:16、XRL A,direct指令名称:逻辑异或操作指令指令代码:65H指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:A<-(A)异或(direct)字节数: 2机器周期:17、XRL A,@Ri指令名称:逻辑异或指令指令代码:66H~67H指令功能:累加器与内部RAM低128单元内容进行逻辑异或操作操作内容:A<-(A)异或((Ri)); i=0,1字节数: 1机器周期:18、XRL A,#data指令名称:逻辑异或指令指令代码:64H指令功能:累加器内容与立即数进行逻辑异或操作操作内容:A1?/FONT>(A)异或data字节数: 2机器周期:19、XRL direct,A指令名称:逻辑异或操作指令指令代码:62H指令功能:累加器内容与内部RAM低128单元或专用寄存器内容进行逻辑异或操作操作内容:direct一(direct)异或(A)字节数: 2机器周期:110、XRL direct,#data指令名称:逻辑异或操作指令指令代码:63H指令功能:内部RAM低128单元或专用寄存器内容与立即数进行逻辑异或操作操作内容:direct<-(direct)异或data字节数: 3机器周期:2以R开头的指令有6条,分别为:RETRETIRL ARLC ARR ARRC A1、RET指令名称:子程序返回指令指令代码:22H指令功能:子程序返回操作内容:PC15~8<-((SP))SP<-(SP)-1PC7~0<-((SP))SP<-(SP)-1字节数: 1机器周期:22、RETI指令名称:中断返回指令指令代码:32H指令功能:中断服务程序返回操作内容’:PC15?/FONT>8<-((SP))SP<-(SP)-lPC7~0<-((SP))SP<-(SP)-1字节数: 1机器周期:23、RL A指令名称:循环左移指令指令代码:23H指令功能:累加器内容循环左移一位操作内容:An+1<-(An); n=0~6A0<-(A7)字节数: 1机器周期:14、RLC A指令名称:带进位循环左移指令指令代码:33H指令功能:累加器内容连同进位标志位循环左移一位操作内容:An-1<-(An); n=0~6A0<-(C)C<-(A7)字节数: 1机器周期:15、RR A指令名称:循环右移指令指令代码:03H指令功能:累加器内容循环右移一位操作内容:An<-(An+1);n=0~6A7<-(A0)字节数: 1机器周期:16、RRC A指令名称:带进位循环右移指令指令代码:13H指令功能:累加器内容连同进位标志位循环右移一位操作内容:An<-(An+1);n=0~6A7<-(C)C<-(A0)字节数: 1机器周期:11、SETB c指令名称:进位标志置位指令指令代码:D.H指令功能:进位标志位置位操作内容:C<-1字节数: 1机器周期:12、SETB bit指令名称:直接寻址位置位指令指令代码:D2H指令功能:内部RAM可寻址位或专用寄存器指定位置位操作内容:bit<-1字节数: 2机器周期:13、SJMP rel指令名称:短转移指令指令代码:80H指令功能:按指令提供的偏移量计算转移的目的地址,实现程序的无条件相对转移;操作内容:PC<-(PC)+2PC<-(PC)+rel字节数: 2机器周期:2使用说明:偏移量是8位二进制补码数,可实现程序的双向转移,其转移范围是(PC一126)一(PC+129)。

移位循环指令及应用

移位循环指令及应用

移位循环指令及应用移位循环指令是计算机中一种常用的逻辑指令,用于循环移位数据。

它可以将数据的每一位都向左或向右移动,然后将移出的位填充到相应的位置上,从而实现对数据的移位操作。

移位循环指令在计算机系统中有广泛的应用,接下来我将介绍移位循环指令的使用方法以及其应用。

首先,移位循环指令一般包括左移循环指令和右移循环指令。

左移循环指令将数据的每一位都向左移动一位,移出的最高位将填充到最低位。

右移循环指令则是将数据的每一位都向右移动一位,移出的最低位将填充到最高位。

移位循环指令的使用方法比较简单,一般需要提供两个参数:要移位的数据和移位的位数。

其中,位数可以是一个立即数,也可以是一个寄存器中的值。

具体来说,移位循环指令的流程如下:1. 将要移位的数据加载到一个寄存器中;2. 将移位的位数加载到另一个寄存器中,或者使用一个立即数;3. 执行移位循环指令,将数据按照指定的位数进行移位;4. 移位后的结果可以保存回原来的寄存器中,或者保存到另一个寄存器中。

移位循环指令的应用非常广泛,下面我将介绍一些常见的应用场景。

1. 逻辑运算:移位循环指令可以用于逻辑运算,例如在位运算中进行循环左移或循环右移操作。

通过移位循环指令,可以将一个数据的每一位都向左或向右移动,并且可以将移位后的结果保存到寄存器中,以进行后续的逻辑运算。

2. 数据加密:移位循环指令可以用于数据加密算法。

例如,在DES(数据加密标准)算法中,使用了多次的循环左移和循环右移操作,以实现数据的混淆和加密。

3. 循环队列:移位循环指令可以用于实现循环队列。

循环队列是一种特殊的队列数据结构,它可以在队列的头部和尾部进行插入和删除操作,当队列的尾部插满后,再插入新的元素时会从队列的头部继续插入。

4. 图像处理:移位循环指令可以用于图像处理算法中,例如实现图像的平移、旋转和缩放等操作。

通过将图像的每个像素值进行循环左移或循环右移,可以改变图像的位置和大小。

总结起来,移位循环指令是计算机中一种重要的逻辑指令,它可以对数据进行循环移位操作。

单片机右移除法例程

单片机右移除法例程

单片机右移除法例程1.引言1.1 概述单片机右移除法是一种常见的算法,用于将某个数值逐位向右移动,通过除2的操作实现。

本文将详细介绍单片机右移除法的原理和应用。

在单片机开发中,经常需要进行数据的处理和转换。

而右移操作是一种常见的位操作,可以用来实现数据的快速除以2。

单片机右移除法将数值的每一位逐位向右移动一位,相当于将数值除以2。

这种除法是一种简单高效的方法,可以节省计算资源和时间。

本文首先会介绍单片机右移除法的原理,为读者提供一个清晰的理解。

随后,将介绍单片机右移除法的应用场景,并举例说明如何在实际项目中使用该算法。

通过这些实例,读者可以更好地理解和应用单片机右移除法。

在结论部分,我们将对本文的内容进行总结,并展望单片机右移除法的未来发展。

通过本文的学习,读者将能够更好地掌握单片机右移除法的原理和应用,为自己的单片机开发工作带来便利和效率。

希望本文能够对读者在单片机开发中的数据处理有所帮助,为读者的学习和工作提供一定的指导和启发。

同时,也欢迎读者对本文的内容进行批评和指正,以便我们不断改进和完善。

1.2 文章结构文章结构部分的内容介绍了本文的整体结构和各个部分的内容概要,帮助读者更好地理解整篇文章的组织和逻辑关系。

在本文中,文章结构主要分为三个部分:引言、正文和结论。

引言部分主要包括概述、文章结构和目的三个小节。

在概述中,将简要介绍单片机右移除法例程的背景和意义,引起读者的兴趣。

文章结构小节将详细说明本文的整体结构,并列出各个部分的标题,方便读者快速浏览和定位所需内容。

目的小节将明确本文的研究目的和意义,让读者了解文章的价值和重要性。

正文部分是本文的主体内容,主要分为单片机右移除法原理和单片机右移除法的应用两个小节。

在单片机右移除法原理小节中,将详细介绍单片机右移除法的基本原理、计算步骤和算法流程,帮助读者理解其工作原理。

在单片机右移除法的应用小节中,将探讨单片机右移除法在实际应用中的具体场景和优势,提供丰富的应用案例和实践经验,使读者能够更好地应用该技术。

5--逻辑运算和移位指令 (1)

5--逻辑运算和移位指令 (1)

三、逻辑运算和移位指令逻辑运算和移位指令逻辑运算指令AND DST,SRC 逻辑与指令OR DST,SRC 逻辑或指令XOR DST,SRC 逻辑异或指令TEST DST,SRC 测试指令NOT OPR 逻辑非指令移位指令SHL OPR,CNT 逻辑左移指令SAL OPR,CNT 算术左移指令SHR OPR,CNT 逻辑右移指令SAR OPR,CNT 算术右移指令ROL OPR,CNT 左循环移位指令ROR OPR,CNT 右循环移位指令RCL OPR,CNT 带进位左循环移位指令RCR OPR,CNT 带进位右循环移位指令SHLD DST,REG,CNTSHRD DST,REG,CNT逻辑运算指令(1)AND 逻辑与指令格式:AND DST ,SRC功能:(DST)←(DST)∧(SRC)(按位与)操作数:通用寄存器立即数存储器AND MEM , IDATAAND REG , IDATAAND REG , MEMAND MEM , REGAND REG , REG对标志寄存器的影响:1)CF=OF=0;2)根据运算结果设置SF、ZF、PF标志;3)AF无定义。

说明:1)利用AND指令,可以保留特定位(与1),同时屏蔽掉其它位(与0),以检测特定位。

2)利用AND指令,可以将某些特定位设置为0(与0),同时使其余位保持原值不变化(与1)。

3)一个寄存器和自身进行逻辑与运算,该寄存器内容不变。

但该运算影响了SF、ZF、PF三个标志位,并使OF和CF清零。

利用该特性,可以判断一个数据的正负、是否为零、以及数据的奇偶性。

格式:OR DST ,SRC功能:(DST)←(DST)∨(SRC)(按位或)操作数:通用寄存器立即数存储器OR MEM , IDATAOR REG , IDATAOR REG , MEMOR MEM , REGOR REG , REG对标志寄存器的影响:1)CF=OF=0;2)根据运算结果设置SF、ZF、PF标志;3)AF无定义。

  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单片机汇编语言的其他特性和操作指令,丰富自己的嵌入式系统开发技能。

相关文档
最新文档