| « | January 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
| 公告 |
| 暂无公告... |
| Blog信息 |
|
blog名称: 日志总数:6 评论数量:30 留言数量:0 访问次数:72357 建立时间:2006年6月11日 |

| |
|
ADS ARM的C编译器是怎样在ARM和Thumb之间切换 软件技术
JGabriel 发表于 2006/6/12 19:29:00 |
| 今天遇到个问题,不知ADS ARM的C编译器是怎样在ARM和Thumb之间切换的。先上网搜一圈再说。500)this.width=500'>
资料收集:
==============================================================
从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换:
- 第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令;
- 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。
当ARM微处理器执行32位的ARM指令集时,工作在ARM状态;当ARM微处理器执行16位的Thumb指令集时,工作在Thumb状态。在程序的执行过程中,微处理器可以随时在两种工作状态之间切换,并且,处理器工作状态的转变并不影响处理器的工作模式和相应寄存器中的内容。
状态切换方法:
ARM指令集和Thumb指令集均有切换处理器状态的指令,并可在两种工作状态之间切换,但ARM微处理器在开始执行代码时,应该处于ARM状态。
进入Thumb状态:当操作数寄存器的状态位(位0)为1时,可以采用执行BX指令的方法,使微处理器从ARM状态切换到Thumb状态。此外,当处理器处于Thumb状态时发生异常(如IRQ、FIQ、Undef、Abort、SWI等),则异常处理返回时,自动切换到Thumb状态。
进入ARM状态:当操作数寄存器的状态位为0时,执行BX指令时可以使微处理器从Thumb状态切换到ARM状态。此外,在处理器进行异常处理时,把PC指针放入异常模式链接寄存器中,并从异常向量地址开始执行程序,也可以使处理器切换到ARM状态。
===========================================================
问题: 我用三星的ARM芯片S3C44B0。将Bank6、Bank7的SDRAM工作在16位模式下。请教斑竹和各位大虾,是不是在写Boot程序时,必须用Thumb指令来编写?回答: BOOT程序的第一句必须使用ARM指令;你可以马上切换到THUMB指令,但这样做完全没有必要;整个BOOT程序全部使用ARM指令,很少见到用THUMB指令的。SDRAM工作在16位模式下,一样可以使用ARM指令,即使是8位或32位,也是就说指令不取决于存储区的访问宽度。 选择ARM还是THUMB唯一的判断标准是你是不是需要节省一部分指令空间,THUMB指令编写的程序比ARM指令可以节省5%~30%. 建议你全部使用ARM指令编程 =============================================================
You can manually add a mapping symbol to mark ARM or Thumb state code bylinking the following assembly language at the start of your image. If you areusing the ARM assembler:CODE32 ; or CODE16 for ThumbAREA ||.text||, CODE, READONLYNOPEND |
|
|
回复:ADS ARM的C编译器是怎样在ARM和Thumb之间切换 软件技术
passer(游客)发表评论于2006/11/18 17:26:03 |
| 其实对寄存器的状态位操作,是取的传入值的最后一位于状态位做一个&操作 |
|
» 1 »
|