原话:由于89c51指令系统中没有不带进位的减法指令,如果需要,则可以在"SUBB"指令前用“CLR”将CY清零

作者&投稿:澹亚 (若有异议请与网页底部的电邮联系)
51单片机汇编中SUBB带借位指令的意思~

51单片机汇编中SUBB带借位指令的格式是:SUBB A, R(操作数),意思是累加器中的数减去源操作数所指出的数和进位位CY,其差值存放在累加器A中。运算结果影响PSW(程序状态标志寄存器)。
在多字节减法运算中,低字节被减数有时会向高位产生借位,此时CY(进位标志)置一,所以在此必须使用带借位减法指令。需要注意的是,进行单字节减法或多字节低8位减法运算时,应先把进位位清零。在80C51指令系统中没有不带借位的减法指令。
例如: SUBB 49H,58H;49H-58H,在这里是49H是被减数,带借位。
实际上减法运算在计算机中是补码相加。

扩展资料
汇编语言指令系统执行计算和控制过程:
单片机的几个主要组成部分,构成了单片机的硬件。所谓硬件(Hardware),就是看得到,摸得到的实体。但是,光有这样的硬件,还只是有了实现计算和控制功能的可能性。
单片机要真正地能进行计算和控制,还必须有软件(Software)的配合。软件主要指的是各种程序。只有将各种正确的程序“灌入”(存入)单片机,它才能有效地工作。
单片机所以能自动地进行运算和控制,正是由于人把实现计算和控制的步骤一步步地用命令的形式,即一条条指令(Instruction)预先存入到存贮器中,单片机在CPU的控制下,将指令一条条地取出来,并加以翻译和执行。就以两个数相加这一简单的运算来说,当需要运算的数已存入存贮器后,还需要进行以下几步:
第一步:把第一个数从它的存贮单元(Location)中取出来,送至运算器。
第二步:把第二个数从它所在的存贮单元中取出来,送至运算器;
第三步:相加;
第四步:把相加完的结果,送至存贮器中指定的单元。

