嵌入式上机之一,我的第一个ARM汇编程序

嵌入式上机之一,我的第一个ARM汇编程序

 1 /**/ /*
 23.1.7 习题 1
 3
 4编写程序循环对 R4-R11 进行累加 8 次赋值,
 5R4-R11 起始值为1-8,每次加操作后把 R4-R11 的内容放入 SP 栈中,
 6SP 初始设置为0x800。
 7最后把R4-R11 用 LDMFD 指令清空赋值为 0。
 8
 9*/

10
11 .equ  stack_top,   0x800
12 .equ  loop_time,   0x8
13
14 .global _start
15
16 .text
17
18 _start:
19      /**/ /* 设置寄存器初始值 */
20     ldr    r0,  = reg_init
21     ldmia  r0 ! {r4-r11}
22     
23      /**/ /* 设置栈顶初始值 */
24     mov    sp, #stack_top
25     
26      /**/ /* 循环 8 次 */
27     mov    r0, #loop_time
28 loop:
29              /**/ /* 累加 */
30     add    r4, r4, # 0x1
31     add    r5, r5, # 0x1
32     add    r6, r6, # 0x1
33     add    r7, r7, # 0x1
34     add    r8, r8, # 0x1
35     add    r9, r9, # 0x1
36     add    r10, r10, # 0x1
37     add    r11, r11, # 0x1
38              /**/ /* 入栈 */
39     stmfd  sp ! {r4-r11}
40
41     subs    r0, r0, # 0x1
42
43     bne    loop
44     
45 loop_out:
46      /**/ /* R4-R11 清零 */
47     ldr    r0,  = reg_fini
48     ldmfd  r0 ! {r4-r11}
49
50      /**/ /* 结束 */
51 stop: b stop
52
53
54 .ltorg
55
56      /**/ /* 寄存器的最终值 */
57 reg_fini:
58     . long    0 0 0 0 0 0 0 0
59
60      /**/ /* 寄存器的初始值 */
61 reg_init:
62     . long    1 2 3 4 5 6 7 8
63
64 .end
65

你可能感兴趣的:(嵌入式上机之一,我的第一个ARM汇编程序)