有的指令是不需要地址码的,
如停机指令,关中断,空操作。
堆栈计算机,两个操作数隐含存放在==栈顶和次栈顶==,计算结果返回栈顶
对于扩展操作码来说,短的操作码不能是长的操作码的前缀,不然在译码的时候可能会发生歧义
四地址指令有个A4,是存放下一条指令的地址,其余的下一条指令的地址是存放在pc里面的
关于指令集体系结构和指令系统
指令集体结构位于计算机软/硬件的交界面上(ISA)相当于软件和硬件进行交互的语言
软件---指令----硬件
指令集体结构是指低级语言程序员所看到的概念结构和功能特性
指令集体系结构包括
核心:指令系统(指令集)---指令的格式,操作类型
寄存器组织
基本数据类型
存储状态(寻址方式)
存储体系
中断/异常处理
外部I/O
编制方式
大端小端方式
ISA规定了每条指令的操作码,操作数,寻址方式等
控制信号---是由微指令发出的----是由更底层的微指令体系结构规定的
程序控制类指令包含
特权指令
转移指令
循环指令
条件转移指令
停止结束指令
return
==**特权指令**==也是程序控制指令
中断隐指令:cpu响应中断后,硬件自动完成一系列的操作
关中断(不允许进行中断)
保存断点(PC保存)
中断服务程序执行之后,可以回到之前正在执行的程序
引出中断服务程序
特权指令:是给os以及系统软件去使用的,不会给用户去使用的
在看指令字长的时候要看是否是按字节编制的,如果是按字节编制的,则要保证位数是字节的整数倍
基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。程序员是没法修改的,因为程序的存储位置是由操作系统决定的,采用通用寄存器作为基址寄存器的时候,用户可以决定哪个通用寄存器做为基址寄存器,但是里面的内容仍然由操作系统决定
变址寄存器是面向用户的,在程序执行的过程中,变址寄存器的内容可由用户改变,形式地址A不变作为基地址
引入相对寻址,让代码在程序内浮动时,不用更改跳转指令的地址
相对寻址 一般用于转移指令
基址寻址 一般用于多道程序+编制浮动程序
变址寻址 一般用于循环程序和数组问题
相对寻址是相对于下一条指令的便宜而不是当前指令的便宜,因为pc在取出当前指令的时候,PC会进行加1
如果采用的是软堆栈(用主存中的一部分作为栈)的话,那么每次pop和push都需要一次的访存,如果是用的硬堆栈(专门用寄存器来作为栈)则不需要访存
栈指针sp一定指向栈顶的空单元的,出栈的话先将sp加1,指向栈顶有数据的单元,然后把栈顶的元素弹出去
PC程序计数器的内容就是主存的地址
程序控制类指令通常解决程序调用的次序问题
特权指令---只有系统软件或者OS可以使用,用户是无法使用的
汇编指令
命令前面加一个i的话代表有符号整数
div s # 无符号整数出发edx:eax(表示把两个32位寄存器连起来用)/s这里要把被除数扩展到64位置,再除以除数32位 。商存入eax,余数存入edx
x86中不能让一条指令的两个操作数都来自主存,这样保证访问主存的次数不会过多
AT&T格式和Intel格式
![[AT&T格式和Intel格式.png]]
CISC 和 RISC
RISC必然采用流水线技术,而CISC有的为了提高速度也采用流水线技术,并且兼容性更强
RISC选择一些常用的寄存器类型指令,并不是为了兼容CISC,RISC不可能兼容CISC
CISC指令格式种类多,增大了编译优化的复杂性,因此不利于编译