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

Posted 北漂程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了智能小车35:从汇编指令bne聊起相关的知识,希望对你有一定的参考价值。

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

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聊起的主要内容,如果未能解决你的问题,请参考以下文章

arm 汇编 指令看不太懂,高手解释下

arm汇编指令速记

以太坊 - 深入理解智能合约汇编指令

arm指令bne.w改成b,即无条件跳转

汇编实验二 用机器指令和汇编指令编程

汇编语言 第一章 基础知识