单片机汇编语言中比较指令

 我来答
百度网友87e043c
推荐于2016-11-21 · TA获得超过301个赞
知道小有建树答主
回答量:77
采纳率:0%
帮助的人:84.8万
展开全部
刚好也有这么个困惑,已经解决了,拿出来分享下

比较转移指令 CJNZ

CJNE A,#data,rel

CJNE A,direct,rel

CJNE Rn,#data,rel

CJNE @Ri,#data,rel

第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本

指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,

#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。

但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的

数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数

比data大还是小了。

例:

MOV A,R0

CJNE A,#10H,L1

MOV R1,#0FFH

AJMP L3

L1: JC L2

MOV R1,#0AAH

AJMP L3

L2: MOV R1,#0FFH

L3: SJMP L3

JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处

执行,如果CY=0则次序执行(执行它的下面一条指令)。

分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转

到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执

行MOV R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV R1,#0FFH

指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,

则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。

弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第

三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这

里就不详谈了,下面给出几个对应的例程。

CJNE A,10H ;把A中的值和10H中的值比较(注意和上题的区别)

CJNE 10H,#35H ;把10H中的值和35H中的值比较

CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较
商莎仇寻芹
2019-06-13 · TA获得超过3841个赞
知道大有可为答主
回答量:3093
采纳率:32%
帮助的人:223万
展开全部
刚好也有这么个困惑,已经解决了,拿出来分享下
比较转移指令
CJNZ
CJNE
A,#data,rel
CJNE
A,direct,rel
CJNE
Rn,#data,rel
CJNE
@Ri,#data,rel
第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本
指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,
#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。
但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的
数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数
比data大还是小了。
例:
MOV
A,R0
CJNE
A,#10H,L1
MOV
R1,#0FFH
AJMP
L3
L1:
JC
L2
MOV
R1,#0AAH
AJMP
L3
L2:
MOV
R1,#0FFH
L3:
SJMP
L3
JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处
执行,如果CY=0则次序执行(执行它的下面一条指令)。
分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转
到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执
行MOV
R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV
R1,#0FFH
指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,
则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。
弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第
三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这
里就不详谈了,下面给出几个对应的例程。
CJNE
A,10H
;把A中的值和10H中的值比较(注意和上题的区别)
CJNE
10H,#35H
;把10H中的值和35H中的值比较
CJNE
@R0,#35H
;把R0中的值作为地址,从此地址中取数并和35H比较
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式