搜索
bottom↓
回复: 6

对SWI指令不明白

[复制链接]

出0入0汤圆

发表于 2010-12-27 10:20:52 | 显示全部楼层 |阅读模式
用的是ZLG的MagicARM2200实验箱  其中有一个实验是地址重映射的实验2.13  用C编的程序很好理解  但是其汇编语言程序就搞不明白了,请高手指点为盼!
文 件 名:main.S
; 功    能:将存储器重映射到片内RAM(0x40000000~0x4000003F)
; 说    明:更改0x40000000~0x4000003F的内容。观察0x00000000~0x0000003F地址上的
;           数据有何变化。
程序如下:前面是容易懂的,但是后面从“; 修改中断向量-----END 就不明白了.”  这里面的SWI  0x123456 指令在本程序中到底起的什么作用?
MEMMAP           EQU           0xE01FC040

                        EXPORT  MAIN
                        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,[R0]
                       
                        ; 修改中断向量
                        LDR                R0,=0x40000028                        ; 修改SWI中断向量,使其指向HALT
                        LDR                R1,=HALT       
                        STR                R1,[R0]
                       
                        ; 运行SWI中断
                        SWI                0x123456
LOOP        B       LOOP                     
                       
HALT                NOP                       
                        B                HALT

                        END

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-12-27 10:30:32 | 显示全部楼层
SWI 好像是软件陷阱中断。
调用SWI这条指令就是说CPU接受到一个中断,然后CPU跳到中断程序去执行

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

出0入0汤圆

发表于 2010-12-27 10:32:00 | 显示全部楼层
SWI 强行触发这个中断,就跟其他硬件触发中断一样的道理。楼主多用用百度搜吧,SWI在很多指令集中都有

出0入0汤圆

发表于 2010-12-27 10:34:19 | 显示全部楼层
嗯,如LS所说,另外SWI中断是有中断号的,可以通过中断号的不同来区分不同的SWI中断,中断号包含在SWI指令中,需要自己提取出来

出0入0汤圆

发表于 2010-12-27 16:35:21 | 显示全部楼层
软中断,执行后跳转到地址0x00000008.
之后的处理估计要到Reset.s里面找了。

出0入0汤圆

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

出0入0汤圆

 楼主| 发表于 2010-12-29 20:14:26 | 显示全部楼层
已经明白了  呵呵
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 22:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表