Chinaunix首页 | 论坛 | 博客
  • 博客访问: 643084
  • 博文数量: 151
  • 博客积分: 3498
  • 博客等级: 中校
  • 技术积分: 1570
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-28 18:10
文章分类

全部博文(151)

文章存档

2014年(12)

2013年(17)

2012年(17)

2011年(5)

2010年(12)

2009年(2)

2007年(26)

2006年(22)

2005年(38)

分类: LINUX

2007-09-09 19:05:43

  ARM 学习笔记1-开始汇编

目标:
  1 熟悉ADS编译器和编辑环境
  2 熟悉AXD如何调试汇编代码
  3 熟悉几条汇编指令
  4 熟悉一个汇编程序的基本元素
  5 在AXD中使用ARMulate仿真如何确认结果

以下是以上目标的展开!
1 熟悉ADS编译器和编辑环境
  使用了ADS1.2,很简单的界面,没有什么环境配置,已经包含有汇编编译器armasm;
   C/C++语言编译器tcc;连结器armlink等等.
   建立一个工程后,既可以写汇编代码,也可以写C/C++代码.不过编辑器有点丑陋.

   开始第一个汇编程序,出现了以下几个问题:
     1)Error : All63E:Unknown opcode
       代码如下: AREA Block, CODE, READONLY
       解决:编译器太弱了,原来是是指令不能在第一列.按了一个TAB后,好了.
            但是标号(label)可以放在第一列.
     2)Error : All63E:Unknown opcode
       代码如下:     num   EQU  20
       解决:编译器太弱了,我已经空了一列了,还有错.
            但是放在第一列后问题解决,所以发现伪操作等不能空.


2 熟悉AXD如何调试汇编代码
  可以通过ADS启动调试,也可以在AXD中打开文件调试.
   调试和GDB一样,很方便.
   我调试了一段代码,是COPY STRING的,因为无法输出到console,所以就
   确认目标地址的内存中的值是不是和源地址的值一样.
   在调试的过程中最好:
     1)打开source code
     2)打开disasmble code
     3)打开processor register
     4)如果需要还可以观察memory windows

  3 熟悉几条汇编指令
    1) LDR r0,=src
       这是一条伪指令,读的是src的地址到r0中.
    2)STMFD sp!,{r4-r11}
      用于调用函数保存栈.
      把REGISTER LIST的内容保存到连续的内存sp中,并且sp地址会更新.
      FD:FULL DESCENDANT,所以对于BASE ADDRESS sp来说,保存一个值,则地址-4.
      向下增长吗.
    3)LDMIA r0!,{r4-r11}
       把r0 为BASE ADDRESS内存的VALUE装载到REGISTER LIST中,并且r0地址会更新.
       IA:INCREMENT AFTER,所以对于BASE ADDRESS r0来说,取出一个值,则地址+4.
    4)STMIA r1!,{r4-r11}
       把REGISTER LIST的VALUE保存到r1为BASE ADDRESS内存中,并且r1地址会更新.
       IA:INCREMENT AFTER,所以对于BASE ADDRESS r1来说,保存一个值,则地址+4.
    5)LDR r3,[r0],#4
      这是一条伪指令,把r0地址的内容读到r3中,并且r0的地址更新为r0+4.
    6)STR r3,[r1],#4
      这是一条伪指令,把r3的内容保存到r1的地址中,并且r1的地址更新为r0+4.
    7)SWI 0x123456
      软件中断指令.

4 熟悉一个汇编程序的基本元素
     1)AREA部分
     2)ENTRY部分
     3)BODY部分
     4)END结束
    
   
5 在AXD中使用ARMulate仿真如何确认结果
     1)CONSOLE输出消息,好象C语言比较适合
     2)MEMORY地址处的内容是否变化,这是基本!

文件:init.rar
大小:0KB
下载:下载




阅读(3649) | 评论(4) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2009-08-08 16:23:01

谢谢,刚开始接触,原来指令不能放在第一列

chinaunix网友2009-04-22 10:50:03

very good keep go on

chinaunix网友2008-08-12 11:01:50

期待继续。

chinaunix网友2008-08-12 10:59:43

TKS.