第03章 8086的指令系统D

合集下载

微机原理课件第三章8086寻址方式和指令系统

微机原理课件第三章8086寻址方式和指令系统
2取 单.如操元果作的指数 地令寄, 址中存钥 。用器匙对寄就于间存或相寄接器=当存D寻B于器SP址×进存间1方行储接6+式间D接I的寻E址A计,寄则算存默器 认操作
数寻在址堆方栈式段来中说,,操就作相数当的于段钥地匙址在段寄存器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指令系统

微机原理第3章8086指令系统

微机原理第3章8086指令系统8086是Intel公司推出的一种16位微处理器,是x86架构的第一代处理器。

8086指令系统是8086微处理器所支持的指令集合,本章将介绍8086指令系统的基本特性和指令编码格式。

8086指令系统采用变长指令编码格式,指令长度可以是1个字节到多个字节,提供了多种寻址方式和丰富的操作类型。

8086指令系统共支持256条标准指令,可以执行各种算术逻辑运算、数据传输和控制流操作。

8086指令由操作码和操作数组成。

操作码指示了执行的具体操作,操作数则是操作码所针对的数据。

8086指令系统提供了多种寻址方式,包括立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址和基址变址寻址等。

立即寻址是将常数或数据直接作为操作数,如MOVAX,1000H,表示将立即数1000H传送到AX寄存器。

直接寻址是通过指定一个内存单元的地址来作为操作数,如MOVAL,[BX],表示将BX寄存器指向的内存单元的内容传送到AL寄存器。

寄存器寻址是直接将一个寄存器作为操作数,如MOVAX,BX,表示将BX寄存器的内容传送到AX寄存器。

除了寻址方式,8086指令系统还提供了多种操作类型,如算术逻辑运算、数据传输和控制流操作等。

算术逻辑运算可以进行加、减、乘、除等数学运算,如ADD、SUB、MUL、DIV等指令。

数据传输可以进行数据的读取和存储操作,如MOV、PUSH、POP等指令。

控制流操作可以用于程序的跳转和条件判断,如JMP、JZ、JC等指令。

8086指令系统还支持多种数据类型的操作,包括字节、字和双字等。

字节操作是对8位数据进行操作,字操作是对16位数据进行操作,双字操作是对32位数据进行操作。

指令的操作数大小可以根据需要选择合适的寄存器或内存单元。

总之,8086指令系统是8086微处理器所支持的指令集合,提供了多种寻址方式和操作类型,支持多种数据类型的操作。

通过掌握8086指令系统,可以编写出高效、精确的8086汇编程序,实现各种功能和算法。

第三章 8086的指令系统

第三章 8086的指令系统
操作码 操作数
机器指令 B0 56 04 78 CB
操作码 操作数
计算机执行的指令是机器指令,是一串二进制代码。 MOV、ADD 是机器指令操作码 B0、04 的助记词。
2. 8086的机器指令格式
B1 OP D W MOD B2 B3 REG R/M B4 B5 B6
操作码 (6)
方 0-字节 寻址 向 1-字操作 方式
立即数→通用寄存器、内存单元
立即数→通用寄存器 MOV AX,2356H; MOV BH,33H; 立即数→内存单元 MOV [BX+SI],0F080H; MOV BYTE PTR [BX],12H; 源操作数、目的操作数的类型要匹配。 源操作数是单字节,目的操作数是间址、变址、基址+ 变址的内存操作数,后者必须用PTR说明是字节型。
三. 标志寄存器
1. 格式 2. 含义
1. 格式
记录当前指令执行后的特征信息,16位数据用9位
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 O D I T S Z A P C
溢出
8位无符号数相加大于255,有符号数相加大于127或小于 -128 16位无符号数相加大于65535,有符号数相加大于32767 或者 小于-32768; 判断 操作数是有符号数,运算后O标志为1表示溢出。
寄存 器号
寻址 方式
① ② ③ ④ ⑤ ⑥
8086 指令是 1~6字节的变字节指令格式。 指令的长度:最少一个字节,最多六个字节。 B1、B2为基本字节,B3-B6 根据指令取舍。 B1字节-称作操作码字节,必不可少的。 B2-操作数寻址方式。一条指令最多可用两个操作数。 B3~B6- 一般为存储器操作地址位移量或立即操作数。

2_第3章 8086指令系统_加减运算指令比较指令52

