【汇编语言】ARM汇编三:数据处理指令

目录

一、数据处理指令

二、示例:编程实现使用32bit的ARM处理器实现两个128位的数据的加法运算

1、代码实现

2、实验现象


一、数据处理指令

.text				@表示当前段为代码段
.global _start		@声明_start为全局符号
_start:				@汇编程序的入口
	@ 数据搬移指令
		
	MOV R1, #1
	R1 = 1
	MOV R2, R1
	R2 = R1
	
	MVN R0, #0xFF 
	R0 = ~0xFF
		
	@ 立即数
	@ 立即数的本质就是包含在指令当中的数,属于指令的一部分
	@ 立即数的优点:取指的时候就可以将其读取到CPU,不用单独去内存读取,速度快
	@ 立即数的缺点:不能是任意的32位的数字,有局限性
	@ MOV R0, #0x12345678
	MOV R0, #0x12
	
	@ 编译器替换
	MOV R0, #0xFFFFFFFF
	
	@ 数据运算指令基本格式
	@	《操作码》《目标寄存器》《第一操作寄存器》《第二操作数》
	@		操作码			指示执行哪种运算
	@		目标寄存器:	存储运算结果
	@		第一操作寄存器:第一个参与运算的数据(只能是寄存器)
	@		第二操作数:	第二个参与运算的数据(可以是寄存器或立即数)
	
	@ 加法指令
	MOV R2, #5
	MOV R3, #3
	ADD R1, R2, R3
	R1 = R2 + R3
	ADD R1, R2, #5
	R1 = R2 + 5
	
	@ 减法指令
	SUB R1, R2, R3
	R1 = R2 - R3
	SUB R1, R2, #3
	R1 = R2 - 3
	
	@ 逆向减法指令
	RSB R1, R2, #3
	R1 = 3 - R2
	
	@ 乘法指令
	MUL R1, R2, R3
	R1 = R2 * R3
	@ 乘法指令只能是两个寄存器相乘
	
	@ 按位与指令
	AND R1, R2, R3
	R1 = R2 & R3
	
	@ 按位或指令
	ORR R1, R2, R3
	R1 = R2 | R3
	
	@ 按位异或指令
	EOR R1, R2, R3
	R1 = R2 ^ R3
	
	@ 左移指令
	LSL R1, R2, R3
	R1 = (R2 << R3)
	
	@ 右移指令
	LSR R1, R2, R3
	R1 = (R2 >> R3)
	
	@ 位清零指令
	MOV R2, #0xFF
	BIC R1, R2, #0x0F
	@ 第二操作数中的哪一位为1,就将第一操作寄存器的中哪一位清零,然后将结果写入目标寄存器
	
	@ 格式扩展
	MOV R2, #3
	MOV R1, R2, LSL #1
	R1 = (R2 << 1)
	
	@ 数据运算指令对条件位(N、Z、C、V)的影响
	@ 默认情况下数据运算不会对条件位产生影响,在指令后加后缀”S“才可以影响
	
	@ 带进位的加法指令
	@ 两个64位的数据做加法运算
	@ 第一个数的低32位放在R1
	@ 第一个数的高32位放在R2
	@ 第二个数的低32位放在R3
	@ 第二个数的高32位放在R4
	@ 运算结果的低32位放在R5
	@ 运算结果的高32位放在R6
	
	@ 第一个数
	@ 0x00000001 FFFFFFFF
	@ 第二个数
	@ 0x00000002 00000005
	
	MOV R1, #0xFFFFFFFF
	MOV R2, #0x00000001
	MOV R3, #0x00000005
	MOV R4, #0x00000002
	ADDS R5, R1, R3 @记录当前的进位
	ADC  R6, R2, R4 @相加的同时加上之前的进位
	@ 本质:R6 = R2 + R4 + 'C'
	
	@ 带借位的减法指令
	
	@ 第一个数
	@ 0x00000002 00000001
	@ 第二个数
	@ 0x00000001 00000005
	
	MOV R1, #0x00000001
	MOV R2, #0x00000002
	MOV R3, #0x00000005
	MOV R4, #0x00000001
	SUBS R5, R1, R3
	SBC  R6, R2, R4
	@ 本质:R6 = R2 - R4 - '!C'

	
STOP:	
		B STOP		@死循环,防止程序跑飞	

.end				@汇编程序的结束

二、示例:编程实现使用32bit的ARM处理器实现两个128位的数据的加法运算

