【ARM】ARM汇编程序设计(四) 选择结构
发布日期:2021-06-29 20:47:54
浏览次数:2
分类:技术文章
本文共 3359 字,大约阅读时间需要 11 分钟。
00. 目录
文章目录
01. if 结构一
.section .rodata .align 2.LC0: .string "i > 10\n".LC1: .string "i <= 10\n" .section .text .align 2 .global mainmain: push {lr} mov r2, #1 cmp r2, #10 ldrgt r0, =.LC0 ldrle r0, =.LC1 bl printf mov r0, #0 pop {pc}
02. if 结构二
.section .rodata .align 2.LC0: .string "i > 10\n".LC1: .string "i <= 10\n" .section .text .align 2 .global mainmain: push {lr} mov r2, #1 cmp r2, #10 bgt do1 b do2do1: ldr r0, =.LC0 bl printf b outdo2: ldr r0, =.LC1 bl printfout: mov r0, #0 pop {pc}
03. if 结构三
.section .rodata .align 2.LC0: .string "i > 10\n".LC1: .string "i < 10\n".LC2: .string "i == 10\n" .section .text .align 2 .global mainmain: push {lr} mov r2, #1 cmp r2, #10 bgt do1 blt do2 b do3do1: ldr r0, =.LC0 bl printf b outdo2: ldr r0, =.LC1 bl printf b outdo3: ldr r0, =.LC2 bl printfout: mov r0, #0 pop {pc}
04. if 结构四
if(i > 10) ... else if(i + j > 10) ... else if(j < 10) ...
.section .rodata .align 2.LC0: .string "i > 10\n".LC1: .string "i + j > 10\n".LC2: .string "j < 10\n" .section .text .align 2 .global mainmain: push {lr} mov r2, #100 mov r3, #2 cmp r2, #10 bgt do1 add r1, r2, r3 cmp r1, #10 bgt do2 cmp r3, #10 blt do3 b outdo1: ldr r0, =.LC0 bl printf b outdo2: ldr r0, =.LC1 bl printf b outdo3: ldr r0, =.LC2 bl printfout: mov r0, #0 pop {pc}
05. if 结构五
.section .rodata .align 2.LC0: .string "i > 10 && i < 20\n" .section .text .align 2 .global mainmain: push {lr} mov r2, #15 cmp r2, #10 ble out cmp r2, #20 blt do1 b outdo1: ldr r0, =.LC0 bl printfout: mov r0, #0 pop {pc}
06. switch结构
C语言代码
#includeint main(void){ int i = 10; char ch = 'a'; switch(i) { case 1: printf("val = %d \n", i); break; case 345: printf("val = %d \n", i); break; case 23: printf("val = %d \n", i); break; case 7: printf("val = %d \n", i); break; case 1234: printf("val = %d \n", i); break; case 17: printf("val = %d \n", i); break; case 10: printf("val = %d \n", i); break; } return 0;}
汇编语言代码
.section .rodata .align 2.LC0: .ascii "val = %d \012\000" .text .align 2 .global mainmain: stmfd sp!, {fp, lr} add fp, sp, #4 sub sp, sp, #8 mov r3, #10 str r3, [fp, #-8] mov r3, #97 strb r3, [fp, #-9] ldr r3, [fp, #-8] cmp r3, #17 beq .L6 cmp r3, #17 bgt .L10 cmp r3, #7 beq .L4 cmp r3, #10 beq .L5 cmp r3, #1 beq .L3 b .L2.L10: ldr r2, .L11 cmp r3, r2 beq .L8 ldr r2, .L11+4 cmp r3, r2 beq .L9 cmp r3, #23 beq .L7 b .L2.L3: ldr r3, .L11+8 mov r0, r3 ldr r1, [fp, #-8] bl printf b .L2.L8: ldr r3, .L11+8 mov r0, r3 ldr r1, [fp, #-8] bl printf b .L2.L7: ldr r3, .L11+8 mov r0, r3 ldr r1, [fp, #-8] bl printf b .L2.L4: ldr r3, .L11+8 mov r0, r3 ldr r1, [fp, #-8] bl printf b .L2.L9: ldr r3, .L11+8 mov r0, r3 ldr r1, [fp, #-8] bl printf b .L2.L6: ldr r3, .L11+8 mov r0, r3 ldr r1, [fp, #-8] bl printf b .L2.L5: ldr r3, .L11+8 mov r0, r3 ldr r1, [fp, #-8] bl printf mov r0, r0 @ nop.L2: mov r3, #0 mov r0, r3 sub sp, fp, #4 ldmfd sp!, {fp, pc}.L12: .align 2.L11: .word 345 .word 1234 .word .LC0 .size main, .-main .ident "GCC: (ctng-1.8.1-FA) 4.5.1" .section .note.GNU-stack,"",%progbits
07. 附录
转载地址:https://dengjin.blog.csdn.net/article/details/106902263 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月30日 07时11分17秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Ubuntu 安装虚拟环境 安装python 3.7配置等
2019-04-30
【使用技巧】VS2017避免全部安装至C盘
2019-04-30
【使用技巧】Pycharm需要配置脚本路径(Script Path)
2019-04-30
【语句总结】Python的三种列表拷贝方式
2019-04-30
【使用技巧】青铜级网络防钓鱼指南
2019-04-30
Java的安装和环境配置
2019-04-30
IDEA的下载和配置
2019-04-30
【概念理解】typedef-Lnode-*Linklist
2019-04-30
【概念理解】gluOrtho2D和glViewport的作用&窗口与显示的关系
2019-04-30
【语句总结】OpenGL的一些语句
2019-04-30
【算法记录】在内循环作出优化的冒泡排序
2019-04-30
【算法记录】梅式砝码问题
2019-04-30
【算法记录】斐波那契数列的余求解
2019-04-30
【语句总结】java中改变数字精确度
2019-04-30
【语句总结】java中数值的精确计算,大型小数:BigDecimal
2019-04-30
【概念理解】Java中parseXXX和valueOf,toString的区别
2019-04-30
【语句总结】回文序列各项之和问题中发现的java特性
2019-04-30
【语句总结】获取字符串的某个单独字符:charAt()方法
2019-04-30
【算法记录】联通体的并查集
2019-04-30
【算法记录】快速幂
2019-04-30