ret什么意思c语言?
ret != 1表示判断变量ret是否等于1。如果相等,则结果为0,否则结果为1。 通常用在if语句或条件运算符中。
如: 1、if语句 int a, ret; scanf("%d", &ret); if(ret != 1) // 如果ret不等于1,则将ret的值赋值给变量a a=ret;2、条件运算符 int a, ret; scanf("%d", &ret); a = ret!=1 ? ret : 0; // 如果ret不等于1,则将ret的值赋值给变量a,否则a=0
c语言rte是什么意思?
就是ret=ret*2的意思,即把ret的当前值乘以2后所得的值再赋给ret。
比如ret目前是4,则运行ret = ret<<1;后ret的值就变为4*2==8。ret<<1是将变量ret的值左移1位,效果造价于乘以2,但执行时效高;不过只有ret是整型时才可以。
call是什么指令?
call指令不能实现短转移(短转移IP修改范围为:-128~127)
作用:
(1)将当前IP或CS和IP压入栈
(2)转移
一、call 标号
作用:将当前IP压栈,然后跳转到标号处
原理:
(1)(SP) = (SP) - 2
(2)((SS*16) + (SP)) = (IP) // 将IP入栈
(3)(IP) = (IP) + 16位偏移地址
// 16位偏移地址 = 标号处的地址 - call指令后的第一个字节的地址
汇编语法解释:
push IP
jmp near ptr 标号
使用方法:
call 标号
二、call far ptr 标号
作用:先将CS压栈,再将IP压栈,然后跳转到标号处(实现短间转移)
原理:
(1)(SP) = (SP) - 2
(2)((SS*16) + (SP)) = (CS) // 先将CS入栈
(3)(SP) = (SP) - 2
(4)((SS*16) + (SP)) = (IP) // 再将IP入栈
(5)(CS) = 标号处的段地址 // 跳转
(IP) = 标号处的偏移地址
汇编语法解释:
push CS
push IP
jmp far ptr 标号
使用方法:
call far ptr 标号
三、call 16位reg
作用:将当前IP压栈,然后修改IP的内容为16位reg(寄存器)中的内容
原理:
(1)(SP) = (SP) - 2
(2)((SS*16) + (SP)) = (IP) // 将IP入栈
(3)(IP) = (16位reg)
汇编语法解释:
push IP
jmp 16位reg
使用方法:
call 16位reg
四、call word ptr 内存单元
作用:将当前IP压栈,然后修改IP的内容为内存单元(长度为1个字,即两个字节,16位)中的内容
原理:
(1)(SP) = (SP) - 2
(2)((SS*16) + (SP)) = (IP) // 将IP入栈
(3)(IP) = (内存单元)
汇编语法解释:
push IP
jmp word ptr 内存单元
使用方法:
call call word ptr 内存单元