注:第一个数的bit[31:0]、bit[63:32]、bit[95:64]、bit[127:96]分别存储在R1、R2、R3、R4寄存器
第二个数的bit[31:0]、bit[63:32]、bit[95:64]、bit[127:96]分别存储在R5、R6、R7、R8寄存器
运算结果的bit[31:0]、bit[63:32]、bit[95:64]、bit[127:96]分别存储在R9、R10、R11、R12寄存器

1、代码实现

.text                
.global _start      
_start:  
MOV R1, #0xFFFFFFFF
MOV R2, #0x00000001
MOV R3, #0xFFFFFFFF
MOV R4, #0x00000001

MOV R5, #0x00000001
MOV R6, #0x00000001
MOV R7, #0x00000001
MOV R8, #0x00000001

ADDS R9, R1, R5   @记录当前的进位
ADCS R10, R2, R6  @相加的同时加上之前的进位的同时,记录这次相加后的进位
ADCS R11, R3, R7
ADCS R12, R4, R8

stop:                @死循环,防止程序跑飞
    B stop

.end                 @汇编程序的结束

2、实验现象

0x00000001 FFFFFFFF 00000001 FFFFFFFF +

0x00000001 00000001 00000001 00000001 =

0x00000003 00000000 00000003 00000000

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ARM汇编语言官方手册是一本非常重要的资料,它涵盖了ARM处理器的指令集,以及如何使用这些指令来编写汇编程序的详细信息。这本手册编写精细,内容丰富,官方出版,准确性和权威性都得到了保证。 ARM汇编语言在嵌入式系统和嵌入式软件领域被广泛应用,它的指令集非常丰富和灵活,能够满足各种不同的应用需求。这本手册将介绍ARM处理器的各种指令指令集体系结构,包括数据处理、位操作、循环和分支等。 在手册中,读者可以找到有关寄存器、内存分配和异常处理等方面的详细信息。还会介绍如何使用汇编语言编写基本程序,例如打印字符串、读写据等。此外,手册还提供了一些示例程序和实践建议,帮助读者更好地理解和运用ARM汇编语言。 对于嵌入式系统和软件开发从业人员来说,熟练掌握ARM汇编语言非常重要。手册可以为他们提供详细的指导和参考,帮助他们轻松掌握ARM汇编语言的基础知识和高级应用。尽管这本手册对初学者来说可能有点繁琐和复杂,但它对学习ARM汇编语言的人来说是必不可少的资料。 ### 回答2: ARM汇编语言官方手册是ARM公司提供的一份权威指南,旨在帮助开发者掌握ARM汇编语言的基本原理和使用方式。 该手册主要由两个部分组成:ARM体系结构参考手册和ARM汇编器参考手册。其中,ARM体系结构参考手册描述了ARM体系结构的基本概念、指令集和寄存器等重要组成部分,而ARM汇编器参考手册则详细介绍了如何使用ARM汇编语言编写程序,并提供了各种汇编指令的使用方法和参说明。 使用该手册前,需要对计算机体系结构和汇编语言有一定的了解。对于初学者来说,可以通过阅读相关的教材和在线教程来提高自己的基础知识水平。 需要注意的是,由于ARM体系结构存在多个版本,部分指令的功能和使用方法可能会有所不同。因此,在编写程序时,需要根据所使用的ARM芯片和体系结构版本来选择合适的指令和参。 总之,ARM汇编语言官方手册是ARM开发者必备的参考资料之一,它提供了大量的信息和指导,帮助开发者快速掌握ARM汇编语言的基本原理和技巧,从而更好地开发各种ARM芯片应用。 ### 回答3: ARM汇编语言官方手册(ARM Assembly Language Reference Manual)是ARM公司发布的一份权威指南,介绍了ARM汇编语言的语法、指令集和编程方法。该手册适用于所有的ARM处理器架构,包括ARMv7和ARMv8。 该手册主要分为以下几部分: 1. 汇编语言基础:介绍了ARM汇编语言的基本语法、据类型、寄存器、寻址方式和指令格式等内容。 2. 指令集手册:列举了所有可用的ARM汇编指令和伪指令,并详细介绍了它们的作用、语法和操作符等信息。 3. 示例程序:提供了一些常见的ARM汇编语言程序示例,帮助读者更好地理解和应用手册中的知识。 4. 参考文献:包括了在手册中提到的参考资料和网址,方便读者进一步了解ARM处理器和汇编语言的相关知识。 总体来说,ARM汇编语言官方手册非常全面且易于理解,对想要学习和应用ARM汇编语言的开发者和研究人员都非常有用。但需要注意的是,ARM汇编语言相对于其他高级编程语言而言,学习难度较高,需要一定的计算机底层知识和代码经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值