指令和指令系统
指令:控制计算机完成某种操作的命令
指令系统:处理器能识别的所有指令的集合
指令的兼容性:同一系列机的指令是兼容的
指令的包含的内容:
- 运算数据的来源
- 运算结果的去向
- 执行的操作
指令格式:
操作码操作数,操作数操作码[操作数],[操作数]
注意:[]表示可以缺省
操作码:执行何种操作
操作数:执行对象。第一个操作数 :目标操作数;第二个操作数:源操作数
指令格式
- 零操作数指令:操作码
- 单操作数指令:操作码操作数操作码[操作数]
- 双操作数指令:操作码操作数,操作数操作码[操作数],[操作数]
指令中的操作数
- 立即数:是一个常数
- 寄存器操作数:是一个地址,计算速度最快
- 存储器操作数:是一个地址,计算速度最慢
立即数
立即数本身是参加操作的本身,可以是8位或者16位。只能作为源操作数
mov AX,1234H
mov BL,22H
寄存器操作数
参加运算的数存放在指令给出的寄存器中,可以是8位,16位。
mov AX,BX
mov DL,CH
存储器操作数
参与运算的数据存放在存储器的某一个或两个单元中
表现形式:【 】:方括号里面是地址(偏移地址)
MOV AL,[1200H]
指令的寻址方式
立即寻址
由指令直接给出运算数据。操作数为立即数
MOV AX,1200H
结果:AL=00H,AH=12H
常数1200H存放在代码段
寄存器寻址
参加的操作数在CPU的通用寄存器中
mov AX,BX
存储器操作数的寻址方式
注意点:
- 指令的操作对象在内存中。表现形式:【】
- 方括号中的地址为偏移地址
- 逻辑段的段基地址通过默认或者重设的方式给出
- 存储器操作数的字长本身不确定,其字长取决于指令中另一个寄存器的操作数,或者通过其他方式指定字长
直接寻址
方括号里面直接是偏移地址
MOV AX,[1200H]
说明:源操作数为16位,AL=1200H中的数据;AH=12001H中的数据(先低位后高位)
操作数默认为数据段(DS),允许重设
MOV AX,ES: [1200H]
:为段重设符
ES:附加数据段
寄存器间接寻址
- 偏移地址为通用寄存器中的内容,换句话说:偏移地址放在通用寄存器中
- 仅有4个通用寄存器可以用于存放数据的偏移地址,也叫间址寄存器
- 间址寄存器:BX(数据寄存器),BP(基址指针寄存器),SI(源变址寄存器),DI(目标变址寄存器)
MOV BX,1200H
MOV AX,[BX]
- 操作数的段地址(数据差处于哪个段)取决于选哪个间址寄存器。可以重设。
- BX,SI,DI:默认数据段
- BP:默认堆栈段
寄存器相对寻址
操作数的偏移地址为寄存器里面内容再加上一个偏移量(任意8bit或者16bit)
MOV AX,[BX+DATA]
MOV AX,2000H
MOV DS,AX
MOV BX,1200H
MOV AL,[BX]5 等价于MOV AL,[BX+5]
相对寻址主要用于一维数组的操作
基址,变址寻址
操作数的偏移地址=基址寄存器中的数据+变址寄存器中的数据
基址寄存器BX,BP;变址寄存器:SI,DI
基址寄存器为BX,默认在数据段
基址寄存器在BP,默认在堆栈段
MOV SI,1100H
mov BX,SI
mov AX ,[SI+BX] 等价于MOV AX,[Bx][SI]
目前偏移地址:1100H+1100H=2200H
基址,变址,相对寻址
操作数的偏移地址=基址寄存器中的数据+变址寄存器中的数据+偏移地址
主要运用二维数组
MOV DI,1100H
MOV BP,DI;
MOV AL,[BP][DI]5
目前偏移地址=1100H+1100H+5H=2205H
隐含寻址
操作数在默认的地址中
MUL BL
指令执行:AL*BL,结果放在AX中