码农的世界007写作日更007不写就出局

ARM体系结构和汇编指令

2019-06-22  本文已影响80人  赵敏是程序媛

最近工作要用ARM体系结构和汇编指令,在此边学边写。希望对同样有需求的人有所帮助。

先列出我的学习资料路径,供大家一起学习:

《ARM入门》

https://www.bilibili.com/video/av22389159/?p=2 系列课程,共37讲

《ARM体系结构和汇编》

https://www.bilibili.com/video/av28646164/?spm_id_from=333.788.videocard.5

说明,这个系列的视频在汇编方面讲的很详细,推荐学习

https://www.bilibili.com/video/av53306639?from=search&seid=15588178575541602823

说明,上面这是视频是个老外讲的,纯视频,无字幕,看着累。自己选择是否学习吧。

下面我们来一一学习ARM体系的汇编指令吧。

假设R0-R7寄存器初始值都是0。

MOV,比如MOV R0,#0X1    ;即把#0X1的值赋值给R0寄存器。其中分号是汇编语言的注释。此时R0寄存器的值就是0X00000001。

ADD,比如ADD R2,R0,R1  ;R0+R1=>R2,即1+0=1。此时R2寄存器的值就是1。

ADDS、ADC,这两个也代表加法,与ADD的不同是,这两个符号代表带进位的加法。即带CPRS进位的。

SUB,比如SUB R3,R2,R1 ;R2-R1=>R3,即1-0=1。此时R3寄存器的值就是1。

SUBS,这各也代表减法,与SUB不同的是,这代表带进位的减法。

MVN,比如MVN R0,#0X0 ;把值1取反,即0XFFFFFFFF。此时R0计算器的值就是0XFFFFFFFF。

B,代表打断点,比如B .  ;代表在当前位置打断点,用于逐步调试。

AND,比如AND R3,R2,R1  ;R1与R2=>R3,即R1寄存器的值与R2寄存器的值做位与运算后,把值赋给R3寄存器。

ORR,比如R6,R1,R2 ;R1或R2=>R6,即R1寄存器的值与R2寄存器的值做位或运算后,把值赋给R6寄存器。

CMP,比如CMP R3,R1  ;比较R3和R1寄存器(实际执行R3-R1)的值,并把值赋给CPRS标志位。

BIC,比如BIC R0,R0,#0X1 ;把R0寄存器的最低位置位0,并把结果保存在R0寄存器。比如R0寄存器中原来保存的数值为3,即0011,则把低位置位0,即0010,把0010保存到R0,即2。

STR,比如

MVN R5,#0X0  ;此时R5寄存器的值是0XFFFFFFFF

MOV R6,#0X9000 

STR R5,[R6] ;STR是用来把寄存器的值写入内存地址(寄存器-->内存)。比如这里的,R6寄存器存储的是地址0X9000,比如此时内存地址0X9000的地址的值是00 00 00 00,那执行这句汇编指令后,会把R5寄存器的值0XFFFFFFFF存入内存地址0X9000地址当中,即内存地址0X9000这个位置存入FF FF FF FF。

LDR R7, [R6] ;LDR是用来把内存地址内的值调入寄存器(内存-->寄存器)。比如这里的,把内存地址0X9000的值FF FF FF FF写入寄存器R7,执行这条指令之后,寄存器R7的值就由0X00000000变为了0XFFFFFFFF。

最后贴上ARM架构下CPU内部结构图,希望更清晰的理解。

ARM体系结构和汇编指令

最后推荐一款好用的ARM开发工具,ads1.2,这是一个32位的工具,安装的时候请注意不要安装在默认的(X64目录)。

祝你学习顺利。


程序员是一种时时刻刻需要学习的职业,不学习何以自称“程序媛”呢。

哈哈,边学边写,写出来证明自己学懂了,不然我很喜欢自欺欺人。

我在007不出局践行写作,写7年。你敢来吗?

ARM体系结构和汇编指令
上一篇 下一篇

猜你喜欢

热点阅读