现在的位置: 首页 > 综合 > 正文

汇编指令的执行过程

2013年05月08日 ⁄ 综合 ⁄ 共 1572字 ⁄ 字号 评论关闭
;#*********************************************************************************************
;# NAME:	ARM_code2.s																		 *
;# Author: 	WUHAN R&D Center,Embest																	 *
;# Desc:	ARM instruction examples														 *
;#          Example for Condition Code														 *
;# History:	shw.He 2005.02.22																 *
;#*********************************************************************************************

;/*------------------------------------------------------------------------------------------*/
;/*	 								code								 				    */
;/*------------------------------------------------------------------------------------------*/
		
		area start,code,readwrite
		entry
		code32
num equ	2									;/*  Number of entries in jump table */
		export Reset_Handler
Reset_Handler
		mov		r0, #0						;/*  set up the three parameters */
		mov		r1, #3
		mov		r2, #2
		bl		arithfunc					;/*  call the function */
;/*死循环*/
stop
		b		stop


;# ********************************************************************************************
;# * According R0 valude to execute the code													 *
;# ********************************************************************************************
arithfunc									;/*  label the function */
		cmp		r0, #num					;/*  Treat function code as unsigned integer */
		bhs		DoAdd						;/*  If code is >=2 then do operation 0. */

		adr		r3, JumpTable				;/*  Load address of jump table */
		ldr		pc, [r3,r0,LSL#2]			;/*  Jump to the appropriate routine */
                                                                         ;/*pc = r3 + r0<<2*/
JumpTable
		dcd		DoAdd                                ;其占领4个字节,其中存储的是DoAdd对应的地址
		dcd		DoSub                                ;其占领4个字节,其中存储的是DoSub对应的地址

DoAdd
		add		r0, r1, r2					;/*  Operation 0, >1 */
		bx		lr 							;/*  Return */


DoSub
		sub		r0, r1, r2					;/*  Operation 1 */
		bx		lr							;/*  Return */

		end									;/*  mark the end of this file */

执行bl  arithfunc之前

执行之后:

 

其将pc的值保存在r14(LR)之中。

 

 

 ------------------------------------------------------------坚持不懈,追求卓越--------------------------------------------------------------------------------

抱歉!评论已关闭.