下面举一个例子,看看无符号正数是什么意思?
怎么今天上传的图片很模糊?看不清Debug中的内容?
加法算出的结果是04,为啥?本来应该是0001 0000 0100溢出啦,只剩下0000 0100啦
看看执行完的结果:
结果是需要12位数来表示,1个字节再加上4位………… 80251里实际是没有累加器A的,都是用寄存器R11来代替的
我们看看何老师的演示:
在下图的Debug中何宾老师是可以单步的:
但同样的环境,看我的(第二幅图):
我其实也是按单步执行F11,但是执行的是全速?
就像今天我遇到的第一个问题:上次的图像非常模糊,我马上换了一台计算机
问题就解决了,不过我这个Debug的单步,30天前开始发现,到现在还没解决.........+
现在也是按单步Step(F11)就不能单步:一下就执行了4行:,有时候就全部执行完......
看看e:的意思
这里这个Memory 1 我们写e:
意思是类型于8051的基本数据区,e:是在MCS-251指令集架构下,原来的基本数据区DATA,
对应到扩展的DATA区域,其实就是原来8051的内部数据区。
MOV R7,b(0x0009) 是把09存储单元的内容放到R7寄存器里去。09里保存的是5A这个数据,接着做0扩展:MOVZ WR4,R7, WR4是16位,高8位是用0填充。R7本身是8位的。下面2行同理。
特别注意这里:
这里用的16位相加指令ADD:ADD WR6,WR4,结果保存在WR6寄存器里
WR6确实保存了270(16进制就是0x0104),但是我声明的C的无符号正整数,只有8位,只和R7对应,就只把R7的内容付给0x000A ,c就只能是04 ……只能溢出了,那就会查进位cy,可是cy又=0,你不懂汇编就蒙啦。就是说你不学汇编,无符号数怎么表示,其实你不知道…….
如果在8位机,就在产生一个进位标志CY:
但是现在进位标志cy=0, 你是不是有点蒙?
?????
原因在这里:
我们现在是32位机,WR6 是正确的,不会有进位,CY是0