arm push/pop/b/bl汇编指令

目录

1. push指令

2. pop指令

3. b指令

4. bl指令

5. bx指令



1. push指令

  • 功能描述:入栈

armv7 芯片手册:

Push Multiple Registers stores multiple registers to the stack, storing to consecutive memory locations ending just
below the address in SP, and updates SP to point to the start of the stored data.

  • 语法

arm push/pop/b/bl汇编指令_第1张图片

 要点:

  • push支持同时将多个寄存器入栈,格式:{xx,xx},如:push {r0, r1,r2} 
  • 入栈顺序是先入栈序号低的寄存器到最低地址,比如push {fp, lr}效果图:

arm push/pop/b/bl汇编指令_第2张图片

  •  push {r0, r1}和push{r1, r0}效果是一样的,因为按照arm规范是按照寄存器序列号顺序开始入栈,且从小序列号开始入栈。比如这种总是将r0入栈到低地址。

2. pop指令

  • 功能描述:出栈

Pop Multiple Registers loads multiple registers from the stack, loading from consecutive memory locations starting at the address in SP, and updates SP to point just above the loaded data.

  • 语法

arm push/pop/b/bl汇编指令_第3张图片

要点:

  • 如同push一样,pop也支持同时pop出栈多个寄存器。
  • 出栈顺序和入栈顺序相反。pop {fp, lr},先从sp指向栈低地址处出栈内容到fp,再从高地址处出栈内容到lr中。

3. b指令

  • 功能描述:

Branch causes a branch to a target address.

  • 语法:只是简单的跳转到label处

B{}{}

4. bl指令

  • 功能描述:

Branch with Link calls a subroutine at a PC-relative address.
Branch with Link and Exchange Instruction Sets (immediate) calls a subroutine at a PC-relative address, and changes instruction set from ARM to Thumb, or from Thumb to ARM.

  • 语法:

BL{X}{}{}

The label of the instruction that is to be branched to.
For BL (encodings T1, A1), the assembler calculates the required value of the offset from the PC value of the BL instruction to this label, then selects an encoding that sets imm32 to that offset. Permitted offsets are even numbers in the range –16777216 to 16777214 (Thumb) or multiples of 4 in the range –33554432 to 33554428 (ARM).

BL指令于B指令区别:

        BL函数条跳转前执行:LR = PC - 4; (armv7为例)

Note: bl指令会计算label和当前pc位置的offset,所以这是相对跳转 

5. bx指令

  • 功能描述:跳转到寄存器中的地址

Branch and Exchange causes a branch to an address and instruction set specified by a register.

  • 语法

BX{}{}

The register that contains the branch target address and instruction set selection bit. The PC can be used. This register can be the SP in both ARM and Thumb instructions, but ARM deprecates this use of the SP.

你可能感兴趣的:(linux内核初探,汇编语言,arm,嵌入式硬件)