快捷搜索:  汽车  科技

arm9嵌入式系统设计基础教程答案:嵌入式系统开发学习

arm9嵌入式系统设计基础教程答案:嵌入式系统开发学习Rd:目标寄存器(加载时数据被读取到该寄存器,存储时寄存器中的数被写入到内存)H,B表示size,H是半字,B是字节指令格式中:cond:条件助记符,如:EQ,NE等等S:表示有符号,没有S则是无符号

目标:

学习掌握 ARM 半字、有符号字节的加载、存储指令的格式、地址模式。

ARM 半字、有符号字节加载存储指令:

半字加载和字节加载分为有符号和无符号,这主要是因为寄存器是32位的,加载半字是16位,那么寄存器的高16位要进行扩展,无符号直接用‘0’扩展,如果是有符号数则要进行符号位扩展,扩展后正数依然是正数,负数依然是负数。

加载字节(8位)数据,同样寄存器高24位要扩展,无符号用‘0’,有符号进行符号位扩展。

arm9嵌入式系统设计基础教程答案:嵌入式系统开发学习(1)

图:ARM有符号字节、半字加载存储指令

指令格式中:

  1. cond:条件助记符,如:EQ,NE等等

  2. S:表示有符号,没有S则是无符号

  3. H,B表示size,H是半字,B是字节

  4. Rd:目标寄存器(加载时数据被读取到该寄存器,存储时寄存器中的数被写入到内存)

  5. 地址模式:见下图。

这里提到的加载存储指令包括:

  1. 半字加载/存储指令:LDRH、LDRSH STRH

  2. 有符号字节加载存储指令:LDRSB,存储同之前的无符号字节存储指令STRB

半字、有符号字节加载存储地址模式:

arm9嵌入式系统设计基础教程答案:嵌入式系统开发学习(2)

图:半字、有符号字节加载指令示例

半字存储指令示例:

arm9嵌入式系统设计基础教程答案:嵌入式系统开发学习(3)

图:半字存储指令示例

半字、有符号字节字节加载/存储指令码:

arm9嵌入式系统设计基础教程答案:嵌入式系统开发学习(4)

arm9嵌入式系统设计基础教程答案:嵌入式系统开发学习(5)

半字、有符号字节加载存储指令示例:

LDR R1 [R0] ; Load R1 from the address in R0

LDR R8 [R3 #4] ; Load R8 from the address in R3 4

LDR R12 [R13 #-4] ; Load R12 from R13 - 4

STR R2 [R1 #0x100] ; Store R2 to the address in R1 0x100

LDRB R5 [R9] ; Load byte into R5 from R9 ; (zero top 3 bytes)

LDRB R3 [R8 #3] ; Load byte to R3 from R8 3 ; (zero top 3 bytes)

STRB R4 [R10 #0x200] ; Store byte from R4 to R10 0x200

LDR R11 [R1 R2] ; Load R11 from the address in R1 R2

STRB R10 [R7 -R4] ; Store byte from R10 to addr in R7 - R4

LDR R11 [R3 R5 LSL #2] ; Load R11 from R3 (R5 x 4)

LDR R1 [R0 #4]! ; Load R1 from R0 4 then R0 = R0 4

STRB R7 [R6 #-1]! ; Store byte from R7 to R6 - 1 ; then R6 = R6 - 1

LDR R3 [R9] #4 ; Load R3 from R9 then R9 = R9 4

STR R2 [R5] #8 ; Store R2 to R5 then R5 = R5 8

LDR R0 [PC #40] ; Load R0 from PC 0x40 (= address of ; the LDR instruction 8 0x40)

LDR R0 [R1] R2 ; Load R0 from R1 then R1 = R1 R2

LDRH R1 [R0] ; Load halfword to R1 from R0 ; (zero top 2 bytes)

LDRH R8 [R3 #2] ; Load halfword into R8 from R3 2

LDRH R12 [R13 #-6] ; Load halfword into R12 from R13 - 6

STRH R2 [R1 #0x80] ; Store halfword from R2 to R1 0x80

LDRSH R5 [R9] ; Load signed halfword to R5 from R9

LDRSB R3 [R8 #3] ; Load signed byte to R3 from R8 3

LDRSB R4 [R10 #0xC1] ; Load signed byte to R4 from R10 0xC1

LDRH R11 [R1 R2] ; Load halfword into R11 from address ; in R1 R2

STRH R10 [R7 -R4] ; Store halfword from R10 to R7 - R4

LDRSH R1 [R0 #2]! ; Load signed halfword R1 from R0 2 ; then R0 = R0 2

猜您喜欢: