ARM 汇编初学

1、ARM指令的寻址方式

;	该程序能够体现出ARM指令的立即寻址、寄存器寻址、寄存器间接寻址、
;     基址寻址、寄存器移位寻址、多寄存器寻址等寻址方式。

		preserve8
		area wangjietest1,code,readonly
		entry
start
		mov r0,#1			;立即数寻址
		mov r1,#2

		add r2,r0,r1		;寄存器寻址

		add r3,r0,r2,lsl #1	;寄存器移位寻址

		ldr r0,[r1]         ;寄存器间接寻址

		ldr r4,[r1,#3]		;基址寻址

		ldmia r0!,{r1-r4}	; 多寄存器寻址

		end

2.add adc 和sub sbc的用法

;本实验是用ADD和ADC指令实现两个64位数的加减法运算
;比如0x7000000070000000 加上0xb0000000b0000000
	  preserve8
	  area wangjietest2,code,readonly
	  entry
      code32
start
		mov r1,#0x70000000
		mov r2,#0x70000000
  		mov r3,#0xb0000000
		mov r4,#0xb0000000
		;adds r5,r1,r3
		;adc r6,r2,r4
		sub r5,r1,r3
		sbc r6,r2,r4
		end

3.bic的用法

;本实验是将R0的第0位和第3位清零,其余位不变。编译并调试该程序
;
	  preserve8
	  area wangjietest2,code,readonly
	  entry
      code32
start
		mov r0,#0xffffffff
		bic r0,r0,#9
		end
4.数据加载和存储指令的用法

 ;ARM指令的单寄存器与多寄存器的数据加载与存储指令的使用
	
		area wangjietest3 ,code,readonly
		entry
start   	  ;单寄存器	操作
              ldr r0,=0x70010				   ;将r0寄存器中赋值为0x70010
              ;前索引
			  ldr r1,[r0,#0x04]				   ;前索引----将r0寄存器r0加上偏移量 4作为寻址的地址值,然后将r0的地址(0)赋值给r1 
			  str r0,[r1,#-0x02]			   ;----------将r0存储在r1中,然后r1减去偏移量2
			   ;自动索引
			  ldr r2,[r1,#0x02]!			   ;自动索引--将r1加上偏移量2,!然后实现寄存器的更新
		    	;后索引
			  ldr r3,[r2],#0x04				   ;后索引----将r2指向的地址数据赋值给r3 ,r2加上偏移量4
			  str r3,[r4],#-0x02			   ;----------将r3的值存储在r4中,r4再减去偏移量2

			  ldrb r5,[r1,#0x04]               ;将存储器地址为r1+4的字节数读入到r5中
			  strb r5,[r1,#2]                  ;将寄存器r5的字节数写入到r1+2的地址上

			  ldrh r6,[r1,#4]				   ;将存储器地址为r1+4的半字节数据读入寄存器r6中
			  strh r0,[r2]					   ;将寄存器r0的半字节数据写入到r2位地址的存储器中
			 ;多寄存器操作	
		    	ldr r6,=0x90010
				ldr r7,=0x90020
				ldr r8,=0x90030
				ldr r9,=0x90040
				ldmia r0!,{r6-r9}				; 以r0的值	0x90010为基址取出一个32位数据0x00000001
				                                ; 放入到r6然后r0的值加4继续取出r0,放入到r7中。。。
				ldmib r1!,{r6-r9}				;ib,表示每次传送前地址值增加

		   stmib r2!,{r6-r9}				;是指将r6-r9的值保存到r2指向的存储单元中(R2自动加1)

			  ;堆栈操作
			  mov sp,r0						 ;建栈
			  stmfd sp!,{r2-r5,r6}		     ;入栈
			  ldmfd sp!,{r1-r4}				 ;出
			  b start

			  end






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员Android

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值