特别是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.*