《tiny6410裸机程序》第三章:基础汇编test1

一、CodeWarrior for RVDS建立工程

1.File->New->Project

选ARM EXecutable Image;Project name填test1.mcp,Location填C:\work\6410\test1\

二、CodeWarrior for RVDS添加源文件

test1.mcp窗口的空白处点击右键,选择Add Files、选test1.s。

三、CodeWarrior for RVDS的DebugRel Setting设置

Edit->DebugRel Setting

1.Target(目标)设置

Target Settings:Linker选择ARM RealView Linker;Post-Linker选择ARM RealViews FromELF。

2.Language Settings(编译语言)设置

RealView Assembler(汇编)->Target:Architecture or选ARM1176JZF-S。

RealView Compiler(C语言)->Target:Architecture or Processor选ARM1176JZF-S。

3.Linker(链接)设置

RealView Linker->Output:

Linkertype选Simple;Simple image中RO Base填0x50200000.

RealView FromELF->Output:

Output format选Plain binary;Output file name选test1.bin。

4.Debugger(调试器)设置

RealView Debugger->Choose Debugger:Choose a Debugger选AXD(ARM eXtended Debugger)。

RealView Runner->Choose Debugger:Choose a Debugger选AXD(ARM eXtended Debugger)。

四、CodeWarrior for RVDS编译

Project->make

五、CodeWarrior for RVDS调出AXD调试器

Project->Dwbug

六、AXD分析

1.说明:AXD需要的是C:\work\6410\test1\Debug\test1.axf;

2.AXD打开寄存器和内存显示

Processor Views->Rigister;

Processor Views->Memory。

3.看看源程序test.s

COUNT		EQU		0x50003100	; 宏定义COUNT,其值是0x50003100	
			
		AREA	start,CODE,READONLY	; 声明代码段 
		ENTRY				; 标识程序入口
		CODE32				; 声明32位ARM指令

START		
	LDR		R1,=COUNT	; 存储器访问指令:将立即数COUNT值存储到R1寄存器
	MOV		R0,#0		; 存储器访问指令:将立即数0装载到寄存器R0
	STR		R0,[R1]		; 存储器访问指令:LDR的逆操作,将R0寄存器中的值存储到R1所指的内存地址
						
LOOP   		
	LDR		R1,=COUNT	; 存储器访问指令:将COUNT值存储到R1寄存器
	LDR		R0,[R1]		; 存储器访问指令:STR的逆操作,将R1所指内存地址中的值存储到R0寄存器
	ADD		R0,R0,#1	; 算数逻辑运算指令:将R0中的值加1后重新赋给R0
	STR		R0,[R1]		; 存储器访问指令:LDR的逆操作,将R0寄存器中的值存储到R1所指的内存地址
	B		LOOP
	END

说明:

ARM时RISC结构,数据从内存到CPU之间的移动只能使用LDR/STR指令来完成;

MOV指令只是在寄存器之间的移动数据/把立即数移动到寄存器。

编译和连接器目录:

C:\Program Files\ARMRVDS\RVCT\Programs\2.2\349\win_32-pentium\

===================================================================================================================================

如果不用RVDS的集成开发环境,以下是Window平台armcc编译器在DOS下的Makefile:

all:	
	armasm -o test.o test.s --debug --keep --cpu=ARM1176JZF-S
	armlink -o test.axf test.o --ro_base=0x50200000
	fromelf -o test.bin --bin test.axf
clean:	
	del *.o *.axf *.bin
完后在AXD下,load该文件test.axf即可。

你可能感兴趣的:(《tiny6410裸机程序》第三章:基础汇编test1)