码迷,mamicode.com
首页 > 其他好文 > 详细

智能小车35:从汇编指令bne聊起

时间:2017-10-04 23:58:11      阅读:439      评论:0      收藏:0      [点我收藏+]

标签:执行   isa   main   语句   人工智能   dog   中继   控制   x3400   

今天学习韦东山老师的《存储管理器实验》这节课时出现了以下汇编代码,由于没有系统的学习过汇编指令,下面的代码真是不懂。

1:
ldr r4, [r1],#4 @ 从Steppingstone读取4字节的数据,并让源地址加4
str r4, [r2],#4 @ 将此4字节的数据复制到SDRAM中,并让目地地址加4
cmp r1, r3 @ 判断是否完成:源地址等于Steppingstone的未地址?
bne 1b @ 若没有复制完,继续
mov pc, lr @ 返回

其中最困惑的就是这个bne指令,从来没见过,老师说这个是循环跳转用的。但我不明白的是我们写java或c时都是for之类,循环体都是包在一个范围内的,这个东东没有什么范围。经过查找学习一些资料,终于明白了。

bne是一个跳转指令,它来源于b指令。b指令可以通过使用文档查到如下用法:

技术分享
而这个cond中就有一个值是ne,最后组成了bne指令,下图是所有的cond:
技术分享
再来说一下1b是什么意思:

b这条语句里的b是backward的意思,既然有backward就有forward,所有还有bne 1f语句。1就是段名为1的段。

 

再结合cmp指令,就是说r1寄存器的地址与r3寄存器的地址不相等时就跳到1段执行,循环就是这样产生的。

 

最后回顾下这个存储管理器讲的什么内容,我理解就是如何用上sdram(相当于硬盘)。下面的代码已经标出这4步。

_start:
bl disable_watch_dog @ 1.关闭WATCHDOG,否则CPU会不断重启
bl memsetup @ 2.设置存储控制器(设置BANK地址,以便让cpu能用上sdram)
bl copy_steppingstone_to_sdram @ 3.复制代码到SDRAM中
ldr pc, =on_sdram @ 4.跳到SDRAM中继续执行
on_sdram:
ldr sp, =0x34000000 @ 设置堆栈
bl main
halt_loop:
b halt_loop

另外今天看了电影《变形金刚5-最后的骑式》,里面的小机器人吉娃娃好牛逼,希望有一天能做一个。这需要懂嵌入式与人工智能才行。

技术分享

而我的机器人目前只能做到这样...

技术分享

智能小车35:从汇编指令bne聊起

标签:执行   isa   main   语句   人工智能   dog   中继   控制   x3400   

原文地址:http://www.cnblogs.com/chengzhong/p/7627669.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!