4. 算术运算指令,ADD/ADC,SUB/SBC ,MUL

4.         算术运算指令,ADD/ADC,SUB/SBC ,MUL

n         ADD加法指令

ADD R0,R1,R2; R0=R1+R2

ADD R0,R1,#3 ;R0=R1+3

n         ADC带进位加法指令,即除了加两个数以外,还要把CPSR的C值也要带进来

u              通常用于大数(超过32Bit整数)相加,这时单用ADD不能处理,必须折成两步,其中一步用ADC.

u              以下是做64Bit的加法

ADDS R0,R1,R2; R0=R1+R2,ADDS中S表示把进位结果写入CPSR

ADC R5,R3,R4 ;R5=R3+R4+C

n         SUB减法指令

SUB R0,R1,R2; R0=R1-R2

SUB R0,R1,#3 ;R0=R1-3

n         SBC带进位减法指令,即除了加两个数以外,还要把CPSR的C值也要带进来,类似ADC

u              以下是做64Bit的减法

SUBS R0,R1,R2; R0=R1-R2,SUBS中S表示把进位结果写入CPSR

SBC R5,R3,R4 ;R5=R3-R4-C

n         MUL 乘法指令

MUL R0,R1,R2; R0=R1*R2

MUL R0,R1,#3 ;R0=R1*3

实验三 ARM指令系统 熟悉指令的用法 为一个汇编语言源程序建一个工程 把ARM指令系统中的指令 加入到一个或几个汇编语言源程序文件中, 汇编,调试; 在正确(编译通过)文件的基础上,每加一条指令做一次make, 以保证每一步都是在正确的基础上做的。 用单步执行的方式调试,观察相关的寄存器的内容存储单元的内容, 以验证程序执行的正确性。 指令的功能在程序中用注释的形式写出。 杂项指令不要求 1. 算术运算,包括比较类指令 2. 逻辑运算,包括测试类指令 3. 数据传送 MOV,MVN,LDR,STR,LDM,STM,包括堆栈 4. 跳转指令 5.指令 LDR 加载32位立即数,加载存储器地址或特殊功能寄存器的地址 注: AND R0,R0,0x01 ;立即数前缺# 改为: AND R0,R0,#0x01 MOV指令的例子中, MOV PC,LR ;这条指令应该作为一个子程序的最后一条指令 其中算术逻辑运算类指令要完成的任务: 实验习题: 1. 两个64位数相加、减,比如:0x5678 9012 3456 7890, 0x1234 5678 9012 3456 2. 用比较指令CMP判断R0的值是否等于100,并观察CPSR 3. 两个数相乘,分别设计结果在32位内结果超出32位两种情况 4. 用AND指令对寄存器R0的0~7位清零,其他位保持不变 5. 用ORR指令对寄存器R0的28~31位置1,其他位保持不变 6. 用EOR指令对寄存器R0清零,对R1按位取反 7. 用BIC指令对寄存器R0的0~7位清零,其他位保持不变 8. 写出5种以上具体的寄存器清零方式指令 EOR R0,R0,R0 BIC R0,R0,0xFFFFFFFF MOV R0,#0x0 AND R0,R0,0x0 SUB R0,R0,R0 9. 用测试指令TST测试R0的第5位是否为0,并观察CPSR 写出实验总结
最新发布
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值