2_第3章 8086指令系统_加减运算指令比较指令52
4
3.4.2 算术运算指令
算术运算指令涉及两种类型数据,即无符号数和有符号数 对加法指令和减法指令而言,无符号和有符号数可采用同
一套指令,其先决条件有两个: 一是参加的操作数必须同为无符号数或同为有符号数 二是要采用不同标志位来检查无符号数和有符号数的 运算结果是否溢出
而乘除运算指令则需要区分无符号数和有符号数
11 11
ADC指令的使用价值
主要用于由于数据较大(多字节),需要多次运算的加法 运算中。 例:有两个4字节的无符号数相加:
2D568F8CH+3C9E489BH=? 设 被加数存放在BUF1开始的存储区内
加数存放在BUF2开始的存储区内 要求和放回BUF1存储区 假设CPU进行8位的加法运算,为此将进行4次加法运算
.386
……
MOVZX AX, A
MOVZX BX, B
ADD
AX, BX
MOVZX BX, C
ADD
AX, BX
MOV
SUM, AX
;取第一个数,扩展0传送 ;取第二个数 ;加第二个数 ;取第三个数 ;加第三个数 ;保存三个数的和
20 20
[例] P,Q,R均为8位有符号数,求它们的和,送入TOTAL
这个问题的另一种方法:
MOV AL, A
;取第一个数
MOV AH, 0
;高8位清零,准备存放和的高8位
ADD AL, B
;加第二个数
ADC AH, 0
;如果有进位,存入AH
ADD AL, C
;加第三个数
ADC AH, 0
;如果有进位,加入AH
MOV SUM, AX ;保存三个数的和
19 19
这个问题的第三种方法:

第3章_8086指令系统

第3章_8086指令系统

EA =

(BX) (BP)
+
(SI)
(DI)
同一组内的寄存器不能同时出现。
寻址的寄存器为BX时,默认的段寄存器为DS ; 寻址的寄存器为 BP时,默认的段寄存器为SS 。 例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI]
立即数只能作为源操作数
MOV AX,0FA00H MOV 8000H,DX ;正确 ;错误
• 2、寄存器操作数
存放在8个通用寄存器或4个段寄存器中的操作数
AX BX CX DX
AH BH CH DH
AL BL CL DL
可以存放8位或 16位操作数
SI DI BP SP
只能存放16位操作数
CS
DS ES SS
61200
AX AH AL
61200H
44H 33H
数 据 段
寄存器相对寻址

EA=间址寄存器的内容加上一个8/16位的位移量
(BX)
EA =
(BP) (SI) (DI)
+
8位
16位
位移量
寻址的寄存器为BX、SI、DI,默认的段寄存器为DS ;
寻址的寄存器为 BP时,默认的段寄存器为SS 。

例: MOV AX, [BX+8] MOV CX, TABLE[SI] MOV AX, [BP+16H] ;
数 据 段
基址-变址-相对寻址
在基址-变址寻址的基础上再加上一个相对位移量 注意事项同基址-变址寻址

微机原理与接口技术 (第三版)电子工业出版社 第03章 8086的指令系统

微机原理与接口技术 (第三版)电子工业出版社 第03章 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
2、MOV数据传送指令 其格式为: MOV 目的操作数,源操作数 • 目的操作数和源操作数均可采用不同的寻 址方式, • 两个操作数的类型必需一致。
二、寻址方式介绍பைடு நூலகம்
1.立即寻址(Immediate addressing) 操作数就在指令中,紧跟在操作码后面, 作为指令一部分存放在内存的代码段中,这 种操作数称为立即数。 例: MOV AX , 34EAH MOV BL , 20H
3)、段间直接转移 JMP far PTR 目标地址 4)、段间间接转移 JMP WORD PTR[BX][SI]
2、条件转移指令
1)、单条件转移指令 ① 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,则转移
3、目标地址传送指令
这类指令有: 1)LEA 有效地址传送到寄存器 2)LDS 装入一个新的物理地址 3)LES 装入一个新的物理地址

第三章 8086 8088指令系统

第三章 8086 8088指令系统

SI 1200
+)
6000 0 1200 61200 AX 33 44
61200H 61201H
存储器 . . . 44H 33H 数 据 段
. . .
图 3-5 寄存器间接寻址示意图
3.2.5 寄存器相对寻址
寄存器相对寻址——操作数在存储器中。由指令指定的地址寄存器的内容加上指令中
给出的一个8位或16位的地址位移量,即可得操作数的偏移地址。
SI AX AX AX AX AX
3.2.8隐含寻址
隐含寻址—— 操作数隐含在操作码中,在有些指令的操作数中,不仅包含了操作的性质,
还隐含了部分操作数的地址。如乘法指令 MUL,在这条指令中只须指明乘数的地址,而被乘数 已经乘积的地址是隐含且固定的。这种将一个操作数隐含在指令码中的寻址方式就称为隐含
立即数操作数: 所谓立即数指具有固定数值的操作数,不因指令的执行而发生变化 。立即数操作 数只能用作源操作数,而不能用作目标操作数。

寄存器操作数:
8086CPU的8个通用寄存器和4个段寄存器可以作为指令中的寄存器操作数,寄存
器操作数在指令中既可以作为源操作数,也可以用作目标操作数。 存储器操作数: 参加运算的数据是存放在内存中。
两单元的内容送到AX中。假设DS=2000H,则所寻找的操作数的物理地址为: 2000H×10H+3102H = 23102H, 指令的执行情况如图3-3所示
存储器 . . .
MOV操作码
02H 31H AH AL 23102H 23103H
图 3-3 直接寻址方式
代 码 段
. . . ×× ×× . . . 数 据 段
请注意:使用基址—变址方式时,不允许将两个基址寄存器或两个变址寄存器组合

第3章 8086指令系统(2)

第3章 8086指令系统(2)
3.3 80X86指令系统
8086/8088指令系统按其功能分为以下类型:数 据传送指令、地址传送指令、标志寄存器传送 指令、算术运算指令、逻辑运算指令、移位指 令、控制转移指令、串操作指令、中断指令和 处理器控制指令。
一.数据传送指令
数据传送指令用于寄存器、存储单元、或输入
输出端口之间传送数据或地址。8086/8088有14
CMP AL,100
29
CMP指令执行后对标志位的影响
操作数类型
带符号的 二进制
CF ZF SF OF
两操作数的关系
01 0 0
等于
-010
小于
- 0 0 1 目的操作数 小于 源操作数
-000
大于
-011
大于
不带符号的 二进制
01 0 0
等于
10 -
- 目的操作数 低于 源操作数
00 -
-
高于
举例: n=8 bit 带符号数(-128~127), 无符号数(0~255)
PUSH AX
PUSH DX
78H
POP AX
56H
POP DX
34H
12H
9
(4)XCHG指令 格式:XCHG OP1,OP2 操作:源、目的操作数之间交换一个字节 或字的数据。源操作数或目的操作数只能 取通用寄存器或通用寄存器与存储器 例: XCHG AX,CX
XCHG AL,BL XCHG AX,[BP+DI]
中的数相乘,结果放在累加器中
乘积为双字节长时,结果放在AX中;乘积为双 字长时,分别放在DX(乘积的高16位)和AX中。 该指令的运行结果只影响标志位CF和OF 例:MOV AL,FIRST
MUL SECOND MOV THIRD,AX (2)IMUL指令 格式:IMUL SRC 该指令为带符号数相乘指令
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