不让发那么多 所有分两次 这里接上面的4.循环移位指令(4条)
循环移位指令的功能是将累加器A中内容循环位移或者和进位位一起移位。
例 A=01H, Cy=1
若执行一次 RRC A后,结果为:A=10000000B Cy=1
若执行一次 RLC A后,结果为:A=00000011B Cy=0
5.取反、清0指令
CPL A ;累加器内容按位取反。如果1就变0,如果0就变1
CLR A ;累加器A清0 控制转移类指令计算机运行过程中,有时因为操作的需要,程序不能按顺序逐条执行指令,需要改变程序运行方向,即将程序跳转到某个指定的地址再顺序执行下去。
控制转移类指令的功能就是根据要求修改程序计数器PC的内容,以改变程序运行方向,实现转移。
控制转移类指令可分为:无条件转移、条件转移、绝对转移、相对转移和调用、返回指令。下面我们将分类介绍。
1.无条件转移指令(4条)
LJMP add16 ;add16→PC,无条件跳转到add16地址,可在64KB范围内
转移,称为长转移指令
AJMP add11 ;add11→PC,无条件转向add11地址,在2KB范围内转移
SJMP rel ;PC+2+rel→PC,相对转移,rel是偏移量,8 位有符号
数,范围-128~127,即可向后跳转128,向前可跳转127
JMP @A+DPTR ;A+DPTR→PC ,属散转指令,无条件转向A与DPTR内容相
加后形成的新地址
例1 执行指令
LJMP 9100H
不管这条指令存放在哪里,执行时将使程序转移到9100H,和AJMP,SJMP指令是有差别的。
例2 程序
2000H MOV R0 , #10H ;10H→PC
2002H SJMP 03H ;PC+2+rel=2002H+2+03H=2007H→PC
┇ ┇
2006H ┇
2007H ┇
从说明中可见,执行SJMP 03H 指令后,马上跳转到2007H地址执行程序。
2.条件转移指令(8条)
条件转移指令是根据某种特定条件转移的指令。条件满足时转移,条件不满足时则顺序
执行下面的指令。
JZ rel ;A=0转向PC+2+rel→PC,A≠0顺序执行
JNZ rel ;A≠转向PC+2+rel→PC ,A=0顺序执行
CJNE A, direct, rel ;A≠ (direct)转向PC+3+rel→PC且当A>(direct),Cy=0
;当A<(direct),Cy=1
;否则A=(direct),PC+3→PC即顺序执行
CJNE A, #data, rel ;A data P转向PC+3+rel→PC且当A >data,Cy=0
;当A <data,Cy=1,
;A=data,PC+3→PC顺序执行
CJNZ Rn, #data, rel ;Rn≠data转向PC+3+rel→PC
;且当Rn>data,Cy=0,当Rn<data,Cy=1
;Rn=data,PC+3→PC顺序执行
CJNE @Ri,#data, rel ;(Ri) ≠data ,PC+3+rel→PC
;且当(Ri)>data ,Cy=0,当(Ri)<data,Cy=1
;(Ri)=data, PC+3→PC顺序执行
DJNZ Rn, rel ;Rn-1→Rn ,Rn ≠0转向PC+2+rel→PC
;Rn=0,PC+2→PC顺序执行
DJNZ direct, rel ;(direct)-1→(direct),(direct) ≠0转向 PC+2+rel
→PC
;(direct)=0 ,PC+2→PC顺序执行
注意:
1)CJNE类指令借用进位标志Cy作为比较结果的标志位。从指令中可知,目的操作数内容小于原操作数内容Cy置1,反之Cy清0,该类指令多用于分支程序。
2) DJNZ指令执行时Rn或direct先减1,然后再判断Rn或direct内容是否等于0。不为0则转,为0顺序执行。DJNZ用在循环程序中,控制循环次数很方便。
3) JZ和JNZ的操作数只有一个,是对A的内容的进行判断的指令。
例1 以下程序的循环次数是多少,最后(R0)=?
MOV R0 , #0
LL: ┇
DJNZ R0 , LL
分析:由于DJNZ是减1再判断大小的,因为R0=0,所以第一次执行DJNZ R0 , LL后R0=FFH=255,则程序要执行的次数为256次,R0最后的值为0。
解:程序要循环的次数为256次,最后R0=0
3.调用、返回、控操作指令
在程序设计中,常常要把具有一定功能的公用程序编制成子程序。当主程序转至子
程序时用调用指令,而在子程序的最后安排一条返回指令,使执行完子程序后再返回到主程序。
(1) LCALL addr16 ;调用入口地址为addr16的子程序
这是一条长调指令,可调用64KB范围内的子程序,因此,可放在程序的任何位置。
指令的执行过程分两步:第一步把断点(当前执行指令的下一条指令地址)压入堆栈。第二步将调用的子程序的入口地址装入PC。即addr16(16位地址)→PC,转向执行子程序。
(2) ACALL addr11 ;子程序入口地址为addr11的子程序
这是一条短调指令,只能实现2KB范围内的子程序的调用。其指令执行过程与LCALL
指令一样。但是需要注意的是:ACALL中addr11只占用PC的PC.0~PC.10位。
(3) RET ;放在子程序最后,使程序准确返回到主程序断点处
执行过程为:(SP)→PC.8~PC.15断点地址高字节送入PC
SP-1→SP,(SP) →PC.0~PC.7断点低字节送入PC,
这时PC中为主程序断点地址,程序准确返回到调用指令的下一条。
例 设SP=62H,(62H)=07H,(61H)=30H,执行指令RET
结果:SP=60H,(PC)=0730H,CPU从0730H开始执行程序。
(4) RETI ;中断返回指令
该指令用于中断服务程序,使中断程序结束后准确返回到主程序断点处,执行过程同RET,它还能清除优先级状态。
(5) NOP ;空操作
执行该指令时,CPU只进行取指令、译码,而不进行任何操作,故称为控操作。常用于产生一个机器周期延时。位操作指令MCS-51单片机的特色之一是具有很强的位处理功能。位操作指令又称为布尔指令,其功能是对内部RAM中可进行位操作的区域进行位操作。
在进行位操作时,位累加器C即进位标志Cy,位地址是片内RAM字节地址20H~2FH单元中连续的128个位(位地址00H~7FH)和部分功能寄存器。凡SFR中字符等地址能被8整除的特殊功能寄存器都具有可寻址的位地址,其中ACC(位地址E0H~E7H),B(位地址F0H~F7H)和片内RAM中128个位都可作软件标志或存储位变量。
1. 位数据传送类指令(2条)
MOV C , bit ;(bit) →C,寻址位的状态送入C
MOV bit , C ;C→(bit),C的状态送入位地址中
2. 位修正指令(6条)
CLR C ;0→C, 清0累加器
CLR bit ;0→(bit);清0寻址位
CPL C ;/C→C,取反
CPL bit ;(/bit) →(bit),寻址位取反
SETB C ;1→C,C置1
SETB bit ;1→ (bit),寻址位置1
3. 位逻辑运算指令(4条)
ANL C , bit ;C∩(bit) →C,寻址位和C“与”,结果放在C
ANL C , /bit ;C∩(/bit) →C,寻址位的非和C“与”,结果放在C
ORL C , bit ;C∪(bit) →C,寻址位和C“或”,结果放在C
ORL C , /bit ;C∪(bit) →C,寻址位和C的非“或”,结果放在C
4. 位条件转移指令(5条)
JC rel ;C=1转向PC+2+rel→PC
C=0顺序执行PC+2→PC
JNC rel ;C=0转向PC+2+rel→PC
C=1顺序执行PC+2→PC
JB bit , rel ;(bit) =1转向PC+3+rel→PC
(bit) =0顺序执行PC+3→PC
JNB bit , rel ;(bit) =0转向PC+3+rel→PC
(bit) =1顺序执行PC+3→PC
JBC bit , rel ;(bit) =1转向PC+3+rel→PC;同时0→(bit)
(bit) =0顺序执行PC+3→PC
注意:JBC与JB指令区别,前者转移后并把寻址位清0,后者只转移不清0寻址位。
例1 设P1为输入口,P3.0作输出线,执行下列指令:
MOV C , P1.0 ;(P1.0) →C
ANL C , P1.1 ;(C)∩(P1.1) →C
ANL C , /P1.32 ;(C)∩(/P1.2) →C
MOV P3.0 , C ;C→P3.0
结果是:P3.0=(P1.0) ∩(P1.1) ∩(/P1.2)
例2 用位操作指令编程计算逻辑方程
P1.5=ACC.0 ∩ (B.0∪P1.2) ∪P1.3
解: MOV C , B.0 ;B.0→C
ORL C , P1.2 ;C∪P1.2→C 即B.0+P1.2→C
ANL C , ACC.0 ;C∩ACC.0→C 即ACC.0∩(B.0∪P1.2)→C
ORL C , P1.3 ;C∪P1.3→C 即 ACC.0∩(B.0∪P1.2)∪P1.3→C
MOV P1.5 , C ;C→P1.5

