打印

请教这段代码的含义

[复制链接]
2400|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
midplum|  楼主 | 2013-5-19 20:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MOV   A,@R0
                   JB    ACC.7,multiple
                   CJNE  A,#0CH,Jump1000
Jump1000:          JC    multiple
                   MOV   R2,#75H
                   MOV   R3,#30H
                   LJMP  GetRusl
;===========================================
multiple:          MOV   R6,#00H
                   MOV   R7,#0AH
                   LCALL Multi_Routine           //@R0@R0+1 *        R6R7
                   MOV   R6,#00H
                   MOV   R7,#01H
                   LCALL Div_routine          //@R0@R0+1 /R6R7
GetRusl:           MOV   A,R2
                   MOV   @R0,A
                   INC   R0
                   MOV   A,R3
                   MOV   @R0,A
                   RET
------------------------------------------------------------------------------------------------------------------
        请教各位高手:这段条件判断有何作用?JB    ACC.7,multiple是判断@R0@R0+1是否是负数。就是不明白CJNE  A,#0CH,Jump1000  Jump1000:          JC    multiple
的作用。
             MOV   A,@R0
                   JB    ACC.7,multiple
                   CJNE  A,#0CH,Jump1000
Jump1000:     JC    multiple

相关帖子

沙发
mb4555| | 2013-5-19 21:42 | 只看该作者
JB    ACC.7,multiple是判断@R0是否是负数。
如果是负数,跳到multiple,
否则是非负数,继续执行
【CJNE  A,#0CH,Jump1000】:
【JC    multiple】:
比较该数据(@R0),是否小于12(#0CH)
如果小于12  ,就执行multiple
否则,执行:
MOV   R2,#75H
                   MOV   R3,#30H
                   LJMP  GetRusl
///////////////////////////////////////////////////////
关键是要把【CJNE  A,#0CH,Jump1000】:
【JC    multiple】:
这两条指令,组合起来判断

使用特权

评论回复
板凳
ayb_ice| | 2013-5-20 07:57 | 只看该作者
CJNE  A,#0CH,Jump1000  Jump1000

这都不懂,就是判断大于等于或小于

使用特权

评论回复
地板
mb4555| | 2013-5-20 13:40 | 只看该作者
3楼朋友把它简单化

使用特权

评论回复
5
mb4555| | 2013-5-20 13:44 | 只看该作者
不能只看【CJNE  A,#0CH,Jump1000  】这一句,
必须配合【JC    multiple】

使用特权

评论回复
6
airwill| | 2013-5-20 16:03 | 只看该作者
                  CJNE  A,#0CH,Jump1000
Jump1000:          JC    multiple

我来说说.
这里看似 CJNE 没有起作用.
其实 CJNE 是执行比较的. 其结果会影响几个标志位.
这里的目的是比较大小, 而并非是相等.
由于 mcs51 没有 CMP 指令, 所以只能使用这条指令的这个方式来比较了.

使用特权

评论回复
7
kaly_liu| | 2013-5-20 16:33 | 只看该作者
JB    ACC.7,multiple 判断@R0是否是负数。
如果是负数,跳到multiple,否则继续执行。

CJNE  A,#0CH,Jump1000:
JC    multiple:
这两条指令,比较该数据是否小于#0CH
如果小于12,就执行multiple。

使用特权

评论回复
8
midplum|  楼主 | 2013-6-16 23:27 | 只看该作者
非常多谢各位的解析。
这段代码的作用是@R0@R0+1是负数或者@R0<#0cH则(@R0@R0+1)*10.我不明白的是@R0<#0cH这个条件比较是一个上限比较,但是@R0@R0+1是作为一个整形数,为什么@R0+1不参与比较?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:在几十年前,美国用特简陋的计算机把阿波罗发射上了月球,而现在你们随便一人的手机运算能力都比那台计算机强大,而你们却用它来打小鸟切水果.

14

主题

42

帖子

0

粉丝