目录
一、指令格式 155
13.操作码+地址码
2.按照地址码数量
0、1、2、3、4
(1)零地址指令
不需要操作数的指令
eg:堆栈指令
(2)一地址指令
可隐含另一个操作数在ACC中
(3)二地址指令
对两个操作数进行操作
(4)三地址指令
第三个地址中存放结果
(5)四地址指令
三地址指令+第四个地址存放下一条指令地址
3.指令长度
一条指令所包含的二进制位数,与机器字长无必要关系
if 指令长度 = 机器字长 单字长指令
if 指令长度 = 2机器字长 双字长指令
if 指令长度 = 1/2机器字长 半字长指令
一般指令长度为机器字长的整数倍
4.操作码长度分类
变长 or 定长
5.操作类型分类
数据传输类 :进行CPU和内存之间的data传输
运算类:算数逻辑运算,移位运算
程序控制类:转移指令(jmp无条件转移、jxxx,有条件转移)
二、拓展操作码 158
定长指令字结构+可变操作码
通过高位的特定数值来确定是几位的地址指令
tip:只要能区分就停止即可,令前n位为1来进行区分
if 指令长度为n,上一层留下m位,则下一行回有m*2^n个
ATTn:(思考 哈夫曼编码)
①不能短码是长码的前缀
②使用频率较高的指令用短指令表示
三、指令寻址方式 164
1.指令寻址
找下一条指令的操作
(1)顺序寻址
执行当前指令之后PC+"1"
(2)跳跃寻址
设置一个偏移量 PC+偏移量
2.数据寻址
找数据的存储位置的操作
(1)直接寻址
数据码中直接指向内存中的地址
(2)间接寻址
利用内存中的一片区域,在这片区域中存放目标data的地址
(3)寄存器寻址
使用寄存器存放目标data
(4)寄存器间接寻址
使用寄存器存放目标data的地址,还需访存
(5)隐含寻址
另一个操作数隐含在ACC中
(6)立即寻址
指令中就存在着data
(7)偏移寻址
1)基址寻址
存在基址寄存器BR,EA=(BR)+A
2)变址寻址
存在变址寄存器IX,EA = (IX)+EA
3)相对寻址
EA = PC+“1”+A
3.汇总
四、机器级代码 183
1.考试要求
(1)只考x86汇编语言
(2)能看懂C语言 ->汇编语言
常见的指令:循环、选择、函数调用
(3)汇编语言<-->机器语言
结合汇编分析机器指令的格式以及寻址方式、结合chap4
2.指令格式
见一 155
3.常见指令 185
(1)算数运算
add、sub、mul、imul、div、idiv、neg
(2)逻辑运算
and、or、not、xor、shl、shr
(3)else
1)数据转移
mov a,b 将b中值cope到a中
2)函数调用
call、ret
栈由栈帧组成,so push 、pull
3)控制流(实现分支、循环)
jmp、jxxx、cmp、test