对SWI指令不明白
用的是ZLG的MagicARM2200实验箱其中有一个实验是地址重映射的实验2.13用C编的程序很好理解但是其汇编语言程序就搞不明白了,请高手指点为盼!文 件 名:main.S
; 功 能:将存储器重映射到片内RAM(0x40000000~0x4000003F)
; 说 明:更改0x40000000~0x4000003F的内容。观察0x00000000~0x0000003F地址上的
; 数据有何变化。
程序如下:前面是容易懂的,但是后面从“; 修改中断向量-----END 就不明白了.”这里面的SWI0x123456 指令在本程序中到底起的什么作用?
MEMMAP EQU 0xE01FC040
EXPORTMAIN
IMPORT Reset
CODE32
AREA MainCode,CODE,READONLY
MAIN NOP
; REMAP操作
REMAPS MOV R0,#0x40000000 ; 复制中断向量代码
LDR R1,=Reset
LDMIA R1!,{R2-R9}
STMIA R0!,{R2-R9}
LDMIA R1!,{R2-R9}
STMIA R0!,{R2-R9}
LDR R0,=MEMMAP ; REMAP操作
MOV R1,#0x02
STR R1,
; 修改中断向量
LDR R0,=0x40000028 ; 修改SWI中断向量,使其指向HALT
LDR R1,=HALT
STR R1,
; 运行SWI中断
SWI 0x123456
LOOP B LOOP
HALT NOP
B HALT
END SWI 好像是软件陷阱中断。
调用SWI这条指令就是说CPU接受到一个中断,然后CPU跳到中断程序去执行
这个中断就叫做软件中断。 SWI 强行触发这个中断,就跟其他硬件触发中断一样的道理。楼主多用用百度搜吧,SWI在很多指令集中都有 嗯,如LS所说,另外SWI中断是有中断号的,可以通过中断号的不同来区分不同的SWI中断,中断号包含在SWI指令中,需要自己提取出来 软中断,执行后跳转到地址0x00000008.
之后的处理估计要到Reset.s里面找了。 谢谢回复!衷心地感谢!现在的问题是:就上面这个具体的程序,到底SWI起的什么作用?程序是怎么执行的?题目要求:将存储器重映射到片内RAM(0x40000000~0x4000003F) 更改0x40000000~0x4000003F的内容。观察0x00000000~0x0000003F地址上的数据有何变化。怎么更改?在哪里更改? 已经明白了呵呵
页:
[1]