九鼎创展论坛
标题: ARM汇编使用.doc [打印本页]
作者: armeasy 时间: 2012-7-19 11:27
标题: ARM汇编使用.doc
实验一:通过STMFD/LDMFD,MUL指令编写一个整数乘方的子程序,然后使用BL指令调用子程序计算Xn的值。
具体实验程序如下:
;***************************************************
;本程序用于计算x 的n 次方,程序中定义为9 的8 次方
;SP->R13,堆栈指针
;LR->R14,执行跳转指令后PC值会自动保存到LR中
C->R15,直接向其写入地址值即可实现在4GB空间的任意跳转
;***************************************************
x equ 3
n equ 4
area example,code,readonly
entry
code32
start ldr sp,=0x40003f00
ldr r0,=x
ldr r1,=n
bl pow ;pc=0x4000000c
halt b halt ;pc=0x40000010
pow stmfd sp!,{r1-r12,lr}
;STMFD为满地址减堆栈
;执行后SP=0x40003f00-13*4=0x40003ecc
;保护现场,即r1-r12,lr
movs r2,r1 ;if r2=0 then z=1
;else z=0
;程序中r2=r1=n=3,z=0
moveq r0,#1 ;if z=1 then r0=1
;else r0=r0
;程序中z=0,故r0值不变
beq pow_end ;if z=1 then 跳转
;else 往下执行
;程序中z=0,则往下执行
mov r1,r0
sub r2,r2,#1
pow_l1 bl do_mul ;调用乘法子函数
subs r2,r2,#1
bne pow_l1
pow_end
ldmfd sp!,{r1-r12,pc}
;LDMFD为满地址减堆栈
;执行后SP=0x40003f00
;恢复现场,即r1-r12,pc
do_mul
mul r0,r1,r0;r0=r1*r0
mov pc,lr ;返回跳转时下一条要执行的指令的堆栈
end
欢迎光临 九鼎创展论坛 (http://bbs.9tripod.com/) |
Powered by Discuz! X3.2 |