[STM8] 香主,删除吧

[复制链接]
6502|36
 楼主| CC2530 发表于 2011-6-29 10:55 | 显示全部楼层 |阅读模式
本帖最后由 CC2530 于 2011-6-30 10:00 编辑

香主,删除吧

评分

参与人数 1威望 +1 收起 理由
a061210883 + 1

查看全部评分

香水城 发表于 2011-6-29 10:57 | 显示全部楼层
1)为什么要直接读取CC?
2)BMCC指令的作用是什么?
3)16位加减没有进位标志,这确实是一个不方便、不尽合理的地方。有空儿看看。
 楼主| CC2530 发表于 2011-6-29 13:44 | 显示全部楼层
1)为什么要直接读取CC?
香水城 发表于 2011-6-29 10:57


读取CC主要用在临界段上。
一个简单例子:
uint8 CriticalReadByte(const volatile uint8 * pdata)
{
    uint8 result;
    CRITICAL()
    {
        result=pdata[0];
    }
    return result;
}

汇编代码:
STM8:
CriticalReadByte:
        PUSH      CC
        POP       A
        AND       A, #0x28
        LD        S:?b0, A
        SIM
//   27     {
//   28         result=pdata[0];
        LD        A, (X)
        LD        S:?b1, A
//   29     }
        LD        A, S:?b0
        PUSH      CC
        POP       A
        AND       A, #0xffffffffffffffd7
        OR        A, S:?b0
        PUSH      A
        POP       CC
//   30     return result;
        LD        A, S:?b1
        RET
//   31 }
//   32

AVR:
        RSEG CODE:CODE:NOROOT(1)
//   23 uint8 CriticalReadByte(const volatile uint8 * pdata)
CriticalReadByte:
//   24 {
//   25     uint8 result;
//   26     CRITICAL()
        IN      R18, 0x3F
        CLI
//   27     {
//   28         result=pdata[0];
        MOVW    R31:R30, R17:R16
        LD      R16, Z
//   29     }
        OUT     0x3F, R18
//   30     return result;
        RET
 楼主| CC2530 发表于 2011-6-29 13:47 | 显示全部楼层
本帖最后由 CC2530 于 2011-6-29 13:48 编辑
1)
2)BMCC指令的作用是什么?
香水城 发表于 2011-6-29 10:57

应该叫BCMC。

BCMC是相对亦BCCM来说的。
BCCM:BIT Copy carry to memory
BCMC:BIT Copy  memory to carry
 楼主| CC2530 发表于 2011-6-29 13:51 | 显示全部楼层
3)16位加减没有进位标志,这确实是一个不方便、不尽合理的地方。有空儿看看。
香水城 发表于 2011-6-29 10:57


如果16位加减有进位标志,两条指令就能进行32位加减。
如果16位加减没有进位标志,32位加减将会增加很多指令。
 楼主| CC2530 发表于 2011-6-29 13:52 | 显示全部楼层
4.X,Y访问RAM指令,不能自增,自减。
-------------------------------------------------------
这也是STM8一个比较大的缺陷。
xwj 发表于 2011-6-29 13:56 | 显示全部楼层
没用过,路过随便问问:

STM8不是8位的吗?
CPU有“16位加减”指令?
而不是宏指令或者组合指令?
 楼主| CC2530 发表于 2011-6-29 14:04 | 显示全部楼层
没用过,路过随便问问:

STM8不是8位的吗?
CPU有“16位加减”指令?
而不是宏指令或者组合指令?
xwj 发表于 2011-6-29 13:56


8位机也一样有16位运算指令,只是一般比较少,比较简单。
比如51里面的INC DPTR,AVR的ADIW,SBIW。

