找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2900|回复: 7
打印 上一主题 下一主题
收起左侧

为什么用Keil4演示++、--运算时,软件运行结果与实际结果对不上,求大神帮看看!

[复制链接]
跳转到指定楼层
楼主

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:366893 发表于 2018-7-7 16:54 | 只看该作者
只有i的值异常,其他值都正常,i正常因该是5,结果却是10,你改变一下i的初始值看看,显示结果是什么

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:366940 发表于 2018-7-7 17:11 | 只看该作者
只有i的值异常
回复

使用道具 举报

地板
ID:366807 发表于 2018-7-7 18:57 | 只看该作者
hayden 发表于 2018-7-7 16:54
只有i的值异常,其他值都正常,i正常因该是5,结果却是10,你改变一下i的初始值看看,显示结果是什么

z的值也不对,将i的值改为5,结果i和z的值也是不对,后面将"z=j+k;"改为"z=i+k;"去运行结果,结果是正确的。不知道是软件本身的问题还是电脑系统的问题。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:366807 发表于 2018-7-7 19:01 | 只看该作者
将z=j+k;改为z=i+k;后,运行结果是正确的。

Keil 4运算试验结果.jpg (24.04 KB, 下载次数: 119)

修改后的运行结果

修改后的运行结果

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:284488 发表于 2018-7-7 19:21 | 只看该作者
应该是跟 i++ 及 ++i 有关,一个是先做(++i),一个是后做(i++),可试看看。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

7#
ID:390775 发表于 2018-9-4 16:17 | 只看该作者
只有  i和z的值不对   不过  在使用 ++ -- 时  需要考虑到  编译器自身的处理机制  建议你   用VS吧   
因为  早期的  编译器   对 ++  --  不太一致    但是都是正确的   
加油
回复

使用道具 举报

8#
ID:387733 发表于 2018-9-4 17:13 | 只看该作者
     2: {
     3:         unsigned int i=3,j,k,z;
C:0x0003    7F03     MOV      R7,#0x03   ;    R7 = i
C:0x0005    7E00     MOV      R6,#0x00
     4:         j=(++i)+5;
C:0x0007    0F       INC      R7
C:0x0008    EF       MOV      A,R7
C:0x0009    7001     JNZ      C:000C
C:0x000B    0E       INC      R6
C:0x000C    2405     ADD      A,#0x05
C:0x000E    FD       MOV      R5,A
C:0x000F    E4       CLR      A
C:0x0010    3E       ADDC     A,R6
C:0x0011    FC       MOV      R4,A
     5:         k=(i++)+6;
C:0x0012    EF       MOV      A,R7
C:0x0013    2406     ADD      A,#0x06
C:0x0015    FF       MOV      R7,A              ; R7 = k
C:0x0016    E4       CLR      A
C:0x0017    3E       ADDC     A,R6
C:0x0018    FE       MOV      R6,A
     6:         z=j+k;
     7:         
C:0x0019    ED       MOV      A,R5
C:0x001A    2F       ADD      A,R7
C:0x001B    F509     MOV      0x09,A
C:0x001D    EC       MOV      A,R4
C:0x001E    3E       ADDC     A,R6
C:0x001F    F508     MOV      0x08,A
     8: }
C:0x0021    22       RET      


因为是局部变量,所以开始使用R7作为i变量,到第三句时,i完成使命,增加了k变量,此时R7充当了k的角色,所以它的值与k相同。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表