×
单片机 > 单片机程序设计 > 详情

ARM数据处理指令

发布时间:2020-08-27 发布时间:
|
ARM的数据处理指令只访问寄存器,是ARM指令集中唯一可以修改数据值的指令。所有的操作数都是32位,结果也是32位,被放到寄存器中。
 
寄存器传送指令
移位指令
算术运算指令
逻辑运算指令
比较指令
乘法指令
 
1.         掌握寄存器传送指令、算术运算指令,并理解标志位S的作用。
实验一:
根据提示信息完成程序并运行验证。(exp5_1_1.s)
AREA lab1,CODE,READONLY
         ENTRY
START
         MOV R0,#0x3F
         MOV R1,#0x2C
         MOV R2,#0x10
         MOV R3,#0x5
         ;(1)计算R4=R0+R1
         ;(2)计算R5=R0-R1并更新标志位
         ;(3)计算R6=R1-R0并更新标志位
         ;(4)计算R7=R2+8*R3
STOP
         B STOP
         END
 
思考题:
a)         在程序中执行
SUBS R4,R0,R1
SUBS R4,R1,R0
后,程序状态寄存器CPSR的标志位各有何变化?为什么?
b)        在程序中执行
SUB R4,R0,R1
SUB R4,R1,R0
后,程序状态寄存器CPSR的标志位各有何变化?为什么?
 
 
实验二:
编写ARM汇编程序。有两个128位数,第一个数0x00000004000000c3000000b2000000a1由高到低存放在寄存器R7~R4中,第二个数0x00000008000000c7000000b6000000a5由高到低存放在寄存器R11~R8中,实现第一个数和第二个数的相减,运算结果由高到低存放到寄存器R3~R0中。(exp5_1_5.s)
 
2.         掌握乘法指令
实验六:根据提示信息完成程序并运行验证。(exp5_1_6.s)
AREA lab3,CODE,READONLY
         ENTRY
START
         MOV R0,#0x3F
         MOV R1,#0x3D
         MOV R2,#0xFF000000
         MOV R3,#0x3FC0
        
         ;32位无符号乘法计算R0*R1,R4存结果
;32位无符号乘加计算R0*R1+R0,R5存结果
;32 位无符号乘法计算R2*R3,R6存结果
;64位无符号乘法计算R2*R3,R7存低32位,R8存高32位
STOP
         B STOP
         END
 
思考题:
在上述程序中,执行语句
MUL R6,R2,R3
UMULL R7,R8,R2,R3
SMULL R9,R10,R2,R3
后,解析个寄存器的值。
 
 
3.         掌握比较测试指令,懂得使用ARM指令的条件域来标注指令执行的条件。
实验三:
根据提示信息完成程序并运行验证。(exp)
           AREA lab1,CODE,READONLY
         ENTRY
START
         MOV R0,#0xFF
         ;反转R0的0,1位,其余位保持不变,存到R1中
         ;保留寄存器R0的0,1位,其余位清零,存到R1中
         ;比较寄存器R0和R1的值是否相等,并根据结果修改CPSR的标志位
         MOV R0,#0xFB
;测试寄存器R0中的第2位是否为1,并根据结果修改CPSR的标志位(若是,跳转到START)
         END
 
实验四:
编写简单的汇编语言程序,功能是计算1+2+3+。。。。+n的值,并把累加的结果存储到寄存器中。 (exp3_1_1)
 
4.         掌握逻辑运算指令
实验五:
将0x3FC0的第4~11位用0xDD替换,变成0x3DD0。根据提示信息完成程序并运行验证。 (exp)
              AREA lab2,CODE,READONLY
         ENTRY
START
         MOV R1,#0x3FC0
         MOV R2,#0xFF0
         MOV R3,#0xDD
         ;清除R1=0x3FC0中对应的位,使其成为0x3000
         ;通过移位,将0x3DD0与要替换的位域对齐
         ;将对应位置写入目的操作数R1
STOP
         B STOP
         END
 
思考:
在上述程序中,如果将0x3FC0替换为0xCFC0,应该如何修改程序?
关键字:ARM  数据处理指令 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法