8086寻址方式

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并非所有寄存器都可自由使用。 并非所有寄存器都可自由使用。 源、目的操作数的字长必须一致。 目的操作数的字长必须一致。 字节寄存器只有 寻址速度很快。 寻址速度很快。
(×)MOV CS,AX , (×)MOV AH, BX
AH AL BH BL CH CL DH DL
9
存储器寻址( Addressing) 存储器寻址(Memory Addressing)
•无操作数指令 无操作数指令 STC CLI
目的操作数
4
源操作数
学习指令的注意事项
指令的功能——该指令能够实现何种操作。通常指令 助记符就是指令功能的英文单词或其缩写形式。 指令支持的寻址方式——该指令中的操作数可以采用 何种寻址方式。 指令对标志的影响——该指令执行后是否对各个标志 位(OV、Z、C、P等)有影响,以及如何影响。
MOV AX, ES: [2000H]

*P39
30H 50H VALUE DB 10 MOV AH, VALUE ;
AH AL 址 操作数地址可由变量(符号地址)表示 操作数地址可由变量(符号地址)表示, 但要注意
增 32000 50H

变量的属性 量
MOV AX,[VALUE]
32001 30H MOV AX, VALUE × MOV AX, WORD PTR VALUE √


B8H 2BH 1AH
操作码 立即数
立即数只能做源操作数。 立即数只能做源操作数。 源、目的操作数的字长必须一致。 目的操作数的字长必须一致。 字长必须一致
8
(×)MOV 3,AL , (×)MOV AH, 3064H
寄存器寻址( Addressing) 寄存器寻址(register Addressing)
•相对基址变址寻址 MOV AX , MASK [ BX ] [ SI ]
7
立即寻址( Addressing) 立即寻址(Immediate Addressing)
操作数直接存放在指令中,紧跟在操作码之后,作为指令的一部分,存放在代码 操作数直接存放在指令中,紧跟在操作码之后,作为指令的一部分,存放在代码 这种操作数称为立即数 常用来给寄存器赋值。 立即数。 段里,这种操作数称为立即数。常用来给寄存器赋值。 指令:MOV AL,07H 指令: , MOV AL, ‘A’ 指令: 指令:MOV AX,1A2BH ,
操作数存放在CPU内部的某个寄存器中 指令中不出现操作数本身, 操作数存放在CPU内部的某个寄存器中,指令中不出现操作数本身,而是给出存 内部的某个寄存器中, 放操作数的寄存器的名字。 放操作数的寄存器的名字。 寄存器寻址既可用于源操作数,也可用于目的操作数。 寄存器寻址既可用于源操作数,也可用于目的操作数。
10
基址
变址 偏移量
BX SI EA = BP + DI + DISP ① ② ③ DISP:8位或16位相对位移量
寻址方式 直接寻址( 直接寻址(③) [DISP] [BX] 寄存器间接寻址 (①/②) [BP] [SI] [DI] 基址寻址 (①+③) 变址寻址 (②+③) [BX+DISP] [BX+ [BP+ [BP+DISP] [SI+DISP] [SI+ [DI+DISP] [DI+ [BX+SI+DISP(或无DISP)] [BX+SI+DISP(或无DISP) 基址加变址寻址 (①+②+③) 11 [BX+DI+DISP(或无DISP)] [BX+DI+DISP(或无DISP) [BP+SI+DISP(或无DISP) [BP+SI+DISP(或无DISP)] [BP+DI+DISP(或无DISP) [BP+DI+DISP(或无DISP)] 有效地址EA 有效地址EA 默认的段寄存器 DS DS SS DS DS DS SS DS DS DS DS SS SS
操作数名称
寻址方式名称 立即寻址(immediate addressing) 立即寻址( addressing)
立即数
在寄存器中
寄存器操作数 寄存器寻址(register addressing) 寄存器寻址( addressing) 存储器操作数 存储器寻址(memory addressing ) 存储器寻址( I/O操作数 I/O操作数 I/O端口寻址(I/O port I/O端口寻址 端口寻址( addressing )
Leabharlann Baidu
MOV MO V MOV INC
CL, CL,BL AX,DX AX, DS, DS,AX SI
;将BL中的8位寄存器操作数送寄存器CL中 BL中的 位寄存器操作数送寄存器CL中 中的8 ;将DX中的16位寄存器操作数送寄存器AX中 DX中的 位寄存器操作数送寄存器 中 中的16位寄存器操作数送寄存器AX AX中的 位寄存器操作数送寄存器 中 中的16位寄存器操作数送寄存器DS ;将AX中的16位寄存器操作数送寄存器DS中 SI寄存器的内容加 寄存器的内容加1 ;将SI寄存器的内容加1
在存储器中 在I/O端口中 I/O端口中
6
与数据有关的寻址方式
以 MOV 指令为例: •立即寻址 •寄存器寻址 •直接寻址 •寄存器间接寻址 •寄存器相对寻址 •基址变址寻址 MOV AX , 3069H MOV AL , BH MOV AX , [ 2000H ] MOV AX , [ BX ] MOV AX , COUNT [ SI ] MOV AX , [ BP ] [ DI ]
的段为数据段 有
12
操作数
指令MOV AX,2000H的 指令MOV AX,2000H的
寄存器间接寻址
有效地址EA由寄存器(BX,BP,SI,DI)间接给出。 有效地址EA由寄存器(BX,BP,SI,DI)间接给出。 EA=( ) SI) DI) =(BX PA=( ) 16+ =(DS 当EA=(BX)/(SI)/(DI)时:PA=(DS)×16+EA 当EA=(BP)时:PA=(SS)×16+EA EA=( ) =(BP PA=( ) 16+ =(SS MOV AX, [BX] MOV AX, [DI] MOV [SI],AL , MOV [BP],DI , ;源操作数在数据段,EA=BX,PA=DS×16+EA 源操作数在数据段, = , = × + ;源操作数在数据段,EA=DI,PA=DS×16+EA 源操作数在数据段, = , = × + ;目的操作数在数据段,EA=SI,PA=DS×16+EA 目的操作数在数据段, = , = × + ;目的操作数在堆栈段,EA=BP,PA=SS×16+EA 目的操作数在堆栈段, = , = × +
第三章 8086的指令系统 8086的指令系统 和寻址方式
1
8086CPU的指令格式 8086CPU的指令格式
2
8086CPU的寻址方式 8086CPU的寻址方式 8086CPU的指令系统 8086CPU的指令系统
3
1
8086CPU的指令格式 8086CPU的指令格式
计算机完成某种操作的命令。 指 令:计算机完成某种操作的命令。 机器语言:指令的二进制编码构成的程序设计语言。 机器语言:指令的二进制编码构成的程序设计语言。 汇编语言:指令的助记符编码构成的程序设计语言。 汇编语言:指令的助记符编码构成的程序设计语言。 本书所称指令一般是指汇编指令 即用汇编语言编写的指令。 汇编指令, 本书所称指令一般是指汇编指令,即用汇编语言编写的指令。
操作数存放在存储器中,CPU取出指令后 为了获得操作数(对于源操作数) 操作数存放在存储器中,CPU取出指令后,为了获得操作数(对于源操作数)或 取出指令后, 操作数的存放地址(对于目的操作数)还要再次访问存储器。 操作数的存放地址(对于目的操作数)还要再次访问存储器。 指令中以逻辑地址 有效地址EA) 表示操作数存放的位置, 指令中以 逻辑地址 (有效地址 EA)表示操作数存放的位置 , 可能存放在存储器 逻辑地址( 的任意一个逻辑段中,CPU必须计算出操作数的物理地址才能完成存储单元的读 必须计算出操作数的物理地址才能完成存储单元的读、 的任意一个逻辑段中,CPU必须计算出操作数的物理地址才能完成存储单元的读、 写。 存储器寻址既可用于源操作数,也可用于目的操作数, 两者不能同时使用。 存储器寻址既可用于源操作数,也可用于目的操作数,但两者不能同时使用。 用方括号对[ 表示存储器寻址。 用方括号对[]表示存储器寻址。 逻辑地址LA:段地址: 逻辑地址LA:段地址:偏移地址 物理地址PA:段地址×16+ 物理地址PA:段地址×16+偏移地址 有效地址EA: 有效地址EA:偏移地址
直接寻址
有效地址EA在指令中直接给出 默认段是DS。 有效地址EA在指令中直接给出,默认段是DS。 在指令中直接给出, EA:操作数的偏移地址 EA: PA:(DS)×16+EA PA:( ) 16+ :(DS 【例】MOV AX,[2000H];数据段中偏移地址为2000H所对应的字送AX中 AX,[2000H];数据段中偏移地址为2000H所对应的字送 中 所对应的字送AX 设(DS)=3000H,则EA=2000H,PA=32000H DS)= )=3000H, EA=2000H,PA= * * (AX) = 3050H 可使用段跨越前缀
5
8086CPU的寻址方式 8086CPU的寻址方式
指令系统设计了多种操作数的来源
寻 址:寻找操作数地址的过程
寻址方式:寻找操作数地址的方法,对汇编程序设计很重要 寻址方式:寻找操作数地址的方法, 操作数采取哪一种寻址方式, 操作数采取哪一种寻址方式,会影响机器运行的速度和效率
操作数的位 置 在指令中
指令中,不允许使用AX、 指令中,不允许使用 、 CX、DX 等作偏移地址 、
BX SI EA = BP + DI + DISP
存储器操作数具有三个属性: 存储器操作数具有三个属性: 存放在指令中的一个8位、16或 存放在变址寄存器中的内容,常 存放在基址寄存器中的内容,常 操作数所在的逻辑段的段地址。 段 地 址:操作数所在的逻辑段的段地址。 32位的数,但它不是立即数, 用来访问数组中的某个元素或字 用来指向数据段中数组或字符串 偏移地址:相对段地址的偏移量。 而是一个地址 偏移地址:相对段地址的偏移量。 符串中的某个字符 的首地址 数据类型:操作数是一个字节/ PTR区分 区分。 数据类型:操作数是一个字节/字,用BYTE PTR/WORD PTR区分。
1011 1000 1100 0111 0000 0101B
3
汇编指令格式
用符号来表示操作码和地址码。格式: 用符号来表示操作码和地址码。格式:
标号: 标号:操作码
目的操作数,源操作数;注释 ;
指令操作的对象或操作对 象的地址 可有可无 分号隔开
每条指令必有
操作码:用助记符表示,执行一种操作,如传送、运算、移位、跳转等操作。 操作码:用助记符表示,执行一种操作,如传送、运算、移位、跳转等操作。 操作数: 各种操作的对象, 可以是具体的数值、 寄存器或存储器地址, 操作数 : 各种操作的对象 , 可以是具体的数值 、 寄存器或存储器地址 , 可有 0/1/2个操作数。操作数和操作码之间应用空格或制表符隔开。 个操作数。 个操作数 操作数和操作码之间应用空格或制表符隔开。 标号:用符号表示存放该条指令的存储器地址,符号后加冒号。 标号:用符号表示存放该条指令的存储器地址,符号后加冒号。 注释:以分号为首,对该条指令进行说明。 注释:以分号为首,对该条指令进行说明。 •单操作数指令 •双操作数指令 单操作数指令 双操作数指令 ADD SUB CX,1 , AX,1 , INC DEC CX AX
MOV AX,05C7H , B8C705H
汇编指令
C/C PASCAL ……
机器指令
高 级 语
编 一
汇 编 语
汇编 一 一
机 器 语 言


2
机器指令格式
每条机器指令都由” 每条机器指令都由”0“和”1“组成,包含操作码和地址码。格式: 组成,包含操作码和地址码。格式: 操作码 操作数
操作码:说明指令的性质与功能。 功能。 操作码:说明指令的性质与功能 操作数:参与运算的操作数或存放操作数的地址。(数值、寄存器、存储器) 操作数:参与运算的操作数或存放操作数的地址 操作数或存放操作数的地址。 数值、寄存器、存储器) 每种指令的操作码用唯一的助记符表示。 每种指令的操作码用唯一的助记符表示。 分固定长度和可变长度。X86系列 分固定长度和可变长度。X86系列CPU(CISC)采用可变长度,ARM(RISC) 系列CPU(CISC)采用可变长度,ARM(RISC) 和可变长度 采用固定长度。 采用固定长度。 8086CPU的机器指令长度为 8086CPU的机器指令长度为1~6个字节。 的机器指令长度为1 个字节。 的机器指令编码为B8C705H,转换成二进制为: 如:汇编指令MOV AX,05C7H的机器指令编码为 汇编指令 , 的机器指令编码为 ,转换成二进制为:
相关文档
最新文档