您尚未登录。

楼主 # 2021-06-04 18:37:14

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 841
积分: 721

为什么mcu的第一条指令必须是跳转指令

今天研究了一下avr的汇编指令,发现第一条指令必须要是rjmp或其他跳转(跳转到主程序),否则程序就跑飞了。把主程序放到falsh的$0000000位置也不行。
cpu不是从flash的0位置顺序读取指令执行吗?  为什么第一条必须是跳转才行?

正确代码:

.org 000000
	rjmp start
	nop
start:
	ldi r16,0xFF
	out DDRB,r16
	sbi PORTB,PB0
Loop:

	rjmp loop

错误:

start:
	ldi r16,0xFF
	out DDRB,r16
	sbi PORTB,PB0
Loop:

	rjmp loop

离线

#1 2021-06-04 21:01:03

abigpad
会员
注册时间: 2020-04-11
已发帖子: 2
积分: 1

Re: 为什么mcu的第一条指令必须是跳转指令

看来楼主不是学电子的出身,学过51的,应该都知道,前面几个地址被中断占了。

最近编辑记录 abigpad (2021-06-04 21:01:31)

离线

楼主 #2 2021-06-04 21:45:52

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 841
积分: 721

Re: 为什么mcu的第一条指令必须是跳转指令

abigpad 说:

看来楼主不是学电子的出身,学过51的,应该都知道,前面几个地址被中断占了。

发帖前确实忘了中断了,但是看到文档,试验了一下在0地址把中断关掉,还是跑飞
Screenshot214515.png

离线

楼主 #3 2021-06-04 21:50:27

kekemuyu
会员
注册时间: 2018-12-13
已发帖子: 841
积分: 721

Re: 为什么mcu的第一条指令必须是跳转指令

算了,还是正常的跳过中断吧:

.cseg 
.org $0
        rjmp start
.org $000A
start:
	sbi DDRB,DDB0
	sbi PORTB,PB0
Loop:
	rjmp loop

离线

#4 2021-06-05 00:54:50

novice
会员
注册时间: 2019-07-26
已发帖子: 112
积分: 93

Re: 为什么mcu的第一条指令必须是跳转指令

有些跳转是为了让CPU刷新内部指令队列,跳一下它就会重新译码指令了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn