日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【ARM】ARM汇编程序设计(一)

發(fā)布時(shí)間:2024/4/24 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【ARM】ARM汇编程序设计(一) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 第一個(gè)匯編程序
    • 02. printf函數(shù)
    • 03. 字符串
    • 04. 進(jìn)制
    • 05. mov指令
    • 06. mvn指令
    • 07. add指令
    • 08. sub指令
    • 09. rsb指令
    • 10. and指令
    • 11. bic指令
    • 12. orr指令
    • 13. eor指令
    • 14. mul指令
    • 15. 附錄

01. 第一個(gè)匯編程序

源程序

.section .rodata.align 2 .LC0:.string "hello arm".section .text.align 2.global main main:push {lr}ldr r0, =.LC0bl putsmov r0, #0pop {lr}bx lr

編譯執(zhí)行

# PC端 [root@itcast 1st]# arm-linux-gcc test.s -o test [root@itcast 1st]# # ARM板執(zhí)行 [root@itcast 1st]# ./test hello arm [root@itcast 1st]#

程序改進(jìn)版本

.section .rodata.align 2 .LC0:.string "hello arm".section .text.align 2.global main main:push {lr}ldr r0, =.LC0bl putsmov r0, #0pop {pc}

編譯執(zhí)行

[root@itcast 1st]# arm-linux-gcc test.s -o test [root@itcast 1st]# [root@itcast 1st]# ./test hello arm [root@itcast 1st]#

02. printf函數(shù)

程序如下:

.section .rodata.align 2 .LC0:.string "val = %d\n".LC1:.string "val = %d %d %d\n".LC2:.string "val = %d %d %d %d\n".section .text.align 2.global main main:push {lr}@printf("val = %d\n", 123);ldr r0, =.LC0mov r1, #123bl printf@printf("val = %d %d %d\n", 11, 22, 33);ldr r0, =.LC1mov r1, #11mov r2, #22mov r3, #33bl printf@printf("val = %d %d %d %d\n", 11, 22, 33, 44);ldr r0, =.LC2mov r1, #11mov r2, #22mov r3, #33mov r4, #44push {r4}bl printfpop {r4}mov r0, #0pop {pc}

執(zhí)行結(jié)果

[root@itcast 1st]# ./a.out val = 123 val = 11 22 33 val = 11 22 33 44 [root@itcast 1st]#

友情提示

當(dāng)傳遞參數(shù)超過4個(gè)時(shí)候,需要使用棧傳遞參數(shù)。

03. 字符串

程序示例:

.section .rodata.align 2 .LC0:.string "hello arm\n".LC1:.ascii "hello arm\n\0".LC2:.asciz "hello arm\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0bl printfldr r0, =.LC1bl printfldr r0, =.LC2bl printfmov r0, #0pop {pc}

友情提示

.string 會(huì)在字符串后面自動(dòng)添加\0

.asciz 會(huì)在字符串后面自動(dòng)添加\0

.ascii 不會(huì)在字符串后面自動(dòng)添加\0

04. 進(jìn)制

程序示例

.section .rodata.align 2 .LC0:.string "val = %d\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r1, #10bl printfldr r0, =.LC0mov r1, #010bl printfldr r0, =.LC0mov r1, #0x10bl printfldr r0, =.LC0mov r1, #0b10bl printfmov r0, #0pop {pc}

執(zhí)行結(jié)果

[root@itcast 1st]# ./a.out val = 10 val = 8 val = 16 val = 2 [root@itcast 1st]#

友情提示

二進(jìn)制 0b10

八進(jìn)制 010

十進(jìn)制 10

十六進(jìn)制 0x10

05. mov指令

程序示例一: 立即數(shù)

.section .rodata.align 2 .LC0:.string "val = %d\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0@@mov r1, #0x123@mov r1, #0x7f8@mov r1, #0xc80000003@mov r1, #0xc80000007@mov r1, #0x10000008mov r1, #0xffbl printfmov r0, #0pop {pc}

執(zhí)行結(jié)果:

[root@itcast 1st]# ./a.out val = 255 [root@itcast 1st]#

程序示例二:移位操作

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #0x100mov r1, r2, LSL #4bl printfmov r0, #0pop {pc}

執(zhí)行結(jié)果:

[root@itcast 1st]# ./a.out val = 0x1000 [root@itcast 1st]#

程序示例三: 移位操作

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #0xff000000@mov r1, r2, LSR #31@mov r1, r2, ASR #31mov r1, r2, ROR #31bl printfmov r0, #0pop {pc}

執(zhí)行結(jié)果:

[root@itcast 1st]# ./a.out val = 0xfe000001 [root@itcast 1st]#

程序示例四:表達(dá)式

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r1, #(100/4 + 3 * 2 + 1)bl printfmov r0, #0pop {pc}

程序示例五:優(yōu)化處理

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r1, #0xffffffffbl printfmov r0, #0pop {pc}

執(zhí)行結(jié)果:

[root@itcast 1st]# ./a.out val = 0xffffffff [root@itcast 1st]#

06. mvn指令

程序示例

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mvn r1, #0xffffff00bl printfmov r0, #0pop {pc}

執(zhí)行結(jié)果:

[root@itcast 1st]# ./a.out val = 0xff [root@itcast 1st]#

07. add指令

程序示例:

.section .rodata.align 2 .LC0:.string "val = %d\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #1mov r3, #2mov r1, r2@r1 = r2 + r3@add r1, r2, r3@r1 = r2 + 8@add r1, r2, #8@r1 = r1 + 1@add r1, r1, #1@r1 = r1 + 1@add r1, #1@r1 = r2 + r3 << 2add r1, r2, r3, LSL #2bl printfmov r0, #0pop {pc}

執(zhí)行結(jié)果:

[root@itcast 1st]# ./a.out val = 9 [root@itcast 1st]#

08. sub指令

程序示例:

.section .rodata.align 2 .LC0:.string "val = %d\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #1mov r3, #2mov r1, r2@r1 = r3 - r2@sub r1, r3, r2@r1 =r2 - r3@sub r1, r2, r3@r1 = r3 - 1sub r1, r3, #1bl printfmov r0, #0pop {pc}

09. rsb指令

程序示例

.section .rodata.align 2 .LC0:.string "val = %d\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #1mov r3, #2mov r1, r2@r1 = r3 - r2@rsb r1, r2, r3@r1 = 10 - r2rsb r1, r2, #10bl printfmov r0, #0pop {pc}

10. and指令

程序示例:

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #0xffmov r3, #0x3@r1 = r2 & r3and r1, r2, r3bl printfmov r0, #0pop {pc}

11. bic指令

程序示例

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #0xffmov r3, #0x3@r1 = r2 & ~r3bic r1, r2, r3bl printfmov r0, #0pop {pc}

12. orr指令

程序示例:

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #0xf0mov r3, #0x3@r1 = r2 | r3orr r1, r2, r3bl printfmov r0, #0pop {pc}

13. eor指令

程序示例

.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #0xffmov r3, #0x3@r1 = r2 ^ r3eor r1, r2, r3bl printfmov r0, #0pop {pc}

14. mul指令

程序示例

.section .rodata.align 2 .LC0:.string "val = %d\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0mov r2, #3mov r3, #8mov r1, #1@r1 = r2 * r3@mul r1, r2, r3@r1 = r1 * r2mul r1, r1, r2bl printfmov r0, #0pop {pc}

15. 附錄

總結(jié)

以上是生活随笔為你收集整理的【ARM】ARM汇编程序设计(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。