zoukankan      html  css  js  c++  java
  • arm汇编几个经典例题

    这几个例题来自我们的上机实验,通过这几个例题基本上能掌握arm汇编一些最基本的操作

    arm汇编实现1-100的加法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	AREA Example1,CODE,READONLY;
    ENTRY;
    CODE32;
    START
    MOV R0,#0;总和
    MOV R1,#0;遍历数
    MOV R2,#100;至多少
    TIME
    ADDS R1,R1,#1;遍历数自加1
    ADDS R0,R0,R1;总和增加
    CMP R1,R2;判断
    BCC TIME;循环
    END;

    求一个二进制数中1的个数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    	AREA lab2,CODE,READONLY;
    ENTRY

    start
    MOV r1,#0xac
    ;10101100共4个1
    MOV r6,#0;记录1的个数
    step
    SUB r0,r1,#1;写r1-1到r0
    AND r1,r0,r1;对r1与r1-1求与
    ADD r6,r6,#1;记录数+1
    CMP r1,#0;判断是否取完
    BNE step;否则继续

    END

    求一个二进制数的数组中1的个数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    	AREA lab2,CODE,READONLY;
    ENTRY

    start
    LDR r2,=nums
    MOV r6,#0;初始化1的个数为0
    LDRB r1,[r2],#1
    step
    SUB r0,r1,#1;写r1-1到r0
    AND r1,r0,r1;对r1与r1-1求与
    ADD r6,r6,#1;记录数+1
    CMP r1,#0;判断一个数是否取完
    LDREQB r1,[r2],#1;取完则访问下一个数
    CMP r1,#0;判断是否读到最后一个数字
    BNE step
    MOV r5,r6,LSR #1;将r6最后一位移入标志C位
    MOVCS r7,#1;为1则为奇数

    AREA data,DATA,READWRITE
    nums
    ;数组
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65大专栏  arm汇编几个经典例题>
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 21
    DCB 52
    DCB 16
    DCB 65
    DCB 95
    DCB 0;

    END

    arm实现两个数字求最大公约数

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    	AREA lab3,CODE,READONLY;
    ENTRY

    start
    LDR r0,=546;初始化第一个数
    LDR r1,=999;初始化第二个数
    step
    CMP r0,r1;比较r0与r1
    SUBHI r0,r0,r1;谁大,谁被除
    SUBLO r1,r1,r0;谁大,谁被除
    BEQ over;相等则求到结果,结束
    B step;重复

    over
    B over

    END

    arm实现字符串的复制

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    	AREA lab1,CODE,READONLY;
    ENTRY

    start
    LDR r0,=chars1;传入源字符串
    LDR r1,=chars2;传入目标字符串
    step
    LDRB r2,[r0],#1;递增读取单个字符
    STRB r2,[r1],#1;递增写入单个字符
    CMP r2,#0;判断是否写到最后最后一个字符
    BNE step;否则继续复制


    AREA data,DATA,READWRITE
    chars1
    ;源字符串
    DCB "abcdefghijklmnopqrstuvwxyz"
    DCD 0;

    chars2
    ;目标字符串
    DCD 0;

    END

    arm实现冒泡法排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    	AREA lab4,CODE,READONLY;
    ENTRY

    start
    MOV r7,#7;初始化外层循环计数
    out
    LDR r0,=nums;初始化内层地址
    MOV r6,r7;利用外层初始化内层循环计数
    in
    LDRB r1,[r0];
    ADD r2,r0,#1;
    LDRB r3,[r2];
    CMP r1,r3;比较前后两个
    STRCSB r1,[r2];小的往前放
    STRCSB r3,[r0];大的往后放
    ADD r0,r0,#1;
    SUB r6,r6,#1;
    CMP r6,#2;
    BNE in;
    SUB r7,r7,#1;
    CMP r7,#2;外层循环6次
    BNE out;

    AREA data,DATA,READWRITE
    nums
    ;数组
    DCB 2
    DCB 4
    DCB 10
    DCB 8
    DCB 14
    DCB 1
    DCB 20
    DCD 0;

    END
  • 相关阅读:
    feign远程调用问题
    java8--stream
    feign业务组件远程请求 /oauth/token
    redis实现自增序列
    MySQL数据库 相关知识点
    netty
    spring的启动流程及bean的生命周期
    MethodHandleVS反射
    并发与并行
    关于注解的思考
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12375968.html
Copyright © 2011-2022 走看看