第3章 8086寻址方式和指令系统
微机原理课件第三章8086寻址方式和指令系统
数寻在址堆方栈式段来中说,,操就作相数当的于段钥地匙址在段寄存器SS中,操 作放数在的寄物存理器地中址,=即SS寄×存1器6+给BP出。 了要访问的存储单元地址。
DS 3000H ×16
┋
SI 2000H
操作码
+ COUNT 4000H
00
代码段
40
寄存器3相60对00H寻址方式也允许使┋用段超越前缀,
如MOV BX,ES:COUNT[DI]则段地址为ES,物
理地址=ES×16+DI+COUNT。
BH
BL
┋
BX 56
78
36000H
78
56
数据段
┋
指令MOV BX,COUNT[SI]的执行过程
{{ }} 组合起来([B只X能]+相[S加I)]+,D同8或时D还1可6 以加上一个8位或
((1SE86IE8和位A种A种=D的=)I)位也移不[[[[[[[BBB量能BSDBXPPPIIX]],]同]]]]+++但时++++[[[DDDDSDB出8888IIIX现或 或或 或]]]和+++在DDBDDD11P方1188866不66或 或 或括能DDD号111同寄中666时;存出器现相 变在相对 址方对基 寻括寻号址 址址中,
{ 设((D3E86A种S0==0M)300HO0)V[[[[0HBSBD=XIPIB,5]]]]X6或S7,+I8=18H[2S6位0I位0+位0C位H移O,移U量位N量T移] 量COU默 默N认 认T=DS4SS0段 段00H,
第3章_8086_指令系统和寻址方式
20
与地址有关的寻址方式(二)
(2) 段内间接寻址 用段内间接寻址方式时,有效地址总是在寄存器中或是内存单元中 的内容,段内间接寻址方式可适用于于无条件转移指令和调用指令。 不能用于条件转移指令。 存储器或存储单元的内容可以用数据寻址方式中除立即数以外的任 何一种寻址方式,所得到的转向的有效地址用来代替IP寄存器的内 容。 (DS)=2000H,(BX)=1256H,(SI)=528FH,位移量=20A1H (232f7)=3280H,(264E5H)=2450H JMP BX JMP TABLE[BX] JMP [BX][SI]
MOV AX,1090H
6ห้องสมุดไป่ตู้
与数据有关的寻址方式(二) (2) 寄存器寻址方式 定义:指令中操作数由寄存器提供的寻址方式。指令指 定寄存器号。
16位:AX, CX, DX, BX, SP, BP, SI, DI 8位: AH, AL, BH, BL, CH, CL, DH,DL
这种寻址方式操作数就在寄存器中,不需要访问存储器来取得操作 数,可以得到较高的运算速度 ;将AL中内容送入DL中 MOV DL,AL ;将CX中内容送入AX中 MOV AX,CX
8
与数据有关的寻址方式(三)
指令中的操作数部分直接给出操作数的有效地址EA, 操作数可以是16位或32位整数,操作数默认在DS段中 低地址 MOV AX, [3000H] 操作码
00H
DS + 5000 0 3000 53000 50000 53000 AX 12H 34H 34H 12H
CS段
30H
16
与数据有关的寻址方式(八) (6) 基址变址寻址方式 定义:由基址寄存器(BX,BP)的内容加上变 址寄存器(SI,DI)的内容得到操作数有效地 址EA的寻址方式。 [BX] [SI] 操作数的有效地址为:EA
第三章 8086的寻址方式和指令系统[3-1]
ADD AL, 10
HLT
§3-1 8086的寻址方式
一、概述
2、指令通常应提供的信息
按做什么操作 操作数从哪里来 操作结果放在哪里 对于调用和转移指令,还要涉及转移或调用地址的提供方式
3、指令的组成
操作码( Opcode ) --标明计算机要执行什么操作 操作数( Operand ) --指出指令在执行过程中所需要的操作数(值为多少 或者放在什么地 方),以及操作结果送到哪里。 操作数可以存放在寄存器、存储器、I/O端口地址中,也可以是在指 令中(立即数)。
作用:寄存器之间传递数据。
17
§3-1 8086的寻址方式
二、寄存器寻址(Register Addressing)
例: MOV DX,AX ; DX
指令执行前:AX=2233H 指令执行后:AX=2233H,DX=2233H
AX内容不变
AX
AX
2233H
DX
18
§3-1 8086的寻址方式
作用:实现对存储器单元的读/写操作。
21
§3-1 8086的寻址方式
三、直接寻址(Direct Addressing)
例:
MOV AX , [2A00H]
MOV DX , ES: [2A00H] MOV SI , TABLE_PTR
存储器存取时约定段
22
§3-1 8086的寻址方式
6
§3-1 8086的寻址方式
一、概述
5、操作指令
现代微型计算机中多采用双操作数指令,两个操作数分别称 为“目的操作数”和“源操作数”。指令执行后,把运算结 果放到目的操作数的地址之中。 指令的操作码在机器中的表示比较简单,只要对每一种操作 指定相应的二进制代码即可;而指令的操作数字段的情形就 比较复杂。
微机原理及接口技术课件第3章 8086寻址方式与指令系统
17
3.2 8086寻址方式
4.寄存器间接寻址 MOV AX, [SI] ; 将[SI]为有效地址的存储器单元中的操作数送至 ; AX,默认DS为当前段基寄存器 MOV AX, [BP] ; 将[BP]为有效地址的存储器单元中的操作数送至AX, ;默认SS为当前段基寄存器
18
3.2 8086寻址方式
如果转向地址直接放在指令中,则这样的转移称为直接转移,视转移地 址是绝对地址还是相对地址(即地址位移量)又可分别称为绝对转移和相 对转移;如果转向地址间接放在其他地方(如寄存器中或内存单元中), 则这样的转移称为间接转移。
26
3.2 8086寻址方式
1.段内直接寻址 采用段内直接寻址方式,在汇编指令中直接给出转移的目标地
13
3.直接寻址
3.2 8086寻址方式
MOV AX, [2000H] MOV BX, NUM MOV VAR, AL MOV DATA, SP
; 将数据段中2000H单元内容送至AX中 ; 把数据段存储单元NUM中的字内容送至BX ; 把AL的字节内容送至数据段存储单元VAR中 ; 把SP的内容送至数据段存储单元DATA中
5
3.2 8086寻址方式
8086CPU的寻址方式有两类:数据寻址和转移地址寻址。 在讨论寻址方式之前,先简单介绍一条汇编语言中最常用 的指令:
MOV dst, src ; dst←(src)
其功能是将由“源操作数src”所指出的数据传送到由“目 的操作数dst”所指定的地方,其dst用于指定目的操作数的 寻址方式,src用于指定源操作数的寻址方式。
第3章8086的寻址方式指令系统
4、寄存器间接寻址(Register indirect addressing) 内存单元的逻辑偏移地址通过寄存 器间接给出。 例: MOV SI , 61A8H MOV DX , [SI]
5、基址/变址寻址(Based/Indexed addressing)
这种寻址方式中提出位移量的概念, 即在寄存器间接寻址给出的偏移地址上, 加一相对位移量。位移量是一带符号的16 位16进制数。当使用BX或BP寄存器时, 称基址寻址;使用SI或DI寄存器时,称 变址寻址。 例: MOV CX , 36H[BX] MOV -20[BP] , AL
4)XCHG 交换指令
指令格式为: XCHG 目的操作数 ,源操作数 操作数不能为立即数; 源和目的不能同时为存储单元; 段寄存器不能作为操作数。
2、累加器专用传送指令
1) IN 输入指令
指令格式为: IN IN IN IN AL , n AX , n AL , DX AX , DX n , AL n , AX DX , AL DX , AX
3、算术乘法指令
1) MUL 无符号数乘法 指令功能:完成两个操作数相乘 2) IMUL 带符号数乘法 指令功能:完成两个操作数相乘 3) AAM 非压缩BCD数乘法操作结果校正 指令功能:完成两个非压缩BCD 数乘法结果的十进制数调整
4、算术除法指令
• DIV 无符号数除法 指令功能:完成两个操作数相除 • IDIV 带符号数除法 指令功能:完成两个操作数相除
JC JNC JE/JZ JNE/JNZ JS JNS JO JNO JP/JPE JNP/JPO ;CF标志为1,则转移 ;CF标志为0,则转移 ;ZF标志为1,则转移 ;ZF标志为0,则转移 ;SF标志为1,则转移 ;SF标志为0,则转移 ;OF标志为1,则转移 ;OF标志为0,则转移 ;PF标志为1,则转移 ;PF标志为0,则转移
第三章8086的寻址方式和指令系统
段寄存器 CS*,DS,SS,ES
MOV功能描述
MOV允许在CPU的寄存器之间、存储器与寄存器之间 传输数据,也可将立即数传到寄存器和存储器中 注意: 1. IP寄存器不能作为操作数 2. 立即数和CS不能作为目的操作数 3. 两个操作数不能同时为存储器,也不能同时为段寄 存器 4. 立即数不能送入段寄存器
而:
10
MOV
AX,
[BX]
11
五、寄存器相对寻址
MOV
AX,
[BX+1008H]
利用这种寻址方式时,操作数在存储器中。而操作 数有效地址由BX、BP、SI、DI中的内容加上指令中给出 的位移量, 得到操作数的有效地址。
有效地址=间址寄存器的内容加上一个8/16位的位移量
(BX)
有效地址=
(BP) (SI) (DI)
可以访问216=64K个I/O端口。
22
寻址方式总结
• 操作数,要么在存储器里,要么在寄存
器里,要么在IO端口中。
• 如果出现”[]”,则操作数在存储器里,需
要确定其段基址和偏移地址
• 不带“[]”的,就是立即寻址和寄存器寻
址、隐含寻址、IO端口寻址了。
23
3.3
8086 的指令系统 ý 数据传送指令
3、立即数到段寄存器
举例: 向1000H开始的100个存储单元写入ASCII码2AH(*) 程序段如下: MOV SI,1000H MOV CX,100 MOV AL,2AH AGAIN:MOV [SI],AL INC SI DEC CX JNZ AGAIN INT 20H ;返回DOS
33
上程序段存放在代码段中,設(CS)=109EH ,则各条指令存放地址如下: 109E:0100 109E:0103 109E:0106 109E:0108 109E:010A 109E:010B 109E:010C 109E:010E 109E:0110 MOV MOV MOV MOV INC DEC JNZ INT SI, 1000H CX, 64H AL, 2AH [SI],AL SI CX 0108 20H
第三章_8086的寻址方式和指令系统[3-3.1]
(其中:JNZ为条件转移指令,表示结果不为零则转移)
§3-3 8086的指令系统
2.算术逻辑移位指令(Shift Arithmetic and Shift Logical)
这类指令可对寄存器、存储器中的字或字节的各位进行算术移位或 逻辑移位,移位的次数由指令中的计数值决定。
算术左移指令 SAL(Shift Arithmetic Left)
6
§3-3 8086的指令系统
(3)OR逻辑或指令(Logical OR)
指令格式:OR 目的,源
指令功能:目的目的∨源 指令用途:主要用于使操作数的某些位保留(和“0”相或),而使某些位 置位(和“1”相或)。
例1: MOV AX, 3538H AND OR AX, 0F0FH AX,3030H ; AX 0508H ; AX 3538H
算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Logic Left) 逻辑右移指令 SHR(Shift Logic Right)
这4条指令的格式相同,以SAL为例:
SAL mem/reg,
CL
1
;移位位数大于1时
;移位位数等于1时
例: MOV CL, 05H
解:MOV AL,1000 0101B
MOV CL,03H SHR 运行结果: AL,CL
;AL=133
;CL=移位次数
;右移3次
指令执行后,AL=00010000B=10H=16,余数5被丢失。 标志位CF=1,ZF=0,SF=0,PF=0,OF和AF不定。
15
§3-3 8086的指令系统
(4)SAR算术右移指令(Shift Arithmetic Right)
第3章8086的寻址方式和指令系统
第3章8086的寻址方式和指令系统【课前思考】(1)什么是指令和指令系统?指令在什么时候由哪部分来执行?(2)8086汇编语言指令由几部分组成?各部分的作用是什么?(3)8086汇编语言指令可以有几个操作数?指令中指定的操作数可能存放在哪里?(4)什么是寻址方式?8086汇编语言提供了几种寻址方式?(5)各种寻址方式所确定的有效地址是什么?(6)在存储器寻址方式中,为什么有时候要使用段跨越前缀?(7)8086机器语言指令由哪几个字节组成?为什么说汇编语言指令与机器指令是一一对应的?(8)8086的指令系统按功能可分为几组?(9)每条指令的功能、助记符、所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。
【学习目标】熟练掌握8086各种寻址方式;熟悉8086常用指令的功能【学习指南】学习寻址方式时,要注意各种寻址方式所指定的操作数或操作数地址是什么;各种寻址方式形成操作数地址时,段寄存器和基址、变址寄存器的组合;各种寻址方式限定使用的寄存器。
学习指令系统时,要注意每条指令的功能,所支持的寻址方式、对标志位的影响、需要预置的参数以及隐含使用的或限定使用的寄存器等。
【难重点】重点理解8086常用指令的功能,熟悉8086的各种寻址方式,这是进行汇编语言程序设计的基础。
【知识点】3.1 寻址方式3.3 指令系统第一节 8086的寻址方式指令的一般格式:例如,单操作数指令就是一地址指令,它只需要指定一个操作数,如加1指令只需要指出需要加1 的操作数。
大多数运算型指令可使用三地址指令:除给出参加运算的两个操作数外,还指出运算结果的存放地址。
也可使用二地址指令,此时分别称两个操作数为源操作数(source)和目的操作数(destination)。
尽管在指令执行前这两个操作数都是输入操作数,但指令执行后将把运算结果存放到目的操作数的地址之中。
8086的大多数运算型指令就采用这种二地址指令。
微机原理第三章 8086寻址和指令系统
4、查表转换指令 XLAT 指定表首地址→BX;表元素号→AL 查表结果((BX)+(AL)) →AL 例:若十进制数字0~9 的 LED七段显示码对照表已存放在内存中, 表格的首地址为TABLE,用 XLAT 指令求数字5的七段显示码 值程序如下: TABLE DB 40H, 79H, 24H, 30H, 19H ; 建立七段显示码表格 DB 12H, 02H, 78H, 00H, 18H OFFSET是运算符 MOV AL,5 ; AL 5 MOV BX,OFFSET TABLE ; BX 表格首地址 XLAT ; AL 12H
AAA
非压缩十进制加法BCD调整(8bit) CF、OF、PF、SF、ZF
8bit(0×) 加 法 后 , AL 中 的 非 压 缩 BCD 码 → AH(0+ 拾 位)AL(0+个位)。 例: MOV BL,09H MOV AL,05H ADD AL,BL AAA ;非压缩BCD码 ; ;(AX)=0104H 09 05 (AL)=0 EH AAA调整 (AX)=0 1 0 4H
指令
基址寄存器
disp
&
EA 内存 操作数
基址 (BX) (SI) (DI) (BP)
EA=
+disp 段寄存器DS(即操作数在数据段)
+disp 段寄存器SS (即操作数在堆栈段)
指令
基址寄存器
disp
&
EA
内存 操作数
基址
EA=
(BX) (SI) (DI) (BP)
+disp 段寄存器DS(即操作数在数据段) +disp 段寄存器SS (即操作数在堆栈段)
第三章 8086寻址和指令系统
3.第三章 8086的寻址方式和指令系统
3.1.2 8086指令系统的寻址方式
1. 立即寻址
立即寻址方式中,源操作数是一个立即数,它作为指令的一 部分紧跟在指令操作码之后,都存放于内存的代码段中。 立即数可以是8位或16位整数,若为16位,低8位放低地址单 元,高8位放高地址单元。 例子:MOV AX,3102H 如下图所示: B8
操作码 AH AL 02H 代 码 段
图 MOV指令所允许的数据传送路径及类型
MOV指令的形式有如下几种:
1)从通用寄存器到通用寄存器 MOV reg1,reg2
2)立即数传送到通用寄存器
3)通用寄存器和存储单元之间
MOV reg ,imm
MOV mem (reg),reg (mem) 4)立即数传送到存储单元 MOV mem, imm 5)段寄存器与通用寄存器间的数据传送 MOV seg,reg 或 MOV reg, seg 6)段寄存器与存储单元间的数据传送 MOV seg,mem 或 MOV mem, seg
B0 B1 B2………….B9 B10…..
TABLE
另外:以下书写格式等同: MOV AL ,DATA[SI], MOV AL ,DATA+[SI] MOV AL ,[DATA+SI]
(4) 基址-变址寻址
基址变址寻址方式是: 由一个基址寄存器 ( BX或BP )和一个变址寄存器( SI或DI )的 内容相加形成操作数的偏移地址EA 。但指令中 不能同时出现两个基址寄存器或两个变址寄存器。 如果基址寄存器为BX,则段寄存器使用DS;如果 基址寄存器用BP,则段寄存器用SS。允许段超越
默认配对:BX
DS
;
BP
SS
微机原理 第3章 8086的寻址方式和指令系统
与有效地址有关的寻址方式的确定
有效地址的三种成分的不同组合形成以下5种不同 的寻址方式: – 只有位移量一种成分----直接寻址 – 只有基址或变址一种成分----寄存器间接寻址 – 含有位移量和基址(或位移量和变址)两种 成分----寄存器相对寻址 – 含有基址和变址两种成分----基址变址寻址 – 三种成分同时存在----相对基址变址寻址
3.3 8086指令系统
开 始
3.1 指令的寻址方式
计算机都是通过指令来解决问题的,因而 每种计算机都有一组指令供使用,成为计 算机的指令集。
汇编语言指令由操作码和操作数两部分组 成的
– 操作码:指示计算机所要进行的操作,对每一种操 作指定一种二进制代码。 – 操作数:操作的对象,操作数可以是立即数,寄存 器或存储单元;操作数可以有一个、两个或三个, 也可以无操作数
②源操作数必须与目的操作数相匹配。
如
MOV AL,BX是错误的
3. 存储器寻址
如果操作码所需操作数存放在内存储器中,则 指令中需要给出操作数的地址信息。
有效地址:操作数的偏移地址称为有效地址(EA)
有效地址的三种成分: 位移量:存放在指令中的一个8位、16位的位移量 基址:存放在基址寄存器中的内容 变址:存放在变址寄存器中的内容 有效地址的计算: EA=位移量+基址+变址
2. 寄存器寻址
寄存器寻址方式的操作数在指令指明的寄 存器中。
注意 – 源、目的操作数的类型必须一致 – 目的操作数不能为代码段寄存器 – 由于操作数都在寄存器中,不需要访问 存储器来取得操作数,因而可以得到较 高的运算速度
【例3.2】
下列程序执行后,(AX)=?,(BX)=? MOV AX,1234H MOV BX,5678H ADD AX,BX 该程序中MOV指令为数据传送指令操作符,ADD指令 为加法指令操作符,三条指令皆为双操作数指令。第一、二
3 8086的寻址方式和指令系统
⑵ seg——段寄存器 ⑶ mem——存储单元 ⑷ imm——立即数
ruction)最简单、最常
用的一类指令,一般功能为把数据从 一个存储位置搬运到另一个存储位置, 一般不影响标志位。
一、MOV —— 数据传送指令
(4C002H)=5A78H
源操作数为寄存器间接寻址,有效地址由 (BP)指出,隐含使用的段寄存器为SS 要特别注意隐含搭配的段寄存器。
⑷寄存器相对寻址方式
操作数在存储器内,利用基址或变址寄存器内容加上位移 量作为偏移地址来寻址内存中的数据 形式: 位移量[寄存器] 或 [位移量+寄存器]
偏移地址EA= 5000H 物理地址 =35000H
例②: 执行指令 :ADD 5[BP],BL 执行前 BL=40H, BP=0030H,SS=2000H, (20035H)=50H 求执行结果 (20035H)=90H
⑸基址变址寻址方式:
操作数在存储器中,指令将基址寄存器(BX或BP) 与变址寄存器(SI或DI)内容之和作为操作数的偏移 地址。 形式: [基址寄存器名+变址寄存器名]
⑶ 寄存器间接寻址
形式: [寄存器]
例: MOV AX,[BX] 操作数的偏移地址存在基址或变址寄存器中、操作数存在 内存。 寄存器名要用方括号括起,以便与寄存器寻址相区别。 (BX) +段寄存器DS段地址 (SI) 物理地址 = (DI) (BP) +段寄存器SS段地址
物理地址计算方法: 物理地址 =(DS) * 16 + (BX)或(SI)或(DI) 物理地址 =(SS) * 16 + (BP)
MOV [2000H], BL
MOV [3000H], AL
第三章 8086的寻址方式和指令系统
第三章 8086/8088的指令系统
3.1 8086的寻址方式 3.2 指令的机器码表示方式 3.3 8086的指令系统
3.3 8086的指令系统
一、数据传送指令 三、逻辑运算指令 五、控制转移指令
二、算术运算指令 四、串操作指令 六、处理器控制指令
3.3 8086的指令系统
8088的指令系统可以分为六个功能组:
(一)通用传送指令 (续)
数据段说明举例:
DATA SEGMENT ;数据段说明开始 AREA1 DB 14H,3BH AREA2 DB 3 DUP(0) ARRAY DW 3100H,01A6H STRING DB ‘GOOD’ DATA ENDS ;数据段说明结束
AREA1 机器码表示方式
汇编语言(Assembly Language)是面向机器的程序设计语 言。在汇编语言中,用助记符(Memoni)代替操作码,用地址 符号(Symbol)或标号(Label)代替地址码。这样用符号代替机 器语言的二进制码。就把机器语音变成了汇编语言。于是汇 编语言亦称为符号语言。 使用汇编语言编写的程序,机器不能直接识别,要由一 种程序将汇编语言翻译成机器语言,这种起翻译作用的程序 叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇 编语言把汇编程序翻译成机器语言的过程称为汇编。 汇编语言比机器语言易于读写、易于调试和修改,同时 也具有机器语言执行速度快,占内存空间少等优点,但在编 写复杂程序时具有明显的局限性,汇编语言依赖于具体的机 型,不能通用,也不能在不同机型之间移植。
8086的寻址方式
计算机的指令一般由操作码和操作数组成,操作码规定了 指令的功能;而操作数则规定了指令操作的对象。操作数可以 以立即数的形式存放在指令中,但在大多数情况下,操作数是 以地址的形式存放在指令(指示操作数在哪儿)。用于说明操 作数所在地址的方法称为寻址方式。 在微机中,操作数存放在: 1、在指令中;2、在CPU的 某一内部寄存器中;3、在内存的数据区中;4、I/O端口。 在8086CPU中,内存地址是由数据段地址和段内偏移量 组成。而指令中规定的地址即为段内偏移量(逻辑地址)— —有效地址EA,有效地址EA构成的方法不同,则为不同的寻 址方式。
第三章 8086指令系统和寻址方式
汇编语言复习辅导第三章8086指令系统和寻址方式应掌握编写一个完整的汇编语言程序所必需的知识及其相应概念:(1)汇编语言程序的格式(2)常用伪指令(伪操作)(3)8086寻址方式(4)8086指令系统1汇编语言程序格式. 80x86的逻辑段:堆栈段、数据段、附加段、代码段(1)完整段定义;- - - - - - - - - - - - - - - - - - - - - - -STSEG SEGMENT ;定义堆栈段DB 64 DUP(?)STSEG ENDS;- - - - - - - - - - - - - - - - - - - - - - -D T SE G S E G M E N T;定义数据段DATA1 DB 36HDATA2 DB 4BHS U M D B?D T SE G E N D S;-----------------------CDSEG SEGMENT ;定义代码段M A I N P R O C F A R ASSUMECS:CDSEG,DS:DTSEG,SS:STSEGSTART: MOV AX,DTSEG MOV DS,AX;设置数据段地址M O V A L,D A T A1;用户程序M O V B L,D A T A2A D D A L,B L M O V S U M,A LMOV AH,4CH ;返回DOSINT 21HM A I N E N D PCDSEG ENDSEND START ;汇编结束(2)简化段格式:·M O D E L S M A L L;存储模型·S T A C K100H;定义堆栈段及大小·D A T A;定义数据段V A R1D B?·C O D E;定义代码段M A I N P R O C F A R;定义过程S T A R T:M O VD X,@D A T A;设置数据段M O V D S,A X; 地址…M O V A X,4C O O H;返回DOSI N T21HM A I N E N D P;过程结束E N D S T A R T;汇编结束2.常用伪操作(1)程序结构伪操作段定义伪操作:段名S E G M E N T……段名E N D S过程定义伪操作:过程名P R O C[N E A R/F A R]……过程名E N D P程序开始和结束伪操作:T I T L E程序名----程序说明(<60个A S C I I字符)E N D[S T A R T]段分配伪操作:A S S U M E C S:代码段名,D S:数据段名A S S U M E S S:堆栈段名,E S:附加段名(2) 数据类型及数据定义伪操作•O R G指定数据的存储地址或代码段的起始地址例: ORG 100H 例: ORG 100HDATA1 DB 100 START: MOV AX,BX•D B定义字节,其后的数据存储在一个字节中•D W定义字,对其后的数据分配2个字节,数据的低8位存放在低字节,高8位存放在高字节; List File for DD Examples00A0O R G 00A0H00A0F F030000D A T A13D D102300A45C960800D A T A14D D10001001011001011100B00A8F2572A5C D A T A15D D5C2A57F2H00A C2300000089470300D A T A16D D23H,34789H,65533F D F F0000•D Q定义4字,为数据分配8个字节单元•D T定义5字,为压缩的B C D数据分配存储单元例如:D A T A D Q1122334455667788HD A T B D T?•D U P按照给定的次数来复制某个(某些)操作数例如:D A T C D W32D U P(?)D A T D D B5D U P(0,8D U P(1))•E Q U赋值伪操作•=C O U N T E Q U25C O U N T E RD B C O U N TM O V A H,C O U N TT E M P=25M O V A H,T E M PT E M P=T E M P+1M O V A L,T E M P(3)属性伪操作•PTR指定操作数的类型属性M O V A X,W O R D P T R D A T BM O V B L,B Y T E P T R D A T W•LABEL定义变量或标号的类型属性B_D A T L A B E L B Y T EW_D A T D W50D U P(?)3. 8086寻址方式寻址方式--指令中表示操作数地址的方式,学习时要注意:(1) 正确书写各种寻址方式的汇编格式(2) 清楚各种寻址方式所指定的操作数或操作数地址在何处?( 指令中/ 寄存器中/ 存储器单元中)(3) 各种存储器寻址方式是如何形成操作数的物理地址的?(段寄存器/ 基址、变址寄存器/ 偏移量的组合关系)(4)各种寻址方式限定使用的寄存器<1>与数据有关的寻址方式小结寻址方式操作数地址(PA)指令格式举例立即寻址操作数由指令给出MOVDX, 100H ;(DX)←100H寄存器寻址操作数在寄存器中ADD AX, BX ;(AX)←(AX)+(BX)直接寻址操作数的有效地址由指令直接给出MOV AX, [100] ;(AX)←(100)MOV AX,V AR ;(AX)←(V AR)寄存器间接PA=(DS)×16+(BX)或(SI)或(DI)PA=(SS) ×16+(BP) MOV AX, [BX]; (AX)←((DS)×16+(BX))寄存器PA=(DS)×16+(BX)或(SI)或(DI)+位移量相对寻址PA=(SS) ×16+(BP)+位移量MOV AL, MESS[SI];(AL)←((DS)×16+(SI)+OFFSET MESS)基址变址PA=(DS)×16+(BX)+(SI)或(DI)PA=(SS) ×16+(BP) +(SI)或(DI) MOV AX, [BX+DI];(AX)←((DS)×16+(BX)+(DI))相对基址PA=(DS)×16+(BX)+(SI)或(DI)+位移量变址寻址PA=(SS) ×16+(BP) +(SI)或(DI)+位移量MOV AX, BUFF(BX+DI);(AX)←((DS)×16+(BX)+(DI)+OFFSET BUFF)<2> 与转移地址有关的寻址方式用来确定转移指令及C A L L指令的转向地址。
第3章8086寻址方式与指令系统
❖操作数的物理地址 =(DS)×10H+(SI)/(DI)+(BX) 或 =(SS)×10H+(SI)/(DI)+(BP)
第3章 8086寻址方式与指令系统
❖例如: MOV AX,[BX] [SI] ❖该指令的源操作数采用基址变址寻址方式。 ❖若(DS)=2000H,(BX)=2008H,(SI)=8H,
第3章 8086寻址方式与指令系统
❖例如: MOV AX,[SI]
❖该指令的源操作数采用寄存器间接寻址方式。 ❖若(DS)=2000H,(SI)=2010H,那么指令执行后
,(AX)=1225H。 ❖如操作数不存放在间址寄存器默认的段,则指
定段超越的指令可采用如下形式。 MOV AX,ES:[SI]
寄存器寻址方式指令执行示意图
存储器
AH
AX
20H
00000H
~~
AL
10H
操作码
10H
代码段
20H
~~
FFFFFH
第3章 8086寻址方式与指令系统
寄存器寻址方式说明
❖在一条指令中,寄存器寻址方式既可用于源操作 数,也可用于目标操作数,还可以两者都用寄存 器寻址方式。
❖源操作数与目标操作数的长度应一致。例如,不 能将寄存器AX的内容传送到寄存器BH中,也不能 将寄存器BH的内容传送到寄存器AX中。
第3章 8086寻址方式与指令系统
❖8086汇编指令中的操作数可以有零个、一个或两 个,通常称为零地址、一地址或二地址指令。
❖二地址指令中的两个操作数分别称为源操作数和 目标操作数。
第3章 8086寻址方式与指令系统
第3章 8086的寻址方式和指令系统(1)
EA=
8086寻址方式和指令系统 第3章 8086寻址方式和指令系统
例3.11 MOV BX, [SI] DS=1000H,SI=2000H,( , ,(12000H)= )=318BH ,( )=
8086寻址方式和指令系统 第3章 8086寻址方式和指令系统
指令中也可以指定段跨越前缀来取得其他段中的 数据。 数据。 ,(BX) 【例】寄存器和存储器内容分别为:( )=0,( ) 寄存器和存储器内容分别为:(AX) ,( :( =0030H,( )=2000H,( ,(DS) ,(20030H)=50A0H,( ) ) ,(ES) ,( ,( ,( =1000H,( ,(10030H)=2059H ,( ) 执行指令:MOV AX ,ES:[BX] ES: 执行指令: 执行后: AX) 执行后:(AX)=? 物理地址=16d 物理地址=16d×(ES)+(BX) ES) BX) =16d ×1000H+0030H=10030H 执行结果为: 执行结果为: (AX)=2059H AX)
26H
执行: 执行:26H→AL 执行后: 执行后:(AL)=26H )
8086寻址方式和指令系统 第3章 8086寻址方式和指令系统
【例3.2】MOV AX, 2A50H 】 , 执行后( ) ? 执行后(AX)=? 该例中源操作数为立即寻址方式, 立即数为2A50H, 存 该例中源操作数为立即寻址方式 , 立即数为 , 放在指令的下两个单元。 放在指令的下两个单元。 图形表示: 图形表示:
8086寻址方式和指令系统 第3章 8086寻址方式和指令系统
CPU结构 8086 CPU结构
8086寻址方式和指令系统 第3章 8086寻址方式和指令系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
30
31
加法指令(Addition)
ADD 加法指令
ADD 目的,源;目的←源+目的 ADC 目的,源;目的←源+目的+CF,用于多字节加法
ADC带进位的加法指令
目的操作数只能是寄存器和存储单元 源操作数可以是寄存器、存储器或立即数 注意:源和目的操作数不能同时为存储器,必须都是字节或字
AX
(21A00H)=26BFH
16
存储器寻址
5
17
8086指令系统
数据传送指令 算术运算指令 逻辑运算
18
19
数据传送指令
通用数据传送指令
输入输出指令
MOV PUSH
目的,源 源
IN AL,端口地址
OUT 端口Biblioteka 址,ALIN AX,端口地址
IN AL,DX IN AX,DX
CX
12H 34H
操作码 34H 12H CS段 高地址
注意:立即数只能作源操作数,不能作目的操作数; 以A~F开头的数字出现在指令中需在前加0
5
寄存器寻址(Register Addressing)
操作数包含在指令中指定的8位或16位寄存器中 寄存器:AX,BX,CX,DX,SI,DI,SP,BP
物理地址=16×DS+BX+SI(DI)+位移量 物理地址=16×SS+BP+SI(DI)+位移量
15
基址寄存器为BP时,段寄存器为SS
相对基址变址寻址 (Relative Based Indexed Addressing)
例:MOV AX, 200H[BX][SI] ≌ MOV AX, 200H[BX+SI] ≌ MOV AX, [200H+BX+SI] ≌ MOV AX, [BX+200H][SI] 如DS=2000H,BX=1500H,SI=0300H, 则物理地址=16×DS+BX+SI+200H =20000H+1500H+300H+200H =21A00H
对存储单元操作时必须说明是字还是字节
例:INC BL; INC CX;
INC INC
BYTE PTR[BX] WORD PTR[BX]
34
减法指令(Subtraction)
SUB 减法指令
SUB 目的,源;目的←目的-源
SBB 带借位的减法指令 SBB 目的,源;目的←目的-源-CF,用于多字节减法 DEC 减量指令 DEC 目的;目的←目的-1 NEG 取负指令 NEG 目的;目的←0-目的 CMP 比较指令
操作数 操作数地址 操作数 寄存器 立即寻址 MOV AL,20H 直接寻址 MOV AL,[1234H] 寄存器寻址 MOV AL,BH 寄存器间接寻址 MOV AL,[BX] 寄存器相对寻址 MOV AX,200H[BX] 基址变址寻址 MOV AX,[BX][SI] 相对基址变址寻址 MOV AX,200H[BX][SI]
指令中给出的寄存器中的内容是操作数的有效地址EA
寄存器加[],与寄存器寻址区别 间址寄存器:基址寄存器BX、BP和变址寄存器SI、DI
BX、SI、DI作间址寄存器时,默认段地址为DS中内容
BP作间址寄存器时,默认段地址为SS中内容 可以指定段超越前缀访问默认段以外数据 例: MOV MOV AX,DS:[BP] AX,ES:[SI]
直接寻址(Direct Addressing)
例: MOV AX,[2000H]
操作码 00H
低地址 CS段
DS 3000 ×10H + 2000 30000 32000 32000 AX 12H 34H
20H
34H 12H
DS段 高地址
8
寄存器间接寻址 (Register Indirect Addressing)
25
输入输出指令
IN 输入指令(input)
IN IN IN IN
AL, AX, AL, AX,
端口地址 8位端口地址 端口地址 DX; 端口地址存放在DX中 DX
8位端口地址 16位端口地址
16位端口地址
OUT 输出指令(output)
OUT OUT OUT OUT
微机原理及应用
第3章 8086寻址方式和指令系统
寻址方式和指令系统
8086寻址方式 8086指令系统
2
8086寻址方式
指令
操作码-操作的性质 操作数-操作的对象 寻址方式-说明操作数本身或其所在地址的方法
操作码 目的操作数,源操作数;注释
指令格式
例
MOV AL,1
3
8086寻址方式
基址寄存器为BP时,段寄存器为SS
物理地址=16×SS+BP+SI(DI)
例:MOV AX,[BX][SI] ≌ MOV AX,[BX+SI]
13
基址变址寻址 (Based Indexed Addressing)
例:MOV AX,[BX][SI]
操作码 DS BX + SI 3000 ×10H 1200 0500 31700 31700 AX 12H 34H 34H 12H DS段 高地址
FE 20 FE
FE 25 20 31 SP
AX BX
25 31 25
24
通用数据传送指令-XCHG
寄存器
存储器
段寄存器不能作操作数,两个存储器之间不能直接交换 例:设AX=2000H,DS=3000H,BX=1800H, (31A00H)=1995H XCHG AX, [BX+200H] 源操作数物理地址=DS*10H+BX+200H=31A00H 执行后结果:AX=1995H;(31A00H)=2000H
例
MOV 60H,AL
MOV [BX],[SI] MOV CS,AX
MOV BX,IP
MOV DS,ES MOV CX,AL
22
通用数据传送指令-PUSH
PUSH 源
源操作数为字数据,但不能是立即数 先进后出 堆栈区段地址由SS确定 堆栈指针SP指向栈顶,总为偶数,从FFFEH到0 PUSH BX SP←SP-2 [SP]=BX
SI
段寄存器 CS,DS,ES,SS DI SP BP
CH
CL DH DL
IP不能作源和目的操作数 立即数和CS寄存器不能作目的操作数 立即数不能直接传送给段寄存器 两个存储器和两个段寄存器之间不能直接传送数据
21
通用数据传送指令-MOV
例 MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV [BX],0FEH AL,30H BL,‘S’ AX,1250H BX,OFFSET TABLE [BP],BX CL,5[BX] [SI],DS ES,AX AX,DX
操作数默认在DS段中,如果操作数在数据段以外,必 须在直接地址前加段超越前缀 操作数的物理地址=16×段地址+EA 地址加[],与立即数寻址区分 允许出现符号地址 例: MOV AX, ADDR1 MOV AX, [ADDR1]
7
例: MOV AX, [2000H] MOV AX, ES:[500H]
14
低地址 操作码 CS段
相对基址变址寻址 (Relative Based Indexed Addressing)
指令中指定一个基址、一个变址寄存器和一个位 移量,其内容之和为操作数的有效地址EA
除了需要加位移量,其他与基址变址寻址相同:
基址寄存器:BX或BP;变址寄存器:SI或DI
基址寄存器为BX时,段寄存器为DS
指令中指定寄存器中内容与指令中指定的位移 量之和为操作数有效地址EA
除了需要加位移量,其它与寄存器间接寻址相同:
相对寻址寄存器:基址寄存器BX、BP和变址寄存器SI、DI BX、SI、DI作间址寄存器时默认段地址为DS中内容 BP作间址寄存器时,默认段地址为SS中内容 允许使用段超越前缀
9
寄存器间接寻址 (Register Indirect Addressing)
例:MOV BX,[SI]
操作码 CS段 DS 1000 + SI
×10H
低地址
2000 12000
10000 12000 8BH 31H
DS段
高地址
10
BX 31H 8BH
寄存器相对寻址 (Register Relative Addressing)
OUT 端口地址,AX
OUT DX,AL OUT DX,AX
POP
XCHG
目的
目的,源
地址目标传送指令
LEA 源
标志传送指令
目的,
PUSHF POPF
20
通用数据传送指令-MOV
MOV指令允许传送数据的途径
立即数 通用寄存器 AX 存 储 器 BX CX DX AH AL BH BL
例 ADD ADD ADD ADD ADD
AL,45H BL,DL AX,CX [BX],CL BX,[BP+SI]
例 ADD 85H,AL ADD 5[BX],[BP] ADD BX,CL
32
33