call和jmp
call:FF15 + 绝对地址 、 E8 + 相对偏移 (先push eip ,再jmp)
jmp: FF25 + 绝对地址 、 E9 + 相对偏移 (在x64下 FF25也是按相对偏移算的)
寻址方式
指令寻址:
顺序寻址 程序的顺序执行过程就是顺序寻址
跳跃寻址 jmp call 等类型的寻址过程
数据寻址:
立即寻址 指令的地址字段是操作数本身 mov eax, 1h
直接寻址 指令的地址字段是操作数的内存地址 mov eax,[2000h]
间接寻址 指令的地址字段是存有操作数的内存地址的地址 mov eax,[[2000h]]
寄存器寻址 指令的地址字段是存有操作数的寄存器 mov eax,ebx
寄存器间接寻址 指令的地址字段是存有操作数内存地址的寄存器 mov eax,[ebx]
基址寻址 指令的地址字段是相对偏移 EA = A +(BR) BR:基址寄存器
变址寻址 指令的地址字段是相对偏移 EA = A +(IX) IX:变址寄存器
相对寻址 指令的地址字段是相对偏移 EA = A +(PC) PC:当前指令地址
标志寄存器
寄存器 名称 备注 CF 进位标志位 无符号数,运算产生进位时置为1 PF 奇偶标志位 结果的低8位中1的个数,偶数置为1,奇数置为0 AF 辅助进位标志位 低四位与高四位之间有进位或者错位,置为1 ZF 零标志位 运算结果为0,置为1;不为0,置为0 SF 符号标志位 有符号数,运算结果为负,置为1;结果为正,置为0 TF 定时器溢出标志位 对于CPU来说,当检测到TF为1时,产生单步中断 IF 中断运行标志位 IF为1时,cpu会响应中断 DF 方向标志位 控制串错做指令时,si、di的增减,DF=0,递增,DF=1,递减 OF 溢出标志位 有符号数,运算无溢出,OF置为0;有溢出,OF置为1