diff --git a/2024/07/03/linux_kernel/index.html b/2024/07/03/linux_kernel/index.html index f35aa97..19da1ca 100644 --- a/2024/07/03/linux_kernel/index.html +++ b/2024/07/03/linux_kernel/index.html @@ -259,7 +259,7 @@

- 系统移植篇 + arm32架构
diff --git a/2024/08/26/arm/index.html b/2024/08/26/arm/index.html index 9d6237a..b67000e 100644 --- a/2024/08/26/arm/index.html +++ b/2024/08/26/arm/index.html @@ -6,17 +6,17 @@ - 系统移植篇 | zhuzhuzhu's blog + arm32架构 | zhuzhuzhu's blog - + - + @@ -169,7 +169,7 @@

- 系统移植篇 + arm32架构

@@ -332,6 +332,9 @@

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
寄存器寻址:直接从寄存器拿值
@add r1,r2,r3
寄存器移位寻址

@mov r1,r2,lsl #1 @先从r2找到要移位的数,再从机器码找到移动位数,再mov

@寄存器间接寻址
str r1,r[2]

@。。。

@基址加变址寻址
mov r1,0xffffffff
mov r2,#0x40000000
mov r3,#4
str r1,[r2,r3] @将r1寄存器中的数据写入到r2 + r3 指向的内存空间

