4 寻址方式与指令系统
4.1 指令系统的概述
4.1.1 指令的基本概念
- 程序是能够完成一个完整任务的一系列有序指令的集合。
- 指令是指令计算机进行某种操作的命令,使用户是用于控制计算机运行的最小功能单位。
- 指令系统是一台计算机所能执行的全部指令。
- 系列计算机是指令系统相同、基本体系结构相同的一系列计算机。
- 计算机能够直接理解和执行的指令是用二进制编码表示的,称为机器指令或指令字
- 汇编指令 二进制指令的助记符,常用英文缩写表示
- 计算机不能直接执行汇编指令,必须翻译成计算机能够识别的机器指令。
4.1.2 指令格式
机器指令通常由操作码字段和操作数字段组成
指令字长度:一个指令字中包含二进制代码的位数。
机器字长:指计算机能直接处理的二进制数据的位数,它决定了计算机的运算精度。
单字长指令:指令字长度等于机器字长的指令。
半字长指令:指令字长度等于半个机器字长度的指令。
双字长指令:指令字长度等于2个机器字长度的指令。
在一个指令系统中,如果各种指令字长度是相等的,称为等长指令字结构;如果各种指令字长度随指令功能而异,比如有的指令是单字长指令,有的指令是双字长指令,就称为变字长指令字结构。
4.1.3 8086汇编语言格式
8086每条指令最多由四部分组成:标号、操作码、操作数;注释标号和注释是可选项
标号:操作码 操作数;注释
标号表示该指令在代码段中的偏移地址,注释对该指令进行说明
- 操作码部分规定指令所执行的操作
- 操作数部分也成为地址码,这部分可能直接给出参与运算的操作数,也可能是描述操作数地址的信息
4.2 8086寻址方式
形成指令地址或操作数地址的方式称为寻址方式,8086CPU寻址分为指令寻址方式和数据寻址方式两类
数据寻址方式
- 立即寻址,指令的操作数字段直接给出操作数本身,这个操作数称为立即数,这种方式主要用来给寄存器或存储单元赋值。
- 立即数只能做源操作数。
- 源、目的操作数的字长必须一致。
- 寄存器寻址
操作数在CPU内部的通用寄存器中,指令中指定寄存器名,这种方式称为寄存器寻址
操作数存放在CPU的内部寄存器reg中:- 8位寄存器R8:
AH、AL、BH、BL、CH、CL、DH、DL - 16位寄存器R16:
AX、BX、CX、DX、SI、DI、BP、SP - 4个段寄存器Seg:
CS、DS、SS、ES
- 8位寄存器R8:
- 存储器寻址
段地址由段寄存器给出,而偏移地址则要从指令地址码计算求得,而这个偏移地址称为有效地址,指令地址码字段给出的地址,称为形式地址或位移量
直接寻址,操作数的有效地址由指令代码直接给出汇编语言格式为:地址表达式;[地址表达式];[数字表达式] ,直接寻址默认的是段寄存器DS,若要访问其他段数据,则要用段跨越前缀指出段寄存器名,如段寄存器地址名:地址表达式
寄存器间接寻址,操作数在内存中,操作数的有效地址被放在一个寄存器中,该寄存器由指令地址码字段指定,可以使用基地址BX,BP或变址寄存器SI,DI汇编语言格式为:基址寄存器名或变址寄存器名
-
寄存器相对寻址,操作数在内存中,操作数的有效地址为基址或变址寄存器与一个位移量之和(或差)。其中的寄存器和位移量均在指令地址码字段指定。即EA=[BX]/[BP]/[SI]/[DI]+DISP。如果指令寄存器为BX、SI、DI则操作数默认取DS为段基地址如果为BP,则默认取SS为段基地址基址加变址寻址, 操作数在内存中,操作数的有效地址由两个指定寄存器的值和。即EA= [BX]/[BP]+[SI]/[DI]。
相对基址加变址寻址,主要形式为:位移量[基址寄存器][变址寄存器]