比如,两字节的减法:
1A 2B - 3C 4D

先要用 2B - 4D,这时,就应该用 CLR C。
2B - 4D,不够减,Cy 会置一,表示有借位。

再进行 1A - 3C,还应该同时减去刚才的借位,此时,就不要用 CLR C 了。


89C51单片机语言和ATmega16的不同
从程序代码上看是对应的寄存器名称不同,可以网上下一个AVR单片机的代码自动生成软件,设置对应的功能就可以了,然后比照51去移植。它们的区别主要应该是架构不同,AVR是哈佛结构,处理速度更快。

如何用单片机(89C51)C语言访问片外ROM?当ram和rom同时外扩时该如何...
EA\/VPP(引脚):当EA端保持高电平时,访问内部程序存储器,反之访问外部程序存储器,与之相关的三根引脚psen,rd,wr你都很清楚了,就不多说了,使用外部存储器,需要使用编程器将你的程序写到外部rom中。psen是rom的选通线,因此,外部rom及外部ram是不会干扰的,你根本不用考虑这个问题,按教材连线...

89C51做16*16点阵问题 不显示 对其不是很了解就开始做了 就是用2个1...
然后通过第一行使其燃亮一定时间,然后熄灭。再送第二行的锁存器,并使其燃亮相同的时间,然后熄灭。以此类推,第十六行之后又返回第一行。由于人眼视觉的停留时间,因此屏幕上将显示出所预期的团现象。采用扫描显示时,每一行都有一个行驱动器,各行的同名列共用一个驱动器。显示数据主要存储于单片机...

