【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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.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