汇编的小练习

    ;求两个数的最大值,并将最大值放与R0寄存器
    
    AREA MAX,CODE,READONLY
    ENTRY
START
    MOV R1,#0x16
    MOV R2,#0x17
    
    CMP R1,R2
    MOVMI R0,R2
    MOVPL R0,R1
    END


;循环实现数的递减,即每次减1。最终结果为0时退出循环。

    AREA MAX,CODE,READONLY
    ENTRY
START    
    MOV R0,#10
LOOP
    SUBS R0,R0,#1
    BNE LOOP
    END


    AREA MAX,CODE,READONLY
    ENTRY
gcd
    CMP R0,R1
    BEQ End
    BLT Less
    SUB R0,R0,R1
    BAL End
Less
    SUB R1,R1,R0
End


; 功能:实现两个寄存器相加

            AREA    Example2,CODE,READONLY    ; 声明代码段Example2
            ENTRY                     ; 标识程序入口
            CODE32                            ; 声明32位ARM指令
START     LDR        R0,=0x3fff0000         ; 设置累加值的存储地址
            MOV        R1,#0
            MOV R2,#0
            MOV R3,#100
LOOP        ADDS R2,R2,R3              ; R2=R2+R3
            ADDS R1,R1,#1 ; R1=R1+1
            CMP R1,#10 ; 判断R1是否等于10
            BNE     LOOP                 ; 跳转到LOOP
            STR R2,[R0] ; 将累加值存储到0x3fff0000地址中
            NOP ;为观察存储地址中的数据
            END                                 


; 功能:使用多寄存器传送指令进行数据复制
            AREA    Example5,CODE,READONLY    
            ENTRY    
MAIN        LDR        R0,=SrcData        ; 设置源数据地址
            LDR        R1,=DstData        ; 设置目标地址
            LDMIA    R0,{R2-R9}        ; 加载32字节(即8个字)数据到寄存器R2~R9
            STMIA    R1,{R2-R9}        ; 存储寄存器R2~R9到目标地址
            B        .
                
            AREA Example5_dat, DATA, READWRITE
SrcData     DCD 0, 1, 2, 3, 4, 5, 6, 7
DstData     SPACE    32

            END


作者: fcdd_linux   发布时间: 2010-12-01