【ARM】ARM汇编程序设计(五) str和ldr
生活随笔
收集整理的這篇文章主要介紹了
【ARM】ARM汇编程序设计(五) str和ldr
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
00. 目錄
文章目錄
- 00. 目錄
- 01. ldr偽指令
- 02. ldr指令
- 03. adr指令
- 04. str指令
- 05. 附錄
01. ldr偽指令
ldr示例一:
.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0@r0 = *(.L0)ldr r1, .L0bl printfmov r0, #0pop {pc}.L0:.word 0x11112222執行結果
[root@itcast 3rd]# ./a.out val = 0x11112222 [root@itcast 3rd]#ldr示例二:
.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC0ldr r1, .L0bl printfldr r0, =.LC0ldr r1, .L0 + 4bl printfldr r0, =.LC0ldr r1, .L0 + 8bl printfmov r0, #0pop {pc}.L0:.word 0x1111.word 0x2222.word 0x3333.word 0x4444.word 0x5555.word 0x6666.word 0x0執行結果:
[root@itcast 3rd]# ./a.out val = 0x1111 val = 0x2222 val = 0x3333 [root@itcast 3rd]#02. ldr指令
程序示例一:
.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0 1:ldr r0, =.LC0@r1 = *(r4)ldr r1, [r4]cmp r1, #0beq 1fbl printfadd r4, #4b 1b1:mov r0, #0pop {pc}.L0:.word 0x1111.word 0x2222.word 0x3333.word 0x4444.word 0x5555.word 0x6666.word 0x0程序示例二:
.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0 1:ldr r0, =.LC0@r1 = *(r4); r4 = r4 + 4;ldr r1, [r4], #4cmp r1, #0beq 1fbl printfb 1b1:mov r0, #0pop {pc}.L0:.word 0x1111.word 0x2222.word 0x3333.word 0x4444.word 0x5555.word 0x6666.word 0x0程序示例三:
.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0mov r5, #0 1:ldr r0, =.LC0ldr r1, [r4, r5]cmp r1, #0beq 1fbl printfadd r5, r5, #4b 1b1:mov r0, #0pop {pc}.L0:.word 0x1111.word 0x2222.word 0x3333.word 0x4444.word 0x5555.word 0x6666.word 0x0程序示例四:
.section .rodata.align 2 .LC0:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0mov r5, #0 1:ldr r0, =.LC0@ r1 = *(r4 + r5 << 2)ldr r1, [r4, r5, LSL #2]cmp r1, #0beq 1fbl printfadd r5, r5, #1b 1b1:mov r0, #0pop {pc}.L0:.word 0x1111.word 0x2222.word 0x3333.word 0x4444.word 0x5555.word 0x6666.word 0x0程序示例五:
.section .rodata.align 2 .LC0:.string "val = %p\n".LC1:.string "ar[%d] = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0mov r5, #0 1:ldr r0, =.LC1ldr r2, [r4, r5, LSL #2]cmp r2, #0beq 1fmov r1, r5bl printfadd r5, r5, #1b 1b1:mov r0, #0pop {pc}.L0:.word 0x1111.word 0x2222.word 0x3333.word 0x4444.word 0x5555.word 0x6666.word 0x0程序示例六:
.section .rodata.align 2 .LC0:.string "val = %p\n".LC1:.string "ar[%d] = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0mov r5, #0 1:ldr r0, =.LC1ldrh r2, [r4], #2cmp r2, #0beq 1fmov r1, r5bl printfadd r5, r5, #1b 1b1:mov r0, #0pop {pc}.L0:.word 0x11111111.word 0x22222222.word 0x33333333.word 0x44444444.word 0x55555555.word 0x66666666.word 0x0執行結果
[root@itcast 3rd]# ./a.out ar[0] = 0x1111 ar[1] = 0x1111 ar[2] = 0x2222 ar[3] = 0x2222 ar[4] = 0x3333 ar[5] = 0x3333 ar[6] = 0x4444 ar[7] = 0x4444 ar[8] = 0x5555 ar[9] = 0x5555 ar[10] = 0x6666 ar[11] = 0x6666 [root@itcast 3rd]#程序示例七:
.section .rodata.align 2 .LC0:.string "val = %p\n".LC1:.string "ar[%d] = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0mov r5, #0 1:ldr r0, =.LC1ldrb r2, [r4], #1cmp r2, #0beq 1fmov r1, r5bl printfadd r5, r5, #1b 1b1:mov r0, #0pop {pc}.L0:.word 0x11111111.word 0x22222222.word 0x33333333.word 0x44444444.word 0x55555555.word 0x66666666.word 0x0程序示例八:
.section .rodata.align 2 .LC0:.string "val = %p \n".text.align 2.global main main:push {lr}ldr r0, =.LC0ldr r2, =.L1ldr r1, [r2, #-4095]bl printfmov r0, #0pop {pc} .L0:.word 0x11111111.word 0x22222222 .L1:.word 0x33333333.word 0x44444444.word 0x0程序示例九:
.section .rodata.align 2 .LC0:.string "hello world\n".section .text.align 2.global main main:push {lr}@ldr r0, .L0@ldr r0, =.LC0ldr r0, [pc, #8]bl printfmov r0, #0pop {pc}.L0:.word .LC003. adr指令
程序示例
.section .rodata.align 2 .LC0:.string "hello world\n" .LC1:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r0, =.LC1adr r2, .L0ldr r1, [r2]bl printfmov r0, #0pop {pc}.L0:.word 0x1122334404. str指令
程序示例一:
.section .rodata.align 2 .LC0:.string "hello world\n" .LC1:.string "val = %p\n".section .text.align 2.global main main:push {lr}ldr r4, =.L0 1:ldr r0, =.LC1ldr r1, [r4], #4cmp r1, #0beq 1fbl printfb 1b1:ldr r4, =.L0mov r1, #1 1:str r1, [r4], #4add r1, #1cmp r1, #4ble 1bldr r4, =.L0 1:ldr r0, =.LC1ldr r1, [r4], #4cmp r1, #0beq 1fbl printfb 1b1:mov r0, #0pop {pc}.section .data.align 2.global .L0 .L0:.word 0x1111.word 0x2222.word 0x3333.word 0x4444.word 0x0程序示例二:
.section .rodata.align 2 .LC0:.string "hello world\n" .LC1:.string "val = %p\n" .LC2:.string "ar[%d] = %d\n".section .text.align 2.global main main:push {lr}sub sp, sp, #16mov r1, #0 1:str r1, [sp], #4add r1, #1cmp r1, #4bne 1bmov r4, #0mov r5, #-4 1:mov r1, r4ldr r2, [sp, r5]ldr r0, =.LC2bl printfadd r4, #1sub r5, #4cmp r4, #4bne 1bmov r0, #0pop {pc}程序示例三:
.section .rodata.align 2 .LC0:.string "hello world\n" .LC1:.string "val = %p\n" .LC2:.string "ar[%d] = %d\n".section .text.align 2.global main main:push {lr}sub sp, sp, #16mov r4, spmov r1, #0 1:str r1, [r4], #4add r1, #1cmp r1, #4bne 1bmov r4, #0 1:mov r1, r4ldr r2, [sp, r4, LSL #2]ldr r0, =.LC2bl printfadd r4, #1cmp r4, #4bne 1badd sp, sp, #16mov r0, #0pop {pc}程序示例四:
.section .rodata.align 2 .LC0:.string "hello world\n" .LC1:.string "val = %p\n" .LC2:.string "ar[%d] = %d\n".section .text.align 2.global main main:push {lr}sub sp, sp, #16mov r4, spmov r1, #0 1:str r1, [r4], #4add r1, #1cmp r1, #4bne 1bmov r5, spmov r4, #0 1:mov r1, r4ldr r2, [sp, r4, LSL #2]ldr r0, =.LC2bl printfadd r4, #1cmp r4, #4bne 1badd sp, sp, #16mov r0, #0pop {pc}程序示例五:
.section .rodata.align 2 .LC0:.string "hello world\n" .LC1:.string "val = %p\n" .LC2:.string "ar[%d] = %d\n".section .text.align 2.global main main:push {lr}sub sp, sp, #12mov r4, spmov r1, #0 1:strb r1, [r4], #1add r1, #1cmp r1, #12bne 1bmov r5, spmov r4, #0 1:mov r1, r4ldrb r2, [r5, r4]ldr r0, =.LC2bl printfadd r4, #1cmp r4, #12bne 1badd sp, sp, #12mov r0, #0pop {pc}05. 附錄
8.1 【ARM】Load Store指令
總結
以上是生活随笔為你收集整理的【ARM】ARM汇编程序设计(五) str和ldr的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ARM】ARM汇编程序设计(四) 选择
- 下一篇: 【ARM】ARM汇编程序设计(六) st