调用 类型
寻址 方式
格 式
操 作
示 例
说 明
procCALL proc-name 直接 disp16 CALL disp16 段内 调用 CALL BX 间接 CALL r16 / m16 ①IP入栈; IP入栈; 入栈 (r16)/(m16 16)/(m16) ②IP← (r16)/(m16) CALL WORD PTR [BX] ①IP入栈; IP入栈; 入栈 ②IP ← IP + 偏移量 SUB1 CALL SUB1
①段内 调用, 调用, CS不变 CS不变 ②FAR PTR表 PTR表 示段间 调用 ③ DWORD PTR表 PTR表 明内存 操作数 属性为 双字, 双字, 用于段 间调用
直接 段间 调用 间接
过程调用的寻址方式
直接寻址
调用指令中直接给出被调用过程的首地址( 调用指令中直接给出被调用过程的首地址(标号或 立即数). 立即数)
间接寻址
预先把被调用过程的地址存于寄存器或内存, 预先把被调用过程的地址存于寄存器或内存,调用 指令仅给出这些地址存放处(寄存器名或内存地址), 指令仅给出这些地址存放处(寄存器名或内存地址) 间接寻址" 为"间接寻址".
3 过程调用和返回指令
如果有一些程序需要在不同的地方多次出现, 如果有一些程序需要在不同的地方多次出现 , 则可 以将这些程序段设计成过程(即子程序) 以将这些程序段设计成过程 (即子程序) ,供需要时 调用. 调用. 在过程(即子程序)中要安排返回指令, 在过程 ( 即子程序 )中要安排返回指令 ,使得过程结 束时,返回到调用处. 束时,返回到调用处. 如: 显示一个字符,需要利用下列程序段完成: 显示一个字符,需要利用下列程序段完成:
循环 指令
LOOP
ShortShort-label
相等循 环指令
ShortLOOPZ/LOOPE Shortlabel
不相等 循环指 令
ShortLOOPNZ/LOONE Shortlabel
【例】有一首地址为Array的长度为M字数组,试编写实现下列功能 有一首地址为Array的长度为M字数组, Array的长度为 的代码:统计出数组中0元素的个数,并存入变量total total中 的代码:统计出数组中0元素的个数,并存入变量total中. CX, 数组长度存入循环计数器CX MOV CX,M ;数组长度存入循环计数器CX total, 计数变量初始值为0 MOV total,0 ;计数变量初始值为0 SI, 初始偏移量送寄存器SI MOV SI,0 ;初始偏移量送寄存器SI AGAIN:MOV AX,Array[SI] AX, ;取数 AX, CMP AX,0 ;与0比较 不为0 JNZ NEXT ;不为0,取下一个数 计数器加1 INC total ;为0,计数器加1 SI, 调整地址, NEXT:ADD SI,2 ;调整地址,指向下个数 LOOP AGAIN ;进入下一轮循环 显然, AGAIN指令的功能与下列语句相同 指令的功能与下列语句相同: 显然,LOOP AGAIN指令的功能与下列语句相同: DEC CX JNZ AGAIN 但是,LOOP指令中完成的操作CX←CX指令中完成的操作CX←CX 不影响标志位. 但是,LOOP指令中完成的操作CX←CX-1,不影响标志位.
无符号 数
多 标 志 位
JGE / JNL JL / JNGE JG / JNLE JLE / JNG
CX
JCXZ
【例】比较两个字属性的符号数X,Y的大小,如果X>Y, 比较两个字属性的符号数X 的大小,如果X>Y, X>Y AL为 如果X=Y AL为 X=Y, 如果X<Y AL为 FFH. X<Y, AL为1,如果X=Y,AL为0,如果X<Y,AL为0FFH. 为内存变量,功能实现主要代码如下: 解:设X,Y为内存变量,功能实现主要代码如下: AX, MOV AX,X AX, CMP AX,Y JLE LE MOV AL,1 AL, ;X > Y,AL=1 AL=1 JMP DONE LE: LE:JL L AL,00H AL=00 00H MOV AL,00H ;X = Y,AL=00H JMP DOWN AL, AL=0 L:MOV AL,0FFH ;X < Y,AL=0FFH DONE: DONE:HLT
mov dl,'a' mov ah,2 int 21h
DL寄存器保存 DL寄存器保存 要显示的字符 ASCII码 的ASCII码
过程与调用程序在同一段内, 过程与调用程序在同一段内,称"段内调用"; 段内调用" 过程与调用程序不在同一段内, 过程与调用程序不在同一段内,称"段间调用". 段间调用" 过程调用指令为:CALL 过程调用指令为: 返回指令为: 返回指令为:RET 过程调用与返回指令均不影响标志位,但影响堆栈. 过程调用与返回指令均不影响标志位,但影响堆栈. 不影响标志位
说明
大于等于 或 不小于 转移
小于 或 不大于等于
有进位或借位 转移 无进位/ 无进位/借位 转移 等于转移 不等于 转移 无溢出 转移 有溢出 转移 1的个数为奇数 转移 1的个数为偶数 转移 正数 转移 负数 转移
单 标 志 位
JZ JNZ JNO JO JNP / JPO JP / JPE JNS JS
(2) 条件转移指令
格式:Jcc short-label 格式: short说明: 说明: cc代表跳转条件 该指令只能实现段内短转移. 代表跳转条件, cc代表跳转条件,该指令只能实现段内短转移.
特征
助记符 JAE / JNB JB /JNAE JC JNC
转移条件 CF=0 CF=0 CF=1 CF=1 CF=1 CF=1 CF=0 CF=0 ZF=1 ZF=1 ZF=0 ZF=0 OF=0 OF=0 OF=1 OF=1 PF=0 PF=0 PF=1 PF=1 SF=0 SF=0 SF=1 SF=1 无符 号数
2 循环控制指令
循环指程序段在一定条件下重复执行. 循环指程序段在一定条件下重复执行. 循环指令提供了程序段循环的控制及手段. 循环指令提供了程序段循环的控制及手段 . 这些指令都用 CX寄存器作为循环次数计算器 寄存器作为循环次数计算器, 这些指令都 用 CX 寄存器作为循环次数计算器 , 表示某程序段最大循环次数, 且循环体每执 表示某程序段最大循环次数 , 行一次,CX被减去 被减去1 行一次,CX被减去1. 8086/ 8088CPU 规定被循环的程序段必须在同 CPU规定 8086 / 8088 CPU 规定 被循环的程序段必须在同 一段内,且长度不能大于256字节. 256字节 一段内,且长度不能大于256字节. 循环控制指令有3 循环指令LOOP LOOP, 循环控制指令有3条:循环指令LOOP,相等循 LOOPE/LOOPZ, 环 指 令 LOOPE/LOOPZ, 不 相 等 循 环 指 令 LOOPNE/LOOPNZ. LOOPNE/LOOPNZ.
名称
格式
操作 ① CX ← CX – 1 ② 如 果 CX = 0, 结 束 循 执行后续语句. 环 , 执行后续语句 . 否则 转移到标号处. 转移到标号处. ① CX ← CX – 1 如果CX ② 如果 CX = 0 或 ZF= 0, 结束循环, 结束循环 , 执行后续语句 否则转移到标号处. .否则转移到标号处. ① CX ← CX – 1 如果CX ZF=1 ② 如果 CX =0执行后续语句 . 否则转移到标号处. 否则转移到标号处.
3.4.5 控制转移指令
控制转移指令用来改变程序的执行顺序, 控制转移指令用来改变程序的执行顺序 , 执行转移就是将 目的地址传送给代码段寄存器CS 与指令指针寄存器IP CS与指令指针寄存器 IP. 目的地址传送给代码段寄存器 CS 与指令指针寄存器 IP. 如 果跳转目的地与被转移点在同一代码段, 果跳转目的地与被转移点在同一代码段 , 称为 " 段内转 此时, 只需指明目标地址的有效地址( 16位 移 " , 此时 , 只需指明目标地址的有效地址 ( 16 位 ) . 如果 跳转目的地与被转移点不在同一代码段, 跳转目的地与被转移点不在同一代码段 , 称为 " 段间转 此时,需知道目标地址的段地址( 16位 移 " , 此时 , 需知道目标地址的段地址 ( 16 位 ) 及有效地址 16位 (16位). 控制转移指令的寻址方式分为" 直接寻址" 控制转移指令的寻址方式分为 " 直接寻址 " , " 间接 寻址" 两种. 如果指令中直接给出目标地址, 寻址 " 两种 . 如果指令中直接给出目标地址 , 如地址标号 或立即数( 偏移量, 目标与源之间的偏移距离) , 称为" 直 或立即数( 偏移量 , 目标与源之间的偏移距离 ) 称为" 接寻址" 如果指令中, 给出目标地址存放地的地址, 接寻址 " ; 如果指令中 , 给出目标地址存放地的地址 , 如 寄存器或内存地址,称为"间接寻址". 寄存器或内存地址,称为"间接寻址" 控制转移指令包括:转移指令,循环控制指令, 控制转移指令包括:转移指令,循环控制指令,过程 调用指令和中断指令等4 调用指令和中断指令等4类.
间接 存储器 地址符号
CS不 CS不 变
段 间 转 移
直接 立即数(32位 立即数 ( 32 位 ) 间接 内存(双字) 内存(双字)
IP ← 目标偏移地址 立即数低16 16位 /立即数低16位 CS ← 目 标 段 地 址 / 立即数高16 16位 立即数高16位 (EA+1 IP ← (EA+1,EA) (EA+3 EA+2 CS ← (EA+3,EA+2)
相关文档
最新文档