文章目录:
一:X86
算数、逻辑运算类指令(OP目的地址,源地址)
加—OP: add
减——OP: sub
乘——OP: mul
除——OP: div
左移——OP: shl
右移——OP: shr
分支结构(if/else)
判断条件(本质是减法)—cmp A,B
本质是A-B
A-B的结果信息放到PSW中
无符号数减法关注CF、ZF
有符号数减法关注OF.SF、ZF
跳转指令
转移指令,通常采用相对寻址。用补码表示偏移量,补码的值通常意味着要往前/往后跳多少个地址指令
xxx(条件跳转)
jmp(无条件跳转),goto
格式——OP跳到哪儿
循环结构(for while)
xxxloopxxxx <label>——原理同跳转指令
条件跳转指令jxxxx 也可以用于实现循环
函数调用/返回
调用指令一 call <label>
修改PC的值,跳转到<label>
与跳转指令的区别
call指令会将当前函数的相关信息入栈
入栈信息︰返回地址(当前的PC)
返回指令——ret
当前函数的信息出栈
恢复上一层函数的运行现场,包括栈底指针ebp、程序计数器pc等
局部变量的定义
每个函数内的局部变量,是根据该函数的栈底指针进行一个偏移来找到的
二:MIPS
算数、逻辑运算类指令
加——OP: add
减——OP: sub
乘OP: mul
除—OP: div
左移——OP: shl
右移——OP: shr
无条件转移指令jmp
条件转移指令
转移指令,通常采用相对寻址。用补码表示偏移量,补码的值通常意味着要往前/往后跳多少条指令
根据题目条件,灵活判断,验证OFFSET的真值是多少
bxxx—b开头,意思是branch
jxxxx
Load指令——Load寄存器,内存地址,会访问内存的指令
Store指令——Store内存地址,寄存器,会访问内存的指令
结合五段式指令流水线考察
三:解题方法
X86 先搞懂C语言 基于C语言的逻辑分析机器指令 MIPS 先搞懂C语言 基于C语言的逻辑分析机器指令 对指令进行分类——五类指令,每一类指令的运行原理要搞清楚 安排指令流水线 分析数据冒险、控制冒险
补充:强化课结课测验中,给大家补充了汇编语言的另一种格式AT&T