指令系统(一)数据传送指令

来源:互联网 发布:淘宝最恶心sb的男模特 编辑:程序博客网 时间:2024/06/07 00:55
指令系统概述
指令-控制计算机完成指定操作的命令
机器指令-指令的二进制代码的形式
汇编指令-助记符性形式的指令
指令系统:CPU所有指令及其使用规则的集合

指令系统分类
指令按功能分为7大类
数据传送类
算术运算类
逻辑运算和移位
串操作
控制转移类
处理器控制
输入输出指令

指令格式:操作码  目的操作数,源操作数
8088/8086的操作数分为3类
1立即数
立即数只能用作源操作数
2.寄存器操作数
放在8个通用寄存器或4个段寄存器中的操作数,不允许将立即数传送到段寄存器
3.存储器操作数
一般不允许两个操作数同时为存储器操作数
8088/8086指令的执行时间
一条指令的执行时间(取指令,取操作数,执行指令,传送结果)
结论:
1)尽量使用寄存器作为操作数
2)若有可能,用移位代替乘法
3)尽量使用简单的寻址方式
数据传送指令可分为如下四种:
*通用传送
(1)MOV dest,src dest<--src
使用中需要注意:
**MOV指令不能再两个存储器单元之间进行数据直接传送
**MOV指令不能在两个段寄存器之间进行数据直接传送
**立即数不能直接传送给段寄存器
**目的操作数不能为CS,IP
不能传送的解决办法:用AX作为桥梁
存储器<---存储器
MOV AX,MEM1
MOV MEM2,AX
(2)堆栈操作指令
什么是堆栈?
按"后进先出"方式工作的存储区域。堆栈以字为单位进行压入弹出操作
规定有SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最
高地址叫栈底。
堆栈指令使用时应注意几点
堆栈操作总是按字进行
不能从栈顶弹出一个字给CS
堆栈指针为SS:SP,SP永远指向栈顶
SP进行自动增减量(-2,+2)
(3)交换指令
格式 XCHG reg,mem/reg
功能:交换量操作数的内容
要求:两操作数必须有一个在寄存器中
      操作数不能为段寄存器和立即数
      源和目的操作数类型要一致
(4)字节-字转换指令
格式:CBW 把AL的符号位复制到AH
CWD:把AX的符号位复制到DX
*地址传送指令
共有三条
格式: LEA reg,mem ;将指定存储器的16位偏移地址送指定寄存器
       LDS reg,mem32 ;该指令完成一个地址指针的传送 DS:reg<-(mem开始的四个内存单元)
       LES reg,mem32同上,但DS改为ES
要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。
*标志传送
共有四条
(1)读标志指令LAHF
LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位
(2)设置标志指令SAHF
SAHF的功能与LAHF的功能正好相反,它是将AH的5个标志位传送到标志寄存器
(3)标志入栈指令PUSHF
把标志寄存器推入栈顶指令
(4)从栈顶弹出标志寄存器指令
数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。
*输入输出
只限于用累加器AL或AX来传送消息
功能:(累加器)<--->I/0端口
(1)输入指令IN
格式:IN acc,DX ;DX表示的端口范围达64k
      IN acc,PORT;PORT端口号0-255
(2)输出指令OUT
格式:OUT port,acc
      OUT DX,acc
1 0