王道408---CO---指令系统必会知识点

发布时间 2023-08-24 14:50:13作者: TLSN

一、指令寻址和数据寻址

1、指令寻址---顺序寻址

通过程序计数器PC+1(1个指令字长),自动形成下一个指令的地址

2、指令寻址---跳跃寻址

通过转移类指令实现。跳跃的结果是当前指令修改PC值,所以下一条指令仍然通过PC给出

3、数据寻址---数据寻址

数据寻址是指如何在指令中表示一个操作数的地址,如果用这种表示得到操作数或怎么计算出操作数的地址

二、隐含寻址

Pop指令就相当于隐含寻址

三、软堆栈与硬堆栈

软堆栈的堆栈区由内存实现,硬堆栈的堆栈区则由硬件实现
在软堆栈下执行二目运算需要访问4次内存: 取指、取源数1、取源数2、存结果

四、基址寻址有利于多道程序设计,可用于编制浮动程序

五、变址寻址经常被运用在数组上

六、简化地址结构的基本方法是尽量采用隐地址指令(P159-T4)

七、直接寻址时,可寻址范围不能为负数!!!相对寻址时,可以为负数 (p162-T28)

八、LSB与MSB

LSB(Least Significant Bit): 最低有效位
是指一个二进制数字中的第0位(即最低位),指多字节序列中最小权重的字节
在大端序中,lsb指最右边的位

MSB(Most Significant Bit) : 最高有效位
是指一个n位二进制数字中的n-1位,指多字节序列中具有最大权重的字节
在大端序中,msb即指最左端的位

九、不太熟的汇编指令

1、neg

取负指令

2、inc / dec

inc指令表示操作数自加1
dec指令表示操作数自减1

3、imul / mul

imul指令表示带符号整数乘法指令
mul指令表示无符号整数乘法指令

4、idiv / div指令

idiv指令表示带符号整数除法指令
div指令表示无符号整数除法指令

idiv指令只有一个操作数,即除数:

idiv <reg32>
idiv <mem>

而被除数默认为 edx:eax中的内容(64位整数,edx作为高32位,eax作为低32位)
最后的操作结果有两部分:商和余数,其中商送到 eax,余数送到edx

5、cmp / test

cmp相当于相减操作,但不修改操作数,只修改标志位
test相当于与操作,但不修改操作数,只修改标志位

6、je、jne、jz、jg、jge、jl、jle等jcc指令

je:相等时跳转
jne:不相等时跳转
jz:为0时跳转
jg:大于时跳转
jge:大于等于时跳转
jl:小于时跳转
jle:小于等于时跳转

十、CISC与RISC

RISC(reduced instruction set computer): 精简指令系统集计算机
CISC(Complex instruction set computer): 复杂指令集系统计算机

RISC一般是定长的,指令周期大部分在一个周期内完成,采用优化的编译程序,生成代码较为高效,绝大多数是组合逻辑控制,必须时间流水线,RISC只有Load、Store指令能够访存

CISC是不定长的,指令周期不固定,难以用优化编译生成高效的目标代码程序,绝大多数为微程序控制,可以用一定方式实现流水线

十一、注意Intel格式和AT&T格式汇编的区别

img

十二、编译器、汇编器、链接器

1、编译器: C语言 => 汇编语言
2、汇编器: 汇编语言 => 机器语言
3、链接器: 将一个或多个由编译器或汇编器生成的目标文件外加库,链接为一个可执行文件

十三、goto

goto跳转能力太强了,跳来跳去的,破坏了程序的局部性,造成了TLB、cache缺页严重

十四、源操作数/目的操作数 (p163-T6(3))

十五、ALU、MDR、MAR的宽度问题(p163-T6(1) && p166-T10(1))

1、ALU: ALU的宽度通常与字长相同

2、MAR: MAR和地址线位数相同

MAR用于寻址,其位数对应着存储单元的个数,因此存储单元的个数也能决定MAR的宽度,且 存储单元个数的位数 = MAR宽度 = 地址线位数 = PC长度

3、MDR: MDR和数据线宽度相同

MDR的位数和存储字长相同,因此存储字长也可以决定MDR位数,有: 存储字长 = 数据宽度 = MDR位数
注意:存储字长(MDR的位数)与机器字长无必然关系

十六、p183-T2答案错了吧