【ARM】ARM汇编程序设计(二)
发布日期:2021-06-29 20:47:52 浏览次数:2 分类:技术文章

本文共 7269 字,大约阅读时间需要 24 分钟。

00. 目录

文章目录

01. mla指令

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r1, #10    mov r2, #20    mov r3, #30    @r1 = r1 * r2 + r3    mla r1, r1, r2, r3    bl printf        mov r0, #0    pop {pc}

02. umull指令

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r3, #3    mov r4, #5    umull r1, r2, r3, r4        bl printf        mov r0, #0    pop {pc}

03. umlal指令

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r1, #1    mov r2, #0    mov r3, #3    mov r4, #5    umlal r1, r2, r3, r4        bl printf        mov r0, #0    pop {pc}

04. smull指令

.section .rodata    .align 2.LC0:    .string "val = %d %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r1, #1    mov r2, #0    mov r3, #3    mov r4, #5    smull r1, r2, r3, r4        bl printf        mov r0, #0    pop {pc}

05. smlal指令

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r1, #1    mov r2, #0    mov r3, #3    mov r4, #5    smlal r1, r2, r3, r4        bl printf        mov r0, #0    pop {pc}

06. adc指令

程序示例:

.section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r1, #2    mvn r2, #0    mov r3, #10    mov r4, #20	@会设置C位    add r1, r1, r2    adc r1, r3, r4    bl printf        mov r0, #0    pop {pc}

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r3, #10    mov r4, #20    adc r1, r3, r4    bl printf        mov r0, #0    pop {pc}

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r1, #0    msr cpsr, r1    mov r3, #10    mov r4, #20    adc r1, r3, r4    bl printf        mov r0, #0    pop {pc}

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC0    mov r1, #0    msr cpsr, r1    mov r1, #-1    mov r2, #3    adds r1, r1, r2    mov r3, #10    mov r4, #20    adc r1, r3, r4    bl printf        mov r0, #0    pop {pc}

07. sbc指令

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n".LC1:    .string "cpsr = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mrs r1, cpsr    mvn r1, #0    msr cpsr, r1        ldr r0, =.LC1    mrs r1, cpsr    bl printf    mov r3, #10    mov r4, #20    sbc r1, r4, r3    ldr r0, =.LC0    bl printf            mov r0, #0    pop {pc}

08. mrs指令

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n".LC1:    .string "cpsr = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC1    mrs r1, cpsr    bl printf    mov r3, #10    mov r4, #20    adc r1, r3, r4    ldr r0, =.LC0    bl printf            mov r0, #0    pop {pc}

09. msr指令

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n".LC1:    .string "cpsr = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    ldr r0, =.LC1    mrs r1, cpsr    bic r1, r1, #(1 << 29)    msr cpsr, r1    mov r3, #10    mov r4, #20    adc r1, r3, r4    ldr r0, =.LC0    bl printf            mov r0, #0    pop {pc}

程序示例

.section .rodata    .align 2.LC0:    .string "val = %d\n".LC1:    .string "cpsr = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mrs r1, cpsr    mvn r1, #0    msr cpsr, r1        ldr r0, =.LC1    mrs r1, cpsr    bl printf    mov r3, #10    mov r4, #20    adc r1, r3, r4    ldr r0, =.LC0    bl printf            mov r0, #0    pop {pc}

10. 综合应用一

程序示例

@r1 = 100*230-(236&(1<<7))+(157|(1<<17))-(123^456);    .section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}           @100 * 230    mov r3, #100    mov r4, #230    mul r1, r3, r4    mov r2, #236    and r2, r2, #(1 << 7)    sub r1, r1, r2    mov r2, #157    orr r2, r2, #(1 << 17)    add r1, r1, r2    mov r2, #123    mov r3, #456    eor r2, r2, r3        sub r1, r1, r2    ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

11. 综合应用二

程序示例

@ r1 = 255 把r1的第4位清0,第15位置一;    .section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0xff    bic r2, r2, #(1 << 4)    orr r1, r2, #(1 << 15)           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

12. 综合应用三

程序示例

@r1 = 255 只把r1的第4位和第7位清0;    .section .rodata    .align 2.LC0:    .string "val = %d\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0xff    bic r1, r2, #(1 << 4 | 1 << 7)           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

