第四章:指令系统

1、指令格式

指令的基本格式

一条指令构成:操作码、地址码
	地址码个数:0~4
按地址码个数分类———零////四地址指令
按指令长度分类
	定长指令字结构
	变长指令字结构
按操作码长度分类
	定长操作码
	可变长操作码
按操作类型分类
	数据传送类——寄存器之间、CPU 与主存之间的数据传送,如:mov、load、store等
	运算类——算术逻辑操作、移位操作
	程序控制类——改变程序执行流,如:jmp、branch、call、ret、trap等
	输入输出类——CPU、IO设备之间的数据传送

扩展操作码指令格式

定长指令字结构 + 可变长操作码 -> 扩展操作码指令格式
设地址长度为 n,上一层留出 m 种状态,下一层可扩展出 m × 2^n 种状态
🚩 设计扩展操作码指令格式
	1、不允许短码是长码的前缀
	2、各指令的操作码一定不能重复

2、指令的寻址方式

指令寻址

什么是指令寻址?
	确定下一条要执行的指令的存放地址
	由程序计数器 PC 指明
顺序寻址
	(PC)+ “1” -> PC
	此处的 “1” 要理解为 1 个指令字长
	每次取指令结束后,一定会(PC)+ “1” 
跳跃寻址
	执行转移类指令导致的 PC 值改变

🚩 数据寻址

寻址方式有效地址访存次数(指令执行期间)
直接寻址EA=A1
一次间接寻址EA=(A)2
寄存器寻址EA=Ri0
寄存器间接一次寻址EA=(Ri)1
隐含寻址程序指定0
立即寻址A即是操作数0
基址寻址EA=(BR)+A1
变址寻址EA=A+(IX)1
相对寻址EA=(PC)+A1
堆栈寻址入栈/出栈时EA的确定方式不同硬堆栈不访存,软堆栈访存1次
基址寻址、变址寻址、相对寻址属于 "偏移寻址"
	基址寻址用于多道程序
	变址寻址用于循环程序、数组问题
	相对寻址用于转移指令
💡 取出指令后,PC 会指向下一条指令,相对寻址是相对于下一条指令的偏移

3、程序的机器级代码表示

高级语言与机器级代码之间的对应

考试要求:
	只需关注 x86 汇编语言;若考察其他汇编语言题目会详细注释
	题目给出某段简单程序的 C 语言、汇编语言、机器语言表示。能结合 C 语言看懂汇编语言关键语句(看懂常见指令、选择结构、循环结构、函数调用)
	汇编语言、机器语言一一对应,要能结合汇编语言分析机器语言指令的格式、寻址方式

x86汇编语言指令基础:
	操作码——常见指令:
		算术运算
			add d, s
			sub d, s
			mul d, s (无符号乘法)
			imul d, s (有符号乘法)
			div s (无符号除法,被除数在 edx:eax 中)
			idiv s (有符号除法,被除数在 edx:eax 中)
			neg d
			inc d
			dec d
		逻辑运算
			add d, s
			or d, s
			not d
			xor d, s
			shl d, s (将 d 逻辑左移 s 位)
			shr d, s (将 d 逻辑右移 s 位)
		其他
			实现分支结构、循环结构的指令:cmp、test、jmp、jxxx
			用于函数调用的指令:push、pop、call、ret
			使用实现数据转移的指令:mov
			
	地址码——数据存放位置
		寄存器(32 bit)
			在汇编指令中,给出寄存器名
			寄存器种类:
				通用寄存器(EAX、EBX、ECX、EDX)
				变址寄存器(ESI、EDI)
				堆栈寄存器(EBP、ESP)
			AX、BX、CX、DX 表示 EAX、EBX、ECX、EDX 的低 16 位
			AX(BX、CX、DX 同理)可以拆为 AH 和 AL,各占 8 bit
			两个变址寄存器和两个堆栈寄存器只能固定使用 32 bit
		主存——指明读写长度:
			dword ptr [地址] —— 双字,32 bit
			word ptr [地址] —— 单字,16 bit
			byte ptr [地址] —— 字节,8 bit
			若未指明读写长度,则默认 32 bit
		指令
			直接给出常量,可以用十进制表示,也可以用十六进制表示(常以 h 结尾)

汇编指令格式的对比:AT&T 格式 v.s. Intel 格式

AT&T 格式Intel 格式
指令只能用小写格式对大小写不敏感
d,s左,右右,左
寄存器表示%
立即数表示$
读写长度表示movb-byte、movw-word、movl-dworddword ptr [地址]、word ptr [地址]、byte ptr [地址] —— 字节,8 bit
主存地址表示(地址)[地址]
主存地址偏移量表示偏移量(基址)、偏移量(基址,变址,比例因子)[基址+偏移量] 、[基址+变址×比例因子+偏移量]

选择语句机器级表示

程序计数器 PC(Program Counter)通常被称为 IP(Instruction Pointer)

无条件转移指令——jmp
	jmp 128
	jmp eax
	jmp [999]
	jmp NEXT
	
条件转移指令——jxxx
	条件转移指令一般要和 cmp 指令一起使用
	je [地址] (ZF==1?)
	jne [地址] (ZF==0?)
	jg [地址] (ZF==0 && SF==OF?)
	jge [地址] (SF==OF?)
	jl [地址] (SF!=OF?)
	jle [地址] (SF!=OF?|| ZF==1?)

循环语句机器级表示

实现方式:
	用条件转移指令实现循环
		循环前的初始化
		是否直接跳过循环
		循环主体
		是否继续循环
	用 loop 指令实现循环
		使代码更清晰简洁
		用 ecx 作为循环计数器

4、指令系统 CISC 和 DISC

CISC:Complex Instruction Set Computer
	一条指令完成一个复杂的基本功能
	代表:x86 架构,主要用于笔记本、台式机等
DISC:Reduced Instruction Set Computer
	一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能。
	代表:ARM 架构,主要用于手机、平板等
CISCDISC
指令系统复杂,庞大简单,精简
指令数目一般大于200条一般小于100条
指令字长不固定定长
可访存指令不加限制只有 Load / Store 指令
各种指令执行的时间相差较大绝大多数在一个周期内完成
各种指令使用频度相差较大都比较常用
通用寄存器数量
目标代码难以用优化编译生成高效的目标代码程序采用优化的编译程序,生成的代码较为高效
控制方式绝大多数为微程序控制绝大多数为组合逻辑控制
指令流水线可以通过一定方式实现必须实现

📕 积累

1、指令系统位于硬件和软件的交界面上
2、采用扩展操作码设计方案的目的是:保持指令字长度不变而增加指令的数量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸葛思颖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值