程序按照顺序执行指令 而c语言中控制流程有顺序,分支,循环三种
汇编中跳转指令会导致执行切换到程序中一个全新的位置,也就是说跳转可以产生c语言的分支和循环两种
一个 为跳转后一部分不在执行 或者再跳转回去再次执行
在汇编代码中,这些跳转的目的地通常用一个标号指明
movl $0,%eax
jmp .L1
movl (%eax), %edx
.L1
popl %edx
jmp L1会跳过movl指令 从popl指令处开始执行
在产生目标代码时,汇编会确定所有带标号指令的地址,并将跳转目标(目的指令的地址)编码为跳转指令的一部分
jmp指令是无条件跳转,可以是直接跳转,即跳转目标(目的指令的地址)作为指令的一部分编码
也可以是间接跳转 即:跳转目标是从寄存器或者存储器位置中读出
跳转指令分为两类 直接跳转and间接跳转
直接跳转将目标地址作为指令的一部分:
直接跳转通过标号确定跳转目标
例:".L1"
间接跳转将通过其他方式获取地址(寄存器或者存储器)
间接跳转写法为 *后跟一个操作数指示符
例:jmp *%eax(寄存器中获取目的地址)
jmp *(%eax)(存储器中获取地址)
跳转条件
JMP label