tjjwm 发表于 2010-11-14 09:38:14

请教大虾,帮我看一个小的汇编程序,谢谢了!!!

SYS_WRITEC        EQU                &3
                        AREA        STR_OUT,CODE,READONLY
                        ENTRY
START                           MOV                SP,#0xD000
                        MOV                R1,#0xB000
                        ADR                R2,TEXT
                        BL                STROUT
                        MOV                R0,#0x18
                        LDR                R1,=0x20026
                        SWI                0x123456
                       
STROUT               
                        STMFD        SP!,{R0-R3,LR}
CHROUT                LDRB        R3,,#1
                        CMP                R3,#0
                        STR                R3,
                        MOV                R0,#SYS_WRITEC
                        SWINE        0x123456
                        BNE                CHROUT
                        LDMFD        SP!,{R0-R3,PC}
                       
                        LTORG
TEXT                DCB                "Hello World!",0x0a,0x0d,0x0
                        END
现在我不明白这句 SWINE    0x123456是怎么执行的,这句第一次执行完的结果是在AXD的Console中显示“H“字符,为什么啊?
ps:START段中的SWI 0x123456的作用是什么啊,执行的话的结果是什么啊?

bluelucky 发表于 2010-11-14 15:50:08

表示R3不为0时执行SWI指令,SWINE = SWI if not equal
SWI 0x123456表示请求编号为0x123456的系统服务,执行后会触发SVC异常
建议学习一下ARM的基础知识
页: [1]
查看完整版本: 请教大虾,帮我看一个小的汇编程序,谢谢了!!!