JYN0000 发表于 2010-12-27 10:20:52

对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

zf12862177 发表于 2010-12-27 10:30:32

SWI 好像是软件陷阱中断。
调用SWI这条指令就是说CPU接受到一个中断,然后CPU跳到中断程序去执行

这个中断就叫做软件中断。

zf12862177 发表于 2010-12-27 10:32:00

SWI 强行触发这个中断,就跟其他硬件触发中断一样的道理。楼主多用用百度搜吧,SWI在很多指令集中都有

luo496724812 发表于 2010-12-27 10:34:19

嗯,如LS所说,另外SWI中断是有中断号的,可以通过中断号的不同来区分不同的SWI中断,中断号包含在SWI指令中,需要自己提取出来

wljs012 发表于 2010-12-27 16:35:21

软中断,执行后跳转到地址0x00000008.
之后的处理估计要到Reset.s里面找了。

JYN0000 发表于 2010-12-28 08:29:53

谢谢回复!衷心地感谢!现在的问题是:就上面这个具体的程序,到底SWI起的什么作用?程序是怎么执行的?题目要求:将存储器重映射到片内RAM(0x40000000~0x4000003F)   更改0x40000000~0x4000003F的内容。观察0x00000000~0x0000003F地址上的数据有何变化。怎么更改?在哪里更改?

JYN0000 发表于 2010-12-29 20:14:26

已经明白了呵呵
页: [1]
查看完整版本: 对SWI指令不明白