文章目录
  1. 1. ADS开发环境实验

东京,上野

ADS开发环境实验

IDE:ARM Developer Suite v1.2

  1. 新建工程
    新建工程
  1. 添加程序源文件到工程
  1. 编写代码
    1
    	AREA	takethat,CODE,READONLY	;/*声明一段名为takethat的CODE*/
    	ENTRY				                ;/*指定函数的入口*/
    START
    	MOV		R0,#0xFF		        ;/*把#0xFF传送到R0*/		
    	MOV		R1,#0xEF000000		    ;/*把#0XEF000000传送到R1*/
    	MOV		R2,#0x2F000000		    ;/*把#0x2F000000传送到R2*/	
    	MVN		R3,#0Xff			        ;/*把#0xFF取反后传送到R3*/
    	ADD		R4,R2,R1		        ;/*把R2加R1的值传送到R4*/
    	ADDS	R5,R2,R1	                ;/*把R2加R1的值传送R5,s表示会影响cpsr*/
    	ADCS	R6,R2,R1	            ;/*把R2加R1的值,再加上carry的值后传送到R6.
    					                ;s表示值会影响cpsr*/
    	SUB		R4,R2,R1		            ;/R2减R1的值传送到R4*/
    	SUBS	R4,R2,R1		            ;/*R2减R1的值传送到R4, s表示影响cpsr*/
    	RSB		R5,R2,R1		            ;/*R1减R2的值传送到R5*/
    	RSBS	R5,R2,R1		            ;/*R1减R2的值后传送到R5,
    						                ; s表示会影响cpsr*/
    	SBC		R6,R1,R2		            ;/*R1减R2的值再减去!CARRY
    						                ;后传送到R6*/
    	RSC		R7,R1,R2		            ;/*R2减R1的值再减去!CARRY						                            ;后传送到R7*/
    stop
    	BL		stop	
    	END					            ;/*程序结束*/


代码解读:
AREA
语法

  • AREA 段名 属性1 属性2 
    作用
  • 用于定义一个代码或数据段
  • 短命若以数字开头,则段名需要&nbps;|  括起来,如 |1takethat|
  • 属性字段表示该代码段(或数据段)的相关属性,多个属性用都好分隔。
    **常见属性如下:
    CODE
    >定义代码段
    DATA
    >定义数据段
    READONLY
    >指定本段为只读,代码段默认为READONLY
    READWRITE
    >指定本段为可读可写,数据段的默认为READWRITE
    COMMON
    >定义一个通用的段,不包含任何的用户和数据。各源文件中同名的COMMON段共享一段存储单元.
    
1
AREA	takethat,CODE,READONLY	;/*声明一段名为takethat的CODE*/

ENTRY
语法格式:
ENTRY
作用
ENTRY伪指令用于指定汇编程序的入口点。在一个完整的汇编程序中至少要有一个ENTRY(也可以有多个,当有多个ENTRY时,程序的真正入口点由链接器指定),但在一个源文件里最多只能有一个ENTRY(可以没有)。

START
作用:START: 作为汇编程序的一个标号,定义了程序的入口,既程序从START:处开始执行。
若程序的第一条指令就是程序的入口,则START可以缺省。

其中 START 可以用其他字符代替,但是对应的END START中的START也必须用同字符代替。

若第一个START缺省,则END START中的 START 也必须去掉。

MOV
语法格式

MOV source, destination

source 和 destination 的值可以是内存地址,存储在内存中的数据值,指令语句中定义的数据值,或者寄存器。
应该注意的是:

  1. 目的操作数与源操作数类型要一致;
  2. 汇编还提供许多mov变体,如:movzx,movsx等等。

作用
传送指令MOV(move)把一个字节、字或双字操作数从原位置传送到目的未知,源操作数的内容不变。

该操作属于复制性质,不属于搬家性质。

MVN:传送取反值

与MOV不同之处是在传送之前位被反转了,所以把一个被取反的值传送到一个寄存器中

指令 说明 示例
sub 2个操作对象相减 sub ax,9 给ax减9,之后的结果赋值给ax
add 2个操作对象相加 ADD R4,R2,R1 把R2加R1的值传送到R4
文章目录
  1. 1. ADS开发环境实验