yzhkpli 发表于 2025-1-8 18:51:44

陈桂友老师的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单片机是大端模式。
大端模式,是指数据的高位保存在内存的低地址中,而数据的低位保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放

yzhkpli 发表于 2025-1-9 11:35:40

陈老师貌似有一个口误
教程中的第二位,其实是从右向左数第三位。



$NOMOD51$INCLUDE (STC8H.H)       ORG0000H       LJMPMAIN       ORG0200HMAIN:       MOVSP,#80H       CLR2AHLOOP:       LJMPLOOP       END 先把25H设置为34,会变成30把25H设置为3F,会变成3B。00111011

页: [1]
查看完整版本: 陈桂友老师的stc8H教程学习笔记之汇编篇