广州建设网站公司哪家好,做网站市场报价步登顶,校园网站开发设计报告,在线是免费生成网说明
C语言等高级语言#xff0c;根据是否需要返回到触发跳转代码的下一条代码#xff0c;跳转有两种语句#xff1a;
不需要返回#xff0c;例如#xff1a;if#xff0c;goto#xff0c;switch#xff0c;while等语句。需要返回#xff0c;例如#xff1a;函数调…说明
C语言等高级语言根据是否需要返回到触发跳转代码的下一条代码跳转有两种语句
不需要返回例如ifgotoswitchwhile等语句。需要返回例如函数调用系统调用SMC调用等。
A64汇编指令跳转也一样。
只跳转不需要返回
B指令
跳转到某地址执行,无法返回。一般是函数内跳转类似于C语言中while循环if else等语句导致的跳转。示例
int test(int a, int b)
{if (a) {return 0;}return ab;
}* 对应汇编代码
test:sub sp, sp, #16str w0, [sp, 12] //将实参a保存到栈对应地址str w1, [sp, 8] //将实参b保存到栈对应地址ldr w0, [sp, 12] //从栈中将变量a load到寄存器w0中cmp w0, 0 //对应上面的if 判断 w0(变量a)是否为0beq .L4 // 为0跳转到标签 .L4mov w0, 0 // 不为0将w0赋值为0b .L5 //不为0跳转到 .L5对应return 0
.L4: //对应 ab;ldr w1, [sp, 12]ldr w0, [sp, 8]add w0, w1, w0
.L5: // 对应 returnadd sp, sp, 16retBR指令
跳转到某寄存器保存的地址处运行无法返回。
br x20 //跳转到通用寄存器x20指向地址运行跳转后需要返回
跳转和返回是不同的指令返回时需要主动调用返回指令。指令详细动作如下跳转指令先将下一条指令的地址即返回后执行的起始地址保存到通用寄存器 lr (x30)中再跳转目标地址。返回指令跳转到x30寄存器所保存的地址执行。
跳转指令
BL指令
跳转到某地址执行运行完可以返回。一般用于不同函数的跳转类似于C语言中的函数调用如语法
bl 0x100cfa754示例
int test()
{return 0;
}int main()
{test();return 0;
}* 对应汇编
test:mov w0, 0ret // 返回到 bl test 下一条指令执行
main:stp x29, x30, [sp, -16]!add x29, sp, 0bl test //跳转到 test 函数地址执行mov w0, 0ldp x29, x30, [sp], 16retBLR指令
跳转到某寄存器保存的地址处运行运行完可以返回。
br x20 //跳转到通用寄存器x20指向地址运行返回指令
ret
主动调用后跳转到x30寄存器所保存的地址执行。语法
ret