目录
一、指令格式 155
13.操作码+地址码
2.按照地址码数量
(1)零地址指令
(2)一地址指令
(3)二地址指令
(4)三地址指令
(5)四地址指令
3.指令长度
4.操作码长度分类
5.操作类型分类
二、拓展操作码 158
三、指令寻址方式 164
1.指令寻址
(1)顺序寻址
(2)跳跃寻址
2.数据寻址
(1)直接寻址
(2)间接寻址
(3)寄存器寻址
(4)寄存器间接寻址
(5)隐含寻址
(6)立即寻址
(7)偏移寻址
1)基址寻址
2)变址寻址
3)相对寻址
四、机器级代码 183
1.考试要求
(1)只考x86汇编语言
(2)能看懂C语言 ->汇编语言
(3)汇编语言<-->机器语言
2.指令格式
3.常见指令 185
(1)算数运算
(2)逻辑运算
(3)else
1)数据转移
2)函数调用
3)控制流(实现分支、循环)
4.AT&T格式 vs Inter 格式 184
五、机器级表示
编辑1.选择语句 189
2.循环语句 190
3.函数调用 191
六、CISC vs RISC 200
一、指令格式 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
定长指令字结构+可变操作码
通过高位的特定数值来确定是几位的地址指令
eg 158
指令字长16bit,15条3地址指令,15条2地址指令,15条1地址指令,16条0地址指令
OP A1 A2 A3
0000 ··
0001 ··
···· ··
1110 ··· 15条
(以上为3地址指令)(so第一个位置全为1的为2地址指令)
1111 0000 ···
1111 0001
····
1111 1110 15条
(以上为2地址指令)(so前2个位置全为1的为1地址指令)
1111 1111 0000 ···
1111 1111 0001
···
1111 1111 1110 15条
(以上为1地址指令)(so前3个位置全为1的为0地址指令)
1111 1111 1111 0000
1111 1111 1111 0001
···
1111 1111 1111 1111 16条
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