特别是PUSHW/POPW, 处理SP是原子操作,这点AVR就做不到,每次函数调用/返回要高效得多
avr的建立栈帧和返回:
    push r29
    push r28
    in r28,__SP_L__
    in r29,__SP_H__
    sbiw r28, 12
    in __tmp_reg__,__SREG__
    cli
    out __SP_H__,r29
    out __SREG__,__tmp_reg__
    out __SP_L__,r28
        (函数体)
    adiw r28,12
    in __tmp_reg__,__SREG__
    cli
    out __SP_H__,r29
    out __SREG__,__tmp_reg__
    out __SP_L__,r28
    pop r28
    pop r29
    ret
stm8的:
    subw    sp,#8
    ldw x, #10
    ldw (4, sp), x
        (函数体)
    addw    sp,#8
    ret
简洁太多了
【 在 tom6bj (tom) 的大作中提到: 】
得通用寄存器是32位、基本的加法之类指令是32位吧
然而stm8只有A寄存器是8位, X, Y, SP都是16位, ADDW/SUBW/LDW/PUSHW之类指令都可以处理16位数据, st也没把它吹成16位mcu
【 在 alicesas (alice) 的大作中提到: 】
什么叫32位?
--
修改:tom6bj FROM 88.218.92.*
FROM 88.218.92.*