STM816位运算指令相对比较多。
后面带W的都是16位运算指令。
Image0301.JPG
香水城 发表于 2011-6-29 14:08 | 显示全部楼层
哦,关于临界段的问题,LZ提出了一种使用CC的办法,但也可以用其它办法实现,比如EXG和EXGW指令,而且功能更强、更灵活。你说呢?
香水城 发表于 2011-6-29 14:18 | 显示全部楼层
关于BCMC指令的功能: BIT Copy  memory to carry

BTJT指令具有相同的功能,只不过没有用BCMC这个助记符。
香水城 发表于 2011-6-29 14:23 | 显示全部楼层
16位加减指令,请看这2页,红线圈出的部分是你说的进位标志吗:
STM8_ADDW_Instruction.GIF
STM8_SUBW_Instruction.GIF
 楼主| CC2530 发表于 2011-6-29 14:26 | 显示全部楼层
BTJT指令具有相同的功能,只不过没有用BCMC这个助记符。
---------------------------------------------------------------------
虽然是实现相同功能,但开销不一样。

BCCM单周期指令。

BTJT本质上是跳转,指代码令更长,执行时间也更长。
而且跳转与不跳转,执行时间不一样(IAR软件仿真的结果,未在STM8硬件上测试)。
而且,对编译器来说,也不会用BTJT来读取BIT到C.
香水城 发表于 2011-6-29 14:31 | 显示全部楼层
关于最后增加的:“X,Y访问RAM指令,不能自增,自减”

我认为这不是大问题,因为有INCW X、INCW Y和DECW X、DECW Y,这几条指令都只有2个周期的执行时间。
 楼主| CC2530 发表于 2011-6-29 14:32 | 显示全部楼层
多谢香水城回复。

INCW木有。
Image0302.JPG
香水城 发表于 2011-6-29 14:33 | 显示全部楼层
BTJT指令具有相同的功能,只不过没有用BCMC这个助记符。
---------------------------------------------------------------------
虽然是实现相同功能,但开销不一样。

BCCM单周期指令。

BTJT本质上是跳转,指代 ...
CC2530 发表于 2011-6-29 14:26


我认为设计一个指令系统,不可能照顾到所有功能,对于较少使用的功能,执行时间稍微长一点,不会影响大局。
香水城 发表于 2011-6-29 14:36 | 显示全部楼层
多谢香水城回复。

INCW木有。
CC2530 发表于 2011-6-29 14:32


INC和DEC也没有设置C标志,但你可以用V标志和Z标志判断是否溢出。

况且,如果确实要C标志,可以使用ADDW X, #1实现INCW的功能。
香水城 发表于 2011-6-29 14:45 | 显示全部楼层
:handshake对STM8的指令系统研究这么深,难道LZ是做编译器的?  什么时候有产品推出呀?
 楼主| CC2530 发表于 2011-6-29 14:51 | 显示全部楼层
本帖最后由 CC2530 于 2011-6-29 14:54 编辑
INC和DEC也没有设置C标志,但你可以用V标志和Z标志判断是否溢出。

况且,如果确实要C标志,可以使用ADDW X, #1实现INCW的功能。
香水城 发表于 2011-6-29 14:36


多谢。
香水城 发表于 2011-6-29 14:59 | 显示全部楼层
哈哈,谢谢LZ的质疑,看起来STM8的设计还是比较合理的,:victory:
 楼主| CC2530 发表于 2011-6-29 15:07 | 显示全部楼层
本帖最后由 CC2530 于 2011-6-29 15:22 编辑
INC和DEC也没有设置C标志,但你可以用V标志和Z标志判断是否溢出。

况且,如果确实要C标志,可以使用ADDW X, #1实现INCW的功能。
香水城 发表于 2011-6-29 14:36


终于想起来了,我为什么要说16位加减没进位。
原来是16位加减无法带进位运算。
(没ADCW,SBCW指令)

还有,操作数必须是RAM才有进位,立即数无进位。
ADDW X,#1      没有进位
ADDW X,MEM   才有进位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:该死的ST,还不赶快出STM8L小FLASH片子

0

主题

262

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部