JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。
1、jmp指令:不影响堆栈。紧紧进行执行流程的跳转,不会保存返回地址。(书P55)对于jmp而言,长短jmp仅仅是结果不同罢了,短跳转对应段内,长跳转对应段间。
2、call指令:影响堆栈。在进行流程跳转前会保存返回地址(下一条指令的地址),以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转(或称“长call”)时,只保存EIP;如果是段间跳转(或称“短call”),还保存CS。
3、ret和retf:这两个指令的功能都是调用返回。
(1)ret在返回时只从堆栈中取得EIP;retf中的字母f表示far,即段间转移返回,要从堆栈中取出EIP和CS。
(2)两个指令都可以带参数,表示发生过程调用时参数的个数,返回时要从堆栈中退出相应个数的参数。
(3)恢复CS时,如果发现将发生特权级变化(当前CS的低2位不等于从堆栈中取得的新的CS值的低2位。由跳转的相关理论可知,只有跳转到非一致代码段时才会发生特权级变化,那么,也只有从非一致代码段返回时才会发生特权级变化的返回),则还要从调用者堆栈中取得ESP和SS恢复到相应寄存器中,也即恢复调用者堆栈。
分享到:
相关推荐
转移指令分为无条件转移指令(如jmp),条件转移指令(如jcxz、je、jb、ja等),循环指令(如loop),过程(如call、ret、retf),以及中断指令(如int、iret)。 5. 处理机控制指令:包括cld、std、cli、sti、nop...
**JMP/CALL/RET/RETF**:分别表示无条件跳转、函数调用、返回和远返回指令。 **JAE/JNB/.../JGE**:这些是有条件跳转指令,根据不同的条件决定是否跳转。 通过对以上汇编指令的详细介绍,我们可以了解到汇编语言中...
- `call` 指令用于调用子程序,`ret` 返回到调用点,`retf` 进行远跳转。 - `call far ptr` 调用远地址的子程序,涉及CS和IP的压栈。 8. **伪指令定义**: - `dd` 定义双字数据。 - `dw` 定义字数据。 - `db` ...
转移指令可以改变程序执行流程,包括无条件转移指令`jmp`,条件转移指令如`jcxz`(CX寄存器为零时跳转)、`je`(相等时跳转)、`jb`(低于时跳转)等,循环指令`loop`,过程调用指令`call`、`ret`(返回)和`retf`...
- **RET**/**RETF**:返回主程序指令。 #### 循环控制指令 - **REP**/**REPE**/**REPNE**/**REPC**/**REPNC**:重复前缀指令,用于控制循环重复执行次数。 ### 常用API 文档中并未提供具体的API列表或示例,但从...
- `JMP` / `CALL` / `RET` / `RETF`:转移与返回指令。 ### 其他指令 1. **中断与异常处理指令**: - `INT`:软件中断指令。 - `INTO`:溢出中断指令。 - `IRET`:中断返回指令。 2. **处理器控制指令**: -...
- **RET**/**RETF**:返回调用点。 2. **条件跳转指令** - **JA**/**JAE**/**JB**/**JBE**/**JG**/**JGE**/**JL**/**JLE**/**JE**/**JNE**/**JC**/**JNC**/**JNO**/**JNP**/**JNS**/**JO**/**JP**/**JS**:根据...
- **JMP (jump)**:无条件跳转指令。 - **JCXZ (jump if CX is zero)**:如果 CX 寄存器为零则跳转。 - **JE (jump if equal)**:如果条件相等则跳转。 - **JB (jump if below)**:如果低于则跳转。 - **JA (jump if...
- `JMP (Jump)`:无条件跳转。 - `JCXZ (Jump if CX is zero)`:CX寄存器为零时跳转。 - `JE (Jump if equal)`:相等时跳转。 - `JB (Jump if below)`:小于时跳转。 - `JA (Jump if above)`:大于时跳转。 - `LOOP`...
汇编指令手册——英文全称解析 汇编指令手册是计算机科学中最基础的知识之一,对于计算机科学专业的...JMP指令用于无条件跳转,CALL指令用于调用一个子程序,RET指令用于从子程序返回。RETF指令用于从远程子程序返回。
- **RET/RETF**:子程序结束并返回,`ret`返回到调用指令的下一条,`retn`返回到调用指令的下一条(考虑段地址)。 11. **其他指令**: - **LEA**:装载有效地址,如`lea si, [bx+di]`将[bx+di]的地址放入si。 -...
- `JMPаO(IPD)` 和 `JMPqμȦs(MOVIP,AX)`:无条件跳转指令,前者直接跳转到`аO`,后者通过将AX的内容赋给IP实现跳转。 - `JMPFARPTRаO(CS&IPD)` 和 `JMPWORDPTRϬqȦs:[0](IP[0],CS[2])`:用于远跳转和通过字节...
1. **JMP(Jump)**:无条件跳转指令。 2. **CALL(Call)**:调用子程序指令。 3. **RET(Return)**:返回指令。 4. **RETF(Return Far)**:返回远指令。 以上汇编指令是构建高级语言底层实现的基础,它们直接...
**JMP**: 无条件跳转指令。例如:`JMP label` 无条件跳转到label处继续执行。 **CALL**: 子程序调用指令。例如:`CALL func` 调用函数func,并将返回地址压入堆栈。 **RET**: 返回指令。例如:`RET` 从子程序返回...
- **语法**: `RET/RETF` 2. **条件转移指令** - **JA/JNBE**:高于或等于。 - **语法**: `JA/JNBE label` - **JAE/JNB**:大于或等于。 - **语法**: `JAE/JNB label` - **JB/JNAE**:低于。 - **语法**: `JB/...
- **RET**、**RETF**:返回。 - 条件跳转指令(如JA、JAE、JB等)基于不同的条件进行跳转。 #### 八、循环指令 1. **循环指令** - **LOOP**:循环指令,每执行一次CX减1。 - **LOOPE/LOOPZ**、**LOOPNE/...
- **RET**/**RETF**:返回主程序。 - 条件跳转指令:根据标志寄存器的状态决定是否跳转。 #### 七、循环指令 - **LOOP**/**LOOPE/LOOPZ**/**LOOPNE/LOOPNZ**:基于CX/ECX寄存器的循环控制。 - **JCXZ**/**JECXZ**:...
- **RET/RETF**:返回指令,从堆栈中弹出返回地址回到调用者处。 2. **条件转移** - **JA/JNBE**:大于或等于转移,当CF=0并且ZF=0时转移。 - **JAE/JNB**:大于等于转移,当CF=0时转移。 - **JB/JNAE**:小于...
在CPU的指令里,有几条指令可以改变程序的流程:JMP,CALL,INT,RET,RETF,IRET等指令。这里我选择CALL指令,因为他是以函数调用的方式来实现跳转的,这样可以带一些你需要的参数。到这里,我该说说函数的堆栈了。...