ARM体系结构和汇编指令

作者: 赵敏是程序媛 | 来源:发表于2019-06-22 10:57 被阅读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体系结构和汇编指令

    相关文章

      网友评论

        本文标题:ARM体系结构和汇编指令

        本文链接:https://www.haomeiwen.com/subject/gtymqctx.html