|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实验目的:
8 _$ K% P6 z1 W) g' B: M$ ?7 @ c# t2 l掌握ARM异常处理过程。2 D2 o/ {) [4 L/ ~4 L- p" \
理解SWI程序的结构。
% a6 l: @! A3 k ~4 {掌握从应用程序中调用SWI异常的方法。0 c; f& r5 d, t, R/ w' a
; A8 A7 p8 _" D0 J M实验一:使用SWI异常设计字符串输出程序
( e; _- e# f/ h! u) H本实验利用SWI异常输出字符串“hello world!”,采用ARMualtor方式调试,选用ARM7作为目标处理器。7 t- n3 d, w0 w( S# \8 B( u
| 序号 | 执行指令 | 指令执行后的变化情况 | | | 寄存器 | 存储空间 | | | R0 | R1 | R2 | R3 | SP | LR | PC | 0xB000 | 0xCFFC | 0xCFF8 | 0xCFF4 | 0xCFF0 | 0xCFEC | | 0 | ---- | | | | | | | | | | | | | | | 1 | | | | | | | | | | | | | | | | 2 | | | | | | | | | | | | | | | | 3 | | | | | | | | | | | | | | | | 4 | | | | | | | | | | | | | | | | 5 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | / X+ n, Y; Z4 J( n, ]8 ~: x
- |; Z+ k/ o/ ?$ z! D& F& a6 ?SYS_WRITEC EQU &3
. r- J' ` ^ T# f: A. Y1 S& m9 W+ p
AREA STR_OUT,CODE,READONLY
6 O2 |. {. m( q" e( j5 HENTRY
: u e( U, R% I9 DSTART7 U2 W8 W5 t5 h: Y( i* |: P
MOV SP,#0xD0003 S- i3 m; b% x6 \# l
MOV R1,#0xB000
# w+ N0 J6 b' x$ j2 j- FADR R2,TEXT
$ i- X1 u, \9 |; v# LBL STROUT& N' [! T6 U9 F P
MOV R0,#0x18
! I* a! R3 Y9 @0 ?LDR R1,=0x20026
& M+ w. Z, p! ~SWI 0x123456 ;semihost 软中断调用3 `4 d, h+ T$ X1 s
% ^: m9 G/ |+ |% `STROUT
$ C- W$ k7 m! _: L& S4 P/ mSTMFD SP!,{R0-R3,LR}; F- h& |( ~' @$ `" ^
CHROUT" T8 q* M; k7 L! @: I/ E, O( U
LDRB R3,[R2],#1/ F, O! j; J: x) |: ~$ q
CMP R3,#0
: R6 T$ P8 t+ i9 L) kSTR R3,[R1]
! t1 J4 {3 D- H: qMOV R0,#SYS_WRITEC; }3 S5 m( w0 |5 a: Q
SWINE 0x123456
& T P: [% J1 sBNE CHROUT
9 M0 m1 \! f7 _1 v+ i* f- pLDMFD SP!,{R0-R3,PC}' n, C; V, t2 p3 i. D( @
3 W7 s$ `4 i$ c+ A) e
LTORG" Q) _4 H4 c# U# w3 x9 v
TEXT DCB "Hello World!",0x0a,0x0d,0x0 N$ {0 f4 ?( E* x/ I8 _
END
& x$ a4 s1 D5 Y* _
+ k+ x( w( x/ ~! o/ s9 l# E
8 r7 l. m8 J% h* n
- f( d5 I! ]0 }9 L8 k
7 ~% B3 p. R# b$ h5 j( d& P
* X; X8 w# M. T3 } I g9 d实验二:设计SWI异常处理程序(ARM9)5 M# w0 |& Z6 |, d3 `7 P, I
本实验设计的SWI异常处理程序分为两级:第一级SWI异常处理程序获得SWI的功能号,由汇编程序实现;第二级SWI异常处理程序完成具体的SWI异常操作,由c程序实现。
% q$ w0 e3 p% e$ a- y: d阅读程序,画出程序间调用的结构图。
# p, B+ t6 w! p+ I |
|