8086指令系统及汇编语言
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
注意:程序(指令) 在代码段,要操作 的数据在堆栈段!
32000H
32001H
AH AL
..
图3-4(B) 寄存器间接寻址
..
堆栈段
5、 寄存器相对寻址方式
格式:操作码 寄存器,相对值DISP+基址或变址寄存器 有效地址是寄存器内容与有符号8位或16位位移量之 和,寄存器可以是BX、BP或SI、DI
存储器 CS段
操作码 8A 操作码 F5
MOV AL,8AH
AH=F5
AL=8A
AH=F5
AL=8A
MOV AH,F5H
字寻址方式 字节寻址方式
立即寻址操作过程示意如图3-2
指令对立即数格式的要求
8086/8088指令对立即数的格式有三种: 1)立即数可以是16进制的数 MOV AL,57H
2)立即数可以是10进制的数,但指令运行后CPU自动把10进制数 转换为16进制数,然后完成给定功能的操作。
种形式)直接包含在指令中,它与操作码一起存放在代码段中的 操作码之后。 段地址DS隐含,也可指定其它段,必须需在指令中指明。 存储器物理地址地址为:DS:偏移地址 或 ES:偏移地址。
例: MOV AX,ES:[2000H]
(读数据,RD线为低电平)
将ES:2000H单元内容送入AX。 例: MOV AX,LABLE 或 MOV AX,[LABEL] 将标号为LABLE(存放操作数单元的符号地址) ,即 DS:LABLE中的内容送入AX。LABLE必须在段定义中指明。
第三章
8086指令系统及汇编语言
本章节知识点:
1)8086微处理器的各种寻址方式
2)数据传送指令
3)算术运算指令
4)逻辑运算与移位指令 5)串操作指令 6)转移指令 7)8086汇编语言程序基本格式 8)8086汇编语言程序设计方法
本章学习的主要内容及要求
1、掌握8086汇编语言的各种寻址方式的特点、功能和 基本格式; 2、掌握8086汇编语言各指令功能,指令执行后对目的 操作数和标志位的影响;
0003
BX= 0001H
操作数在存储器中,指令中寄存器内容作为操作数所在 单元的有效地址。
(BX) 有效地址 = (SI) (DI) (BP)
物理地址计算方法:
物理地址 = (DS)×16 + (BX)或(SI)或(DI) 物理地址 = (SS)× 16 + (BP)
段寄存器为DS 段寄存器为SS
例:MOV
AX,(2000H); 字操作
其过程如图3.3所示。指令中的16位段内偏移地
址的低字节在前,高字节在后。
MOV AL,(2000H); MOV AH,(2001H); 字节操作 字节操作
此两条指令的功能与字操作指令的功能相同! 16位段内偏移地址直接包含在指令中
存储器 CS段 操作码 00 20 存储器 DS段 XX 8A F5 代码段 MOV AX,(2000H)
3、掌握源操作数的物理地址的计算方法;
4、掌握8086汇编语言各指令的语法格式;
5、掌握汇编语言的程序设计中子程序、中断服务子程 序之间的差异;
6、掌握段定义中宏指令的使用方法; 7、掌握应用汇编语言编写应用程序的基本设计方法;
本章难点: 1、段地址与源操作数之间的关系; 2、各寻址方式之间的差异; 3、指令执行后对标志位的影响; 4、指令与控制信号之间的联系; 5、汇编语言编写应用程序的基本设计方法; 本章的学习方法: 课前认真预习,课后请认真复习并请多看课本和参考 书中的习题与练习题。
例: MOV AX ,[ SI ]; SI 中的内容为要取数的偏移 地址,假设在执行本条指令前SI=1000H,DS=2000H
其过程如图3-4(a)所示。
代码段
注意:程序(指令在 代码段),要操作的 数据在数据段!
21000H 21001H
操作码
..
..
+
数据段 XX YY
..
DS 2000 SI 1000 21000
MOV AX, ES:[BX]
;AX←ES:[BX]
MOV AH,DS:[BP] MOV ES:[DI],AL
注意:寄存器间接寻址要用方括号或圆号括起来,以便 与寄存器操作数相区别。 例: MOV AX,[BX];将由BX决定的存储单元的内 容送到AX寄存器,要求对BX事前定义。
0000 0001 0002 数据段 BB AA AA AH 间接寻址 BB AL AX TAB:
操作码
目的 源 操作数 操作数
双操作数
指令的助记符格式
操作码
操作数1,操作数2
;注释
操作数2,被称为源操作数src,它表示参与指令操作
的一个对象.
操作数1,被称为目的操作数dst,它不仅可以作为指
令操作的一个对象,还可以用来存放指令操作的结果 .
分号后的内容是对指令的解释
指令的操作码和操作数 操作码 操作数1,操作数2 ;注释
AL=8A
字寻址方式
图3-3 直接寻址
3、寄存器寻址方式 格式:操作码 寄存器,寄存器
MOV AX, BX
1)8 位寄存器r8:
;AX←BX
操作数存放在CPU的内部寄存器reg中 AH、AL、BH、BL、CH、CL、DH、DL
2)16 位寄存器r16:
AX、BX、CX、DX、SI、DI、BP、SP 3)4个段寄存器seg:
..
AH AL YY X X
图3-4(A)
..
寄存器间接寻址
例:MOV AX,[BP]; BP中的内容为要取数的 偏移地址 假设在执行本条指令前BP=2000H,SS=3000H 其过程如图3-4(b)所示。注意:是在堆栈段取数据
操作数
.. + .. ..
代码段 SS 3000 BP 2000 32000
存储器 CS段 操作码 00 20 操作码 01 20 存储器 DS段 XX 8A F5 AH=F5 AL=8A 代码段 MOV AL,(2000H) MOV AH,(2001H)
注意数据段与代 码段的用法!
数据段
DS:2000 DS:2001
数据段
DS:2000 DS:2001
AH=F5 字寻址方式
;AX←DS:[2000H]
直接寻址方式的有效地址在指令中直接给出,默认的 段地址在DS段寄存器,可使用段超越前缀改变段。 中括号包含有效地址,表达存储单元的内容
MOV AX, ES: [2000H] ;AX←ES:[2000H]
MOV AX,BUFFER ; BUFFER:符号地址
Leabharlann Baidu
直接寻址方式的操作数的16位偏移地址(有直接地址值和标号两
CS、DS、SS、ES
寄存器名表示其内容(操作数)
例如:MOV AX,BX ;AX MOV BX,AX ;BX
BX AX
MOV AL,BH ;AL
MOV AH,AL ;AH MOV DS,AX ;DS MOV SI,AX ;SI
BH
AL AX AX
注意:目的和源寄存器的 位数必须相同,不同 位数寄 存器之间不能传送数据处理 如: MOV BX,AH 如果要将数据送入段寄存器(CS、DS、ES、SS),必须先 将这个数送入一个非段寄存器,然后在送到段寄存器
还有单字节、3或4字节指令,字节越高,运行机器周期越大。 每一条指令都有固定的操作码,计算机就是靠辩识操作码来实 现各种不同的运算功能。(请参看实验指导书中的有关程序)
指令的组成
操作码
操作数
指令由操作码和操作数两部分组成 操作码:说明计算机要执行哪种操作,如传送、运算、 等操作,它是指令中不可缺少的组成部分 操作数:是指令执行的参与者,即各种操作的对象 有些指令不需要操作数,通常的指令都有一个或两个 操作数,也有个别指令有3个甚至4个操作数有些指令 隐含操作数。 例: MOV AX,CX ;将CX的内容送入AX中。
13H 0000 1010 0AH
14H 1010 0010 MOV (n), AL 15H 0001 1000 n 16H
很多种形式,如常用的高级语言
(C、C++等),所有的高级语言编 写的程序最终都必须被解译为机器 指令(有序的二进制代码集),因 为计算机只能接受二进制代码。 二进制机器指令 图3-1机器指令、汇编 语言的区别
例:已知:(DS)=2100H,(DI)=2000H
指令:MOV AX,[DI];(AX) ((DI))
物理地址=(DS)×16 +(DI)
=2100H ×16 + 2000H
=21000H+2000H
=23000H 指令结果:将23000H单元内容送AL中, 将23001H单元内容送AH中。 指令:MOV AX,[DI] 为字操作(16位操作)
助记符 目的 dst
完成的操作:AX
MOV AH, F5H
MOV AL, 8AH
(字节操作) F5H称为立即数(8位操作数)
(字节操作) 8AH称为立即数
完成的操作:AH
F5H ,
AL
8AH
MOV AX,F58AH
存储器 CS段
操作码 3456H 8A F5 3457H
代码段内取数 注意取数据的 地址顺序
问题的提出: 什么是软件?为什么计算机的运行 必须依靠软件来完成?软件都有那 些形式?什么是汇编语言?
地址号 存储器 汇编语言
10H 1010 0000 MOV AL, (n) 11H 0001 0111 n 12H 0000 0100 ADD AL, OAH
软件:能控制计算机完成指定工作
任务的二进制代码集,这个代码集 称为机器指令或机器语言。软件有
★理解操作数的寻址方式是理解指令功能的前提
★操作数采取哪一种寻址方式
1)会影响处理器执行指令的速度和效率
2)对程序设计也很重要
操作数的来源
指 令
寄存器 操作数 内 存 I/O设备或端口
3.1.1
操作数的寻址方式
1、立即寻址
格式: 操作码 数字表达式
;AX←0102H ;AL←02H
MOV AX, 0102H MOV AL, 02H
例:已知:(DS)=2100H,(DI)=2000H 指令: MOV AL,[DI] ;(AL) ((DI))
物理地址=(DS)×16+(DI)
=2100H×16+2000H
=21000H+2000H
=23000H 指令结果:将23000H单元内容送AL中, 指令: MOV AL,[DI];字节操作(8位操作)
汇编语言:是一种将机器语言按其特定的功能符号化,使其 便于记忆和理解的计算机语言。
名称 助记符 操作码 说明
立即数取 MOV AL ,n 1011000 B0H 两字节指令,把第二个字节的立即数n 入累加器 n nH 送累加器AL。
加立即数 ADD AL ,n 00000100 04H 两字节指令,累加器AL中的内容与 n nH 第二字节立即数相加,结果在AL中。
指令中的操作数直接存放在机器代码中,紧跟在操作
码之后(操作数作为指令的一部分存放在操作码之后
的主存单元中),这种操作数被称为立即数imm。
–可以是8位数值(00H~FFH) –也可以是16位数值(0000H~FFFFH) 立即数寻址方式常用来给寄存器赋值
MOV
AX,
F58AH ; (字操作) F58AH称为立即数 源 src F58AH (16位操作数) H表示为十六进制数
MOV AL,57 ;指令执行后将AL 39H
3)立即数可以是2进制的数 MOV AL,01010111B ;指令执行后将AL 57H
为十进制数时,数后不加H,2进制数时,数后加B,CPU以 此来辨别是那种类型的数据。
2、 直接寻址方式
指令格式: 操作码 寄存器(16位) , 地址表达式
MOV AX, [2000H]
每种指令的操作码 – 用一个助记符表示(指令功能的英文缩写)
– 对应着机器指令的一个或多个二进制编码
指令中的操作数
– 可以是一个具体的数值
– 可以是存放数据的寄存器
– 或指明存放数据的存储器地址
3.1 8086/8088的寻址方式
寻址与寻址方式
★指令系统设计了多种操作数的来源 ★寻找操作数的过程就是操作数的寻址 ★把寻找操作数的方式叫做操作数的寻址方式
4、 寄存器间接寻址方式
格式:操作码 寄存器,(寄存器)
①有效地址存放在基址寄存器BX、BP或变址寄存器SI、 DI中;②对于BX、SI、DI,默认的段地址在DS段寄存器, 可使用段超越前缀改变;③对于BP,默认的段地址在SS
段寄存器,可使用段超越前缀改变
MOV AX, [BX]
;AX←DS:[BX]
段寄存器写入方法:
MOV CS,3000H
MOV AX,3000H ; MOV CS,AX MOV SS,1000H MOV DI,1000H
; 错!
(该指令不影响RD和WR控制线 均为高电;平) ;正确(在使用中不允许随便修 改CS的内容!) ;处理错!
MOV SS,DI
;正确 , (该指令不影响RD和 WR控制线均为高电;平)