13. 综合应用四

程序示例

@ r1 = 0x3456 把r1的第4到第10位清0,其他位不变;    .section .rodata    .align 2.LC0:    .string "val = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0x3400    add r2, r2, #0x56    bic r1, r2, #(0x7f << 4)           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

14. 综合应用五

程序示例

@r1 = 0x3456 把r1的第4到第10位置1,其他位不变;    .section .rodata    .align 2.LC0:    .string "val = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0x3400    add r2, r2, #0x56    orr r1, r2, #(0x7f << 4)           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

15. 综合应用六

程序示例

@r1 = 0x3456 把r1的第4到第10位设成0b1001110,其他位不变;    .section .rodata    .align 2.LC0:    .string "val = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0x3400    add r2, r2, #0x56    bic r1, r2, #(0x7f << 4)    orr r1, r1, #(0b1001110 << 4)           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

16. 综合应用七

程序示例

@r1 = 0x3456 把r1的第4到第10位取反,其他位不变;    .section .rodata    .align 2.LC0:    .string "val = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0x3400    add r2, r2, #0x56    eor r1, r2, #(0x7f << 4)           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

17. 综合应用八

@r1 = 0x3456 取出r1的第4到第10位的值;    .section .rodata    .align 2.LC0:    .string "val = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0x3400    add r2, r2, #0x56    and r1, r2, #(0x7f << 4)    mov r1, r1,  LSR #4           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

18. 综合应用九

@ r1 = 0x3458把r1中最后的1清除,其他位保持不变;    .section .rodata    .align 2.LC0:    .string "val = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0x3400    add r2, r2, #0x58    sub r3, r2, #1    and r1, r2, r3           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

19. 综合应用十

@r1 = 0x3458 把r1中倒数二个的1清除,其他位保持不变;    .section .rodata    .align 2.LC0:    .string "val = %p\n"    .section .text    .align 2    .global mainmain:    push {lr}    mov r2, #0x3400    add r2, r2, #0x58    sub r3, r2, #1    and r1, r2, r3    sub r2, r1, #1    and r1, r1, r2           ldr r0, =.LC0    bl printf    mov r0, #0    pop {pc}

20. 附录

转载地址:https://dengjin.blog.csdn.net/article/details/106864039 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Libevent】Ubuntu安装libevent报错问题解决
下一篇:【ARM】ARM汇编程序设计(一)

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月08日 16时50分22秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

弘辽科技:新电商掌门人:陈磊、蒋凡、徐雷「掰手腕」 2019-04-30
弘辽科技:新手前期如何开网店? 2019-04-30
弘辽科技:一件代发什么商品最容易赚钱?怎么做优化? 2019-04-30
弘辽科技:新手前期如何开网店? 2019-04-30
弘辽科技:市值仅次京东、直追百度,这家韩国巨头什么来头? 2019-04-30
弘辽科技:现在怎么做淘宝赚钱?有什么办法或者方案用淘宝赚钱? 2019-04-30
弘辽科技:拼多多店铺星级多久更新一次?如何提升? 2019-04-30
弘辽科技:拼多多店铺星级有用吗?什么是星级? 2019-04-30
弘辽科技:拼多多客单价怎么算?如何提高? 2019-04-30
弘辽科技:拼多多商品详情图怎么做?有什么开店技巧? 2019-04-30
弘辽科技:618收官战报:直播电商强势入场,国潮成消费新趋势 2019-04-30
弘辽科技:宝妈适合做什么?适合宝妈的25个副业 2019-04-30
弘辽科技:老店新开没有自然流量怎么办? 2019-04-30
弘辽科技:拼多多小额收款多久到账?有些什么限制呢? 2019-04-30
弘辽科技:上班同时还能开什么店?上班做副业项目 2019-04-30
弘辽科技:徒有贵族身份,却连一分钱都没有。 2019-04-30
弘辽科技:零食市场内卷化 洽洽的功守道 2019-04-30
弘辽科技:什么行业适合夫妻店?适合夫妻开的店 2019-04-30
弘辽科技:淘宝保险保证金怎么开通?它和消保保证金有什么区别? 2019-04-30
弘辽科技:淘宝开店后怎么经营?步骤有哪些? 2019-04-30