微机原理8086/8088——指令系统与寻址方式
时间:2023-02-26 02:00:00
8086/8088概念系列微机原理
8086/8088-微型计算机原理
8086/8088-微处理器功能结构
8086/8088-内部寄存器原理
8086/8088-指令系统
8086/8088-数据传输指令
更新ing
微机原理8086/8088——指令系统与寻址方式
- 8086/8088概念系列微机原理
-
- 更新ing
- 前言
- 一、指令是做什么用的?
- 二、数据搜索方式
-
- 1.立即寻址
- 2.寄存器搜索方式
- 3.存储器搜索方式
-
- a直接寻址
- b间接搜索寄存器
- c相对地址的寄存器
- d寻址基址
- e相对基址变址寻址
前言
本文主要介绍了微型计算机指令系统和寻址方法
一、指令是做什么用的?
指令是程序的组成部分,它对应于一个基本操作,计算机能做什么样的操作取决于它的指令系统。
一般来说,每台计算机都有自己的指令系统,相互不兼容。同一系列的计算机指令系统确实是向上兼容的(也就是说,旧版本可以使用,新版本也可以使用,新版本不能用于旧版本)
二、数据寻址方式
寻址就是寻找指令或数据
1.立即寻址
操作码 数字表达式
MOV AX, 267
MOV AL, 10010011B AND 0FEH
此处的AL是由16位的AX两个寄存器之一,另一个是AH,所以AX接收16位数据,AL只能接收8位数据
注:该搜索方法只能用于双操作数指令的源操作数字段,而不能用于目的操作数
这意味着你只能把这个数字移给别人,而不是反过来
MOV 267, AX
这样是错的
2.寄存器搜索方式
操作码 寄存器名
MOV AX, BX
MOV AL, BL
可见这里也有16位传16位,8位传8位,只是把数字换成了寄存器的名字,相当于被赋值的变量名
这样的优点:
1.地址码短,缩短指令,节省内存
2.从寄存器取数字更快(原本从存储器取),提高指令执行时间
3.存储器搜索方式
a直接寻址
操作码 地址表达式(或[地址表达式])
这个[ ]有点像指针。如果我没有学过指针,我就这么说吧
MOV AL, 10
这个是把10给AL寄存器
MOV AL, [1000]
这也是给10000的AL吗?
**肯定不是!**1000换成2进制,AL可是AX超过了一半。
这个[1000]的意思是DS(代码段寄存器地址) 偏移地址1000指的单元内容。这里1000是代码段的偏移地址!
由于[1000]代表了地址单元的内容,这句话MOV指令是取出并放置该单元的数量AL寄存器。
对段寄存器的概念还不清楚的同学可以把寄存器器这篇文章。
既然可以理解[ ]了,那不带[ ]没有太多的解释,例子可以
假如TABLE数组的第一个地址(变量名)由数据段定义,其偏移值为1000,因此:
MOV AL, [1000]
MOV AL, [TABLE]
二者相同
计算一个主题
MOV AX, [1000H]
如果(DS)=3000H,(31000H)=12H,(31001H)=34H,那么(AX)=3412H
[1000]此时实际指向地址内容,该地址为3万H 1000H=31000H,寄存器是8位,AX是16位,读完3.1万H读取31001后的数据H在任何时候,高位是高字节,低位是低字节取12H到低位,再把34H放高位
操作码 [数字表达]
这意味着只在原偏移地址处添加数字,原理相同
MOV AL, [1000 2]
MOV AL, [TABLE 2]
二者一样
b间接搜索寄存器
操作码 [基址寄存器名或变址寄存器名]
回忆起基址寄存器和变址寄存器是什么?
基址寄存器:BX、BP
地址寄存器:SI、DI
MOV AX, [BX]
理解和上面一样,只是用寄存器代替了它
注意:如果[ ]里面是BX、SI、DI,然后默认操作数在数据段,使用段地址DS如果是,值BP,在堆栈中默认操作数SS的值
c相对地址的寄存器
后面的寻址方式都差不多
MOV SI, 5
MOV AX, TABLE[SI]也可以写成
MOV AX, [TABLE SI]
如果(SI)是00A0,(DS)=2000H,(201A0H)=12H,TABLE=0100H,(201A1H)=34H,那么TABLE[SI]也就是[TABLE SI]它仍然代表一个单元的内容,地址为2万 0100H 00A0H=201A0H然后取低字节和高字节
d寻址基址
MOV AX,[BX][SI]
或者是
MOV AX, [BX SI]
(DS)=2000H(BX)=0500H(SI)=0010H
偏移地址=0500H 0010H=0510H
加上段地址=20510H
(20510H)=12H,(20511H)=34H
则(AX)=3412H
e相对基址变址寻址
事实上,你已经发现他们的原则完全相同,但形式上有一些差异
MOV AL, TABLE[BX SI]
或者
MOV AL, [TABLE BX SI]