str r1,[r2,r3,lsl #1] @将r1寄存器的值写到r2 + r3 << 1

@基址加变址索引方式,前索引
mov r1,0xffffffff
mov r2,#0x40000000
str r1,[r2,#8] @ 将r1寄存器的值写到r2 + 8

@基址加变址索引方式,后索引
mov r1,0xffffffff
mov r2,#0x40000000
str r1,[r2],#8 @ 将r1寄存器的值写到r2 ,并将r2加8


@基址加变址索引方式,自动索引
mov r1,0xffffffff
mov r2,#0x40000000
str r1,[r2,#8]! @ 将r1寄存器的值写到r2 + 8,并将r2加8
+

多寄存器寻址:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
多寄存器地址访问指令
mov r1,#1
mov r2,#2
mov r3,#3
mov r4,#4
mov r11,#0x40000020
stm r11,{r1-r4} @将r1-r4寄存器的数据存储到内存以r11为起始地址的内存中

ldm r11,{r6-r9} @将内存中以r11为起始地址的数据读取到r6 -r9的寄存器

@当寄存器不连续时,使用逗号分隔
stm r11{r1,r2,r4}

@自动索引照样适用与多寄存器
stm r11!,{r1-r4} @r11自动更新为存取后的下一块地址

stma r11!,{r1-r4} @stm默认后缀
stmb r11!,{r1-r4} @从r11+4(一个寄存器的长度)开始存储
stmda r11!,{r1-r4} @往r11地址往低地址开始存储,并且将r11减去16字节(指向下一个存储单元)
stmdb r11!,{r1-r4} @在r1的基础上减4个字节开始往低地址存

+ diff --git a/archives/2024/08/index.html b/archives/2024/08/index.html index b24add1..999e7c7 100644 --- a/archives/2024/08/index.html +++ b/archives/2024/08/index.html @@ -175,7 +175,7 @@

- 系统移植篇 + arm32架构

diff --git a/archives/2024/index.html b/archives/2024/index.html index 03a0a1b..a8f27d2 100644 --- a/archives/2024/index.html +++ b/archives/2024/index.html @@ -175,7 +175,7 @@

- 系统移植篇 + arm32架构

diff --git a/archives/index.html b/archives/index.html index edde57d..062b323 100644 --- a/archives/index.html +++ b/archives/index.html @@ -175,7 +175,7 @@

- 系统移植篇 + arm32架构

diff --git a/content.json b/content.json index 0bce1f6..81bdee9 100644 --- a/content.json +++ b/content.json @@ -1 +1 @@ -[{"title":"系统移植篇","date":"2024-08-26T13:51:46.000Z","path":"2024/08/26/arm/","tags":[]},{"title":"","date":"2024-07-03T08:27:11.631Z","path":"2024/07/03/linux_kernel/","tags":[]},{"title":"Linux驱动开发","date":"2024-02-27T12:33:25.000Z","path":"2024/02/27/Linux驱动开发/","tags":[]},{"title":"系统移植篇","date":"2024-01-18T13:51:46.000Z","path":"2024/01/18/系统移植篇/","tags":[]},{"title":"c内存管理以及链接脚本","date":"2024-01-05T07:35:22.000Z","path":"2024/01/05/c内存管理以及链接脚本/","tags":[{"name":"随笔","slug":"随笔","permalink":"http://example.com/tags/%E9%9A%8F%E7%AC%94/"}]},{"title":"ARM裸机开发","date":"2024-01-05T03:13:41.000Z","path":"2024/01/05/ARM裸机开发/","tags":[{"name":"裸机开发","slug":"裸机开发","permalink":"http://example.com/tags/%E8%A3%B8%E6%9C%BA%E5%BC%80%E5%8F%91/"}]},{"title":"Ubuntu 操作入门","date":"2024-01-05T03:13:19.000Z","path":"2024/01/05/Ubuntu-操作入门/","tags":[{"name":"一些学习嵌入式的准备工作","slug":"一些学习嵌入式的准备工作","permalink":"http://example.com/tags/%E4%B8%80%E4%BA%9B%E5%AD%A6%E4%B9%A0%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%9A%84%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/"}]},{"title":"嵌入式学习规划","date":"2024-01-04T16:30:01.000Z","path":"2024/01/05/1/","tags":[{"name":"学习路线的规划","slug":"学习路线的规划","permalink":"http://example.com/tags/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%E7%9A%84%E8%A7%84%E5%88%92/"}]}] \ No newline at end of file +[{"title":"arm32架构","date":"2024-08-26T13:51:46.000Z","path":"2024/08/26/arm/","tags":[]},{"title":"","date":"2024-07-03T08:27:11.631Z","path":"2024/07/03/linux_kernel/","tags":[]},{"title":"Linux驱动开发","date":"2024-02-27T12:33:25.000Z","path":"2024/02/27/Linux驱动开发/","tags":[]},{"title":"系统移植篇","date":"2024-01-18T13:51:46.000Z","path":"2024/01/18/系统移植篇/","tags":[]},{"title":"c内存管理以及链接脚本","date":"2024-01-05T07:35:22.000Z","path":"2024/01/05/c内存管理以及链接脚本/","tags":[{"name":"随笔","slug":"随笔","permalink":"http://example.com/tags/%E9%9A%8F%E7%AC%94/"}]},{"title":"ARM裸机开发","date":"2024-01-05T03:13:41.000Z","path":"2024/01/05/ARM裸机开发/","tags":[{"name":"裸机开发","slug":"裸机开发","permalink":"http://example.com/tags/%E8%A3%B8%E6%9C%BA%E5%BC%80%E5%8F%91/"}]},{"title":"Ubuntu 操作入门","date":"2024-01-05T03:13:19.000Z","path":"2024/01/05/Ubuntu-操作入门/","tags":[{"name":"一些学习嵌入式的准备工作","slug":"一些学习嵌入式的准备工作","permalink":"http://example.com/tags/%E4%B8%80%E4%BA%9B%E5%AD%A6%E4%B9%A0%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%9A%84%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/"}]},{"title":"嵌入式学习规划","date":"2024-01-04T16:30:01.000Z","path":"2024/01/05/1/","tags":[{"name":"学习路线的规划","slug":"学习路线的规划","permalink":"http://example.com/tags/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF%E7%9A%84%E8%A7%84%E5%88%92/"}]}] \ No newline at end of file diff --git a/index.html b/index.html index f309d27..70d21b3 100644 --- a/index.html +++ b/index.html @@ -260,7 +260,7 @@

- 系统移植篇 + arm32架构

@@ -423,6 +423,9 @@

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
寄存器寻址:直接从寄存器拿值
@add r1,r2,r3
寄存器移位寻址

@mov r1,r2,lsl #1 @先从r2找到要移位的数,再从机器码找到移动位数,再mov

@寄存器间接寻址
str r1,r[2]

@。。。

@基址加变址寻址
mov r1,0xffffffff
mov r2,#0x40000000
mov r3,#4
str r1,[r2,r3] @将r1寄存器中的数据写入到r2 + r3 指向的内存空间

str r1,[r2,r3,lsl #1] @将r1寄存器的值写到r2 + r3 << 1

@基址加变址索引方式,前索引
mov r1,0xffffffff
mov r2,#0x40000000
str r1,[r2,#8] @ 将r1寄存器的值写到r2 + 8

@基址加变址索引方式,后索引
mov r1,0xffffffff
mov r2,#0x40000000
str r1,[r2],#8 @ 将r1寄存器的值写到r2 ,并将r2加8


@基址加变址索引方式,自动索引
mov r1,0xffffffff
mov r2,#0x40000000
str r1,[r2,#8]! @ 将r1寄存器的值写到r2 + 8,并将r2加8
+

多寄存器寻址:

+
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
多寄存器地址访问指令
mov r1,#1
mov r2,#2
mov r3,#3
mov r4,#4
mov r11,#0x40000020
stm r11,{r1-r4} @将r1-r4寄存器的数据存储到内存以r11为起始地址的内存中

ldm r11,{r6-r9} @将内存中以r11为起始地址的数据读取到r6 -r9的寄存器

@当寄存器不连续时,使用逗号分隔
stm r11{r1,r2,r4}

@自动索引照样适用与多寄存器
stm r11!,{r1-r4} @r11自动更新为存取后的下一块地址

stma r11!,{r1-r4} @stm默认后缀
stmb r11!,{r1-r4} @从r11+4(一个寄存器的长度)开始存储
stmda r11!,{r1-r4} @往r11地址往低地址开始存储,并且将r11减去16字节(指向下一个存储单元)
stmdb r11!,{r1-r4} @在r1的基础上减4个字节开始往低地址存

+