陈桂友老师的stc8H教程学习笔记之汇编篇
【例4-3】在40H和41H中存放1个双字节数据(即16位数据),高位字节数据在41H中,低位字节数据在40H中,试将其除以2。看了这个程序有点疑惑,如果是奇数怎么解决。没看出来是怎么解决的。
结果补全程序跑了一下,果然如果是奇数,得不到准确的半值的
$NOMOD51
$include (stc8h.h)
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
CLR C ;先将进位标志清0,为第一次移位做准备
MOV A,41H
RRC A
MOV 41H,A ;高位字节
MOV A,40H
RRC A
MOV 40H,A
END
在CLR C这行打断点,然后D:0,在40H和41H上都手动输入11 ,1111H=10进制4369.
执行完成后40H 内容88,41H内容08
0888H=10进制2184.这个是4368的一半。也就是说汇编的这个除法程序得不到小数。
另外,51单片机是大端模式。
大端模式,是指数据的高位保存在内存的低地址中,而数据的低位保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放 陈老师貌似有一个口误
教程中的第二位,其实是从右向左数第三位。
$NOMOD51$INCLUDE (STC8H.H) ORG0000H LJMPMAIN ORG0200HMAIN: MOVSP,#80H CLR2AHLOOP: LJMPLOOP END 先把25H设置为34,会变成30把25H设置为3F,会变成3B。00111011
页:
[1]