刘帅嵌入式系统-字及无符号字节的Load/Store指令寻址方式 续

Load指令用于从内存中读取数据放入寄存器中;Store指令用于将寄存器中的数据保存到内存。

ARM有两大类的Load/Store指令:

1、用于操作32位的字类数据及8位无符号的字节类数据。

2、用于操作16位半字类的数据及8位有符号字节类型的数据。

接受的是第一类的Load/Store指令的寻址方式。

无论哪种Load/Store指令的寻址方式,其都有两部分组成,一部分是基址寄存器;另一部分是一个地址偏移量。基地址可以是任意一个通用寄存器。地址偏移量有三种形式,如下:

    1)立即数。无符号数

    2)寄存器。

    3)寄存器及一个移位常数。一个通用寄存器和一个立即数组成

同样的,寻址方式的地址计算方式有如下3种:

    1)偏移量方法。基址寄存器的值加上或减去一个偏移量,生成操作数地址。

    2)事先更新方法。基址寄存器的值和偏移量做加减运算,生成操作数地址,指令执行后,生成的操作数地址写入基址寄存器。

    3)事后更新方法。指令将基址寄存器的值作为操作数的地址执行内存访问。基址寄存器种的值和地址偏移量做加减运算,生成操作数地址。指令执行后,这个生成的操作数地址被写入基址寄存器。

已LDR指令为了介绍此类的Load/Store指令的编码格式和语法格式。

LDR指令故事如下。该指令主要用于从内存种将一个字的数据传送到寄存器种。

--cond:为指令执行的条件编码。

--I、P、U、W等位的含义在后面介绍。

--Rd:目标寄存器编码。

--Rn与Address_mode一起构成第二个操作数的内存地址。

LDR语法格式:

LDR{<cond>}{B} {T}<Rd>, <address_mode>

其中,<address_mode>表示第2个操作数的内存地址,共有9种格式如下:

--[<Rn>,#+/-<offset_12>]

--[<Rn>,+/-<Rm>]

--[<Rn>,+/-<Rm>, <shift>#<shift_imm>]

--[<Rn>,#+/-<offset_12>]!

--[<Rn>,+/-<Rm>]!

--[<Rn>,+/-<Rm>, <shift>#<shift_imm>]!

--[<Rn>],#+/-<offset_12>

--[<Rn>],+/-<Rm>

--[<Rn>],+/-<Rm>,<shift>#<shift_imm>

猜你喜欢

转载自blog.csdn.net/shuai532209720/article/details/88652963
今日推荐