求89C51单片机与PC链接并运行的步骤。(从keil编写程序(C语言)到单片...
你说你用89c51单片机是stc还是ATmel的。给你一重STC89C系列的吧(你可参照宏晶科技网址)下载程序上面有一步一步教你,至于MCU和PC怎么相连,这系列单片机用串口下程序,看看就明白了,相信你是聪明人 祝好 补充说明:1、对于atmel公司的AT89C51需要用专门的编程器才能下载,AT89S51\/2可以自己做个下载线...

89c51单片机模拟i2c总线怎么实现一主多从?
记得没错的话,51单片机没有I2C的端口,如果模仿的话只能作主机使用,不能作从机,所以一个51单片机用I2C控制多个51单片机是不可能实现的。想通信控制多个单片机的话,可以用串口,轮流发送接收文件再做处理。

我是单片机初学者,想用89C51单片机做个万年历,请问我需要买什么样的开发...
你如果是单片机的初学者的话,我个人的建议是有条件的话自己做一个单片机最小系统,这样不仅让你更熟悉单片机的基本的电路跟功能,并且还很省钱。你上网买的话一个单片机最起码一百多两百,如果自己做的话应该在30块钱之内能搞定,最小系统的电路图我现在没有,但网上有很多,你可以下下来看一下。如果...

DS18B20 与89C51单片机测温接线图
DS18B20一脚接正5V,三脚接地,二脚接单片机,同时加10K的上拉电阻,带字符的面对着你,从左到右是1、2、3脚。DA转换器好像在这个设计中用不到。报警器用8050三极管驱动,基极接单片机,中间串联一个1K的电阻,LED用动态扫描的方式。存储器用EEPROM 24C02做,于单片机走IIC协议。键盘按键少的话直接接...

怎么判断汽车ECU出现故障
1、故障自诊断:ECU具有“故障自诊断”功能,可根据输出的故障码,判断ECU是否存在故障;2、人工经验诊断法:当发现电控系统存在故障时,应先使用故障诊断仪读取故障码,并根据故障码指示的内容进行检查。对ECU进行故障诊断:1、故障自诊断。ECU具有“故障自诊断”功能,可根据输出的故障码,判断ECU是否存在...

ATMERd的AT89C51和STC的89C51单片机有什么区别
我不说他们功能以及区别。我就说几点。一,AT是国外的,质量做工较好。二,STC是国产的,质量差。三,STC问题特多,容易坏。四,STC本来就是不正规公司生产的,别被枪手到处宣传的夸张广告给蒙蔽了。五,如果你玩玩就STC,、STC便宜当成垃圾玩玩电子、真正想学习就AT。

测厚求助不锈钢测厚声速按照碳钢的选取来测厚的话
由于受早期电子技术的局限,老式的超声反射法测厚仪均为纯硬件结构,在电气性能和物理性能等方面都不尽人意。随着电子技术的不断进步。尤其是单片机技术的...单片机89C51及周围元件构成智能单元,89C51是一种低功耗,内含4K字节快擦写EPROM的8位单片机,其指令系统与80C51完全兼容。各功能设计如下。(1)厚度信号的采集和...

崇礼县19786801505: 原话:由于89c51指令系统中没有不带进位的减法指令,如果需要,则可以在"SUBB"指令前用“CLR”将CY清零 -
汗固施慧: 比如,两字节的减法: 1A 2B - 3C 4D先要用 2B - 4D,这时,就应该用 CLR C.2B - 4D,不够减,Cy 会置一,表示有借位.再进行 1A - 3C,还应该同时减去刚才的借位,此时,就不要用 CLR C 了.

崇礼县19786801505: 为什么我的keil4的database ATmel中没有89C51 -
汗固施慧: 你这个是KEIL MDK吧,这个IDE是针对ARM的,所以设备库中都是ARM的型号,如果你想在MCS51上写程序,需要用的是KEIL C51

崇礼县19786801505: 51单片机80c5和89c51的区别? -
汗固施慧: 51单片机80c5和89c51,两者的内核、指令系统和外部引脚是相完兼容的.两者区别只是ROM的类型不同.但80C51是intel公司的产品,是第一代标准的51单片机,内部有4KB的掩膜ROM,出厂时就固化了程序,现在早就没有了.而89C51,有AT89C51,是ATMEL的产品,还有国产的STC89C51.这两个也完全兼容,内部有4KB的FLASH程序存储器ROM.AT89C51也早停产了,目前只有国产的STC89C51在市场上销售,并多为初学者使用.

崇礼县19786801505: keil 软件中没有找到 STC90c516RD+怎么办啊? -
汗固施慧: 我来回答: 其实,STC大部分的单片机都是51内核或是52内核的.所以在选芯片的时候,只要选一款51体系的芯片就可以.我们用STC的时候,选的都是89C51的芯片. 但有一个问题要注意的就是: 在KEIL 仿真的时候,要注意区别,什么可...

崇礼县19786801505: proteus的元件库里没有AT89S51怎么添加 -
汗固施慧: 可以用AT89C51代替,他们都兼容MCS-51指令.在工作频率上S51比C51的极限频率要高.还有就是S51支持ISP下载,C51不具备此功能,所以你可以代替的.

崇礼县19786801505: 用keil编写89c51的程序,程序调用#include<ds1820.h>,但是一直警告不能打开文件ds1820.h,怎么办?
汗固施慧: #include<***.h>表示从系统库文件中查找该头文件,而#include"***.h"表示先从当前工程目录找.你改成#include"ds1820.h"就行了

崇礼县19786801505: 电脑设备里不显示89C51单片机 -
汗固施慧: 学校电脑是XP系统,安装驱动程很简单.但你电脑是win10系统,那差别大了,安装驱动程序是很麻烦的.那驱动程序是usb转串口线的,你插了吗?并不是89c51的,就是学校的电脑,也不会显示什么89c51的.去STC官网下载最新版的烧录软件包:STC-ISP,必须要用这个烧录软件,最关键是里面有驱动程序和安装方法.

崇礼县19786801505: 89C51单片机汇编程序题 -
汗固施慧: MOV 20H,R0 ;R0、R1要作为指针,所以内容直接转存到20H、21H MOV 21H,R1MOV A,PSW ;RS1,RS0的值代表了当前寄存器组中R0的绝对地址 ANL A,#18H ;取当前寄存器组的绝对地址 ADD A,#2H ;指针指向R2,R0、R1已经处理过了 ...

崇礼县19786801505: keil4怎么没有我要用的单片机型号,注册的时候按软件说明下的,完了没有89c51的型号,怎么添加? -
汗固施慧: 因为现在Keil被ARM收购了,ARM公司已经不更新集成开发环境ADS了,所以现在的Keil4只能开发ARM内核的芯片,但是如果你要用Keil4开发51系列芯片(比如AT89)也是可以的.先装Keil3,然后再装Keil4.在keil4环境下用注册机注册序列号,(51,ARM的分别产生不同的序列号)没有序列号的Keil也能用,但是只能使用32k以内的试用版.如果你没有Keil3和注册机留言给我,我发到你邮箱里.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网