8086的指令系统与寻址方式

指令格式

操作码 操作数1.。。。。。
操作码 指示计算机所要进行的动作或者运算
操作数:指令涉及的数据或数据的存储地址

一般常用双、单、零地址指令

计算机内部的数据被称为量
名字 内容/值 存储地址 类型

高级语言一般给名字,汇编语言给地址

数据的寻址方式

寻址:计算并获得所需信息的存储地址
寻址方式:
数据的寻址:操作数的寻址 以什么样的方法获取或者计算获得地址
指令的寻址:程序流程的寻址 产生下一条要执行的指令的地址

通用数据传送指令MOV
指令格式 MOV DST SRC
指令功能 将原操作数SRC的值传递给目的操作数DST中保存

操作数字段可以是一个数据本身,也可以是一个数据的存储地址
因此操作数的具体表述是不一样的—>计算操作数地址的运算过程也不一样

DST必须是一个歹有存储功能的单元概念,不可以是一个数值本身
可以用辅存、内存和CPU中的寄存器

数据寻址的基本方式:

直接:指令中直接出现数据或者数据地址
立即寻址方式
常用于对变量的赋值与初始化
例如 MOV AX,5 把5送到AX寄存器中
只能用于SRC字段
SRC和DST的字长一致 例如MOV AH ,3064H就是错的,因为AH是8位,3064是16位
寄存器寻址方式:操作数在指定寄存器中
例如 MOV AX,BX
注意1、SRC原操作数寻址方式是立即数方式,其值范围要同DST相一致
MOV AX,70000是错误的
2、立即数用十六进制表征时,若第一个数是A~~~F,则前面一定要补一个0
MOV AX,10----MOV AX,AH(分不清楚了,因此错误的)-----MOV AX,0AH
小结:字节寄存器只有AH,AL,BH,BL,CH,CL,DH,DL
SRC与DST的字长一致
CS补能用MOV指令改 MOV CS,AX 是错误的

直接寻址方式:有效地址EA由指令给出
MOV AX,2000H //2000H放到AX
MOV AX,[2000H]//2000H是一个偏移地址,只是地址的一部分,一般用VALUE表示
如何计算物理地址
直接寻址中,有效地址所关联的段地址默认为DS,可采用段跨越前缀的方法改变
PA=EA*10H+DS 接下来开始寻找,注意先后的问题
ds寄存器无法直接赋值
平常的MOV反过来,就可以往内存里面存数据了

间接
寄存器间接寻址:
MOV AX [BX] SRC寄存器间接寻址
PA=(DS)*10H+(BX)/(SI)/(DI)
PA=(SS)*10H+BP
不允许用AX,CX,DX存放EA
MOV AX,[CX]错误的 //后面的【】里面在4个里面只可以是BX
【bx】功能描述
mov ax ,[bx]
将SA:EA处得到数据送入ax中

相对
寄存器相对寻址
MOV AX,COUNT[SI]
有效地址=(BX BP SI DI)+8位 16位位移量
基址变址寻址
有效地址 BX/BP+SI/DI
适用于数组、字符串等的处理
相对基址变址寻址方式
BX/BP+SI/DI+8/16位偏移量
堆栈处理
在这里插入图片描述

8086读取和执行指令的相关部件

CS和IP是CPU中最重要的寄存器,区分指令与数据
程序员能够用指令读写的部分只有寄存器
如何修改AX的值
mov指令
PS无法用来修改CS.IP的值
jmp指令:偏移地址
修改CS.IP
仅修改IP
jmp 某一个合法寄存器

80x86的指令系统

数据传送指令 串处理指令
算术指令 控制转移指令
逻辑指令 处理机控制指令

数据传送指令

负责把数据、地址或立即数传送到寄存器或存储单元
通用数据传送指令

PUSH进栈
MOV传送
POP出栈
XCHG交换

MOV传送指令
格式 MOV DST,SRC
执行操作:DST<–SRC
DST表示目的的操作数,SRC表示源操作数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值